diff --git a/analytics.py b/analytics.py index dd3617a..d50dc9d 100644 --- a/analytics.py +++ b/analytics.py @@ -4,6 +4,7 @@ from datetime import datetime, timedelta, timezone import geoip2.database from auth import require_secret from collections import defaultdict +import pandas as pd import json import os import auth @@ -389,6 +390,16 @@ def dashboard(): cursor = log_db.execute(query, params_for_filter) rows = cursor.fetchall() + # Convert rows to a list of dictionaries and add category + rows = [ + { + 'rel_path': rel_path, + 'access_count': access_count, + 'category': hf.extract_structure_from_string(rel_path)[0] + } + for rel_path, access_count in rows + ] + # 2. Distinct device trend # We'll group by hour if "today", by day if "7days"/"30days", by month if "365days" if session['timeframe'] == 'last24hours': @@ -588,9 +599,6 @@ def dashboard(): location_data.sort(key=lambda x: x['count'], reverse=True) location_data = location_data[:20] - # Convert the top-files rows to a list of dictionaries - rows = [dict(rel_path=r[0], access_count=r[1]) for r in rows] - title_short = app_config.get('TITLE_SHORT', 'Default Title') title_long = app_config.get('TITLE_LONG' , 'Default Title') @@ -614,7 +622,6 @@ def dashboard(): def export_to_excel(): """Export search_db to an Excel file and store it locally.""" - import pandas as pd # Query all data from the search_db query = "SELECT * FROM files" diff --git a/helperfunctions.py b/helperfunctions.py index 2ca5124..32d1310 100644 --- a/helperfunctions.py +++ b/helperfunctions.py @@ -1,5 +1,6 @@ from datetime import datetime import re +import os def extract_date_from_string(string_with_date): # grab X.Y.Z where X,Y,Z are 1–4 digits @@ -43,4 +44,49 @@ def extract_date_from_string(string_with_date): dt = datetime.strptime(date_str, fmt) return dt.strftime('%Y-%m-%d') except ValueError: - return None \ No newline at end of file + return None + + +def extract_structure_from_string(input_string): + # extract category and titel from filename + filename_ext = os.path.splitext(input_string)[0] + left_side, right_side = filename_ext.split('-', 1) if '-' in filename_ext else (filename_ext, None) + try: + int(left_side.strip()) + # first part is only a number + previous_right_side = right_side + left_side, right_side = previous_right_side.split('-', 1) if '-' in previous_right_side else (previous_right_side, None) + except: + # first part not a number + pass + + if 'predig' in left_side.lower(): + category = 'Predigt' + elif 'wort' in left_side.lower() or 'einladung' in left_side.lower(): + category = 'Vorwort' + elif 'chor' in left_side.lower(): + category = 'Chor' + elif 'orchester' in left_side.lower(): + category = 'Orchester' + elif 'gruppenlied' in left_side.lower() or 'jugendlied' in left_side.lower(): + category = 'Gruppenlied' + elif 'gemeinsam' in left_side.lower() or 'gesang' in left_side.lower() or 'lied' in left_side.lower(): + category = 'Gemeinsamer Gesang' + elif 'gedicht' in left_side.lower(): + category = 'Gedicht' + elif 'instrumental' in left_side.lower() or 'musikstück' in left_side.lower(): + category = 'Instrumental' + else: + category = None + + if right_side: + titel, name = right_side.split('-', 1) if '-' in right_side else (right_side, None) + if category == 'Predigt' or category == 'Vorwort' or category == 'Gedicht': + if not name: # kein Titel, nur Name + name = titel + titel = None + else: + titel = None + name = None + + return category, titel, name \ No newline at end of file diff --git a/index_for_search.py b/index_for_search.py index 804336d..f6ba0ed 100755 --- a/index_for_search.py +++ b/index_for_search.py @@ -110,13 +110,13 @@ def updatefileindex(): # Retrieve the hit count for this file. hit_count = get_hit_count(relative_path) - category, titel, name, performance_date, site = None, None, None, None, None - # Determine the site if foldername == 'Gottesdienste Speyer': site = 'Speyer' elif foldername == 'Gottesdienste Schwegenheim': site = 'Schwegenheim' + else: + site = None # Check for a corresponding transcript file in a sibling "Transkription" folder. parent_dir = os.path.dirname(entry_path) @@ -130,46 +130,7 @@ def updatefileindex(): except Exception: transcript = None - # extract category and titel from filename - filename_ext = os.path.splitext(entry.name)[0] - left_side, right_side = filename_ext.split('-', 1) if '-' in filename_ext else (filename_ext, None) - try: - int(left_side.strip()) - # first part is only a number - previous_right_side = right_side - left_side, right_side = previous_right_side.split('-', 1) if '-' in previous_right_side else (previous_right_side, None) - except: - # first part not a number - pass - - if 'predig' in left_side.lower(): - category = 'Predigt' - elif 'wort' in left_side.lower() or 'einladung' in left_side.lower(): - category = 'Vorwort' - elif 'chor' in left_side.lower(): - category = 'Chor' - elif 'orchester' in left_side.lower(): - category = 'Orchester' - elif 'gruppenlied' in left_side.lower() or 'jugendlied' in left_side.lower(): - category = 'Gruppenlied' - elif 'gemeinsam' in left_side.lower() or 'gesang' in left_side.lower() or 'lied' in left_side.lower(): - category = 'Gemeinsamer Gesang' - elif 'gedicht' in left_side.lower(): - category = 'Gedicht' - elif 'instrumental' in left_side.lower() or 'musikstück' in left_side.lower(): - category = 'Instrumental' - else: - category = None - - if right_side: - titel, name = right_side.split('-', 1) if '-' in right_side else (right_side, None) - if category == 'Predigt' or category == 'Vorwort' or category == 'Gedicht': - if not name: # kein Titel, nur Name - name = titel - titel = None - else: - titel = None - name = None + category, titel, name = hf.extract_structure_from_string(entry.name) performance_date = hf.extract_date_from_string(relative_path) diff --git a/templates/dashboard.html b/templates/dashboard.html index 4449dd7..83ddfe0 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -222,6 +222,7 @@ File Path Access Count + Kategorie @@ -229,6 +230,7 @@ {{ row.rel_path }} {{ row.access_count }} + {{ row.category }} {% else %}