mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-25 09:43:49 +02:00
refactor: app.js (#1291)
* refactor: frontend * Fix avatar gallery sort * Update .NET dependencies * Update npm dependencies electron v37.1.0 * bulkRefreshFriends * fix dark theme * Remove crowdin * Fix config.json dialog not updating * VRCX log file fixes & add Cef log * Remove SharedVariable, fix startup * Revert init theme change * Logging date not working? Fix WinformThemer designer error * Add Cef request hander, no more escaping main page * clean * fix * fix * clean * uh * Apply thememode at startup, fixes random user colours * Split database into files * Instance info remove empty lines * Open external VRC links with VRCX * Electron fixes * fix userdialog style * ohhhh * fix store * fix store * fix: load all group members after kicking a user * fix: world dialog favorite button style * fix: Clear VRCX Cache Timer input value * clean * Fix VR overlay * Fix VR overlay 2 * Fix Discord discord rich presence for RPC worlds * Clean up age verified user tags * Fix playerList being occupied after program reload * no `this` * Fix login stuck loading * writable: false * Hide dialogs on logout * add flush sync option * rm LOGIN event * rm LOGOUT event * remove duplicate event listeners * remove duplicate event listeners * clean * remove duplicate event listeners * clean * fix theme style * fix t * clearable * clean * fix ipcEvent * Small changes * Popcorn Palace support * Remove checkActiveFriends * Clean up * Fix dragEnterCef * Block API requests when not logged in * Clear state on login & logout * Fix worldDialog instances not updating * use <script setup> * Fix avatar change event, CheckGameRunning at startup * Fix image dragging * fix * Remove PWI * fix updateLoop * add webpack-dev-server to dev environment * rm unnecessary chunks * use <script setup> * webpack-dev-server changes * use <script setup> * use <script setup> * Fix UGC text size * Split login event * t * use <script setup> * fix * Update .gitignore and enable checkJs in jsconfig * fix i18n t * use <script setup> * use <script setup> * clean * global types * fix * use checkJs for debugging * Add watchState for login watchers * fix .vue template * type fixes * rm Vue.filter * Cef v138.0.170, VC++ 2022 * Settings fixes * Remove 'USER:CURRENT' * clean up 2FA callbacks * remove userApply * rm i18n import * notification handling to use notification store methods * refactor favorite handling to use favorite store methods and clean up event emissions * refactor moderation handling to use dedicated functions for player moderation events * refactor friend handling to use dedicated functions for friend events * Fix program startup, move lang init * Fix friend state * Fix status change error * Fix user notes diff * fix * rm group event * rm auth event * rm avatar event * clean * clean * getUser * getFriends * getFavoriteWorlds, getFavoriteAvatars * AvatarGalleryUpload btn style & package.json update * Fix friend requests * Apply user * Apply world * Fix note diff * Fix VR overlay * Fixes * Update build scripts * Apply avatar * Apply instance * Apply group * update hidden VRC+ badge * Fix sameInstance "private" * fix 502/504 API errors * fix 502/504 API errors * clean * Fix friend in same instance on orange showing twice in friends list * Add back in broken friend state repair methods * add types --------- Co-authored-by: Natsumi <cmcooper123@hotmail.com>
This commit is contained in:
205
src/service/database/avatarFavorites.js
Normal file
205
src/service/database/avatarFavorites.js
Normal file
@@ -0,0 +1,205 @@
|
||||
import sqliteService from '../sqlite.js';
|
||||
import { dbVars } from '../database';
|
||||
|
||||
const avatarFavorites = {
|
||||
addAvatarToCache(entry) {
|
||||
sqliteService.executeNonQuery(
|
||||
`INSERT OR REPLACE INTO cache_avatar (id, added_at, author_id, author_name, created_at, description, image_url, name, release_status, thumbnail_image_url, updated_at, version) VALUES (@id, @added_at, @author_id, @author_name, @created_at, @description, @image_url, @name, @release_status, @thumbnail_image_url, @updated_at, @version)`,
|
||||
{
|
||||
'@id': entry.id,
|
||||
'@added_at': new Date().toJSON(),
|
||||
'@author_id': entry.authorId,
|
||||
'@author_name': entry.authorName,
|
||||
'@created_at': entry.created_at,
|
||||
'@description': entry.description,
|
||||
'@image_url': entry.imageUrl,
|
||||
'@name': entry.name,
|
||||
'@release_status': entry.releaseStatus,
|
||||
'@thumbnail_image_url': entry.thumbnailImageUrl,
|
||||
'@updated_at': entry.updated_at,
|
||||
'@version': entry.version
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
addAvatarToHistory(avatarId) {
|
||||
sqliteService.executeNonQuery(
|
||||
`INSERT INTO ${dbVars.userPrefix}_avatar_history (avatar_id, created_at, time)
|
||||
VALUES (@avatar_id, @created_at, 0)
|
||||
ON CONFLICT(avatar_id) DO UPDATE SET created_at = @created_at`,
|
||||
{
|
||||
'@avatar_id': avatarId,
|
||||
'@created_at': new Date().toJSON()
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
async getAvatarTimeSpent(avatarId) {
|
||||
var ref = {
|
||||
timeSpent: 0,
|
||||
avatarId
|
||||
};
|
||||
await sqliteService.execute(
|
||||
(row) => {
|
||||
ref.timeSpent = row[0];
|
||||
},
|
||||
`SELECT time FROM ${dbVars.userPrefix}_avatar_history WHERE avatar_id = @avatarId`,
|
||||
{
|
||||
'@avatarId': avatarId
|
||||
}
|
||||
);
|
||||
|
||||
return ref;
|
||||
},
|
||||
|
||||
addAvatarTimeSpent(avatarId, timeSpent) {
|
||||
sqliteService.executeNonQuery(
|
||||
`UPDATE ${dbVars.userPrefix}_avatar_history SET time = time + @timeSpent WHERE avatar_id = @avatarId`,
|
||||
{
|
||||
'@avatarId': avatarId,
|
||||
'@timeSpent': timeSpent
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
async getAvatarHistory(currentUserId, limit = 100) {
|
||||
var data = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
var row = {
|
||||
id: dbRow[0],
|
||||
authorId: dbRow[5],
|
||||
authorName: dbRow[6],
|
||||
created_at: dbRow[7],
|
||||
description: dbRow[8],
|
||||
imageUrl: dbRow[9],
|
||||
name: dbRow[10],
|
||||
releaseStatus: dbRow[11],
|
||||
thumbnailImageUrl: dbRow[12],
|
||||
updated_at: dbRow[13],
|
||||
version: dbRow[14]
|
||||
};
|
||||
data.push(row);
|
||||
}, `SELECT * FROM ${dbVars.userPrefix}_avatar_history INNER JOIN cache_avatar ON cache_avatar.id = ${dbVars.userPrefix}_avatar_history.avatar_id WHERE author_id != "${currentUserId}" ORDER BY ${dbVars.userPrefix}_avatar_history.created_at DESC LIMIT ${limit}`);
|
||||
return data;
|
||||
},
|
||||
|
||||
async getCachedAvatarById(id) {
|
||||
var data = null;
|
||||
await sqliteService.execute(
|
||||
(dbRow) => {
|
||||
data = {
|
||||
id: dbRow[0],
|
||||
// added_at: dbRow[1],
|
||||
authorId: dbRow[2],
|
||||
authorName: dbRow[3],
|
||||
created_at: dbRow[4],
|
||||
description: dbRow[5],
|
||||
imageUrl: dbRow[6],
|
||||
name: dbRow[7],
|
||||
releaseStatus: dbRow[8],
|
||||
thumbnailImageUrl: dbRow[9],
|
||||
updated_at: dbRow[10],
|
||||
version: dbRow[11]
|
||||
};
|
||||
},
|
||||
`SELECT * FROM cache_avatar WHERE id = @id`,
|
||||
{
|
||||
'@id': id
|
||||
}
|
||||
);
|
||||
return data;
|
||||
},
|
||||
|
||||
clearAvatarHistory() {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM ${dbVars.userPrefix}_avatar_history`
|
||||
);
|
||||
sqliteService.executeNonQuery('DELETE FROM cache_avatar');
|
||||
},
|
||||
|
||||
addAvatarToFavorites(avatarId, groupName) {
|
||||
sqliteService.executeNonQuery(
|
||||
'INSERT OR REPLACE INTO favorite_avatar (avatar_id, group_name, created_at) VALUES (@avatar_id, @group_name, @created_at)',
|
||||
{
|
||||
'@avatar_id': avatarId,
|
||||
'@group_name': groupName,
|
||||
'@created_at': new Date().toJSON()
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
renameAvatarFavoriteGroup(newGroupName, groupName) {
|
||||
sqliteService.executeNonQuery(
|
||||
`UPDATE favorite_avatar SET group_name = @new_group_name WHERE group_name = @group_name`,
|
||||
{
|
||||
'@new_group_name': newGroupName,
|
||||
'@group_name': groupName
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
deleteAvatarFavoriteGroup(groupName) {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM favorite_avatar WHERE group_name = @group_name`,
|
||||
{
|
||||
'@group_name': groupName
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
removeAvatarFromFavorites(avatarId, groupName) {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM favorite_avatar WHERE avatar_id = @avatar_id AND group_name = @group_name`,
|
||||
{
|
||||
'@avatar_id': avatarId,
|
||||
'@group_name': groupName
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
async getAvatarFavorites() {
|
||||
var data = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
var row = {
|
||||
created_at: dbRow[1],
|
||||
avatarId: dbRow[2],
|
||||
groupName: dbRow[3]
|
||||
};
|
||||
data.push(row);
|
||||
}, 'SELECT * FROM favorite_avatar');
|
||||
return data;
|
||||
},
|
||||
|
||||
removeAvatarFromCache(avatarId) {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM cache_avatar WHERE id = @avatar_id`,
|
||||
{
|
||||
'@avatar_id': avatarId
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
async getAvatarCache() {
|
||||
var data = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
var row = {
|
||||
id: dbRow[0],
|
||||
// added_at: dbRow[1],
|
||||
authorId: dbRow[2],
|
||||
authorName: dbRow[3],
|
||||
created_at: dbRow[4],
|
||||
description: dbRow[5],
|
||||
imageUrl: dbRow[6],
|
||||
name: dbRow[7],
|
||||
releaseStatus: dbRow[8],
|
||||
thumbnailImageUrl: dbRow[9],
|
||||
updated_at: dbRow[10],
|
||||
version: dbRow[11]
|
||||
};
|
||||
data.push(row);
|
||||
}, 'SELECT * FROM cache_avatar');
|
||||
return data;
|
||||
}
|
||||
};
|
||||
|
||||
export { avatarFavorites };
|
||||
Reference in New Issue
Block a user