diff --git a/html/src/app.js b/html/src/app.js index f575fc57..b4a15a46 100644 --- a/html/src/app.js +++ b/html/src/app.js @@ -8447,6 +8447,32 @@ speechSynthesis.getVoices(); $app.addFeed(feed); database.addStatusToDatabase(feed); } + + if (props.bio) { + var bio = ''; + var previousBio = ''; + if (props.bio) { + if (props.bio[0]) { + bio = props.bio[0]; + } + if (props.bio[1]) { + previousBio = props.bio[1]; + } + } else if (ref.bio) { + bio = ref.bio; + previousBio = ref.bio; + } + var feed = { + created_at: new Date().toJSON(), + type: 'Bio', + userId: ref.id, + displayName: ref.displayName, + bio, + previousBio + }; + $app.addFeed(feed); + database.addBioToDatabase(feed); + } }); $app.methods.addFeed = function (feed) { @@ -20667,6 +20693,7 @@ speechSynthesis.getVoices(); this.sqliteTableSizes = { gps: await database.getGpsTableSize(), status: await database.getStatusTableSize(), + bio: await database.getBioTableSize(), avatar: await database.getAvatarTableSize(), onlineOffline: await database.getOnlineOfflineTableSize(), friendLogHistory: await database.getFriendLogHistoryTableSize(), diff --git a/html/src/index.pug b/html/src/index.pug index 5e2ea20a..e93ce316 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -315,7 +315,7 @@ html el-tooltip(placement="bottom" content="Filter VIP only" :disabled="hideTooltips") el-switch(v-model="feedTable.vip" @change="feedTableLookup" active-color="#13ce66") el-select(v-model="feedTable.filter" @change="feedTableLookup" multiple clearable collapse-tags style="flex:1" placeholder="Filter") - el-option(v-once v-for="type in ['GPS', 'Online', 'Offline', 'Status', 'Avatar']" :key="type" :label="type" :value="type") + el-option(v-once v-for="type in ['GPS', 'Online', 'Offline', 'Status', 'Avatar', 'Bio']" :key="type" :label="type" :value="type") el-input(v-model="feedTable.search" placeholder="Search" @keyup.native.13="feedTableLookup" @change="feedTableLookup" clearable style="flex:none;width:150px;margin:0 10px") //- el-tooltip(placement="bottom" content="Clear feed" :disabled="hideTooltips") //- el-button(type="default" @click="clearFeed()" icon="el-icon-delete" circle style="flex:none") @@ -366,6 +366,15 @@ html span(v-else) Offline i.x-user-status(:class="statusClass(scope.row.status)") span(v-text="scope.row.statusDescription") + template(v-else-if="scope.row.type === 'Bio'") + el-tooltip(placement="top") + pre(v-text="scope.row.previousBio") + + span + i.el-icon-right + br + el-tooltip(placement="top") + pre(v-text="scope.row.bio") el-table-column(label="Date" prop="created_at" sortable="custom" width="120") template(v-once #default="scope") el-tooltip(placement="right") @@ -1453,6 +1462,8 @@ html span.name GPS: #[span(v-text="sqliteTableSizes.gps")] div.options-container-item span.name Status: #[span(v-text="sqliteTableSizes.status")] + div.options-container-item + span.name Bio: #[span(v-text="sqliteTableSizes.bio")] div.options-container-item span.name Avatar: #[span(v-text="sqliteTableSizes.avatar")] div.options-container-item diff --git a/html/src/repository/database.js b/html/src/repository/database.js index dd176853..cd9d1c3c 100644 --- a/html/src/repository/database.js +++ b/html/src/repository/database.js @@ -14,6 +14,9 @@ class Database { await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_feed_status (id INTEGER PRIMARY KEY, created_at TEXT, user_id TEXT, display_name TEXT, status TEXT, status_description TEXT, previous_status TEXT, previous_status_description TEXT)` ); + await sqliteService.executeNonQuery( + `CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_feed_bio (id INTEGER PRIMARY KEY, created_at TEXT, user_id TEXT, display_name TEXT, bio TEXT, previous_bio TEXT)` + ); await sqliteService.executeNonQuery( `CREATE TABLE IF NOT EXISTS ${Database.userPrefix}_feed_avatar (id INTEGER PRIMARY KEY, created_at TEXT, user_id TEXT, display_name TEXT, owner_id TEXT, avatar_name TEXT, current_avatar_image_url TEXT, current_avatar_thumbnail_image_url TEXT, previous_current_avatar_image_url TEXT, previous_current_avatar_thumbnail_image_url TEXT)` ); @@ -101,6 +104,18 @@ class Database { }; feedDatabase.unshift(row); }, `SELECT * FROM ${Database.userPrefix}_feed_status WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); + await sqliteService.execute((dbRow) => { + var row = { + rowId: dbRow[0], + created_at: dbRow[1], + userId: dbRow[2], + displayName: dbRow[3], + type: 'Bio', + bio: dbRow[4], + previousBio: dbRow[5] + }; + feedDatabase.unshift(row); + }, `SELECT * FROM ${Database.userPrefix}_feed_bio WHERE created_at >= date('${dateOffset}') ORDER BY id DESC`); await sqliteService.execute((dbRow) => { var row = { rowId: dbRow[0], @@ -377,6 +392,19 @@ class Database { ); } + addBioToDatabase(entry) { + sqliteService.executeNonQuery( + `INSERT OR IGNORE INTO ${Database.userPrefix}_feed_bio (created_at, user_id, display_name, bio, previous_bio) VALUES (@created_at, @user_id, @display_name, @bio, @previous_bio)`, + { + '@created_at': entry.created_at, + '@user_id': entry.userId, + '@display_name': entry.displayName, + '@bio': entry.bio, + '@previous_bio': entry.previousBio + } + ); + } + addAvatarToDatabase(entry) { sqliteService.executeNonQuery( `INSERT OR IGNORE INTO ${Database.userPrefix}_feed_avatar (created_at, user_id, display_name, owner_id, avatar_name, current_avatar_image_url, current_avatar_thumbnail_image_url, previous_current_avatar_image_url, previous_current_avatar_thumbnail_image_url) VALUES (@created_at, @user_id, @display_name, @owner_id, @avatar_name, @current_avatar_image_url, @current_avatar_thumbnail_image_url, @previous_current_avatar_image_url, @previous_current_avatar_thumbnail_image_url)`, @@ -716,6 +744,14 @@ class Database { return size; } + async getBioTableSize() { + var size = 0; + await sqliteService.execute((row) => { + size = row[0]; + }, `SELECT COUNT(*) FROM ${Database.userPrefix}_feed_bio`); + return size; + } + async getAvatarTableSize() { var size = 0; await sqliteService.execute((row) => { @@ -984,12 +1020,14 @@ class Database { } var gps = true; var status = true; + var bio = true; var avatar = true; var online = true; var offline = true; if (filters.length > 0) { gps = false; status = false; + bio = false; avatar = false; online = false; offline = false; @@ -1001,6 +1039,9 @@ class Database { case 'Status': status = true; break; + case 'Bio': + bio = true; + break; case 'Avatar': avatar = true; break; @@ -1047,6 +1088,20 @@ class Database { feedDatabase.unshift(row); }, `SELECT * FROM ${Database.userPrefix}_feed_status WHERE (display_name LIKE '%${search}%' OR status LIKE '%${search}%' OR status_description LIKE '%${search}%') ${vipQuery} ORDER BY id DESC LIMIT ${Database.maxTableSize}`); } + if (bio) { + await sqliteService.execute((dbRow) => { + var row = { + rowId: dbRow[0], + created_at: dbRow[1], + userId: dbRow[2], + displayName: dbRow[3], + type: 'Bio', + bio: dbRow[4], + previousBio: dbRow[5] + }; + feedDatabase.unshift(row); + }, `SELECT * FROM ${Database.userPrefix}_feed_bio WHERE (display_name LIKE '%${search}%' OR bio LIKE '%${search}%') ${vipQuery} ORDER BY id DESC LIMIT ${Database.maxTableSize}`); + } if (avatar) { await sqliteService.execute((dbRow) => { var row = {