diff --git a/seahub/templates/view_file_unknown.html b/seahub/templates/view_file_unknown.html deleted file mode 100644 index 424093c302..0000000000 --- a/seahub/templates/view_file_unknown.html +++ /dev/null @@ -1,8 +0,0 @@ -{% extends 'view_file_base.html' %} -{% load i18n %} - -{% block extra_script %}{{ block.super }} - -{% endblock %} diff --git a/seahub/views/file.py b/seahub/views/file.py index 0c3b4f1c37..21f10604c1 100644 --- a/seahub/views/file.py +++ b/seahub/views/file.py @@ -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])