1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-22 11:57:34 +00:00

file lock

This commit is contained in:
lian
2015-07-11 10:10:31 +08:00
parent d3097a6acf
commit 2c2bf4f98f
12 changed files with 328 additions and 35 deletions

View File

@@ -37,7 +37,8 @@ from seahub.signals import upload_file_successful, repo_created, repo_deleted
from seahub.views import get_repo_dirents_with_perm, validate_owner, \
check_repo_access_permission, get_unencry_rw_repos_by_user, \
get_system_default_repo_id, get_diff, group_events_data, \
get_owned_repo_list, check_folder_permission, is_registered_user
get_owned_repo_list, check_folder_permission, is_registered_user, \
check_file_lock
from seahub.views.repo import get_nav_path, get_fileshare, get_dir_share_link, \
get_uploadlink, get_dir_shared_upload_link
from seahub.views.modules import get_enabled_mods_by_group, \
@@ -500,11 +501,18 @@ def list_lib_dir(request, repo_id):
if not repo.encrypted and ENABLE_THUMBNAIL and \
os.path.exists(os.path.join(THUMBNAIL_ROOT, str(size), f.obj_id)):
file_path = posixpath.join(path, f.obj_name)
src = get_thumbnail_src(repo_id, size, file_path)
f_['encoded_thumbnail_src'] = urlquote(src)
if is_pro_version():
f_['is_locked'] = True if f.is_locked else False
f_['lock_owner'] = f.lock_owner
if username == f.lock_owner:
f_['locked_by_me'] = True
else:
f_['locked_by_me'] = False
dirent_list.append(f_)
result["dirent_list"] = dirent_list
@@ -646,6 +654,12 @@ def rename_dirent(request, repo_id):
return HttpResponse(json.dumps({'error': err_msg}), status=403,
content_type=content_type)
is_locked, locked_by_me = check_file_lock(repo_id, full_path, username)
if is_locked and not locked_by_me:
err_msg = _('File is locked')
return HttpResponse(json.dumps({'error': err_msg}), status=403,
content_type=content_type)
if newname == oldname:
return HttpResponse(json.dumps({'success': True}),
content_type=content_type)
@@ -702,6 +716,12 @@ def delete_dirent(request, repo_id):
return HttpResponse(json.dumps({'error': err_msg}), status=403,
content_type=content_type)
is_locked, locked_by_me = check_file_lock(repo_id, full_path, username)
if is_locked and not locked_by_me:
err_msg = _('File is locked')
return HttpResponse(json.dumps({'error': err_msg}), status=403,
content_type=content_type)
# delete file/dir
try:
seafile_api.del_file(repo_id, parent_dir, dirent_name, username)
@@ -823,12 +843,21 @@ def mv_file(request, src_repo_id, src_path, dst_repo_id, dst_path, obj_name):
return HttpResponse(json.dumps(result), status=403,
content_type=content_type)
file_path = posixpath.join(src_path, obj_name)
is_locked, locked_by_me = check_file_lock(src_repo_id, file_path, username)
if is_locked and not locked_by_me:
err_msg = _('File is locked')
return HttpResponse(json.dumps({'error': err_msg}), status=403,
content_type=content_type)
new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name)
try:
res = seafile_api.move_file(src_repo_id, src_path, obj_name,
dst_repo_id, dst_path, new_obj_name,
username, need_progress=1)
except SearpcError, e:
except SearpcError as e:
logger.error(e)
res = None
# res can be None or an object