almost finished the project
This commit is contained in:
66
app.py
66
app.py
@@ -6,6 +6,8 @@ from flask_bcrypt import Bcrypt
|
||||
from werkzeug.utils import secure_filename
|
||||
from functools import wraps
|
||||
from flask_migrate import Migrate
|
||||
from pdf2image import convert_from_path
|
||||
import subprocess
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@@ -73,6 +75,10 @@ def admin_required(f):
|
||||
return f(*args, **kwargs)
|
||||
return decorated_function
|
||||
|
||||
def convert_ppt_to_pdf(input_file, output_file):
|
||||
command = ['libreoffice', '--headless', '--convert-to', 'pdf', '--outdir', os.path.dirname(output_file), input_file]
|
||||
subprocess.run(command, check=True)
|
||||
|
||||
@app.route('/')
|
||||
@login_required
|
||||
def dashboard():
|
||||
@@ -124,16 +130,41 @@ def upload_content():
|
||||
files = request.files.getlist('files')
|
||||
duration = int(request.form['duration'])
|
||||
return_url = request.form['return_url']
|
||||
media_type = request.form['media_type']
|
||||
|
||||
for file in files:
|
||||
filename = secure_filename(file.filename)
|
||||
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
||||
file.save(file_path)
|
||||
if target_type == 'player':
|
||||
new_content = Content(file_name=filename, duration=duration, player_id=target_id)
|
||||
elif target_type == 'group':
|
||||
new_content = Content(file_name=filename, duration=duration, group_id=target_id)
|
||||
db.session.add(new_content)
|
||||
|
||||
if media_type == 'pdf':
|
||||
# Convert PDF to PNG
|
||||
images = convert_from_path(file_path)
|
||||
for i, image in enumerate(images):
|
||||
image_filename = f"{os.path.splitext(filename)[0]}_page_{i + 1}.png"
|
||||
image_path = os.path.join(app.config['UPLOAD_FOLDER'], image_filename)
|
||||
image.save(image_path, 'PNG')
|
||||
new_content = Content(file_name=image_filename, duration=duration, player_id=target_id if target_type == 'player' else None, group_id=target_id if target_type == 'group' else None)
|
||||
db.session.add(new_content)
|
||||
os.remove(file_path) # Remove the original PDF file
|
||||
elif media_type == 'ppt':
|
||||
# Convert PPT/PPTX to PDF
|
||||
pdf_filename = f"{os.path.splitext(filename)[0]}.pdf"
|
||||
pdf_path = os.path.join(app.config['UPLOAD_FOLDER'], pdf_filename)
|
||||
convert_ppt_to_pdf(file_path, pdf_path)
|
||||
# Convert PDF to PNG
|
||||
images = convert_from_path(pdf_path)
|
||||
for i, image in enumerate(images):
|
||||
image_filename = f"{os.path.splitext(filename)[0]}_page_{i + 1}.png"
|
||||
image_path = os.path.join(app.config['UPLOAD_FOLDER'], image_filename)
|
||||
image.save(image_path, 'PNG')
|
||||
new_content = Content(file_name=image_filename, duration=duration, player_id=target_id if target_type == 'player' else None, group_id=target_id if target_type == 'group' else None)
|
||||
db.session.add(new_content)
|
||||
os.remove(file_path) # Remove the original PPT/PPTX file
|
||||
os.remove(pdf_path) # Remove the intermediate PDF file
|
||||
else:
|
||||
new_content = Content(file_name=filename, duration=duration, player_id=target_id if target_type == 'player' else None, group_id=target_id if target_type == 'group' else None)
|
||||
db.session.add(new_content)
|
||||
|
||||
db.session.commit()
|
||||
return redirect(return_url)
|
||||
@@ -441,6 +472,31 @@ def upload_personalization_pictures():
|
||||
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.route('/clean_unused_files', methods=['POST'])
|
||||
@login_required
|
||||
@admin_required
|
||||
def clean_unused_files():
|
||||
# Get all file names from the database
|
||||
content_files = {content.file_name for content in Content.query.all()}
|
||||
logo_file = 'logo.png'
|
||||
login_picture_file = 'login_picture.png'
|
||||
|
||||
# Get all files in the upload folder
|
||||
all_files = set(os.listdir(app.config['UPLOAD_FOLDER']))
|
||||
|
||||
# Determine unused files
|
||||
used_files = content_files | {logo_file, login_picture_file}
|
||||
unused_files = all_files - used_files
|
||||
|
||||
# Delete unused files
|
||||
for file_name in unused_files:
|
||||
file_path = os.path.join(app.config['UPLOAD_FOLDER'], file_name)
|
||||
if os.path.isfile(file_path):
|
||||
os.remove(file_path)
|
||||
|
||||
flash('Unused files have been cleaned.', 'success')
|
||||
return redirect(url_for('admin'))
|
||||
|
||||
@app.context_processor
|
||||
def inject_theme():
|
||||
if current_user.is_authenticated:
|
||||
|
||||
Reference in New Issue
Block a user