mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-20 15:23:50 +02:00
Add unlimited local avatar favs (#845)
* Add unlimited local avatar favs Implement unlimited local avatar favs with VRC+ requirement. * Reflect avatar fav changes in translations Modify translation files to use the same string used for world favs since it's the same now. * Local avatar fav UI behaviour changes * Add select avatar button to avatar favs * Disable select avatar button if already wearing it
This commit is contained in:
@@ -80,6 +80,9 @@ class Database {
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE TABLE IF NOT EXISTS favorite_world (id INTEGER PRIMARY KEY, created_at TEXT, world_id TEXT, group_name TEXT)`
|
||||
);
|
||||
await sqliteService.executeNonQuery(
|
||||
`CREATE TABLE IF NOT EXISTS favorite_avatar (id INTEGER PRIMARY KEY, created_at TEXT, avatar_id TEXT, group_name TEXT)`
|
||||
);
|
||||
}
|
||||
|
||||
async getFeedDatabase() {
|
||||
@@ -2216,6 +2219,110 @@ class Database {
|
||||
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
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
addWorldToCache(entry) {
|
||||
sqliteService.executeNonQuery(
|
||||
`INSERT OR REPLACE INTO cache_world (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)`,
|
||||
@@ -2276,15 +2383,6 @@ class Database {
|
||||
);
|
||||
}
|
||||
|
||||
removeWorldFromCache(worldId) {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM cache_world WHERE id = @world_id`,
|
||||
{
|
||||
'@world_id': worldId
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async getWorldFavorites() {
|
||||
var data = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
@@ -2298,6 +2396,15 @@ class Database {
|
||||
return data;
|
||||
}
|
||||
|
||||
removeWorldFromCache(worldId) {
|
||||
sqliteService.executeNonQuery(
|
||||
`DELETE FROM cache_world WHERE id = @world_id`,
|
||||
{
|
||||
'@world_id': worldId
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async getWorldCache() {
|
||||
var data = [];
|
||||
await sqliteService.execute((dbRow) => {
|
||||
|
||||
Reference in New Issue
Block a user