From 0974b33785aa57a7ae7b6be16b452c2808bb139c Mon Sep 17 00:00:00 2001 From: ske087 Date: Tue, 19 Aug 2025 13:08:09 +0300 Subject: [PATCH] Enhance upload functionality: add channel selection, display duration, and fix media file visibility --- server.py | 45 +++++++++++++++++++++++++++++++++++++++++---- templates/user.html | 39 +++++++++++++++++++++++++-------------- 2 files changed, 66 insertions(+), 18 deletions(-) diff --git a/server.py b/server.py index abff046..0617a4e 100644 --- a/server.py +++ b/server.py @@ -199,13 +199,19 @@ def admin(): @app.route('/user') @login_required def user_dashboard(): - # Get user's files - user_files = MediaFile.query.filter_by(uploaded_by=current_user.id, is_active=True).order_by(MediaFile.upload_date.desc()).all() + # Get all active files (for signage systems, users should see all available media) + user_files = MediaFile.query.filter_by(is_active=True).order_by(MediaFile.upload_date.desc()).all() + + # Get all active channels + channels = StreamingChannel.query.filter_by(is_active=True).order_by(StreamingChannel.name).all() + + # Get all users for display in file info + users = User.query.all() # Get user's activity user_activity = ActivityLog.query.filter_by(user_id=current_user.id).order_by(ActivityLog.timestamp.desc()).limit(10).all() - return render_template('user.html', user_files=user_files, user_activity=user_activity) + return render_template('user.html', user_files=user_files, user_activity=user_activity, channels=channels, users=users) # File Management Routes @app.route('/upload', methods=['POST']) @@ -243,8 +249,39 @@ def upload_file(): db.session.add(media_file) db.session.commit() + # If channel is selected, add to channel + channel_id = request.form.get('channel_id') + display_duration = request.form.get('display_duration', 10) + + if channel_id and channel_id.strip(): + try: + channel_id = int(channel_id) + channel = StreamingChannel.query.get(channel_id) + + if channel and channel.is_active: + # Get next order number for this channel + max_order = db.session.query(db.func.max(ChannelContent.order)).filter_by(channel_id=channel_id).scalar() or 0 + + # Add to channel + channel_content = ChannelContent( + channel_id=channel_id, + media_file_id=media_file.id, + duration=int(display_duration), + order=max_order + 1 + ) + db.session.add(channel_content) + db.session.commit() + + log_activity('Content added to channel', f'Added {file.filename} to channel {channel.name}') + flash(f'File "{file.filename}" uploaded and added to channel "{channel.name}"!', 'success') + else: + flash(f'File "{file.filename}" uploaded but channel not found!', 'warning') + except (ValueError, TypeError): + flash(f'File "{file.filename}" uploaded but invalid channel selected!', 'warning') + else: + flash(f'File "{file.filename}" uploaded successfully!', 'success') + log_activity('File uploaded', f'Uploaded: {file.filename}') - flash(f'File "{file.filename}" uploaded successfully!', 'success') else: flash('Invalid file type. Please upload images, videos, PDFs, or JSON files.', 'error') diff --git a/templates/user.html b/templates/user.html index b017d36..74f46dd 100644 --- a/templates/user.html +++ b/templates/user.html @@ -74,18 +74,29 @@
-
-
- - -
+
+ + + Supported: Images, Videos, PDFs
-
- - Supported: Images, Videos, PDFs - +
+ + +
+
+ + + How long to display this media (1-300 seconds) +
+
+
@@ -99,12 +110,12 @@
All Media Files
- {{ files|length }} files + {{ user_files|length }} files
- {% if files %} + {% if user_files %}
- {% for file in files %} + {% for file in user_files %}
{% if file.file_type in ['jpg', 'jpeg', 'png', 'gif'] %}