diff --git a/rotary_phone_web.py b/rotary_phone_web.py index fe36e26..7eb65be 100644 --- a/rotary_phone_web.py +++ b/rotary_phone_web.py @@ -151,7 +151,7 @@ BACKUP_ON_WRITE = BACKUP_CONFIG.get('backup_on_write', True) WEB_PORT = SYS_CONFIG['web']['port'] # Template version - increment this when HTML template changes -TEMPLATE_VERSION = "1.7.0" # Updated: Separate volume controls for greeting, button, and beep +TEMPLATE_VERSION = "1.8.0" # Updated: Added recording sorting by date, name, duration, size # Flask app app = Flask(__name__) @@ -834,7 +834,11 @@ phone = RotaryPhone() @app.route('/') def index(): """Main page""" - recordings = get_recordings() + # Get sort parameters from query string + sort_by = request.args.get('sort', 'date') + sort_order = request.args.get('order', 'desc') + + recordings = get_recordings(sort_by=sort_by, sort_order=sort_order) greetings = get_greetings() status = phone.get_status() active_greeting = phone.config.get("active_greeting", "dialtone.wav") @@ -860,7 +864,9 @@ def index(): volume_greeting=volume_greeting, volume_button=volume_button, volume_beep=volume_beep, - greeting_delay=greeting_delay) + greeting_delay=greeting_delay, + sort_by=sort_by, + sort_order=sort_order) @app.route('/api/status') def api_status(): @@ -1221,15 +1227,20 @@ def get_greetings(): }) return greetings -def get_recordings(): - """Get list of all recordings with metadata""" +def get_recordings(sort_by='date', sort_order='desc'): + """Get list of all recordings with metadata + + Args: + sort_by: Sort field - 'date', 'name', 'duration', or 'size' + sort_order: Sort order - 'asc' or 'desc' + """ recordings = [] if os.path.exists(OUTPUT_DIR): - for filename in sorted(os.listdir(OUTPUT_DIR), reverse=True): + for filename in os.listdir(OUTPUT_DIR): if filename.endswith('.wav'): filepath = os.path.join(OUTPUT_DIR, filename) stat = os.stat(filepath) - + # Get duration from WAV file try: wf = wave.open(filepath, 'rb') @@ -1239,14 +1250,28 @@ def get_recordings(): wf.close() except: duration = 0 - + recordings.append({ "filename": filename, "size": stat.st_size, "size_mb": stat.st_size / (1024 * 1024), "date": datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S'), + "timestamp": stat.st_mtime, # For sorting "duration": duration }) + + # Sort recordings based on parameters + reverse = (sort_order == 'desc') + + if sort_by == 'name': + recordings.sort(key=lambda x: x['filename'].lower(), reverse=reverse) + elif sort_by == 'duration': + recordings.sort(key=lambda x: x['duration'], reverse=reverse) + elif sort_by == 'size': + recordings.sort(key=lambda x: x['size'], reverse=reverse) + else: # default to date + recordings.sort(key=lambda x: x['timestamp'], reverse=reverse) + return recordings def get_local_ip(): @@ -1995,6 +2020,23 @@ def main(): {% if recordings %} + +