From 4d8b43bd540506e101f1fb6a196747ddf5ec9e7e Mon Sep 17 00:00:00 2001 From: idalin Date: Tue, 21 Mar 2017 10:16:40 +0800 Subject: [PATCH 01/17] update Simplified Chinese translation --- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 300649 -> 301153 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 36 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index b02c863bda42a55b728b6d3477c63150c006e47b..0a73aa40338eeaec1da928b678b456c67274ae5d 100644 GIT binary patch delta 129001 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%0D}x=(sBWf}ZkqXaZXtSRAJ9&_H$3 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 Y?3C)KZd*C$qUs-1sl4yv>d$TSfAdscx&QzG diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 7c4d6361..f131c5a6 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -307,7 +307,7 @@ msgstr "用户 '%(user)s' 已被创建" #: cps/web.py:2198 msgid "Found an existing account for this email address or nickname." -msgstr "已找到使用此邮箱或昵称的账号。" +msgstr "已存在使用此邮箱或昵称的账号。" #: cps/web.py:2220 msgid "Mail settings updated" @@ -496,7 +496,7 @@ msgstr "最新提交时间戳" #: cps/templates/admin.html:83 msgid "Reconnect to Calibre DB" -msgstr "" +msgstr "重新连接到Calibre数据库" #: cps/templates/admin.html:84 msgid "Restart Calibre-web" @@ -590,7 +590,7 @@ msgstr "编辑后查看书籍" #: cps/templates/book_edit.html:107 cps/templates/book_edit.html:118 msgid "Get metadata" -msgstr "" +msgstr "获取元数据" #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:117 #: cps/templates/login.html:19 cps/templates/search_form.html:79 @@ -600,11 +600,11 @@ msgstr "提交" #: cps/templates/book_edit.html:121 msgid "Keyword" -msgstr "" +msgstr "关键字" #: cps/templates/book_edit.html:122 msgid " Search keyword " -msgstr "" +msgstr "搜索关键字" #: cps/templates/book_edit.html:124 cps/templates/layout.html:60 msgid "Go!" @@ -612,32 +612,32 @@ msgstr "走起!" #: cps/templates/book_edit.html:125 msgid "Click the cover to load metadata to the form" -msgstr "" +msgstr "点击封面加载元数据到表单" #: cps/templates/book_edit.html:129 cps/templates/book_edit.html:142 msgid "Loading..." -msgstr "" +msgstr "加载中..." #: cps/templates/book_edit.html:132 msgid "Close" -msgstr "" +msgstr "关闭" #: cps/templates/book_edit.html:143 msgid "Search error!" -msgstr "" +msgstr "搜索错误" #: cps/templates/book_edit.html:144 msgid "No Result! Please try anonther keyword." -msgstr "" +msgstr "没有结果!请尝试别的关键字." #: cps/templates/book_edit.html:146 cps/templates/detail.html:76 #: cps/templates/search_form.html:14 msgid "Publisher" -msgstr "" +msgstr "出版社" #: cps/templates/book_edit.html:148 msgid "Source" -msgstr "" +msgstr "来源" #: cps/templates/config_edit.html:7 msgid "Location of Calibre database" @@ -645,7 +645,7 @@ msgstr "Calibre 数据库位置" #: cps/templates/config_edit.html:13 msgid "Use google drive?" -msgstr "" +msgstr "是否使用google drive?" #: cps/templates/config_edit.html:17 msgid "Client id" @@ -660,8 +660,8 @@ msgid "Calibre Base URL" msgstr "" #: cps/templates/config_edit.html:29 -msgid "Google drive Calibre folder" -msgstr "" +msgid "Google drive Calibre folde" +msgstr "Google drive Calibre 文件夹" #: cps/templates/config_edit.html:38 msgid "Metadata Watch Channel ID" @@ -843,12 +843,12 @@ msgstr "显示随机书籍" #: cps/templates/index.xml:43 cps/templates/index.xml:47 #: cps/templates/layout.html:132 msgid "Read Books" -msgstr "" +msgstr "已读书籍" #: cps/templates/index.xml:50 cps/templates/index.xml:54 #: cps/templates/layout.html:133 msgid "Unread Books" -msgstr "" +msgstr "未读书籍" #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" @@ -1082,7 +1082,7 @@ msgstr "显示作者选择" #: cps/templates/user_edit.html:75 msgid "Show read and unread" -msgstr "" +msgstr "显示已读和未读" #: cps/templates/user_edit.html:79 msgid "Show random books in detail view" From 2c173f984844796d18a0a3d582d8fa8a96173cdc Mon Sep 17 00:00:00 2001 From: Ivan Smirnov Date: Sat, 25 Mar 2017 13:05:44 -0700 Subject: [PATCH 02/17] Read dbpath from $CALIBRE_DBPATH if present This is an exploration in potentially enabling multiple libraries to run using the same engine. Since app config is all in the db, we should get no port conflicts and be able to run multiple instances of this app with no issues. Using os.getenv instead of os.environ.get allows us to provide CALIBRE_DBPATH inline with the invocation of the file (`CALIBRE_DBPATH=/foo/bar/` python cps.py) --- cps/ub.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/ub.py b/cps/ub.py index 370b373a..712a448e 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -13,7 +13,7 @@ from flask_babel import gettext as _ import json #from builtins import str -dbpath = os.path.join(os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep), "app.db") +dbpath = os.path.join(os.path.normpath(os.getenv("CALIBRE_DBPATH", os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep)), "app.db") engine = create_engine('sqlite:///{0}'.format(dbpath), echo=False) Base = declarative_base() From ebb3aceccafca0df2e215176475a5f96465a813e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=AA=8E?= Date: Wed, 29 Mar 2017 12:59:20 +0800 Subject: [PATCH 03/17] Fix Download Bug. --- cps/web.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/cps/web.py b/cps/web.py index 1ff36c36..9667c354 100755 --- a/cps/web.py +++ b/cps/web.py @@ -40,7 +40,6 @@ from functools import wraps import base64 from sqlalchemy.sql import * import json -import urllib import datetime from iso639 import languages as isoLanguages from iso639 import __version__ as iso639Version @@ -147,8 +146,8 @@ class Gdrive: class ReverseProxied(object): """Wrap the application in this middleware and configure the - front-end server to add these headers, to let you quietly bind - this to a URL other than / and to an HTTP scheme that is + front-end server to add these headers, to let you quietly bind + this to a URL other than / and to an HTTP scheme that is different than what is used locally. Code courtesy of: http://flask.pocoo.org/snippets/35/ @@ -836,7 +835,7 @@ def get_opds_download_link(book_id, format): else: # file_name = helper.get_valid_filename(file_name) response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) - response.headers=headers + response.headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf8')), format) return response @@ -1645,13 +1644,13 @@ def get_download_link(book_id, format): headers["Content-Type"] = mimetypes.types_map['.' + format] except: pass - headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (urllib.quote(file_name.encode('utf-8')), format) + headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf-8')), format) if config.config_use_google_drive: df=gdriveutils.getFileFromEbooksFolder(Gdrive.Instance().drive, book.path, '%s.%s' % (data.name, format)) return do_gdrive_download(df, headers) else: response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) - response.headers=headers + response.headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf-8')), format) return response else: abort(404) @@ -2400,7 +2399,7 @@ def edit_book(book_id): modify_database_object(input_authors, book.authors, db.Authors, db.session, 'author') if author0_before_edit != book.authors[0].name: edited_books_id.add(book.id) - book.author_sort=helper.get_sorted_author(input_authors[0]) + book.author_sort=helper.get_sorted_author(input_authors[0]) if to_save["cover_url"] and os.path.splitext(to_save["cover_url"])[1].lower() == ".jpg": img = requests.get(to_save["cover_url"]) @@ -2653,7 +2652,7 @@ def upload(): if is_author: db_author = is_author else: - db_author = db.Authors(author, helper.get_sorted_author(author), "") + db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) #add language actually one value in list @@ -2705,4 +2704,4 @@ def start_gevent(): from gevent.wsgi import WSGIServer global gevent_server gevent_server = WSGIServer(('', ub.config.config_port), app) - gevent_server.serve_forever() \ No newline at end of file + gevent_server.serve_forever() From 395c6679b71b8fc4388860af7b528066b09721cd Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Wed, 29 Mar 2017 20:59:37 +0200 Subject: [PATCH 04/17] Fix #163 --- cps/web.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/cps/web.py b/cps/web.py index 9667c354..606dd5d2 100755 --- a/cps/web.py +++ b/cps/web.py @@ -32,6 +32,7 @@ from flask_babel import gettext as _ import requests import zipfile from werkzeug.security import generate_password_hash, check_password_hash +from werkzeug.datastructures import Headers from babel import Locale as LC from babel import negotiate_locale from babel import __version__ as babelVersion @@ -52,12 +53,9 @@ import db from shutil import move, copyfile from tornado.ioloop import IOLoop import shutil -import StringIO import gdriveutils import tempfile -import io import hashlib -import threading from tornado import version as tornadoVersion @@ -81,7 +79,6 @@ try: use_generic_pdf_cover = False except ImportError: use_generic_pdf_cover = True -from cgi import escape # Global variables gdrive_watch_callback_token='target=calibreweb-watch_files' @@ -825,18 +822,18 @@ def get_opds_download_link(book_id, format): if len(book.authors) > 0: file_name = book.authors[0].name + '_' + file_name file_name = helper.get_valid_filename(file_name) - headers={} + headers = Headers () headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf8')), format) app.logger.info (time.time()-startTime) startTime=time.time() if config.config_use_google_drive: + app.logger.info(time.time() - startTime) df=gdriveutils.getFileFromEbooksFolder(Gdrive.Instance().drive, book.path, data.name + "." + format) return do_gdrive_download(df, headers) else: - # file_name = helper.get_valid_filename(file_name) response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) - response.headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf8')), format) - return response + response.headers=headers + return response @app.route("/ajax/book/") @@ -1388,7 +1385,7 @@ def shutdown(): def update(): helper.updater_thread = helper.Updater() flash(_(u"Update done"), category="info") - return "" + return abort(404) @app.route("/search", methods=["GET"]) @@ -1639,7 +1636,7 @@ def get_download_link(book_id, format): if len(book.authors) > 0: file_name = book.authors[0].name + '_' + file_name file_name = helper.get_valid_filename(file_name) - headers={} + headers = Headers () try: headers["Content-Type"] = mimetypes.types_map['.' + format] except: @@ -1650,8 +1647,8 @@ def get_download_link(book_id, format): return do_gdrive_download(df, headers) else: response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) - response.headers["Content-Disposition"] = "attachment; filename*=UTF-8''%s.%s" % (quote(file_name.encode('utf-8')), format) - return response + response.headers=headers + return response else: abort(404) From 78067b87bc0b37373b1924948ba6de24857e5533 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Wed, 29 Mar 2017 21:43:55 +0200 Subject: [PATCH 05/17] Code cosmetics --- cps/db.py | 2 +- cps/fb2.py | 9 ++++----- cps/gdriveutils.py | 34 +++++++++++++++---------------- cps/helper.py | 2 +- cps/static/js/edit_books.js | 28 +++++++++++++------------- cps/static/js/get_meta.js | 32 ++++++++++++++--------------- cps/static/js/main.js | 40 ++++++++++++++++++------------------- cps/ub.py | 2 +- cps/web.py | 15 +++++--------- 9 files changed, 78 insertions(+), 86 deletions(-) diff --git a/cps/db.py b/cps/db.py index ccc055e9..f5fbcbbf 100755 --- a/cps/db.py +++ b/cps/db.py @@ -293,7 +293,7 @@ def setup_db(): engine = create_engine('sqlite:///'+ dbpath, echo=False, isolation_level="SERIALIZABLE") try: conn = engine.connect() - except Exception as e: + except Exception: content = ub.session.query(ub.Settings).first() content.config_calibre_dir = None content.db_configured = False diff --git a/cps/fb2.py b/cps/fb2.py index 8e3e39b8..65d44848 100644 --- a/cps/fb2.py +++ b/cps/fb2.py @@ -2,12 +2,11 @@ # -*- coding: utf-8 -*- from lxml import etree -import os import uploader -try: - from io import StringIO -except ImportError as e: - import StringIO +#try: +# from io import StringIO +#except ImportError: +# import StringIO def get_fb2_info(tmp_file_path, original_file_extension): diff --git a/cps/gdriveutils.py b/cps/gdriveutils.py index 55341419..f528f050 100644 --- a/cps/gdriveutils.py +++ b/cps/gdriveutils.py @@ -4,12 +4,11 @@ try: from apiclient import errors except ImportError: pass -import os, time +import os from ub import config from sqlalchemy import * -from sqlalchemy import exc from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import * @@ -165,7 +164,7 @@ def getFileFromEbooksFolder(drive, path, fileName): if drive.auth.access_token_expired: drive.auth.Refresh() if path: - sqlCheckPath=path if path[-1] =='/' else path + '/' + # sqlCheckPath=path if path[-1] =='/' else path + '/' folderId=getFolderId(path, drive) else: folderId=getEbooksFolderId(drive) @@ -273,20 +272,19 @@ def watchChange(drive, channel_id, channel_type, channel_address, drive=getDrive() if drive.auth.access_token_expired: drive.auth.Refresh() - """Watch for all changes to a user's Drive. - Args: - service: Drive API service instance. - channel_id: Unique string that identifies this channel. - channel_type: Type of delivery mechanism used for this channel. - channel_address: Address where notifications are delivered. - channel_token: An arbitrary string delivered to the target address with - each notification delivered over this channel. Optional. - channel_address: Address where notifications are delivered. Optional. - Returns: - The created channel if successful - Raises: - apiclient.errors.HttpError: if http request to create channel fails. - """ + # Watch for all changes to a user's Drive. + # Args: + # service: Drive API service instance. + # channel_id: Unique string that identifies this channel. + # channel_type: Type of delivery mechanism used for this channel. + # channel_address: Address where notifications are delivered. + # channel_token: An arbitrary string delivered to the target address with + # each notification delivered over this channel. Optional. + # channel_address: Address where notifications are delivered. Optional. + # Returns: + # The created channel if successful + # Raises: + # apiclient.errors.HttpError: if http request to create channel fails. body = { 'id': channel_id, 'type': channel_type, @@ -344,7 +342,7 @@ def stopChannel(drive, channel_id, resource_id): drive=getDrive() if drive.auth.access_token_expired: drive.auth.Refresh() - service=drive.auth.service + # service=drive.auth.service body = { 'id': channel_id, 'resourceId': resource_id diff --git a/cps/helper.py b/cps/helper.py index 1a89c86c..68f1a296 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -464,7 +464,7 @@ class Updater(threading.Thread): logging.getLogger('cps.web').debug("Delete file " + item_path) log_from_thread("Delete file " + item_path) os.remove(item_path) - except Exception as e: + except Exception: logging.getLogger('cps.web').debug("Could not remove:" + item_path) shutil.rmtree(source, ignore_errors=True) diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index 0d6665ba..e81a88b2 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -6,8 +6,8 @@ Takes a prefix, query typeahead callback, Bloodhound typeahead adapter and returns the completions it gets from the bloodhound engine prefixed. */ -function prefixed_source(prefix, query, cb, bh_adapter) { - bh_adapter(query, function(retArray){ +function prefixed_source(prefix, query, cb, bhAdapter) { + bhAdapter(query, function(retArray){ var matches = []; for (var i = 0; i < retArray.length; i++) { var obj = {name : prefix + retArray[i].name}; @@ -23,7 +23,7 @@ function get_path(){ } var authors = new Bloodhound({ - name: 'authors', + name: "authors", datumTokenizer: function(datum) { return [datum.name]; }, @@ -34,7 +34,7 @@ var authors = new Bloodhound({ }); function authors_source(query, cb) { - var bh_adapter = authors.ttAdapter(); + var bhAdapter = authors.ttAdapter(); var tokens = query.split("&"); var current_author = tokens[tokens.length-1].trim(); @@ -46,7 +46,7 @@ function authors_source(query, cb) { prefix += author + " & "; } - prefixed_source(prefix, current_author, cb, bh_adapter); + prefixed_source(prefix, current_author, cb, bhAdapter); } @@ -65,7 +65,7 @@ var promise = authors.initialize(); }); var series = new Bloodhound({ - name: 'series', + name: "series", datumTokenizer: function(datum) { return [datum.name]; }, @@ -94,7 +94,7 @@ var promise = series.initialize(); }); var tags = new Bloodhound({ - name: 'tags', + name: "tags", datumTokenizer: function(datum) { return [datum.name]; }, @@ -104,12 +104,12 @@ var tags = new Bloodhound({ return tokens }, remote: { - url: get_path()+'/get_tags_json?q=%QUERY' + url: get_path()+"/get_tags_json?q=%QUERY" } }); function tag_source(query, cb) { - var bh_adapter = tags.ttAdapter(); + var bhAdapter = tags.ttAdapter(); var tokens = query.split(","); var current_tag = tokens[tokens.length-1].trim(); @@ -121,7 +121,7 @@ function tag_source(query, cb) { prefix += tag + ", "; } - prefixed_source(prefix, current_tag, cb, bh_adapter); + prefixed_source(prefix, current_tag, cb, bhAdapter); } var promise = tags.initialize(); @@ -138,7 +138,7 @@ var promise = tags.initialize(); }); var languages = new Bloodhound({ - name: 'languages', + name: "languages", datumTokenizer: function(datum) { return [datum.name]; }, @@ -155,10 +155,10 @@ var languages = new Bloodhound({ }); function language_source(query, cb) { - var bh_adapter = languages.ttAdapter(); + var bhAdapter = languages.ttAdapter(); var tokens = query.split(","); - var current_language = tokens[tokens.length-1].trim(); + var currentLanguage = tokens[tokens.length-1].trim(); tokens.splice(tokens.length-1, 1); // remove last element var prefix = ""; @@ -167,7 +167,7 @@ function language_source(query, cb) { prefix += tag + ", "; } - prefixed_source(prefix, current_language, cb, bh_adapter); + prefixed_source(prefix, currentLanguage, cb, bhAdapter); } var promise = languages.initialize(); diff --git a/cps/static/js/get_meta.js b/cps/static/js/get_meta.js index 2cec1252..e58e54bf 100644 --- a/cps/static/js/get_meta.js +++ b/cps/static/js/get_meta.js @@ -7,7 +7,7 @@ $(document).ready(function () { var msg = i18n_msg; - var douban = 'https://api.douban.com'; + var douban = "https://api.douban.com"; var db_search = '/v2/book/search'; var db_get_info = '/v2/book/'; var db_get_info_by_isbn = '/v2/book/isbn/ '; @@ -23,7 +23,7 @@ $(document).ready(function () { var show_flag = 0; String.prototype.replaceAll = function (s1, s2) {   return this.replace(new RegExp(s1, "gm"), s2);   - } + }; gg_search_book = function (title) { title = title.replaceAll(/\s+/, '+'); @@ -45,38 +45,38 @@ $(document).ready(function () { get_meta = function (source, id) { var meta; - if (source == 'google') {; + if (source == "google") { meta = gg_results[id]; - $('#description').val(meta.volumeInfo.description); - $('#bookAuthor').val(meta.volumeInfo.authors.join(' & ')); - $('#book_title').val(meta.volumeInfo.title); + $("#description").val(meta.volumeInfo.description); + $("#bookAuthor").val(meta.volumeInfo.authors.join(' & ')); + $("#book_title").val(meta.volumeInfo.title); if (meta.volumeInfo.categories) { var tags = meta.volumeInfo.categories.join(','); - $('#tags').val(tags); + $("#tags").val(tags); } if (meta.volumeInfo.averageRating) { - $('#rating').val(Math.round(meta.volumeInfo.averageRating)); + $("#rating").val(Math.round(meta.volumeInfo.averageRating)); } return; } - if (source == 'douban') { + if (source == "douban") { meta = db_results[id]; - $('#description').val(meta.summary); - $('#bookAuthor').val(meta.author.join(' & ')); - $('#book_title').val(meta.title); + $("#description").val(meta.summary); + $("#bookAuthor").val(meta.author.join(' & ')); + $("#book_title").val(meta.title); var tags = ''; for (var i = 0; i < meta.tags.length; i++) { tags = tags + meta.tags[i].title + ','; } - $('#tags').val(tags); - $('#rating').val(Math.round(meta.rating.average / 2)); + $("#tags").val(tags); + $("#rating").val(Math.round(meta.rating.average / 2)); return; } } do_search = function (keyword) { show_flag = 0; - $('#meta-info').text(msg.loading); - var keyword = $('#keyword').val(); + $("#meta-info").text(msg.loading); + var keyword = $("#keyword").val(); if (keyword) { db_search_book(keyword); gg_search_book(keyword); diff --git a/cps/static/js/main.js b/cps/static/js/main.js index 7a498f36..c18f85e5 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -5,11 +5,11 @@ var updateText; $(function() { $('.discover .row').isotope({ // options - itemSelector : '.book', - layoutMode : 'fitRows' + itemSelector : ".book", + layoutMode : "fitRows" }); - $('.load-more .row').infinitescroll({ + $(".load-more .row").infinitescroll({ debug: false, navSelector : ".pagination", // selector for the paged navigation (it will be hidden) @@ -20,13 +20,13 @@ $(function() { extraScrollPx: 300, // selector for all items you'll retrieve }, function(data){ - $('.load-more .row').isotope( 'appended', $(data), null ); + $(".load-more .row").isotope( 'appended', $(data), null ); }); $('#sendbtn').click(function(){ var $this = $(this); - $this.text('Please wait...'); - $this.addClass('disabled'); + $this.text("Please wait..."); + $this.addClass("disabled"); }); $("#restart").click(function() { $.ajax({ @@ -57,10 +57,10 @@ $(function() { success: function(data) { $("#check_for_update").html(button_text); if (data.status == true) { - $("#check_for_update").addClass('hidden'); - $("#perform_update").removeClass('hidden'); - $("#update_info").removeClass('hidden'); - $("#update_info").find('span').html(data.commit); + $("#check_for_update").addClass("hidden"); + $("#perform_update").removeClass("hidden"); + $("#update_info").removeClass("hidden"); + $("#update_info").find("span").html(data.commit); } } }); @@ -73,14 +73,14 @@ $(function() { }); }); $("#perform_update").click(function() { - $('#spinner2').show(); + $("#spinner2").show(); $.ajax({ type: "POST", dataType: 'json', data: { start: "True"}, url: window.location.pathname+"/../../get_updater_status", success: function(data) { - updateText=data.text + updateText=data.text; $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); console.log(data.status); updateTimerID=setInterval(updateTimer, 2000);} @@ -90,8 +90,8 @@ $(function() { function restartTimer() { - $('#spinner').hide(); - $('#RestartDialog').modal('hide'); + $("#spinner").hide(); + $("#RestartDialog").modal("hide"); } function updateTimer() { @@ -110,13 +110,13 @@ function updateTimer() { } }, error: function() { - console.log('Done'); + // console.log('Done'); clearInterval(updateTimerID); - $('#spinner2').hide(); + $("#spinner2").hide(); $("#UpdateprogressDialog #Updatecontent").html(updateText[7]); - $('#UpdateprogressDialog #updateFinished').removeClass('hidden'); - $("#check_for_update").removeClass('hidden'); - $("#perform_update").addClass('hidden'); + $("#UpdateprogressDialog #updateFinished").removeClass("hidden"); + $("#check_for_update").removeClass("hidden"); + $("#perform_update").addClass("hidden"); }, timeout:2000 }); @@ -124,5 +124,5 @@ function updateTimer() { $(window).resize(function(event) { - $('.discover .row').isotope('reLayout'); + $(".discover .row").isotope("reLayout"); }); diff --git a/cps/ub.py b/cps/ub.py index 370b373a..f2dae60b 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -506,7 +506,7 @@ def create_anonymous_user(): session.add(user) try: session.commit() - except Exception as e: + except Exception: session.rollback() pass diff --git a/cps/web.py b/cps/web.py index 606dd5d2..cf259af9 100755 --- a/cps/web.py +++ b/cps/web.py @@ -385,7 +385,7 @@ def shortentitle_filter(s): def mimetype_filter(val): try: s = mimetypes.types_map['.' + val] - except Exception as e: + except Exception: s = 'application/octet-stream' return s @@ -558,10 +558,6 @@ def before_request(): @app.route("/opds") @requires_basic_auth_if_no_ano def feed_index(): - if current_user.filter_language() != "all": - filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) - else: - filter = True xml = render_title_template('index.xml') response = make_response(xml) response.headers["Content-Type"] = "application/xml" @@ -792,7 +788,6 @@ def partial(total_byte_len, part_size_limit): return s def do_gdrive_download(df, headers): - startTime=time.time() total_size = int(df.metadata.get('fileSize')) download_url = df.metadata.get('downloadUrl') s = partial(total_size, 1024 * 1024) # I'm downloading BIG files, so 100M chunk size is fine for me @@ -832,7 +827,7 @@ def get_opds_download_link(book_id, format): return do_gdrive_download(df, headers) else: response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) - response.headers=headers + response.headers=headers return response @@ -911,7 +906,7 @@ def get_updater_status(): elif request.method == "GET": try: status['status']=helper.updater_thread.get_update_status() - except Exception as e: + except Exception: status['status'] = 7 return json.dumps(status) @@ -1304,7 +1299,7 @@ def revoke_watch_gdrive(): last_watch_response=config.config_google_drive_watch_changes_response if last_watch_response: try: - response=gdriveutils.stopChannel(Gdrive.Instance().drive, last_watch_response['id'], last_watch_response['resourceId']) + gdriveutils.stopChannel(Gdrive.Instance().drive, last_watch_response['id'], last_watch_response['resourceId']) except HttpError: pass settings = ub.session.query(ub.Settings).first() @@ -1481,7 +1476,7 @@ def advanced_search(): def get_cover_via_gdrive(cover_path): df=gdriveutils.getFileFromEbooksFolder(Gdrive.Instance().drive, cover_path, 'cover.jpg') if not gdriveutils.session.query(gdriveutils.PermissionAdded).filter(gdriveutils.PermissionAdded.gdrive_id == df['id']).first(): - permissions=df.GetPermissions() + df.GetPermissions() df.InsertPermission({ 'type': 'anyone', 'value': 'anyone', From 986f40b80a02b561588794af62a3e03bab44b445 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Thu, 30 Mar 2017 21:17:18 +0200 Subject: [PATCH 06/17] Code cosmetics --- cps/db.py | 2 +- cps/epub.py | 4 +-- cps/helper.py | 6 ++-- cps/static/js/edit_books.js | 43 +++++++++++++----------- cps/static/js/get_meta.js | 65 ++++++++++++++++++------------------ cps/static/js/main.js | 29 ++++++++-------- cps/static/js/shelforder.js | 4 +-- cps/templates/book_edit.html | 2 +- cps/ub.py | 3 +- 9 files changed, 80 insertions(+), 78 deletions(-) diff --git a/cps/db.py b/cps/db.py index f5fbcbbf..c6e069e5 100755 --- a/cps/db.py +++ b/cps/db.py @@ -264,7 +264,7 @@ class Books(Base): class Custom_Columns(Base): __tablename__ = 'custom_columns' - + id = Column(Integer, primary_key=True) label = Column(String) name = Column(String) diff --git a/cps/epub.py b/cps/epub.py index 446efe9b..8d0b2817 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -57,7 +57,7 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): epub_metadata['description'] = "" if epub_metadata['language'] == "Unknown": - epub_metadata['language'] == "" + epub_metadata['language'] = "" else: lang = epub_metadata['language'].split('-', 1)[0].lower() if len(lang) == 2: @@ -87,7 +87,7 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): coverfile = extractCover(zip, filename, "", tmp_file_path) else: coverfile = extractCover(zip, coversection[0], coverpath, tmp_file_path) - + if epub_metadata['title'] is None: title = original_file_name else: diff --git a/cps/helper.py b/cps/helper.py index 68f1a296..577fa826 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -277,12 +277,12 @@ def update_dir_stucture(book_id, calibrepath): db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort) book = db.session.query(db.Books).filter(db.Books.id == book_id).first() path = os.path.join(calibrepath, book.path)#.replace('/',os.path.sep)).replace('\\',os.path.sep) - + authordir = book.path.split('/')[0] new_authordir = get_valid_filename(book.authors[0].name) titledir = book.path.split('/')[1] new_titledir = get_valid_filename(book.title) + " (" + str(book_id) + ")" - + if titledir != new_titledir: new_title_path = os.path.join(os.path.dirname(path), new_titledir) os.rename(path, new_title_path) @@ -348,7 +348,7 @@ class Updater(threading.Thread): if web.gevent_server: web.gevent_server.stop() else: - # stop tornado server + # stop tornado server server = IOLoop.instance() server.add_callback(server.stop) self.status=7 diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index e81a88b2..12199c0d 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -17,8 +17,8 @@ function prefixed_source(prefix, query, cb, bhAdapter) { }); } function get_path(){ - var jsFileLocation = $('script[src*=edit_books]').attr('src'); // the js file path - jsFileLocation = jsFileLocation.replace('/static/js/edit_books.js', ''); // the js folder path + var jsFileLocation = $("script[src*=edit_books]").attr("src"); // the js file path + jsFileLocation = jsFileLocation.replace("/static/js/edit_books.js", ''); // the js folder path return jsFileLocation; } @@ -29,7 +29,7 @@ var authors = new Bloodhound({ }, queryTokenizer: Bloodhound.tokenizers.whitespace, remote: { - url: get_path()+'/get_authors_json?q=%QUERY' + url: get_path()+"/get_authors_json?q=%QUERY" } }); @@ -58,7 +58,8 @@ var promise = authors.initialize(); highlight: true, minLength: 1, hint: true }, { - name: 'authors', displayKey: 'name', + name: "authors", + displayKey: "name", source: authors_source } ) @@ -73,10 +74,9 @@ var series = new Bloodhound({ return [query]; }, remote: { - url: get_path()+'/get_series_json?q=', + url: get_path()+"/get_series_json?q=", replace: function(url, query) { - url_query = url+encodeURIComponent(query); - return url_query; + return url+encodeURIComponent(query); } } }); @@ -87,7 +87,8 @@ var promise = series.initialize(); highlight: true, minLength: 0, hint: true }, { - name: 'series', displayKey: 'name', + name: "series", + displayKey: "name", source: series.ttAdapter() } ) @@ -99,9 +100,9 @@ var tags = new Bloodhound({ return [datum.name]; }, queryTokenizer: function(query) { - tokens = query.split(","); + var tokens = query.split(","); tokens = [tokens[tokens.length-1].trim()]; - return tokens + return tokens; }, remote: { url: get_path()+"/get_tags_json?q=%QUERY" @@ -131,7 +132,8 @@ var promise = tags.initialize(); highlight: true, minLength: 0, hint: true }, { - name: 'tags', displayKey: 'name', + name: "tags", + displayKey: "name", source: tag_source } ) @@ -146,7 +148,7 @@ var languages = new Bloodhound({ return [query]; }, remote: { - url: get_path()+'/get_languages_json?q=', + url: get_path()+"/get_languages_json?q=", replace: function(url, query) { url_query = url+encodeURIComponent(query); return url_query; @@ -177,23 +179,24 @@ var promise = languages.initialize(); highlight: true, minLength: 0, hint: true }, { - name: 'languages', displayKey: 'name', + name: "languages", + displayKey: "name", source: language_source } ) }); -$('form').on('change input typeahead:selected', function(data){ - form = $('form').serialize(); +$("form").on("change input typeahead:selected", function(data){ + var form = $("form").serialize(); $.getJSON( get_path()+"/get_matching_tags", form, function( data ) { - $('.tags_click').each(function() { - if ($.inArray(parseInt($(this).children('input').first().val(), 10), data.tags) == -1 ) { - if (!($(this).hasClass('active'))) { - $(this).addClass('disabled'); + $(".tags_click").each(function() { + if ($.inArray(parseInt($(this).children("input").first().val(), 10), data.tags) === -1 ) { + if (!($(this).hasClass("active"))) { + $(this).addClass("disabled"); } } else { - $(this).removeClass('disabled'); + $(this).removeClass("disabled"); } }); }); diff --git a/cps/static/js/get_meta.js b/cps/static/js/get_meta.js index e58e54bf..f9fa5b60 100644 --- a/cps/static/js/get_meta.js +++ b/cps/static/js/get_meta.js @@ -6,33 +6,33 @@ */ $(document).ready(function () { - var msg = i18n_msg; + var msg = i18nMsg; var douban = "https://api.douban.com"; - var db_search = '/v2/book/search'; - var db_get_info = '/v2/book/'; - var db_get_info_by_isbn = '/v2/book/isbn/ '; - var db_done = false; + var dbSearch = "/v2/book/search"; + var db_get_info = "/v2/book/"; + var db_get_info_by_isbn = "/v2/book/isbn/ "; + var dbDone = false; - var google = 'https://www.googleapis.com/'; - var gg_search = '/books/v1/volumes'; - var gg_get_info = '/books/v1/volumes/'; + var google = "https://www.googleapis.com/"; + var gg_search = "/books/v1/volumes"; + var gg_get_info = "/books/v1/volumes/"; var gg_done = false; var db_results = []; var gg_results = []; var show_flag = 0; String.prototype.replaceAll = function (s1, s2) {   - return this.replace(new RegExp(s1, "gm"), s2);   + return this.replace(new RegExp(s1, "gm"), s2); }; - gg_search_book = function (title) { - title = title.replaceAll(/\s+/, '+'); - var url = google + gg_search + '?q=' + title; + function gg_search_book (title) { + title = title.replaceAll(/\s+/, "+"); + var url = google + gg_search + "?q=" + title; $.ajax({ - url: url, + url, type: "GET", dataType: "jsonp", - jsonp: 'callback', + jsonp: "callback", success: function (data) { gg_results = data.items; }, @@ -43,15 +43,16 @@ $(document).ready(function () { }); } - get_meta = function (source, id) { + function get_meta (source, id) { var meta; - if (source == "google") { + var tags; + if (source === "google") { meta = gg_results[id]; $("#description").val(meta.volumeInfo.description); - $("#bookAuthor").val(meta.volumeInfo.authors.join(' & ')); + $("#bookAuthor").val(meta.volumeInfo.authors.join(" & ")); $("#book_title").val(meta.volumeInfo.title); if (meta.volumeInfo.categories) { - var tags = meta.volumeInfo.categories.join(','); + tags = meta.volumeInfo.categories.join(","); $("#tags").val(tags); } if (meta.volumeInfo.averageRating) { @@ -59,10 +60,10 @@ $(document).ready(function () { } return; } - if (source == "douban") { + if (source === "douban") { meta = db_results[id]; $("#description").val(meta.summary); - $("#bookAuthor").val(meta.author.join(' & ')); + $("#bookAuthor").val(meta.author.join(" & ")); $("#book_title").val(meta.title); var tags = ''; for (var i = 0; i < meta.tags.length; i++) { @@ -84,7 +85,7 @@ $(document).ready(function () { } db_search_book = function (title) { - var url = douban + db_search + '?q=' + title + '&fields=all&count=10'; + var url = douban + dbSearch + '?q=' + title + '&fields=all&count=10'; $.ajax({ url: url, type: "GET", @@ -97,18 +98,18 @@ $(document).ready(function () { $('#meta-info').html('

'+ msg.search_error+'!

'); }, complete: function () { - db_done = true; + dbDone = true; show_result(); } }); } - show_result = function () { + function show_result () { show_flag++; if (show_flag == 1) { $('#meta-info').html('
    '); } - if (gg_done && db_done) { + if (gg_done && dbDone) { if (!gg_results && !db_results) { $('#meta-info').html('

    '+ msg.no_result +'

    '); return; @@ -140,7 +141,7 @@ $(document).ready(function () { } gg_done = false; } - if (db_done && db_results.length > 0) { + if (dbDone && db_results.length > 0) { for (var i = 0; i < db_results.length; i++) { var book = db_results[i]; var book_html = '
  • ' + @@ -155,24 +156,24 @@ $(document).ready(function () { '

    ' + msg.description + ':' + book.summary + '

    ' + '

    ' + msg.source + ':Douban Books

    ' + '' + - '
  • '; + ""; $("#book-list").append(book_html); } - db_done = false; + dbDone = false; } } - $('#do-search').click(function () { - var keyword = $('#keyword').val(); + $("#do-search").click(function () { + var keyword = $("#keyword").val(); if (keyword) { do_search(keyword); } }); - $('#get_meta').click(function () { - var book_title = $('#book_title').val(); + $("#get_meta").click(function () { + var book_title = $("#book_title").val(); if (book_title) { - $('#keyword').val(book_title); + $("#keyword").val(book_title); do_search(book_title); } }); diff --git a/cps/static/js/main.js b/cps/static/js/main.js index c18f85e5..c20bd44a 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -3,7 +3,7 @@ var updateTimerID; var updateText; $(function() { - $('.discover .row').isotope({ + $(".discover .row").isotope({ // options itemSelector : ".book", layoutMode : "fitRows" @@ -20,28 +20,28 @@ $(function() { extraScrollPx: 300, // selector for all items you'll retrieve }, function(data){ - $(".load-more .row").isotope( 'appended', $(data), null ); + $(".load-more .row").isotope( "appended", $(data), null ); }); - $('#sendbtn').click(function(){ + $("#sendbtn").click(function(){ var $this = $(this); $this.text("Please wait..."); $this.addClass("disabled"); }); $("#restart").click(function() { $.ajax({ - dataType: 'json', + dataType: "json", url: window.location.pathname+"/../../shutdown", data: {"parameter":0}, success: function(data) { - $('#spinner').show(); + $("#spinner").show(); displaytext=data.text; setTimeout(restartTimer, 3000);} }); }); $("#shutdown").click(function() { $.ajax({ - dataType: 'json', + dataType: "json", url: window.location.pathname+"/../../shutdown", data: {"parameter":1}, success: function(data) { @@ -50,13 +50,13 @@ $(function() { }); $("#check_for_update").click(function() { var button_text = $("#check_for_update").html(); - $("#check_for_update").html('...'); + $("#check_for_update").html("..."); $.ajax({ - dataType: 'json', + dataType: "json", url: window.location.pathname+"/../../get_update_status", success: function(data) { $("#check_for_update").html(button_text); - if (data.status == true) { + if (data.status === true) { $("#check_for_update").addClass("hidden"); $("#perform_update").removeClass("hidden"); $("#update_info").removeClass("hidden"); @@ -82,13 +82,12 @@ $(function() { success: function(data) { updateText=data.text; $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); - console.log(data.status); + // console.log(data.status); updateTimerID=setInterval(updateTimer, 2000);} }); }); }); - function restartTimer() { $("#spinner").hide(); $("#RestartDialog").modal("hide"); @@ -103,10 +102,10 @@ function updateTimer() { $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); if (data.status >6){ clearInterval(updateTimerID); - $('#spinner2').hide(); - $('#UpdateprogressDialog #updateFinished').removeClass('hidden'); - $("#check_for_update").removeClass('hidden'); - $("#perform_update").addClass('hidden'); + $("#spinner2").hide(); + $("#UpdateprogressDialog #updateFinished").removeClass("hidden"); + $("#check_for_update").removeClass("hidden"); + $("#perform_update").addClass("hidden"); } }, error: function() { diff --git a/cps/static/js/shelforder.js b/cps/static/js/shelforder.js index ea970f9a..3102f080 100644 --- a/cps/static/js/shelforder.js +++ b/cps/static/js/shelforder.js @@ -1,4 +1,4 @@ -Sortable.create(sortTrue, { +var sortable = Sortable.create(sortTrue, { group: "sorting", sort: true }); @@ -9,7 +9,7 @@ function sendData(path){ var maxElements; var tmp=[]; - elements=Sortable.utils.find(sortTrue,"div"); + elements=sortable.utils.find(sortTrue,"div"); maxElements=elements.length; var form = document.createElement("form"); diff --git a/cps/templates/book_edit.html b/cps/templates/book_edit.html index 474cfaae..165512c7 100644 --- a/cps/templates/book_edit.html +++ b/cps/templates/book_edit.html @@ -138,7 +138,7 @@ {% block js %}