diff --git a/src/localization/en.json b/src/localization/en.json
index d18b9c65..79c2cc99 100644
--- a/src/localization/en.json
+++ b/src/localization/en.json
@@ -5,7 +5,9 @@
"no_data": "No data",
"no_matching_records": "No matching records",
"actions": {
- "open": "Open"
+ "open": "Open",
+ "confirm": "Confirm",
+ "clear": "Clear"
},
"time_units": {
"y": "y",
diff --git a/src/service/database/feed.js b/src/service/database/feed.js
index c2763b80..8d9e613a 100644
--- a/src/service/database/feed.js
+++ b/src/service/database/feed.js
@@ -87,7 +87,9 @@ const feed = {
search,
filters,
vipList,
- maxEntries = dbVars.searchTableSize
+ maxEntries = dbVars.searchTableSize,
+ dateFrom = '',
+ dateTo = ''
) {
if (search.startsWith('wrld_') || search.startsWith('grp_')) {
return this.getFeedByInstanceId(search, filters, vipList);
@@ -103,6 +105,13 @@ const feed = {
});
vipQuery = `AND user_id IN (${vipPlaceholders.join(', ')})`;
}
+ let dateQuery = '';
+ if (dateFrom) {
+ dateQuery += 'AND created_at >= @dateFrom ';
+ }
+ if (dateTo) {
+ dateQuery += 'AND created_at <= @dateTo ';
+ }
let gps = true;
let status = true;
let bio = true;
@@ -169,17 +178,17 @@ const feed = {
].join(', ');
if (gps) {
selects.push(
- `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'GPS' AS type, location, world_name, previous_location, time, group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_gps WHERE (display_name LIKE @searchLike OR world_name LIKE @searchLike OR group_name LIKE @searchLike) ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
+ `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'GPS' AS type, location, world_name, previous_location, time, group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_gps WHERE (display_name LIKE @searchLike OR world_name LIKE @searchLike OR group_name LIKE @searchLike) ${dateQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
);
}
if (status) {
selects.push(
- `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Status' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, status, status_description, previous_status, previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_status WHERE (display_name LIKE @searchLike OR status LIKE @searchLike OR status_description LIKE @searchLike) ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
+ `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Status' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, status, status_description, previous_status, previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_status WHERE (display_name LIKE @searchLike OR status LIKE @searchLike OR status_description LIKE @searchLike) ${dateQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
);
}
if (bio) {
selects.push(
- `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Bio' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, bio, previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_bio WHERE (display_name LIKE @searchLike OR bio LIKE @searchLike) ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
+ `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Bio' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, bio, previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_bio WHERE (display_name LIKE @searchLike OR bio LIKE @searchLike) ${dateQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
);
}
if (avatar) {
@@ -190,7 +199,7 @@ const feed = {
avatarQuery = 'AND user_id != owner_id';
}
selects.push(
- `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Avatar' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, owner_id, avatar_name, current_avatar_image_url, current_avatar_thumbnail_image_url, previous_current_avatar_image_url, previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_avatar WHERE (display_name LIKE @searchLike OR avatar_name LIKE @searchLike) ${avatarQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
+ `SELECT * FROM (SELECT id, created_at, user_id, display_name, 'Avatar' AS type, NULL AS location, NULL AS world_name, NULL AS previous_location, NULL AS time, NULL AS group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, owner_id, avatar_name, current_avatar_image_url, current_avatar_thumbnail_image_url, previous_current_avatar_image_url, previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_avatar WHERE (display_name LIKE @searchLike OR avatar_name LIKE @searchLike) ${avatarQuery} ${dateQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
);
}
if (online || offline) {
@@ -203,7 +212,7 @@ const feed = {
}
}
selects.push(
- `SELECT * FROM (SELECT id, created_at, user_id, display_name, type, location, world_name, NULL AS previous_location, time, group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_online_offline WHERE (display_name LIKE @searchLike OR world_name LIKE @searchLike OR group_name LIKE @searchLike) ${query} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
+ `SELECT * FROM (SELECT id, created_at, user_id, display_name, type, location, world_name, NULL AS previous_location, time, group_name, NULL AS status, NULL AS status_description, NULL AS previous_status, NULL AS previous_status_description, NULL AS bio, NULL AS previous_bio, NULL AS owner_id, NULL AS avatar_name, NULL AS current_avatar_image_url, NULL AS current_avatar_thumbnail_image_url, NULL AS previous_current_avatar_image_url, NULL AS previous_current_avatar_thumbnail_image_url FROM ${dbVars.userPrefix}_feed_online_offline WHERE (display_name LIKE @searchLike OR world_name LIKE @searchLike OR group_name LIKE @searchLike) ${query} ${dateQuery} ${vipQuery} ORDER BY created_at DESC, id DESC LIMIT @perTable)`
);
}
if (selects.length === 0) {
@@ -216,6 +225,12 @@ const feed = {
'@perTable': maxEntries,
...vipArgs
};
+ if (dateFrom) {
+ args['@dateFrom'] = dateFrom;
+ }
+ if (dateTo) {
+ args['@dateTo'] = dateTo;
+ }
await sqliteService.execute(
(dbRow) => {
const type = dbRow[4];
diff --git a/src/stores/feed.js b/src/stores/feed.js
index 788d8763..64f7fefd 100644
--- a/src/stores/feed.js
+++ b/src/stores/feed.js
@@ -19,6 +19,8 @@ export const useFeedStore = defineStore('Feed', () => {
const feedTableData = shallowRef([]);
const feedTable = ref({
search: '',
+ dateFrom: '',
+ dateTo: '',
vip: false,
loading: false,
filter: [],
@@ -146,17 +148,21 @@ export const useFeedStore = defineStore('Feed', () => {
vipList = Array.from(friendStore.localFavoriteFriends.values());
}
const search = feedTable.value.search.trim();
- const rows = search
- ? await database.searchFeedDatabase(
- search,
- feedTable.value.filter,
- vipList,
- vrcxStore.searchLimit
- )
- : await database.lookupFeedDatabase(
- feedTable.value.filter,
- vipList
- );
+ const { dateFrom, dateTo } = feedTable.value;
+ const rows =
+ search || dateFrom || dateTo
+ ? await database.searchFeedDatabase(
+ search,
+ feedTable.value.filter,
+ vipList,
+ vrcxStore.searchLimit,
+ dateFrom,
+ dateTo
+ )
+ : await database.lookupFeedDatabase(
+ feedTable.value.filter,
+ vipList
+ );
feedTableData.value = [];
feedTableData.value = [...feedTableData.value, ...rows];
} finally {
@@ -182,6 +188,18 @@ export const useFeedStore = defineStore('Feed', () => {
if (!feedSearch(feed)) {
return;
}
+ if (
+ feedTable.value.dateFrom &&
+ feed.created_at < feedTable.value.dateFrom
+ ) {
+ return;
+ }
+ if (
+ feedTable.value.dateTo &&
+ feed.created_at > feedTable.value.dateTo
+ ) {
+ return;
+ }
feedTableData.value = [feed, ...feedTableData.value];
sweepFeed();
}
diff --git a/src/views/Feed/Feed.vue b/src/views/Feed/Feed.vue
index 99982c1b..29cd9494 100644
--- a/src/views/Feed/Feed.vue
+++ b/src/views/Feed/Feed.vue
@@ -35,6 +35,32 @@
style="flex: 0.4; margin-left: 10px"
@keyup.enter="feedTableLookup"
@change="feedTableLookup" />
+
+
+
+
+
+
+