Add Avatar Wear Timers (#1086)

* Update avatar history table

* Tracking time when swapping avis

* Time spent now visible on application

* Added wear time tracking on game open/close

* Update avatar history table

* Tracking time when swapping avis

* Time spent now visible on application

* Added wear time tracking on game open/close

* Adjusted "ON CONFLICT" query

* Removed unneccesary "previousAvatar" parameter
This commit is contained in:
Tamara
2025-01-21 17:43:51 +01:00
committed by GitHub
parent 555d4adf60
commit f27d213a0d
16 changed files with 106 additions and 20 deletions

View File

@@ -40,7 +40,7 @@ class Database {
`CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_moderation (user_id TEXT PRIMARY KEY, updated_at TEXT, display_name TEXT, block INTEGER, mute INTEGER)`
);
await sqliteService.executeNonQuery(
`CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_avatar_history (avatar_id TEXT PRIMARY KEY, created_at TEXT)`
`CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_avatar_history (avatar_id TEXT PRIMARY KEY, created_at TEXT, time INTEGER)`
);
await sqliteService.executeNonQuery(
`CREATE TABLE IF NOT EXISTS memos (user_id TEXT PRIMARY KEY, edited_at TEXT, memo TEXT)`
@@ -2189,7 +2189,13 @@ class Database {
addAvatarToHistory(avatarId) {
sqliteService.executeNonQuery(
`INSERT OR REPLACE INTO ${Database.userPrefix}_avatar_history (avatar_id, created_at) VALUES (@avatar_id, @created_at)`,
`UPDATE ${Database.userPrefix}_avatar_history
SET created_at = @created_at, time = COALESCE(time, 0)
WHERE avatar_id = @avatar_id;
INSERT INTO ${Database.userPrefix}_avatar_history (avatar_id, created_at, time)
SELECT @avatar_id, @created_at, 0
WHERE NOT EXISTS (SELECT * FROM ${Database.userPrefix}_avatar_history WHERE avatar_id = @avatar_id)`,
{
'@avatar_id': avatarId,
'@created_at': new Date().toJSON()
@@ -2197,21 +2203,49 @@ class Database {
);
}
async getAvatarTimeSpent(avatarId) {
var ref = {
timeSpent: 0,
avatarId
};
await sqliteService.execute(
(row) => {
ref.timeSpent = row[0];
},
`SELECT time FROM ${Database.userPrefix}_avatar_history WHERE avatar_id = @avatarId`,
{
'@avatarId': avatarId
}
);
return ref;
}
addAvatarTimeSpent(avatarId, timeSpent) {
sqliteService.executeNonQuery(
`UPDATE ${Database.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[4],
authorName: dbRow[5],
created_at: dbRow[6],
description: dbRow[7],
imageUrl: dbRow[8],
name: dbRow[9],
releaseStatus: dbRow[10],
thumbnailImageUrl: dbRow[11],
updated_at: dbRow[12],
version: dbRow[13]
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 ${Database.userPrefix}_avatar_history INNER JOIN cache_avatar ON cache_avatar.id = ${Database.userPrefix}_avatar_history.avatar_id WHERE author_id != "${currentUserId}" ORDER BY ${Database.userPrefix}_avatar_history.created_at DESC LIMIT ${limit}`);
@@ -2617,6 +2651,7 @@ class Database {
// if (version === 0) {
await this.updateTableForGroupNames();
await this.addFriendLogFriendNumber();
await this.updateTableForAvatarHistory();
// }
// await sqliteService.executeNonQuery('PRAGMA user_version = 1');
}
@@ -2632,7 +2667,7 @@ class Database {
`ALTER TABLE ${tableName} ADD friend_number INTEGER DEFAULT 0`
);
} catch (e) {
e = e.toString();
e = e.toString();
if (e.indexOf('duplicate column name') === -1) {
console.error(e);
}
@@ -2651,7 +2686,7 @@ class Database {
`ALTER TABLE ${tableName} ADD group_name TEXT DEFAULT ''`
);
} catch (e) {
e = e.toString();
e = e.toString();
if (e.indexOf('duplicate column name') === -1) {
console.error(e);
}
@@ -2670,6 +2705,17 @@ class Database {
}
}
async updateTableForAvatarHistory() {
await sqliteService.execute((dbRow) => {
const columnExists = dbRow.some((row) => row.name === 'time');
if (!columnExists) {
sqliteService.executeNonQuery(
`ALTER TABLE ${Database.userPrefix}_avatar_history ADD COLUMN 'time' INTEGER DEFAULT 0;`
);
}
}, `PRAGMA table_info(${Database.userPrefix}_avatar_history);`);
}
async fixCancelFriendRequestTypo() {
await sqliteService.executeNonQuery(
`UPDATE ${Database.userPrefix}_friend_log_history SET type = 'CancelFriendRequest' WHERE type = 'CancelFriendRequst'`
@@ -2728,4 +2774,4 @@ class Database {
var self = new Database();
window.database = self;
export { self as default, Database };
export { self as default, Database };