From 7ff13abbb6b604e00a2aef3901b11503ac566ea3 Mon Sep 17 00:00:00 2001 From: Botanist1866 Date: Mon, 23 Mar 2026 22:39:39 +0100 Subject: [PATCH] Add 'seen' sorting and filtering to character list --- README.md | 4 ++-- .../character-filter/TooltipCharacterFilter.svelte | 5 +++++ .../settings/sections/views/Sorting.svelte | 1 + .../utils/characters/use-character-filter.ts | 13 +++++++++++++ apps/frontend/utils/get-character-sort-func.ts | 2 ++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c1b1b110..329d658aa 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ any help with getting started, I'm available most days. 1. Install Docker and Docker Compose - [Windows install instructions](https://docs.docker.com/docker-for-windows/install/) -1. Install the dotnet SDK, currently 8.x +1. Install the dotnet SDK, currently 9.x 1. Log in or sign up for a [Battle.Net Developer](https://develop.battle.net) account @@ -119,7 +119,7 @@ any help with getting started, I'm available most days. 1. Start the initial data import/build, this will take a while: ```bash - cd app/tool/ + cd apps/tool/ dotnet run all ``` diff --git a/apps/frontend/components/tooltips/character-filter/TooltipCharacterFilter.svelte b/apps/frontend/components/tooltips/character-filter/TooltipCharacterFilter.svelte index 30c37b930..f173eeb87 100644 --- a/apps/frontend/components/tooltips/character-filter/TooltipCharacterFilter.svelte +++ b/apps/frontend/components/tooltips/character-filter/TooltipCharacterFilter.svelte @@ -48,6 +48,11 @@ level=60 | <=,<,=,>,>= +
Last seen (days)
+
+ seen<=7 | <=,<,=,>,>= +
+
Item Level
ilevel>=400 | <=,<,=,>,>= diff --git a/apps/frontend/user-home/components/settings/sections/views/Sorting.svelte b/apps/frontend/user-home/components/settings/sections/views/Sorting.svelte index 221d20921..1143caed4 100644 --- a/apps/frontend/user-home/components/settings/sections/views/Sorting.svelte +++ b/apps/frontend/user-home/components/settings/sections/views/Sorting.svelte @@ -23,6 +23,7 @@ { id: 'gold', name: 'Gold' }, { id: 'itemlevel', name: 'Item level' }, { id: 'level', name: 'Level' }, + { id: 'seen', name: 'Last seen' }, ]; let sortByChoices: SettingsChoice[] = $derived([ diff --git a/apps/frontend/utils/characters/use-character-filter.ts b/apps/frontend/utils/characters/use-character-filter.ts index 45172aff8..f9566ddd4 100644 --- a/apps/frontend/utils/characters/use-character-filter.ts +++ b/apps/frontend/utils/characters/use-character-filter.ts @@ -61,6 +61,19 @@ export function useCharacterFilter( ); } + // Last seen (in days) + match = part.match(/^seen(<|<=|=|>=|>)(\d+)$/); + if (match) { + const now = Math.floor(Date.now() / 1000); + const days = parseInt(match[2]); + const diff = (now - char.lastSeenAddonUnix) / 86400; + return compareValues( + match[1].toString(), + diff, + days + ); + } + // Item level match = part.match(/^(itemlevel|ilevel|ilvl)(<|<=|=|>=|>)(\d+)$/); if (match) { diff --git a/apps/frontend/utils/get-character-sort-func.ts b/apps/frontend/utils/get-character-sort-func.ts index 8346887e8..a61823aac 100644 --- a/apps/frontend/utils/get-character-sort-func.ts +++ b/apps/frontend/utils/get-character-sort-func.ts @@ -86,6 +86,8 @@ export const getCharacterSortFunc = (prefixFunc?: SortValueFunction, viewSortBy? '0' ) ); + } else if (thing === 'seen') { + out.push(leftPad(2000000000 - char.lastSeenAddonUnix, 10, '0')); } else if (thing === 'level') { // in descending order const levelData = getCharacterLevel(char);