1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-23 12:27:48 +00:00

[preivew-file] Check if can preview file before further operation

This commit is contained in:
lian
2014-12-17 17:58:00 +08:00
parent 0b6b758fb0
commit a955f1d638
2 changed files with 50 additions and 37 deletions

View File

@@ -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 %}

View File

@@ -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])
else:
pass
template = 'view_file_%s.html' % ret_dict['filetype'].lower()
else:
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,18 +682,20 @@ def view_shared_file(request, token):
elif filetype == PDF:
handle_pdf(inner_path, obj_id, fileext, ret_dict)
# send statistic messages
if ret_dict['filetype'] != 'Unknown':
try:
send_message('seahub.stats', 'file-view\t%s\t%s\t%s\t%s' % \
(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()
# send statistic messages
if ret_dict['filetype'] != 'Unknown':
try:
send_message('seahub.stats', 'file-view\t%s\t%s\t%s\t%s' % \
(repo.id, shared_by, obj_id, file_size))
except SearpcError, e:
logger.error('Error when sending file-view message: %s' % str(e))
accessible_repos = get_unencry_rw_repos_by_user(request)
save_to_link = reverse('save_shared_link') + '?t=' + token
traffic_over_limit = user_traffic_over_limit(shared_by)
@@ -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])