From 90bca4c93b149286de9edf2a547d388466b2a61e Mon Sep 17 00:00:00 2001 From: Kobe Date: Sat, 31 May 2025 12:53:41 +0200 Subject: [PATCH] dashboard improvement --- routes/__pycache__/main.cpython-313.pyc | Bin 47659 -> 48498 bytes routes/main.py | 10 +- templates/components/recent_activity.html | 103 ++++++++++++--------- templates/components/storage_overview.html | 2 +- templates/components/trash.html | 2 +- templates/dashboard/dashboard.html | 2 + 6 files changed, 71 insertions(+), 48 deletions(-) diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index 249de6acd5b5f8ced44d611a9be06ec297b034fe..b122c38b41e93a2af811d3313faa781328727711 100644 GIT binary patch delta 6653 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 P+tC}X-40gG>#+6j;6j_g delta 6170 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 ZcFHsG*ikQ2;rP)VmPK|}!K?AnKLA!XsR;l8 diff --git a/routes/main.py b/routes/main.py index 2f426f8..328db53 100644 --- a/routes/main.py +++ b/routes/main.py @@ -45,6 +45,12 @@ def init_routes(main_bp): active_count = User.query.filter_by(is_active=True).count() inactive_count = User.query.filter_by(is_active=False).count() + # Get recent events (last 7) + if current_user.is_admin: + recent_events = Event.query.order_by(Event.timestamp.desc()).limit(7).all() + else: + recent_events = Event.query.filter_by(user_id=current_user.id).order_by(Event.timestamp.desc()).limit(7).all() + # Room count and size logic if current_user.is_admin: logger.info("Loading admin dashboard...") @@ -261,7 +267,9 @@ def init_routes(main_bp): oldest_trash_date=oldest_trash_date, trash_size=trash_size, pending_deletion=pending_deletion, - trash_by_type=trash_by_type) + trash_by_type=trash_by_type, + recent_events=recent_events, + is_admin=current_user.is_admin) UPLOAD_FOLDER = os.path.join(os.getcwd(), 'uploads', 'profile_pics') if not os.path.exists(UPLOAD_FOLDER): diff --git a/templates/components/recent_activity.html b/templates/components/recent_activity.html index bbb32e3..94ceb3e 100644 --- a/templates/components/recent_activity.html +++ b/templates/components/recent_activity.html @@ -1,58 +1,71 @@ -{% macro recent_activity(activities) %} +{% macro recent_activity(events, is_admin=False) %}
-
-
-
-
Recent Activity
- View All -
-
+
+
+
+ + {% if is_admin %}Recent Activity{% else %}Your Recent Actions{% endif %} +
+ {% if is_admin %} + View All + {% endif %} +
+ + {% if events %}
- {% for activity in activities %} -
-
-
- {% if activity.type == 'folder' %} - - {% else %} - - {% endif %} -
-
-
-
-
-
{{ activity.name }}
- {% if activity.is_starred %} - - Starred - - {% endif %} - {% if activity.is_deleted %} - - Trash - - {% endif %} -
- - {{ activity.room.name }} • - {{ activity.uploader.username }} {{ activity.uploader.last_name }} • - {% if activity.uploaded_at %}{{ activity.uploaded_at|timeago }}{% else %}Unknown{% endif %} - + {% for event in events %} +
+
+
+
+
+ {% if event.event_type == 'file_upload' %} + Uploaded {{ event.details.get('file_name', 'a file') }} + {% elif event.event_type == 'file_download' %} + Downloaded {{ event.details.get('file_name', 'a file') }} + {% elif event.event_type == 'file_delete' %} + Deleted {{ event.details.get('file_name', 'a file') }} + {% elif event.event_type == 'file_star' %} + Starred {{ event.details.get('file_name', 'a file') }} + {% elif event.event_type == 'file_unstar' %} + Unstarred {{ event.details.get('file_name', 'a file') }} + {% elif event.event_type == 'room_create' %} + Created room "{{ event.details.get('room_name', 'a room') }}" + {% elif event.event_type == 'room_update' %} + Updated room "{{ event.details.get('room_name', 'a room') }}" + {% elif event.event_type == 'conversation_create' %} + Started a conversation + {% elif event.event_type == 'message_create' %} + Sent a message + {% else %} + {{ event.event_type|replace('_', ' ')|title }} + {% endif %}
- {% if activity.type == 'file' and activity.can_download %} - - - - {% endif %} + + {% if is_admin %} + by {{ event.user.username }} + {% endif %} + {{ event.timestamp.strftime('%Y-%m-%d %H:%M') }} +
+ + {% if event.details.get('room_id') %} + + + + {% endif %}
{% endfor %}
+ {% else %} +
+ +

No recent activity

+
+ {% endif %}
diff --git a/templates/components/storage_overview.html b/templates/components/storage_overview.html index 07aabf4..549f8ec 100644 --- a/templates/components/storage_overview.html +++ b/templates/components/storage_overview.html @@ -5,7 +5,7 @@
-
Storage Overview
+
Room Storage Overview
Browse
diff --git a/templates/components/trash.html b/templates/components/trash.html index c68fd69..77943da 100644 --- a/templates/components/trash.html +++ b/templates/components/trash.html @@ -5,7 +5,7 @@
-
Trash
+
Trash Storage Overview
View All
diff --git a/templates/dashboard/dashboard.html b/templates/dashboard/dashboard.html index e0e9dbd..d8ee6e7 100644 --- a/templates/dashboard/dashboard.html +++ b/templates/dashboard/dashboard.html @@ -23,6 +23,7 @@ {% from 'components/starred_files.html' import starred_files %} {% from 'components/trash.html' import trash %} {% from 'components/trash_type.html' import trash_type %} +{% from 'components/recent_activity.html' import recent_activity %}