aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2023-01-14 16:35:44 +1100
committerTerry Truong <terry06890@gmail.com>2023-01-14 16:35:44 +1100
commitb5cf828824bcc6a9518ad66e91d91a2eae2ed5e1 (patch)
treeee05a3e08df4fd0869c4870f64ea6068ff17928e
parent96805eeb9edbbdde2277d155090c955cfa664506 (diff)
Use ctgs= query param for type=info requests
-rwxr-xr-xbackend/histplorer.py9
-rw-r--r--src/components/SearchModal.vue9
2 files changed, 10 insertions, 8 deletions
diff --git a/backend/histplorer.py b/backend/histplorer.py
index f1decc8..7d02f30 100755
--- a/backend/histplorer.py
+++ b/backend/histplorer.py
@@ -16,7 +16,7 @@ Expected HTTP query parameters:
- event: With type=info, specifies the event title to get info for
- input: With type=sugg, specifies a search string to suggest for
- limit: With type=events or type=sugg, specifies the max number of results
-- ctgs: With type=events or type=sugg, specifies event categories to restrict results to
+- ctgs: With type=events|info|sugg, specifies event categories to restrict results to
Interpreted as a period-separated list of category names (eg: person.place). An empty string is ignored.
"""
@@ -291,8 +291,9 @@ def handleInfoReq(params: dict[str, str], dbCur: sqlite3.Cursor):
if 'event' not in params:
print('INFO: No \'event\' parameter for type=info request', file=sys.stderr)
return None
- return lookupEventInfo(params['event'], dbCur)
-def lookupEventInfo(eventTitle: str, dbCur: sqlite3.Cursor) -> EventInfo | None:
+ ctgs = params['ctgs'].split('.') if 'ctgs' in params else None
+ return lookupEventInfo(params['event'], ctgs, dbCur)
+def lookupEventInfo(eventTitle: str, ctgs: list[str] | None, dbCur: sqlite3.Cursor) -> EventInfo | None:
""" Look up an event with given title, and return a descriptive EventInfo """
query = \
'SELECT events.id, title, start, start_upper, end, end_upper, fmt, ctg, images.id, pop.pop, ' \
@@ -307,6 +308,8 @@ def lookupEventInfo(eventTitle: str, dbCur: sqlite3.Cursor) -> EventInfo | None:
if row is not None:
event = eventEntryToResults(row[:10])
desc, wikiId, url, license, artist, credit = row[10:]
+ if ctgs is not None and event.ctg not in ctgs:
+ return None
return EventInfo(event, desc, wikiId, None if url is None else ImgInfo(url, license, artist, credit))
else:
return None
diff --git a/src/components/SearchModal.vue b/src/components/SearchModal.vue
index 0673f59..069797b 100644
--- a/src/components/SearchModal.vue
+++ b/src/components/SearchModal.vue
@@ -151,13 +151,13 @@ async function resolveSearch(eventTitle: string){
return;
}
let visibleCtgs = null as null | string[];
- // Check if any event categories are disabled
if (Object.values(store.ctgs).some((b: boolean) => !b)){
visibleCtgs = Object.entries(store.ctgs).filter(([, enabled]) => enabled).map(([ctg, ]) => ctg);
}
// Check if the event data is already here
if (props.titleToEvent.has(eventTitle)){
let event = props.titleToEvent.get(eventTitle)!;
+ // Check for disabled event categories
if (visibleCtgs != null && !visibleCtgs.includes(event.ctg)){
console.log('INFO: Ignoring search for known event due to category filter');
return;
@@ -171,13 +171,12 @@ async function resolveSearch(eventTitle: string){
}
// Query server for event
let urlParams = new URLSearchParams({type: 'info', event: eventTitle});
+ if (visibleCtgs != null){
+ urlParams.append('ctgs', visibleCtgs.join('.'));
+ }
let responseObj: EventInfoJson | null = await queryServer(urlParams);
if (responseObj != null){
let eventInfo = jsonToEventInfo(responseObj);
- if (visibleCtgs != null && !visibleCtgs.includes(eventInfo.event.ctg)){
- console.log('INFO: Ignoring search result due to category filter');
- return;
- }
if (store.reqImgs && eventInfo.event.imgId == null){
console.log('INFO: Ignoring search result due to image-only display');
return;