From 7bdd60177ec3e0e59fcfc5a553a4981996d7f238 Mon Sep 17 00:00:00 2001 From: ske087 Date: Thu, 26 Jun 2025 16:57:09 +0300 Subject: [PATCH] updated --- app.py | 102 +++++++++++-------- instance/dashboard.db | Bin 45056 -> 45056 bytes ppt | 30 ++++++ static/uploads/informare_tombola_slide_1.jpg | Bin 0 -> 65955 bytes templates/admin.html | 15 +++ 5 files changed, 102 insertions(+), 45 deletions(-) create mode 100644 ppt create mode 100644 static/uploads/informare_tombola_slide_1.jpg diff --git a/app.py b/app.py index 8c3987b..2ab5f38 100644 --- a/app.py +++ b/app.py @@ -13,6 +13,7 @@ from pptx.util import Inches from PIL import Image import io import threading +from PIL import Image, ImageDraw app = Flask(__name__, instance_relative_config=True) @@ -87,36 +88,7 @@ def add_image_to_playlist(file, filename, duration, target_type, target_id): db.session.commit() -def convert_ppt_to_images(input_file, output_folder): - """ - Converts a PowerPoint file (.ppt or .pptx) to images using LibreOffice. - Each slide is saved as a separate image in the output folder. - """ - if not os.path.exists(output_folder): - os.makedirs(output_folder) - # Convert the PowerPoint file to images using LibreOffice - command = [ - 'libreoffice', - '--headless', - '--convert-to', 'png', - '--outdir', output_folder, - input_file - ] - try: - subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - print(f"PPT file converted to images: {input_file}") - except subprocess.CalledProcessError as e: - print(f"Error converting PPT to images: {e.stderr.decode()}") - return False - - # Rename the generated images to follow the naming convention - base_name = os.path.splitext(os.path.basename(input_file))[0] - for i, file_name in enumerate(sorted(os.listdir(output_folder))): - if file_name.endswith('.png'): - new_name = f"{base_name}_{i + 1}.png" - os.rename(os.path.join(output_folder, file_name), os.path.join(output_folder, new_name)) - return True def convert_pdf_to_images(input_file, output_folder): """ @@ -210,6 +182,45 @@ def convert_video_and_update_playlist(file_path, original_filename, target_type, else: print(f"Video conversion failed for: {file_path}") +def convert_pptx_to_images(input_file, output_folder): + """ + Converts a PowerPoint file (.pptx) to images using python-pptx. + Each slide is saved as a separate image in the output folder. + """ + try: + if not os.path.exists(output_folder): + os.makedirs(output_folder) + + # Load the PowerPoint presentation + presentation = Presentation(input_file) + base_name = os.path.splitext(os.path.basename(input_file))[0] + + for i, slide in enumerate(presentation.slides): + # Create a blank image for the slide + img = Image.new('RGB', (1920, 1080), color='white') # Adjust resolution as needed + draw = ImageDraw.Draw(img) + + # Extract slide content (text, shapes, etc.) + for shape in slide.shapes: + if shape.has_text_frame: + text = shape.text_frame.text + draw.text((50, 50 + i * 20), text, fill='black') # Adjust position and styling + + # Save the image + image_filename = f"{base_name}_slide_{i + 1}.jpg" + image_path = os.path.join(output_folder, image_filename) + img.save(image_path, 'JPEG') + print(f"Slide {i + 1} saved as image: {image_path}") + + # Delete the original PPTX file after conversion + if os.path.exists(input_file): + os.remove(input_file) + print(f"Original PPTX file deleted: {input_file}") + + return True + except Exception as e: + print(f"Error processing PPTX file: {e}") + return False # Convert EMU to pixels def emu_to_pixels(emu): @@ -321,13 +332,13 @@ def upload_content(): # Handle PPT files elif media_type == 'ppt': print(f"Processing PPT file: {file_path}") - success = convert_ppt_to_images(file_path, app.config['UPLOAD_FOLDER']) + success = convert_pptx_to_images(file_path, app.config['UPLOAD_FOLDER']) if success: # Add each slide image to the playlist base_name = os.path.splitext(filename)[0] for slide_image in sorted(os.listdir(app.config['UPLOAD_FOLDER'])): - if slide_image.startswith(base_name) and slide_image.endswith('.png'): + if slide_image.startswith(base_name) and slide_image.endswith('.jpg'): if target_type == 'group': group = Group.query.get_or_404(target_id) for player in group.players: @@ -337,22 +348,12 @@ def upload_content(): new_content = Content(file_name=slide_image, duration=duration, player_id=target_id) db.session.add(new_content) - # Commit the changes to the database - db.session.commit() - - # Remove the original PPT file after processing - if os.path.exists(file_path): - os.remove(file_path) - print(f"Original PPT file deleted: {file_path}") - else: - print(f"Failed to process PPT file: {file_path}") - flash(f"Failed to process PPT file: {file_path}", 'danger') - except Exception as e: - print(f"Error processing file {filename}: {e}") - flash(f"Error processing file {filename}: {e}", 'danger') + print(f"Error processing file {file.filename}: {e}") + flash(f"Error processing file {file.filename}: {e}", 'danger') db.session.commit() + return redirect(return_url) # Handle GET request @@ -366,6 +367,10 @@ def upload_content(): return render_template('upload_content.html', target_type=target_type, target_id=target_id, players=players, groups=groups, return_url=return_url) +# Define global variables for server version and build date +SERVER_VERSION = "1.0.0" +BUILD_DATE = "2025-06-25" + @app.route('/admin') @login_required @admin_required @@ -373,7 +378,14 @@ def admin(): logo_exists = os.path.exists(os.path.join(app.config['UPLOAD_FOLDERLOGO'], 'logo.png')) login_picture_exists = os.path.exists(os.path.join(app.config['UPLOAD_FOLDERLOGO'], 'login_picture.png')) users = User.query.all() - return render_template('admin.html', users=users, logo_exists=logo_exists, login_picture_exists=login_picture_exists) + return render_template( + 'admin.html', + users=users, + logo_exists=logo_exists, + login_picture_exists=login_picture_exists, + server_version=SERVER_VERSION, + build_date=BUILD_DATE + ) @app.route('/admin/change_role/', methods=['POST']) @login_required diff --git a/instance/dashboard.db b/instance/dashboard.db index 529ecb50281db01e3a3e32cdd92210083b92dc51..93418d9f5521d8f778a780393623457207d6ba49 100644 GIT binary patch delta 98 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 +
+
+ +
+
+

Server Info

+
+
+

Server Version: {{ server_version }}

+

Date of Build: {{ build_date }}

+
+
+
+
+