mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-23 20:37:42 +00:00
[preivew-file] Check if can preview file before further operation
This commit is contained in:
@@ -1,8 +0,0 @@
|
||||
{% extends 'view_file_base.html' %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block extra_script %}{{ block.super }}
|
||||
<script type="text/javascript">
|
||||
$('#file-view').html('<div id="file-view-tip"><p>{% trans "This type of file cannot be viewed online." %}</p></div>');
|
||||
</script>
|
||||
{% endblock %}
|
@@ -57,7 +57,7 @@ from seahub.utils.ip import get_remote_ip
|
||||
from seahub.utils.file_types import (IMAGE, PDF, DOCUMENT, SPREADSHEET,
|
||||
MARKDOWN, TEXT, SF, OPENDOCUMENT)
|
||||
from seahub.utils.star import is_file_starred
|
||||
from seahub.utils import HAS_OFFICE_CONVERTER
|
||||
from seahub.utils import HAS_OFFICE_CONVERTER, FILEEXT_TYPE_MAP
|
||||
|
||||
if HAS_OFFICE_CONVERTER:
|
||||
from seahub.utils import (
|
||||
@@ -286,6 +286,23 @@ def file_size_exceeds_preview_limit(file_size, file_type):
|
||||
else:
|
||||
return False, ''
|
||||
|
||||
def can_preview_file(file_name, file_size):
|
||||
"""Check whether a file can be viewed online.
|
||||
|
||||
Returns (True, None) if file can be viewed online, otherwise
|
||||
(False, erro_msg).
|
||||
"""
|
||||
file_type, file_ext = get_file_type_and_ext(file_name)
|
||||
if file_ext in FILEEXT_TYPE_MAP: # check file extension
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(file_size,
|
||||
file_type)
|
||||
if exceeds_limit:
|
||||
return (False, err_msg)
|
||||
else:
|
||||
return (True, None)
|
||||
else:
|
||||
return (False, "This type of file cannot be viewed online.")
|
||||
|
||||
@login_required
|
||||
@repo_passwd_set_required
|
||||
def view_file(request, repo_id):
|
||||
@@ -339,11 +356,9 @@ def view_file(request, repo_id):
|
||||
'filetype': filetype}
|
||||
|
||||
fsize = get_file_size(repo.store_id, repo.version, obj_id)
|
||||
can_preview, err_msg = can_preview_file(u_filename, fsize)
|
||||
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(fsize, filetype)
|
||||
if exceeds_limit:
|
||||
ret_dict['err'] = err_msg
|
||||
else:
|
||||
if can_preview:
|
||||
"""Choose different approach when dealing with different type of file."""
|
||||
if is_textual_file(file_type=filetype):
|
||||
handle_textual_file(request, filetype, inner_path, ret_dict)
|
||||
@@ -380,8 +395,11 @@ def view_file(request, repo_id):
|
||||
img_prev = posixpath.join(parent_dir, img_list[cur_img_index - 1])
|
||||
if cur_img_index != len(img_list) - 1:
|
||||
img_next = posixpath.join(parent_dir, img_list[cur_img_index + 1])
|
||||
|
||||
template = 'view_file_%s.html' % ret_dict['filetype'].lower()
|
||||
else:
|
||||
pass
|
||||
ret_dict['err'] = err_msg
|
||||
template = 'view_file_base.html'
|
||||
|
||||
# generate file path navigator
|
||||
zipped = gen_path_link(path, repo.name)
|
||||
@@ -433,8 +451,6 @@ def view_file(request, repo_id):
|
||||
org_id = request.user.org.org_id
|
||||
is_starred = is_file_starred(username, repo.id, path.encode('utf-8'), org_id)
|
||||
|
||||
template = 'view_file_%s.html' % ret_dict['filetype'].lower()
|
||||
|
||||
office_preview_token = ret_dict.get('office_preview_token', '')
|
||||
|
||||
return render_to_response(template, {
|
||||
@@ -648,10 +664,10 @@ def view_shared_file(request, token):
|
||||
ret_dict = {'err': '', 'file_content': '', 'encoding': '', 'file_enc': '',
|
||||
'file_encoding_list': [], 'html_exists': False,
|
||||
'filetype': filetype}
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(file_size, filetype)
|
||||
if exceeds_limit:
|
||||
ret_dict['err'] = err_msg
|
||||
else:
|
||||
|
||||
can_preview, err_msg = can_preview_file(filename, file_size)
|
||||
|
||||
if can_preview:
|
||||
"""Choose different approach when dealing with different type of file."""
|
||||
|
||||
if is_textual_file(file_type=filetype):
|
||||
@@ -666,10 +682,6 @@ def view_shared_file(request, token):
|
||||
elif filetype == PDF:
|
||||
handle_pdf(inner_path, obj_id, fileext, ret_dict)
|
||||
|
||||
# Increase file shared link view_cnt, this operation should be atomic
|
||||
fileshare.view_cnt = F('view_cnt') + 1
|
||||
fileshare.save()
|
||||
|
||||
# send statistic messages
|
||||
if ret_dict['filetype'] != 'Unknown':
|
||||
try:
|
||||
@@ -677,6 +689,12 @@ def view_shared_file(request, token):
|
||||
(repo.id, shared_by, obj_id, file_size))
|
||||
except SearpcError, e:
|
||||
logger.error('Error when sending file-view message: %s' % str(e))
|
||||
else:
|
||||
ret_dict['err'] = err_msg
|
||||
|
||||
# Increase file shared link view_cnt, this operation should be atomic
|
||||
fileshare.view_cnt = F('view_cnt') + 1
|
||||
fileshare.save()
|
||||
|
||||
accessible_repos = get_unencry_rw_repos_by_user(request)
|
||||
save_to_link = reverse('save_shared_link') + '?t=' + token
|
||||
@@ -782,10 +800,10 @@ def view_file_via_shared_dir(request, token):
|
||||
ret_dict = {'err': '', 'file_content': '', 'encoding': '', 'file_enc': '',
|
||||
'file_encoding_list': [], 'html_exists': False,
|
||||
'filetype': filetype}
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(file_size, filetype)
|
||||
if exceeds_limit:
|
||||
ret_dict['err'] = err_msg
|
||||
else:
|
||||
|
||||
can_preview, err_msg = can_preview_file(filename, file_size)
|
||||
|
||||
if can_preview:
|
||||
"""Choose different approach when dealing with different type of file."""
|
||||
|
||||
if is_textual_file(file_type=filetype):
|
||||
@@ -826,6 +844,8 @@ def view_file_via_shared_dir(request, token):
|
||||
(repo.id, shared_by, obj_id, file_size))
|
||||
except SearpcError, e:
|
||||
logger.error('Error when sending file-view message: %s' % str(e))
|
||||
else:
|
||||
ret_dict['err'] = err_msg
|
||||
|
||||
traffic_over_limit = user_traffic_over_limit(shared_by)
|
||||
|
||||
@@ -1372,10 +1392,9 @@ def view_priv_shared_file(request, token):
|
||||
'file_encoding_list': [], 'html_exists': False,
|
||||
'filetype': filetype}
|
||||
fsize = get_file_size(repo.store_id, repo.version, obj_id)
|
||||
exceeds_limit, err_msg = file_size_exceeds_preview_limit(fsize, filetype)
|
||||
if exceeds_limit:
|
||||
ret_dict['err'] = err_msg
|
||||
else:
|
||||
can_preview, err_msg = can_preview_file(filename, fsize)
|
||||
|
||||
if can_preview:
|
||||
"""Choose different approach when dealing with different type of file."""
|
||||
|
||||
if is_textual_file(file_type=filetype):
|
||||
@@ -1386,6 +1405,8 @@ def view_priv_shared_file(request, token):
|
||||
handle_spreadsheet(inner_path, obj_id, fileext, ret_dict)
|
||||
elif filetype == PDF:
|
||||
handle_pdf(inner_path, obj_id, fileext, ret_dict)
|
||||
else:
|
||||
ret_dict['err'] = err_msg
|
||||
|
||||
accessible_repos = get_unencry_rw_repos_by_user(request)
|
||||
save_to_link = reverse('save_private_file_share', args=[pfs.token])
|
||||
|
Reference in New Issue
Block a user