This commit is contained in:
2025-05-25 10:31:22 +02:00
parent 1caeb8fc98
commit 225e33056a
102 changed files with 8390 additions and 0 deletions

110
routes/trash.py Normal file
View File

@@ -0,0 +1,110 @@
from flask import Blueprint, jsonify, request, abort
from flask_login import login_required, current_user
from models import db, Room, RoomFile, TrashedFile
from utils import user_has_permission, clean_path
import os
from datetime import datetime
trash_bp = Blueprint('trash', __name__)
@trash_bp.route('/<int:room_id>/trash', methods=['GET'])
@login_required
def list_trashed_files(room_id):
room = Room.query.get_or_404(room_id)
if not user_has_permission(room, 'can_view'):
abort(403)
# Get all trashed files in the room
files = TrashedFile.query.filter_by(room_id=room_id).order_by(TrashedFile.deleted_at.desc()).all()
result = []
for f in files:
uploader_full_name = None
uploader_profile_pic = None
if f.uploader:
uploader_full_name = f.uploader.username
if getattr(f.uploader, 'last_name', None):
uploader_full_name += ' ' + f.uploader.last_name
uploader_profile_pic = f.uploader.profile_picture if getattr(f.uploader, 'profile_picture', None) else None
deleter_full_name = None
if f.deleter:
deleter_full_name = f.deleter.username
if getattr(f.deleter, 'last_name', None):
deleter_full_name += ' ' + f.deleter.last_name
result.append({
'id': f.id,
'name': f.name,
'type': f.type,
'size': f.size if f.type == 'file' else '-',
'modified': f.modified,
'uploaded_by': uploader_full_name,
'uploader_profile_pic': uploader_profile_pic,
'uploaded_at': f.uploaded_at.isoformat() if f.uploaded_at else None,
'original_path': f.original_path,
'deleted_by': deleter_full_name,
'deleted_at': f.deleted_at.isoformat()
})
return jsonify(result)
@trash_bp.route('/<int:room_id>/trash/<int:trash_id>/restore', methods=['POST'])
@login_required
def restore_file(room_id, trash_id):
room = Room.query.get_or_404(room_id)
if not user_has_permission(room, 'can_upload'):
abort(403)
trashed_file = TrashedFile.query.get_or_404(trash_id)
if trashed_file.room_id != room_id:
abort(404)
# Create new RoomFile entry
rf = RoomFile(
room_id=room_id,
name=trashed_file.name,
path=trashed_file.original_path,
type=trashed_file.type,
size=trashed_file.size,
modified=trashed_file.modified,
uploaded_by=trashed_file.uploaded_by,
uploaded_at=trashed_file.uploaded_at
)
db.session.add(rf)
# Delete the trashed file entry
db.session.delete(trashed_file)
db.session.commit()
return jsonify({'success': True})
@trash_bp.route('/<int:room_id>/trash/<int:trash_id>', methods=['DELETE'])
@login_required
def permanently_delete_file(room_id, trash_id):
room = Room.query.get_or_404(room_id)
if not user_has_permission(room, 'can_delete'):
abort(403)
trashed_file = TrashedFile.query.get_or_404(trash_id)
if trashed_file.room_id != room_id:
abort(404)
# Delete the trashed file entry
db.session.delete(trashed_file)
db.session.commit()
return jsonify({'success': True})
@trash_bp.route('/<int:room_id>/trash/empty', methods=['POST'])
@login_required
def empty_trash(room_id):
room = Room.query.get_or_404(room_id)
if not user_has_permission(room, 'can_delete'):
abort(403)
# Delete all trashed files for this room
TrashedFile.query.filter_by(room_id=room_id).delete()
db.session.commit()
return jsonify({'success': True})