added file sync button

This commit is contained in:
2025-05-27 11:52:02 +02:00
parent a67470d616
commit dca23787e4
8 changed files with 143 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ def init_app(app: Flask):
from .contacts import contacts_bp as contacts_routes
from .rooms import rooms_bp as rooms_routes
from .conversations import conversations_bp as conversations_routes
from .admin import admin as admin_routes
# Initialize routes
init_main_routes(main_bp)
@@ -31,6 +32,7 @@ def init_app(app: Flask):
app.register_blueprint(rooms_routes)
app.register_blueprint(contacts_routes)
app.register_blueprint(conversations_routes)
app.register_blueprint(admin_routes)
@app.route('/rooms/<int:room_id>/trash')
@login_required

Binary file not shown.

67
routes/admin.py Normal file
View File

@@ -0,0 +1,67 @@
from flask import Blueprint, jsonify
from flask_login import login_required, current_user
from models import db, Room, RoomFile, User
import os
from datetime import datetime
admin = Blueprint('admin', __name__)
@admin.route('/api/admin/sync-files', methods=['POST'])
@login_required
def sync_files():
if not current_user.is_admin:
return jsonify({'error': 'Unauthorized'}), 403
try:
DATA_ROOT = '/data/rooms'
admin_user = User.query.filter_by(is_admin=True).first()
if not admin_user:
return jsonify({'error': 'No admin user found'}), 500
rooms = Room.query.all()
for room in rooms:
room_dir = os.path.join(DATA_ROOT, str(room.id))
if not os.path.exists(room_dir):
continue
for root, dirs, files in os.walk(room_dir):
rel_root = os.path.relpath(root, room_dir)
rel_path = '' if rel_root == '.' else rel_root.replace('\\', '/')
# Folders
for d in dirs:
exists = RoomFile.query.filter_by(room_id=room.id, name=d, path=rel_path, type='folder').first()
folder_path = os.path.join(root, d)
stat = os.stat(folder_path)
if not exists:
rf = RoomFile(
room_id=room.id,
name=d,
path=rel_path,
type='folder',
size=None,
modified=stat.st_mtime,
uploaded_by=admin_user.id,
uploaded_at=datetime.utcfromtimestamp(stat.st_mtime)
)
db.session.add(rf)
# Files
for f in files:
exists = RoomFile.query.filter_by(room_id=room.id, name=f, path=rel_path, type='file').first()
file_path = os.path.join(root, f)
stat = os.stat(file_path)
if not exists:
rf = RoomFile(
room_id=room.id,
name=f,
path=rel_path,
type='file',
size=stat.st_size,
modified=stat.st_mtime,
uploaded_by=admin_user.id,
uploaded_at=datetime.utcfromtimestamp(stat.st_mtime)
)
db.session.add(rf)
db.session.commit()
return jsonify({'success': True, 'message': 'File system synchronized successfully'})
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500