From 14b6202eecbcdb80d5319996ff6062b1a6300d18 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Sat, 8 Jun 2019 08:26:51 +0200 Subject: [PATCH] Code cosmetics Fixes func in helper,web Fixes for pdf reader fixes for calling from another folder renamed to calibreweb for importing in python caller script --- cps.py | 3 +- cps/admin.py | 2 +- cps/constants.py | 7 +- cps/db.py | 5 +- cps/editbooks.py | 37 +----- cps/helper.py | 20 +-- cps/logger.py | 2 +- cps/shelf.py | 8 +- cps/static/js/archive/archive.js | 47 ++++--- cps/static/js/archive/rarvm.js | 218 ++++++++++++++++--------------- cps/static/js/archive/unrar.js | 121 ++++++++--------- cps/static/js/archive/untar.js | 23 ++-- cps/static/js/archive/unzip.js | 36 +++-- cps/static/js/filter_list.js | 41 +++--- cps/static/js/io.js | 10 +- cps/static/js/kthoom.js | 63 ++++----- cps/static/js/table.js | 6 +- cps/static/js/uploadprogress.js | 11 +- cps/templates/readpdf.html | 2 +- cps/templates/shelf.html | 2 +- cps/web.py | 14 +- cps/worker.py | 1 + setup.cfg | 2 +- 23 files changed, 328 insertions(+), 353 deletions(-) diff --git a/cps.py b/cps.py index f71c60c4..c5ac1e7d 100755 --- a/cps.py +++ b/cps.py @@ -23,7 +23,8 @@ import os # Insert local directories into path -sys.path.append(os.path.join(sys.path[0], 'vendor')) +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'vendor')) from cps import create_app diff --git a/cps/admin.py b/cps/admin.py index 85088336..39eb8abb 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -204,7 +204,7 @@ def view_configuration(): content.config_default_role |= constants.ROLE_EDIT_SHELFS val = 0 - for key,v in to_save.items(): + for key, __ in to_save.items(): if key.startswith('show'): val |= int(key[5:]) content.config_default_show = val diff --git a/cps/constants.py b/cps/constants.py index ed073644..88ae7c13 100644 --- a/cps/constants.py +++ b/cps/constants.py @@ -23,7 +23,8 @@ import os from collections import namedtuple -BASE_DIR = sys.path[0] +# Base dir is parent of current file, necessary if called from different folder +BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),os.pardir)) STATIC_DIR = os.path.join(BASE_DIR, 'cps', 'static') TEMPLATES_DIR = os.path.join(BASE_DIR, 'cps', 'templates') TRANSLATIONS_DIR = os.path.join(BASE_DIR, 'cps', 'translations') @@ -104,9 +105,7 @@ def has_flag(value, bit_flag): return bit_flag == (bit_flag & (value or 0)) -""" - :rtype: BookMeta -""" +# :rtype: BookMeta BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, description, tags, series, ' 'series_id, languages') diff --git a/cps/db.py b/cps/db.py index ab9931da..2cd959ad 100755 --- a/cps/db.py +++ b/cps/db.py @@ -342,7 +342,10 @@ def setup_db(): try: if not os.path.exists(dbpath): raise - engine = create_engine('sqlite:///' + dbpath, echo=False, isolation_level="SERIALIZABLE", connect_args={'check_same_thread': False}) + engine = create_engine('sqlite:///' + dbpath, + echo=False, + isolation_level="SERIALIZABLE", + connect_args={'check_same_thread': False}) conn = engine.connect() except Exception: content = ub.session.query(ub.Settings).first() diff --git a/cps/editbooks.py b/cps/editbooks.py index 15ee1661..e15011fb 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -362,42 +362,6 @@ def upload_single_file(request, book, book_id): "" + uploadText + "") -def upload_single_file(request, book, book_id): - if 'btn-upload-cover' in request.files: - requested_file = request.files['btn-upload-cover'] - # check for empty request - if requested_file.filename != '': - file_ext = requested_file.filename.rsplit('.', 1)[-1].lower() - filepath = os.path.normpath(os.path.join(config.config_calibre_dir, book.path)) - saved_filename = os.path.join(filepath, 'cover.' + file_ext) - - # check if file path exists, otherwise create it, copy file to calibre path and delete temp file - if not os.path.exists(filepath): - try: - os.makedirs(filepath) - except OSError: - flash(_(u"Failed to create path for cover %(path)s (Permission denied).", cover=filepath), - category="error") - return redirect(url_for('show_book', book_id=book.id)) - try: - requested_file.save(saved_filename) - # im=Image.open(saved_filename) - book.has_cover = 1 - except OSError: - flash(_(u"Failed to store cover-file %(cover)s.", cover=saved_filename), category="error") - return redirect(url_for('web.show_book', book_id=book.id)) - except IOError: - flash(_(u"Cover-file is not a valid image file" % saved_filename), category="error") - return redirect(url_for('web.show_book', book_id=book.id)) - if helper.save_cover(requested_file, book.path) is True: - return True - else: - # ToDo Message not always coorect - flash(_(u"Cover is not a supported imageformat (jpg/png/webp), can't save"), category="error") - return False - return None - - def upload_cover(request, book): if 'btn-upload-cover' in request.files: requested_file = request.files['btn-upload-cover'] @@ -411,6 +375,7 @@ def upload_cover(request, book): return False return None + @editbook.route("/admin/book/", methods=['GET', 'POST']) @login_required_if_no_ano @edit_required diff --git a/cps/helper.py b/cps/helper.py index cc309780..eb5374bc 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -491,12 +491,12 @@ def save_cover_from_filestorage(filepath, saved_filename, img): return False try: img.save(os.path.join(filepath, saved_filename)) - except OSError: - log.error(u"Failed to store cover-file") - return False except IOError: log.error(u"Cover-file is not a valid image file") return False + except OSError: + log.error(u"Failed to store cover-file") + return False return True @@ -703,7 +703,7 @@ def fill_indexpage(page, database, db_filter, order, *join): def get_typeahead(database, query, replace=('','')): db.session.connection().connection.connection.create_function("lower", 1, lcase) - entries = db.session.query(database).filter(db.func.lower(database.name).ilike("%" + query + "%")).all() + entries = db.session.query(database).filter(func.lower(database.name).ilike("%" + query + "%")).all() json_dumps = json.dumps([dict(name=r.name.replace(*replace)) for r in entries]) return json_dumps @@ -713,16 +713,16 @@ def get_search_results(term): q = list() authorterms = re.split("[, ]+", term) for authorterm in authorterms: - q.append(db.Books.authors.any(db.func.lower(db.Authors.name).ilike("%" + authorterm + "%"))) + q.append(db.Books.authors.any(func.lower(db.Authors.name).ilike("%" + authorterm + "%"))) - db.Books.authors.any(db.func.lower(db.Authors.name).ilike("%" + term + "%")) + db.Books.authors.any(func.lower(db.Authors.name).ilike("%" + term + "%")) return db.session.query(db.Books).filter(common_filters()).filter( - or_(db.Books.tags.any(db.func.lower(db.Tags.name).ilike("%" + term + "%")), - db.Books.series.any(db.func.lower(db.Series.name).ilike("%" + term + "%")), + or_(db.Books.tags.any(func.lower(db.Tags.name).ilike("%" + term + "%")), + db.Books.series.any(func.lower(db.Series.name).ilike("%" + term + "%")), db.Books.authors.any(and_(*q)), - db.Books.publishers.any(db.func.lower(db.Publishers.name).ilike("%" + term + "%")), - db.func.lower(db.Books.title).ilike("%" + term + "%") + db.Books.publishers.any(func.lower(db.Publishers.name).ilike("%" + term + "%")), + func.lower(db.Books.title).ilike("%" + term + "%") )).all() def get_unique_other_books(library_books, author_books): diff --git a/cps/logger.py b/cps/logger.py index d94767b4..1b7bb3ec 100644 --- a/cps/logger.py +++ b/cps/logger.py @@ -121,5 +121,5 @@ class StderrLogger(object): self.buffer = '' else: self.buffer += message - except: + except Exception: self.logger.debug("Logging Error") diff --git a/cps/shelf.py b/cps/shelf.py index 392c05b1..a34dbfed 100644 --- a/cps/shelf.py +++ b/cps/shelf.py @@ -266,10 +266,10 @@ def delete_shelf(shelf_id): return redirect(url_for('web.index')) # @shelf.route("/shelfdown/") -@shelf.route("/shelf/", defaults={'type': 1}) -@shelf.route("/shelf//") +@shelf.route("/shelf/", defaults={'shelf_type': 1}) +@shelf.route("/shelf//") @login_required -def show_shelf(type, shelf_id): +def show_shelf(shelf_type, shelf_id): if current_user.is_anonymous: shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.is_public == 1, ub.Shelf.id == shelf_id).first() else: @@ -280,7 +280,7 @@ def show_shelf(type, shelf_id): result = list() # user is allowed to access shelf if shelf: - page = "shelf.html" if type == 1 else 'shelfdown.html' + page = "shelf.html" if shelf_type == 1 else 'shelfdown.html' books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by( ub.BookShelf.order.asc()).all() diff --git a/cps/static/js/archive/archive.js b/cps/static/js/archive/archive.js index 0694ea22..331997d9 100644 --- a/cps/static/js/archive/archive.js +++ b/cps/static/js/archive/archive.js @@ -8,7 +8,7 @@ * Copyright(c) 2011 Google Inc. */ -/* global bitjs */ +/* global bitjs, Uint8Array */ var bitjs = bitjs || {}; bitjs.archive = bitjs.archive || {}; @@ -17,7 +17,7 @@ bitjs.archive = bitjs.archive || {}; // =========================================================================== // Stolen from Closure because it's the best way to do Java-like inheritance. - bitjs.base = function(me, opt_methodName, var_args) { + bitjs.base = function(me, optMethodName, varArgs) { var caller = arguments.callee.caller; if (caller.superClass_) { // This is a constructor. Call the superclass constructor. @@ -28,10 +28,10 @@ bitjs.archive = bitjs.archive || {}; var args = Array.prototype.slice.call(arguments, 2); var foundCaller = false; for (var ctor = me.constructor; ctor; ctor = ctor.superClass_ && ctor.superClass_.constructor) { - if (ctor.prototype[opt_methodName] === caller) { + if (ctor.prototype[optMethodName] === caller) { foundCaller = true; } else if (foundCaller) { - return ctor.prototype[opt_methodName].apply(me, args); + return ctor.prototype[optMethodName].apply(me, args); } } @@ -39,8 +39,8 @@ bitjs.archive = bitjs.archive || {}; // then one of two things happened: // 1) The caller is an instance method. // 2) This method was not called by the right caller. - if (me[opt_methodName] === caller) { - return me.constructor.prototype[opt_methodName].apply(me, args); + if (me[optMethodName] === caller) { + return me.constructor.prototype[optMethodName].apply(me, args); } else { throw Error( "goog.base called from a method of one name " + @@ -49,10 +49,10 @@ bitjs.archive = bitjs.archive || {}; }; bitjs.inherits = function(childCtor, parentCtor) { /** @constructor */ - function tempCtor() {}; - tempCtor.prototype = parentCtor.prototype; + function TempCtor() {} + TempCtor.prototype = parentCtor.prototype; childCtor.superClass_ = parentCtor.prototype; - childCtor.prototype = new tempCtor(); + childCtor.prototype = new TempCtor(); childCtor.prototype.constructor = childCtor; }; // =========================================================================== @@ -188,10 +188,10 @@ bitjs.archive = bitjs.archive || {}; * Base class for all Unarchivers. * * @param {ArrayBuffer} arrayBuffer The Array Buffer. - * @param {string} opt_pathToBitJS Optional string for where the BitJS files are located. + * @param {string} optPathToBitJS Optional string for where the BitJS files are located. * @constructor */ - bitjs.archive.Unarchiver = function(arrayBuffer, opt_pathToBitJS) { + bitjs.archive.Unarchiver = function(arrayBuffer, optPathToBitJS) { /** * The ArrayBuffer object. * @type {ArrayBuffer} @@ -204,7 +204,7 @@ bitjs.archive = bitjs.archive || {}; * @type {string} * @private */ - this.pathToBitJS_ = opt_pathToBitJS || "/"; + this.pathToBitJS_ = optPathToBitJS || "/"; /** * A map from event type to an array of listeners. @@ -319,8 +319,8 @@ bitjs.archive = bitjs.archive || {}; * @extends {bitjs.archive.Unarchiver} * @constructor */ - bitjs.archive.Unzipper = function(arrayBuffer, opt_pathToBitJS) { - bitjs.base(this, arrayBuffer, opt_pathToBitJS); + bitjs.archive.Unzipper = function(arrayBuffer, optPathToBitJS) { + bitjs.base(this, arrayBuffer, optPathToBitJS); }; bitjs.inherits(bitjs.archive.Unzipper, bitjs.archive.Unarchiver); bitjs.archive.Unzipper.prototype.getScriptFileName = function() { @@ -332,8 +332,8 @@ bitjs.archive = bitjs.archive || {}; * @extends {bitjs.archive.Unarchiver} * @constructor */ - bitjs.archive.Unrarrer = function(arrayBuffer, opt_pathToBitJS) { - bitjs.base(this, arrayBuffer, opt_pathToBitJS); + bitjs.archive.Unrarrer = function(arrayBuffer, optPathToBitJS) { + bitjs.base(this, arrayBuffer, optPathToBitJS); }; bitjs.inherits(bitjs.archive.Unrarrer, bitjs.archive.Unarchiver); bitjs.archive.Unrarrer.prototype.getScriptFileName = function() { @@ -345,8 +345,8 @@ bitjs.archive = bitjs.archive || {}; * @extends {bitjs.archive.Unarchiver} * @constructor */ - bitjs.archive.Untarrer = function(arrayBuffer, opt_pathToBitJS) { - bitjs.base(this, arrayBuffer, opt_pathToBitJS); + bitjs.archive.Untarrer = function(arrayBuffer, optPathToBitJS) { + bitjs.base(this, arrayBuffer, optPathToBitJS); }; bitjs.inherits(bitjs.archive.Untarrer, bitjs.archive.Unarchiver); bitjs.archive.Untarrer.prototype.getScriptFileName = function() { @@ -357,20 +357,19 @@ bitjs.archive = bitjs.archive || {}; * Factory method that creates an unarchiver based on the byte signature found * in the arrayBuffer. * @param {ArrayBuffer} ab - * @param {string=} opt_pathToBitJS Path to the unarchiver script files. + * @param {string=} optPathToBitJS Path to the unarchiver script files. * @return {bitjs.archive.Unarchiver} */ - bitjs.archive.GetUnarchiver = function(ab, opt_pathToBitJS) { + bitjs.archive.GetUnarchiver = function(ab, optPathToBitJS) { var unarchiver = null; - var pathToBitJS = opt_pathToBitJS || ''; + var pathToBitJS = optPathToBitJS || ""; var h = new Uint8Array(ab, 0, 10); - if (h[0] == 0x52 && h[1] == 0x61 && h[2] == 0x72 && h[3] == 0x21) { // Rar! + if (h[0] === 0x52 && h[1] === 0x61 && h[2] === 0x72 && h[3] === 0x21) { // Rar! unarchiver = new bitjs.archive.Unrarrer(ab, pathToBitJS); - } else if (h[0] == 80 && h[1] == 75) { // PK (Zip) + } else if (h[0] === 80 && h[1] === 75) { // PK (Zip) unarchiver = new bitjs.archive.Unzipper(ab, pathToBitJS); } else { // Try with tar - console.log('geter'); unarchiver = new bitjs.archive.Untarrer(ab, pathToBitJS); } return unarchiver; diff --git a/cps/static/js/archive/rarvm.js b/cps/static/js/archive/rarvm.js index 769c25be..44e09330 100644 --- a/cps/static/js/archive/rarvm.js +++ b/cps/static/js/archive/rarvm.js @@ -9,9 +9,12 @@ /** * CRC Implementation. */ +/* global Uint8Array, Uint32Array, bitjs, DataView */ +/* exported MAXWINMASK, UnpackFilter */ + var CRCTab = new Array(256).fill(0); -function InitCRC() { +function initCRC() { for (var i = 0; i < 256; ++i) { var c = i; for (var j = 0; j < 8; ++j) { @@ -30,8 +33,8 @@ function InitCRC() { * @return {number} */ function CRC(startCRC, arr) { - if (CRCTab[1] == 0) { - InitCRC(); + if (CRCTab[1] === 0) { + initCRC(); } /* @@ -84,7 +87,7 @@ var MAXWINMASK = (MAXWINSIZE - 1); /** */ -var VM_Commands = { +var VmCommands = { VM_MOV: 0, VM_CMP: 1, VM_ADD: 2, @@ -141,7 +144,7 @@ var VM_Commands = { /** */ -var VM_StandardFilters = { +var VmStandardFilters = { VMSF_NONE: 0, VMSF_E8: 1, VMSF_E8E9: 2, @@ -154,7 +157,7 @@ var VM_StandardFilters = { /** */ -var VM_Flags = { +var VmFlags = { VM_FC: 1, VM_FZ: 2, VM_FS: 0x80000000, @@ -162,7 +165,7 @@ var VM_Flags = { /** */ -var VM_OpType = { +var VmOpType = { VM_OPREG: 0, VM_OPINT: 1, VM_OPREGMEM: 2, @@ -186,15 +189,15 @@ function findKeyForValue(obj, val) { } function getDebugString(obj, val) { - var s = 'Unknown.'; - if (obj === VM_Commands) { - s = 'VM_Commands.'; - } else if (obj === VM_StandardFilters) { - s = 'VM_StandardFilters.'; - } else if (obj === VM_Flags) { - s = 'VM_OpType.'; - } else if (obj === VM_OpType) { - s = 'VM_OpType.'; + var s = "Unknown."; + if (obj === VmCommands) { + s = "VmCommands."; + } else if (obj === VmStandardFilters) { + s = "VmStandardFilters."; + } else if (obj === VmFlags) { + s = "VmOpType."; + } else if (obj === VmOpType) { + s = "VmOpType."; } return s + findKeyForValue(obj, val); @@ -204,8 +207,8 @@ function getDebugString(obj, val) { * @struct * @constructor */ -var VM_PreparedOperand = function() { - /** @type {VM_OpType} */ +var VmPreparedOperand = function() { + /** @type {VmOpType} */ this.Type; /** @type {number} */ @@ -220,58 +223,58 @@ var VM_PreparedOperand = function() { }; /** @return {string} */ -VM_PreparedOperand.prototype.toString = function() { +VmPreparedOperand.prototype.toString = function() { if (this.Type === null) { - return 'Error: Type was null in VM_PreparedOperand'; + return "Error: Type was null in VmPreparedOperand"; } - return '{ ' + - 'Type: ' + getDebugString(VM_OpType, this.Type) + - ', Data: ' + this.Data + - ', Base: ' + this.Base + - ' }'; + return "{ " + + "Type: " + getDebugString(VmOpType, this.Type) + + ", Data: " + this.Data + + ", Base: " + this.Base + + " }"; }; /** * @struct * @constructor */ -var VM_PreparedCommand = function() { - /** @type {VM_Commands} */ +var VmPreparedCommand = function() { + /** @type {VmCommands} */ this.OpCode; /** @type {boolean} */ this.ByteMode = false; - /** @type {VM_PreparedOperand} */ - this.Op1 = new VM_PreparedOperand(); + /** @type {VmPreparedOperand} */ + this.Op1 = new VmPreparedOperand(); - /** @type {VM_PreparedOperand} */ - this.Op2 = new VM_PreparedOperand(); + /** @type {VmPreparedOperand} */ + this.Op2 = new VmPreparedOperand(); }; /** @return {string} */ -VM_PreparedCommand.prototype.toString = function(indent) { +VmPreparedCommand.prototype.toString = function(indent) { if (this.OpCode === null) { - return 'Error: OpCode was null in VM_PreparedCommand'; + return "Error: OpCode was null in VmPreparedCommand"; } - indent = indent || ''; - return indent + '{\n' + - indent + ' OpCode: ' + getDebugString(VM_Commands, this.OpCode) + ',\n' + - indent + ' ByteMode: ' + this.ByteMode + ',\n' + - indent + ' Op1: ' + this.Op1.toString() + ',\n' + - indent + ' Op2: ' + this.Op2.toString() + ',\n' + - indent + '}'; + indent = indent || ""; + return indent + "{\n" + + indent + " OpCode: " + getDebugString(VmCommands, this.OpCode) + ",\n" + + indent + " ByteMode: " + this.ByteMode + ",\n" + + indent + " Op1: " + this.Op1.toString() + ",\n" + + indent + " Op2: " + this.Op2.toString() + ",\n" + + indent + "}"; }; /** * @struct * @constructor */ -var VM_PreparedProgram = function() { - /** @type {Array} */ +var VmPreparedProgram = function() { + /** @type {Array} */ this.Cmd = []; - /** @type {Array} */ + /** @type {Array} */ this.AltCmd = null; /** @type {Uint8Array} */ @@ -291,14 +294,14 @@ var VM_PreparedProgram = function() { }; /** @return {string} */ -VM_PreparedProgram.prototype.toString = function() { - var s = '{\n Cmd: [\n'; +VmPreparedProgram.prototype.toString = function() { + var s = "{\n Cmd: [\n"; for (var i = 0; i < this.Cmd.length; ++i) { - s += this.Cmd[i].toString(' ') + ',\n'; + s += this.Cmd[i].toString(" ") + ",\n"; } - s += '],\n'; + s += "],\n"; // TODO: Dump GlobalData, StaticData, InitR? - s += ' }\n'; + s += " }\n"; return s; }; @@ -324,8 +327,8 @@ var UnpackFilter = function() { /** @type {number} */ this.ParentFilter = null; - /** @type {VM_PreparedProgram} */ - this.Prg = new VM_PreparedProgram(); + /** @type {VmPreparedProgram} */ + this.Prg = new VmPreparedProgram(); }; var VMCF_OP0 = 0; @@ -338,7 +341,7 @@ var VMCF_PROC = 16; var VMCF_USEFLAGS = 32; var VMCF_CHFLAGS = 64; -var VM_CmdFlags = [ +var VmCmdFlags = [ /* VM_MOV */ VMCF_OP2 | VMCF_BYTEMODE, /* VM_CMP */ @@ -425,7 +428,7 @@ var VM_CmdFlags = [ /** * @param {number} length * @param {number} crc - * @param {VM_StandardFilters} type + * @param {VmStandardFilters} type * @struct * @constructor */ @@ -436,7 +439,7 @@ var StandardFilterSignature = function(length, crc, type) { /** @type {number} */ this.CRC = crc; - /** @type {VM_StandardFilters} */ + /** @type {VmStandardFilters} */ this.Type = type; }; @@ -444,13 +447,13 @@ var StandardFilterSignature = function(length, crc, type) { * @type {Array} */ var StdList = [ - new StandardFilterSignature(53, 0xad576887, VM_StandardFilters.VMSF_E8), - new StandardFilterSignature(57, 0x3cd7e57e, VM_StandardFilters.VMSF_E8E9), - new StandardFilterSignature(120, 0x3769893f, VM_StandardFilters.VMSF_ITANIUM), - new StandardFilterSignature(29, 0x0e06077d, VM_StandardFilters.VMSF_DELTA), - new StandardFilterSignature(149, 0x1c2c5dc8, VM_StandardFilters.VMSF_RGB), - new StandardFilterSignature(216, 0xbc85e701, VM_StandardFilters.VMSF_AUDIO), - new StandardFilterSignature(40, 0x46b9c560, VM_StandardFilters.VMSF_UPCASE), + new StandardFilterSignature(53, 0xad576887, VmStandardFilters.VMSF_E8), + new StandardFilterSignature(57, 0x3cd7e57e, VmStandardFilters.VMSF_E8E9), + new StandardFilterSignature(120, 0x3769893f, VmStandardFilters.VMSF_ITANIUM), + new StandardFilterSignature(29, 0x0e06077d, VmStandardFilters.VMSF_DELTA), + new StandardFilterSignature(149, 0x1c2c5dc8, VmStandardFilters.VMSF_RGB), + new StandardFilterSignature(216, 0xbc85e701, VmStandardFilters.VMSF_AUDIO), + new StandardFilterSignature(40, 0x46b9c560, VmStandardFilters.VMSF_UPCASE), ]; /** @@ -478,33 +481,34 @@ RarVM.prototype.init = function() { /** * @param {Uint8Array} code - * @return {VM_StandardFilters} + * @return {VmStandardFilters} */ RarVM.prototype.isStandardFilter = function(code) { var codeCRC = (CRC(0xffffffff, code, code.length) ^ 0xffffffff) >>> 0; for (var i = 0; i < StdList.length; ++i) { - if (StdList[i].CRC == codeCRC && StdList[i].Length == code.length) + if (StdList[i].CRC === codeCRC && StdList[i].Length === code.length) { return StdList[i].Type; + } } - return VM_StandardFilters.VMSF_NONE; + return VmStandardFilters.VMSF_NONE; }; /** - * @param {VM_PreparedOperand} op + * @param {VmPreparedOperand} op * @param {boolean} byteMode * @param {bitjs.io.BitStream} bstream A rtl bit stream. */ RarVM.prototype.decodeArg = function(op, byteMode, bstream) { var data = bstream.peekBits(16); if (data & 0x8000) { - op.Type = VM_OpType.VM_OPREG; // Operand is register (R[0]..R[7]) + op.Type = VmOpType.VM_OPREG; // Operand is register (R[0]..R[7]) bstream.readBits(1); // 1 flag bit and... op.Data = bstream.readBits(3); // ... 3 register number bits - op.Addr = [this.R_[op.Data]] // TODO &R[Op.Data] // Register address + op.Addr = [this.R_[op.Data]]; // TODO &R[Op.Data] // Register address } else { - if ((data & 0xc000) == 0) { - op.Type = VM_OpType.VM_OPINT; // Operand is integer + if ((data & 0xc000) === 0) { + op.Type = VmOpType.VM_OPINT; // Operand is integer bstream.readBits(2); // 2 flag bits if (byteMode) { op.Data = bstream.readBits(8); // Byte integer. @@ -513,8 +517,8 @@ RarVM.prototype.decodeArg = function(op, byteMode, bstream) { } } else { // Operand is data addressed by register data, base address or both. - op.Type = VM_OpType.VM_OPREGMEM; - if ((data & 0x2000) == 0) { + op.Type = VmOpType.VM_OPREGMEM; + if ((data & 0x2000) === 0) { bstream.readBits(3); // 3 flag bits // Base address is zero, just use the address from register. op.Data = bstream.readBits(3); // (Data>>10)&7 @@ -522,7 +526,7 @@ RarVM.prototype.decodeArg = function(op, byteMode, bstream) { op.Base = 0; } else { bstream.readBits(4); // 4 flag bits - if ((data & 0x1000) == 0) { + if ((data & 0x1000) === 0) { // Use both register and base address. op.Data = bstream.readBits(3); op.Addr = [this.R_[op.Data]]; // TODO &R[op.Data] @@ -537,7 +541,7 @@ RarVM.prototype.decodeArg = function(op, byteMode, bstream) { }; /** - * @param {VM_PreparedProgram} prg + * @param {VmPreparedProgram} prg */ RarVM.prototype.execute = function(prg) { this.R_.set(prg.InitR); @@ -558,7 +562,7 @@ RarVM.prototype.execute = function(prg) { var preparedCodes = prg.AltCmd ? prg.AltCmd : prg.Cmd; if (prg.Cmd.length > 0 && !this.executeCode(preparedCodes)) { // Invalid VM program. Let's replace it with 'return' command. - preparedCode.OpCode = VM_Commands.VM_RET; + preparedCodes.OpCode = VmCommands.VM_RET; } var dataView = new DataView(this.mem_.buffer, VM_GLOBALMEMADDR); @@ -573,7 +577,7 @@ RarVM.prototype.execute = function(prg) { var dataSize = Math.min(dataView.getUint32(0x30), (VM_GLOBALMEMSIZE - VM_FIXEDGLOBALSIZE)); - if (dataSize != 0) { + if (dataSize !== 0) { var len = dataSize + VM_FIXEDGLOBALSIZE; prg.GlobalData = new Uint8Array(len); prg.GlobalData.set(mem.subarray(VM_GLOBALMEMADDR, VM_GLOBALMEMADDR + len)); @@ -581,7 +585,7 @@ RarVM.prototype.execute = function(prg) { }; /** - * @param {Array} preparedCodes + * @param {Array} preparedCodes * @return {boolean} */ RarVM.prototype.executeCode = function(preparedCodes) { @@ -591,7 +595,7 @@ RarVM.prototype.executeCode = function(preparedCodes) { // when a VM_RET is hit? while (1) { switch (cmd.OpCode) { - case VM_Commands.VM_RET: + case VmCommands.VM_RET: if (this.R_[7] >= VM_MEMSIZE) { return true; } @@ -599,12 +603,12 @@ RarVM.prototype.executeCode = function(preparedCodes) { this.R_[7] += 4; continue; - case VM_Commands.VM_STANDARD: + case VmCommands.VM_STANDARD: this.executeStandardFilter(cmd.Op1.Data); break; default: - console.error('RarVM OpCode not supported: ' + getDebugString(VM_Commands, cmd.OpCode)); + console.error("RarVM OpCode not supported: " + getDebugString(VmCommands, cmd.OpCode)); break; } // switch (cmd.OpCode) codeIndex++; @@ -617,7 +621,7 @@ RarVM.prototype.executeCode = function(preparedCodes) { */ RarVM.prototype.executeStandardFilter = function(filterType) { switch (filterType) { - case VM_StandardFilters.VMSF_DELTA: + case VmStandardFilters.VMSF_DELTA: var dataSize = this.R_[4]; var channels = this.R_[0]; var srcPos = 0; @@ -644,17 +648,19 @@ RarVM.prototype.executeStandardFilter = function(filterType) { break; default: - console.error('RarVM Standard Filter not supported: ' + getDebugString(VM_StandardFilters, filterType)); + console.error("RarVM Standard Filter not supported: " + getDebugString(VmStandardFilters, filterType)); break; } }; /** * @param {Uint8Array} code - * @param {VM_PreparedProgram} prg + * @param {VmPreparedProgram} prg */ RarVM.prototype.prepare = function(code, prg) { var codeSize = code.length; + var i; + var curCmd; //InitBitInput(); //memcpy(InBuf,Code,Min(CodeSize,BitInput::MAX_SIZE)); @@ -662,7 +668,7 @@ RarVM.prototype.prepare = function(code, prg) { // Calculate the single byte XOR checksum to check validity of VM code. var xorSum = 0; - for (var i = 1; i < codeSize; ++i) { + for (i = 1; i < codeSize; ++i) { xorSum ^= code[i]; } @@ -671,20 +677,20 @@ RarVM.prototype.prepare = function(code, prg) { prg.Cmd = []; // TODO: Is this right? I don't see it being done in rarvm.cpp. // VM code is valid if equal. - if (xorSum == code[0]) { + if (xorSum === code[0]) { var filterType = this.isStandardFilter(code); - if (filterType != VM_StandardFilters.VMSF_NONE) { + if (filterType !== VmStandardFilters.VMSF_NONE) { // VM code is found among standard filters. - var curCmd = new VM_PreparedCommand(); + curCmd = new VmPreparedCommand(); prg.Cmd.push(curCmd); - curCmd.OpCode = VM_Commands.VM_STANDARD; + curCmd.OpCode = VmCommands.VM_STANDARD; curCmd.Op1.Data = filterType; // TODO: Addr=&CurCmd->Op1.Data curCmd.Op1.Addr = [curCmd.Op1.Data]; curCmd.Op2.Addr = [null]; // &CurCmd->Op2.Data; - curCmd.Op1.Type = VM_OpType.VM_OPNONE; - curCmd.Op2.Type = VM_OpType.VM_OPNONE; + curCmd.Op1.Type = VmOpType.VM_OPNONE; + curCmd.Op2.Type = VmOpType.VM_OPNONE; codeSize = 0; } @@ -696,7 +702,7 @@ RarVM.prototype.prepare = function(code, prg) { if (dataFlag & 0x8000) { var dataSize = RarVM.readData(bstream) + 1; // TODO: This accesses the byte pointer of the bstream directly. Is that ok? - for (var i = 0; i < bstream.bytePtr < codeSize && i < dataSize; ++i) { + for (i = 0; i < bstream.bytePtr < codeSize && i < dataSize; ++i) { // Append a byte to the program's static data. var newStaticData = new Uint8Array(prg.StaticData.length + 1); newStaticData.set(prg.StaticData); @@ -706,7 +712,7 @@ RarVM.prototype.prepare = function(code, prg) { } while (bstream.bytePtr < codeSize) { - var curCmd = new VM_PreparedCommand(); + curCmd = new VmPreparedCommand(); prg.Cmd.push(curCmd); // Prg->Cmd.Add(1) var flag = bstream.peekBits(1); if (!flag) { // (Data&0x8000)==0 @@ -715,22 +721,22 @@ RarVM.prototype.prepare = function(code, prg) { curCmd.OpCode = (bstream.readBits(6) - 24); } - if (VM_CmdFlags[curCmd.OpCode] & VMCF_BYTEMODE) { - curCmd.ByteMode = (bstream.readBits(1) != 0); + if (VmCmdFlags[curCmd.OpCode] & VMCF_BYTEMODE) { + curCmd.ByteMode = (bstream.readBits(1) !== 0); } else { curCmd.ByteMode = 0; } - curCmd.Op1.Type = VM_OpType.VM_OPNONE; - curCmd.Op2.Type = VM_OpType.VM_OPNONE; - var opNum = (VM_CmdFlags[curCmd.OpCode] & VMCF_OPMASK); + curCmd.Op1.Type = VmOpType.VM_OPNONE; + curCmd.Op2.Type = VmOpType.VM_OPNONE; + var opNum = (VmCmdFlags[curCmd.OpCode] & VMCF_OPMASK); curCmd.Op1.Addr = null; curCmd.Op2.Addr = null; if (opNum > 0) { this.decodeArg(curCmd.Op1, curCmd.ByteMode, bstream); // reading the first operand - if (opNum == 2) { + if (opNum === 2) { this.decodeArg(curCmd.Op2, curCmd.ByteMode, bstream); // reading the second operand } else { - if (curCmd.Op1.Type == VM_OpType.VM_OPINT && (VM_CmdFlags[curCmd.OpCode] & (VMCF_JUMP | VMCF_PROC))) { + if (curCmd.Op1.Type === VmOpType.VM_OPINT && (VmCmdFlags[curCmd.OpCode] & (VMCF_JUMP | VMCF_PROC))) { // Calculating jump distance. var distance = curCmd.Op1.Data; if (distance >= 256) { @@ -756,26 +762,26 @@ RarVM.prototype.prepare = function(code, prg) { } // while ((uint)InAddrOp1.Data curCmd.Op1.Addr = [curCmd.Op1.Data]; curCmd.Op2.Addr = [curCmd.Op2.Data]; - curCmd.Op1.Type = VM_OpType.VM_OPNONE; - curCmd.Op2.Type = VM_OpType.VM_OPNONE; + curCmd.Op1.Type = VmOpType.VM_OPNONE; + curCmd.Op2.Type = VmOpType.VM_OPNONE; // If operand 'Addr' field has not been set by DecodeArg calls above, // let's set it to point to operand 'Data' field. It is necessary for // VM_OPINT type operands (usual integers) or maybe if something was // not set properly for other operands. 'Addr' field is required // for quicker addressing of operand data. - for (var i = 0; i < prg.Cmd.length; ++i) { + for (i = 0; i < prg.Cmd.length; ++i) { var cmd = prg.Cmd[i]; - if (cmd.Op1.Addr == null) { + if (cmd.Op1.Addr === null) { cmd.Op1.Addr = [cmd.Op1.Data]; } - if (cmd.Op2.Addr == null) { + if (cmd.Op2.Addr === null) { cmd.Op2.Addr = [cmd.Op2.Data]; } } @@ -833,7 +839,7 @@ RarVM.readData = function(bstream) { case 1: // 0x4000 // 0x3c00 => 0011 1100 0000 0000 - if (bstream.peekBits(4) == 0) { // (Data&0x3c00)==0 + if (bstream.peekBits(4) === 0) { // (Data&0x3c00)==0 // Skip the 4 zero bits. bstream.readBits(4); // Read in the next 8 and pad with 1s to 32 bits. @@ -855,4 +861,4 @@ RarVM.readData = function(bstream) { } }; -// ============================================================================================== // \ No newline at end of file +// ============================================================================================== // diff --git a/cps/static/js/archive/unrar.js b/cps/static/js/archive/unrar.js index 927e8732..89263b83 100644 --- a/cps/static/js/archive/unrar.js +++ b/cps/static/js/archive/unrar.js @@ -10,13 +10,14 @@ * * http://kthoom.googlecode.com/hg/docs/unrar.html */ -/* global bitjs, importScripts */ +/* global bitjs, importScripts, RarVM, Uint8Array, UnpackFilter */ +/* global VM_FIXEDGLOBALSIZE, VM_GLOBALMEMSIZE, MAXWINMASK, VM_GLOBALMEMADDR, MAXWINSIZE */ // This file expects to be invoked as a Worker (see onmessage below). -importScripts('../io/bitstream.js'); -importScripts('../io/bytebuffer.js'); -importScripts('archive.js'); -importScripts('rarvm.js'); +importScripts("../io/bitstream.js"); +importScripts("../io/bytebuffer.js"); +importScripts("archive.js"); +importScripts("rarvm.js"); // Progress variables. var currentFilename = ""; @@ -296,6 +297,12 @@ var rBuffer; */ var wBuffer; +var lowDistRepCount = 0; +var prevLowDist = 0; + +var rOldDist = [0, 0, 0, 0]; +var lastDist; +var lastLength; /** * In unpack.cpp, UnpPtr keeps track of what bytes have been unpacked @@ -401,15 +408,15 @@ function rarDecodeNumber(bstream, dec) { ((bitField < DecodeLen[1]) ? 1 : 2) : ((bitField < DecodeLen[3]) ? 3 : 4)) : (bitField < DecodeLen[6]) ? - ((bitField < DecodeLen[5]) ? 5 : 6) : - ((bitField < DecodeLen[7]) ? 7 : 8)) : + ((bitField < DecodeLen[5]) ? 5 : 6) : + ((bitField < DecodeLen[7]) ? 7 : 8)) : ((bitField < DecodeLen[12]) ? ((bitField < DecodeLen[10]) ? ((bitField < DecodeLen[9]) ? 9 : 10) : ((bitField < DecodeLen[11]) ? 11 : 12)) : (bitField < DecodeLen[14]) ? - ((bitField < DecodeLen[13]) ? 13 : 14) : - 15)); + ((bitField < DecodeLen[13]) ? 13 : 14) : + 15)); bstream.readBits(bits); var N = DecodePos[bits] + ((bitField - DecodeLen[bits - 1]) >>> (16 - bits)); @@ -449,7 +456,7 @@ function rarMakeDecodeTables(BitLength, offset, dec, size) { TmpPos[I] = DecodePos[I]; } for (I = 0; I < size; ++I) { - if (BitLength[I + offset] != 0) { + if (BitLength[I + offset] !== 0) { DecodeNum[TmpPos[BitLength[offset + I] & 0xF]++] = I; } } @@ -524,7 +531,7 @@ function unpack20(bstream) { //, Solid) { if (Distance >= 0x101) { Length++; if (Distance >= 0x2000) { - Length++ + Length++; if (Distance >= 0x40000) { Length++; } @@ -611,13 +618,6 @@ function rarReadTables20(bstream) { } } -var lowDistRepCount = 0; -var prevLowDist = 0; - -var rOldDist = [0, 0, 0, 0]; -var lastDist; -var lastLength; - // ============================================================================================== // // Unpack code specific to RarVM @@ -644,7 +644,7 @@ var OldFilterLengths = []; var LastFilter = 0; -function InitFilters() { +function initFilters() { OldFilterLengths = []; LastFilter = 0; Filters = []; @@ -658,13 +658,14 @@ function InitFilters() { */ function rarAddVMCode(firstByte, vmCode) { VM.init(); + var i; var bstream = new bitjs.io.BitStream(vmCode.buffer, true /* rtl */ ); var filtPos; if (firstByte & 0x80) { filtPos = RarVM.readData(bstream); - if (filtPos == 0) { - InitFilters(); + if (filtPos === 0) { + initFilters(); } else { filtPos--; } @@ -677,7 +678,7 @@ function rarAddVMCode(firstByte, vmCode) { } LastFilter = filtPos; - var newFilter = (filtPos == Filters.length); + var newFilter = (filtPos === Filters.length); // new filter for PrgStack var stackFilter = new UnpackFilter(); @@ -701,10 +702,10 @@ function rarAddVMCode(firstByte, vmCode) { } var emptyCount = 0; - for (var i = 0; i < PrgStack.length; ++i) { + for (i = 0; i < PrgStack.length; ++i) { PrgStack[i - emptyCount] = PrgStack[i]; - if (PrgStack[i] == null) { + if (PrgStack[i] === null) { emptyCount++; } if (emptyCount > 0) { @@ -712,7 +713,7 @@ function rarAddVMCode(firstByte, vmCode) { } } - if (emptyCount == 0) { + if (emptyCount === 0) { PrgStack.push(null); //PrgStack.Add(1); emptyCount = 1; } @@ -734,12 +735,12 @@ function rarAddVMCode(firstByte, vmCode) { OldFilterLengths[filtPos] : 0; } - stackFilter.NextWindow = (wBuffer.ptr != rBuffer.ptr) && + stackFilter.NextWindow = (wBuffer.ptr !== rBuffer.ptr) && (((wBuffer.ptr - rBuffer.ptr) & MAXWINMASK) <= blockStart); OldFilterLengths[filtPos] = stackFilter.BlockLength; - for (var i = 0; i < 7; ++i) { + for (i = 0; i < 7; ++i) { stackFilter.Prg.InitR[i] = 0; } stackFilter.Prg.InitR[3] = VM_GLOBALMEMADDR; @@ -749,7 +750,7 @@ function rarAddVMCode(firstByte, vmCode) { // set registers to optional parameters if any if (firstByte & 0x10) { var initMask = bstream.readBits(7); - for (var i = 0; i < 7; ++i) { + for (i = 0; i < 7; ++i) { if (initMask & (1 << i)) { stackFilter.Prg.InitR[i] = RarVM.readData(bstream); } @@ -758,11 +759,11 @@ function rarAddVMCode(firstByte, vmCode) { if (newFilter) { var vmCodeSize = RarVM.readData(bstream); - if (vmCodeSize >= 0x10000 || vmCodeSize == 0) { + if (vmCodeSize >= 0x10000 || vmCodeSize === 0) { return false; } - var vmCode = new Uint8Array(vmCodeSize); - for (var i = 0; i < vmCodeSize; ++i) { + vmCode = new Uint8Array(vmCodeSize); + for (i = 0; i < vmCodeSize; ++i) { //if (Inp.Overflow(3)) // return(false); vmCode[i] = bstream.readBits(8); @@ -775,7 +776,7 @@ function rarAddVMCode(firstByte, vmCode) { var staticDataSize = filter.Prg.StaticData.length; if (staticDataSize > 0 && staticDataSize < VM_GLOBALMEMSIZE) { // read statically defined data contained in DB commands - for (var i = 0; i < staticDataSize; ++i) { + for (i = 0; i < staticDataSize; ++i) { stackFilter.Prg.StaticData[i] = filter.Prg.StaticData[i]; } } @@ -785,14 +786,14 @@ function rarAddVMCode(firstByte, vmCode) { } var globalData = stackFilter.Prg.GlobalData; - for (var i = 0; i < 7; ++i) { + for (i = 0; i < 7; ++i) { VM.setLowEndianValue(globalData, stackFilter.Prg.InitR[i], i * 4); } VM.setLowEndianValue(globalData, stackFilter.BlockLength, 0x1c); VM.setLowEndianValue(globalData, 0, 0x20); VM.setLowEndianValue(globalData, stackFilter.ExecCount, 0x2c); - for (var i = 0; i < 16; ++i) { + for (i = 0; i < 16; ++i) { globalData[0x30 + i] = 0; } @@ -816,7 +817,7 @@ function rarAddVMCode(firstByte, vmCode) { globalData = newGlobalData; } //byte *GlobalData=&StackFilter->Prg.GlobalData[VM_FIXEDGLOBALSIZE]; - for (var i = 0; i < dataSize; ++i) { + for (i = 0; i < dataSize; ++i) { //if (Inp.Overflow(3)) // return(false); globalData[VM_FIXEDGLOBALSIZE + i] = bstream.readBits(8); @@ -833,9 +834,9 @@ function rarAddVMCode(firstByte, vmCode) { function rarReadVMCode(bstream) { var firstByte = bstream.readBits(8); var length = (firstByte & 7) + 1; - if (length == 7) { + if (length === 7) { length = bstream.readBits(8) + 7; - } else if (length == 8) { + } else if (length === 8) { length = bstream.readBits(16); } @@ -845,7 +846,7 @@ function rarReadVMCode(bstream) { // Do something here with checking readbuf. vmCode[i] = bstream.readBits(8); } - return RarAddVMCode(firstByte, vmCode); + return rarAddVMCode(firstByte, vmCode); } /** @@ -990,10 +991,11 @@ function unpack29(bstream) { */ function rarWriteBuf() { var writeSize = (rBuffer.ptr & MAXWINMASK); - + var j; + var flt; for (var i = 0; i < PrgStack.length; ++i) { - var flt = PrgStack[i]; - if (flt == null) { + flt = PrgStack[i]; + if (flt === null) { continue; } @@ -1004,17 +1006,18 @@ function rarWriteBuf() { var blockStart = flt.BlockStart; var blockLength = flt.BlockLength; + var parentPrg; // WrittenBorder = wBuffer.ptr if (((blockStart - wBuffer.ptr) & MAXWINMASK) < writeSize) { - if (wBuffer.ptr != blockStart) { + if (wBuffer.ptr !== blockStart) { // Copy blockStart bytes from rBuffer into wBuffer. rarWriteArea(wBuffer.ptr, blockStart); writeSize = (rBuffer.ptr - wBuffer.ptr) & MAXWINMASK; } if (blockLength <= writeSize) { var blockEnd = (blockStart + blockLength) & MAXWINMASK; - if (blockStart < blockEnd || blockEnd == 0) { + if (blockStart < blockEnd || blockEnd === 0) { VM.setMemory(0, rBuffer.data.subarray(blockStart, blockStart + blockLength), blockLength); } else { var firstPartLength = MAXWINSIZE - blockStart; @@ -1022,7 +1025,7 @@ function rarWriteBuf() { VM.setMemory(firstPartLength, rBuffer.data, blockEnd); } - var parentPrg = Filters[flt.ParentFilter].Prg; + parentPrg = Filters[flt.ParentFilter].Prg; var prg = flt.Prg; if (parentPrg.GlobalData.length > VM_FIXEDGLOBALSIZE) { @@ -1031,10 +1034,11 @@ function rarWriteBuf() { } rarExecuteCode(prg); + var globalDataLen; if (prg.GlobalData.length > VM_FIXEDGLOBALSIZE) { // Save global data for next script execution. - var globalDataLen = prg.GlobalData.length; + globalDataLen = prg.GlobalData.length; if (parentPrg.GlobalData.length < globalDataLen) { parentPrg.GlobalData = new Uint8Array(globalDataLen); } @@ -1050,8 +1054,8 @@ function rarWriteBuf() { PrgStack[i] = null; while (i + 1 < PrgStack.length) { var nextFilter = PrgStack[i + 1]; - if (nextFilter == null || nextFilter.BlockStart != blockStart || - nextFilter.BlockLength != filteredData.length || nextFilter.NextWindow) { + if (nextFilter === null || nextFilter.BlockStart !== blockStart || + nextFilter.BlockLength !== filteredData.length || nextFilter.NextWindow) { break; } @@ -1059,10 +1063,10 @@ function rarWriteBuf() { VM.setMemory(0, filteredData, filteredData.length); - var parentPrg = Filters[nextFilter.ParentFilter].Prg; + parentPrg = Filters[nextFilter.ParentFilter].Prg; var nextPrg = nextFilter.Prg; - var globalDataLen = parentPrg.GlobalData.length; + globalDataLen = parentPrg.GlobalData.length; if (globalDataLen > VM_FIXEDGLOBALSIZE) { // Copy global data from previous script execution if any. nextPrg.GlobalData = new Uint8Array(globalDataLen); @@ -1073,7 +1077,7 @@ function rarWriteBuf() { if (nextPrg.GlobalData.length > VM_GLOBALMEMSIZE) { // Save global data for next script execution. - var globalDataLen = nextPrg.GlobalData.length; + globalDataLen = nextPrg.GlobalData.length; if (parentPrg.GlobalData.length < globalDataLen) { parentPrg.GlobalData = new Uint8Array(globalDataLen); } @@ -1089,15 +1093,14 @@ function rarWriteBuf() { PrgStack[i] = null; } // while (i + 1 < PrgStack.length) - for (var j = 0; j < filteredData.length; ++j) { + for (j = 0; j < filteredData.length; ++j) { wBuffer.insertByte(filteredData[j]); } writeSize = (rBuffer.ptr - wBuffer.ptr) & MAXWINMASK; - } // if (blockLength <= writeSize) - else { - for (var j = i; j < PrgStack.length; ++j) { - var flt = PrgStack[j]; - if (flt != null && flt.NextWindow) { + } else { // if (blockLength <= writeSize) + for (j = i; j < PrgStack.length; ++j) { + flt = PrgStack[j]; + if (flt !== null && flt.NextWindow) { flt.NextWindow = false; } } @@ -1121,7 +1124,7 @@ function rarWriteBuf() { */ function rarWriteArea(startPtr, endPtr) { if (endPtr < startPtr) { - console.error('endPtr < startPtr, endPtr=' + endPtr + ', startPtr=' + startPtr); + console.error("endPtr < startPtr, endPtr=" + endPtr + ", startPtr=" + startPtr); // rarWriteData(startPtr, -(int)StartPtr & MAXWINMASK); // RarWriteData(0, endPtr); return; @@ -1220,8 +1223,8 @@ function rarCopyString(length, distance) { function unpack(v) { // TODO: implement what happens when unpVer is < 15 var Ver = v.header.unpVer <= 15 ? 15 : v.header.unpVer; - var Solid = v.header.LHD_SOLID; - var bstream = new bitjs.io.BitStream(v.fileData.buffer, true /* rtl */ , v.fileData.byteOffset, v.fileData.byteLength); + // var Solid = v.header.LHD_SOLID; + var bstream = new bitjs.io.BitStream(v.fileData.buffer, true /* rtl */, v.fileData.byteOffset, v.fileData.byteLength); rBuffer = new bitjs.io.ByteBuffer(v.header.unpackedSize); diff --git a/cps/static/js/archive/untar.js b/cps/static/js/archive/untar.js index d6ef3018..d9a1fdfd 100644 --- a/cps/static/js/archive/untar.js +++ b/cps/static/js/archive/untar.js @@ -10,9 +10,11 @@ * TAR format: http://www.gnu.org/software/automake/manual/tar/Standard.html */ +/* global bitjs, importScripts, Uint8Array */ + // This file expects to be invoked as a Worker (see onmessage below). -importScripts('../io/bytestream.js'); -importScripts('archive.js'); +importScripts("../io/bytestream.js"); +importScripts("archive.js"); // Progress variables. var currentFilename = ""; @@ -21,6 +23,7 @@ var currentBytesUnarchivedInFile = 0; var currentBytesUnarchived = 0; var totalUncompressedBytesInArchive = 0; var totalFilesInArchive = 0; +var allLocalFiles = []; // Helper functions. var info = function(str) { @@ -44,8 +47,8 @@ var postProgress = function() { currentBytesUnarchivedInFile, currentBytesUnarchived, totalUncompressedBytesInArchive, - totalFilesInArchive, - )); + totalFilesInArchive + )); }; // takes a ByteStream and parses out the local file information @@ -66,7 +69,7 @@ var TarLocalFile = function(bstream) { this.linkname = readCleanString(bstream, 100); this.maybeMagic = readCleanString(bstream, 6); - if (this.maybeMagic == "ustar") { + if (this.maybeMagic === "ustar") { this.version = readCleanString(bstream, 2); this.uname = readCleanString(bstream, 32); this.gname = readCleanString(bstream, 32); @@ -103,14 +106,14 @@ var TarLocalFile = function(bstream) { } // Round up to 512-byte blocks. - var remaining = 512 - bytesRead % 512; + var remaining = 512 - (bytesRead % 512); if (remaining > 0 && remaining < 512) { bstream.readBytes(remaining); } } else if (this.typeflag == 5) { info(" This is a directory."); } -} +}; var untar = function(arrayBuffer) { postMessage(new bitjs.archive.UnarchiveStartEvent()); @@ -125,7 +128,7 @@ var untar = function(arrayBuffer) { var bstream = new bitjs.io.ByteStream(arrayBuffer); postProgress(); // While we don't encounter an empty block, keep making TarLocalFiles. - while (bstream.peekNumber(4) != 0) { + while (bstream.peekNumber(4) !== 0) { var oneLocalFile = new TarLocalFile(bstream); if (oneLocalFile && oneLocalFile.isValid) { // If we make it to this point and haven't thrown an error, we have successfully @@ -159,8 +162,8 @@ onmessage = function(event) { // Overrun the buffer. // unarchiveState = UnarchiveState.WAITING; } else { - console.error("Found an error while untarring"); - console.log(e); + err("Found an error while untarring"); + err(e); throw e; } } diff --git a/cps/static/js/archive/unzip.js b/cps/static/js/archive/unzip.js index 45cb38ff..f8de27f7 100644 --- a/cps/static/js/archive/unzip.js +++ b/cps/static/js/archive/unzip.js @@ -14,10 +14,10 @@ /* global bitjs, importScripts, Uint8Array*/ // This file expects to be invoked as a Worker (see onmessage below). -importScripts('../io/bitstream.js'); -importScripts('../io/bytebuffer.js'); -importScripts('../io/bytestream.js'); -importScripts('archive.js'); +importScripts("../io/bitstream.js"); +importScripts("../io/bytebuffer.js"); +importScripts("../io/bytestream.js"); +importScripts("archive.js"); // Progress variables. var currentFilename = ""; @@ -118,13 +118,11 @@ ZipLocalFile.prototype.unzip = function() { currentBytesUnarchivedInFile = this.compressedSize; currentBytesUnarchived += this.compressedSize; this.fileData = zeroCompression(this.fileData, this.uncompressedSize); - } - // version == 20, compression method == 8 (DEFLATE) - else if (this.compressionMethod === 8) { + } else if (this.compressionMethod === 8) { + // version == 20, compression method == 8 (DEFLATE) info("ZIP v2.0, DEFLATE: " + this.filename + " (" + this.compressedSize + " bytes)"); this.fileData = inflate(this.fileData, this.uncompressedSize); - } - else { + } else { err("UNSUPPORTED VERSION/FORMAT: ZIP v" + this.version + ", compression method=" + this.compressionMethod + ": " + this.filename + " (" + this.compressedSize + " bytes)"); this.fileData = null; } @@ -497,13 +495,11 @@ function inflateBlockData(bstream, hcLiteralTable, hcDistanceTable, buffer) { // copy literal byte to output buffer.insertByte(symbol); blockSize++; - } - else { + } else { // end of block reached if (symbol === 256) { break; - } - else { + } else { var lengthLookup = LengthLookupTable[symbol - 257], length = lengthLookup[1] + bstream.readBits(lengthLookup[0]), distLookup = DistLookupTable[decodeSymbol(bstream, hcDistanceTable)], @@ -566,7 +562,7 @@ function inflate(compressedData, numDecompressedBytes) { blockSize = 0; // ++numBlocks; // no compression - if (bType == 0) { + if (bType === 0) { // skip remaining bits in this byte while (bstream.bitPtr !== 0) bstream.readBits(1); var len = bstream.readBits(16); @@ -575,13 +571,11 @@ function inflate(compressedData, numDecompressedBytes) { if (len > 0) buffer.insertBytes(bstream.readBytes(len)); blockSize = len; - } - // fixed Huffman codes - else if (bType === 1) { + } else if (bType === 1) { + // fixed Huffman codes blockSize = inflateBlockData(bstream, getFixedLiteralTable(), getFixedDistanceTable(), buffer); - } - // dynamic Huffman codes - else if (bType === 2) { + } else if (bType === 2) { + // dynamic Huffman codes var numLiteralLengthCodes = bstream.readBits(5) + 257; var numDistanceCodes = bstream.readBits(5) + 1, numCodeLengthCodes = bstream.readBits(4) + 4; @@ -664,4 +658,4 @@ function inflate(compressedData, numDecompressedBytes) { // event.data.file has the ArrayBuffer. onmessage = function(event) { unzip(event.data.file, true); -}; \ No newline at end of file +}; diff --git a/cps/static/js/filter_list.js b/cps/static/js/filter_list.js index 6f337777..0610bb86 100644 --- a/cps/static/js/filter_list.js +++ b/cps/static/js/filter_list.js @@ -26,7 +26,7 @@ $("#sort_name").click(function() { var cnt = $("#second").contents(); $("#list").append(cnt); // Count no of elements - var listItems = $('#list').children(".row"); + var listItems = $("#list").children(".row"); var listlength = listItems.length; // check for each element if its Starting character matches $(".row").each(function() { @@ -35,8 +35,8 @@ $("#sort_name").click(function() { } else { store = this.attributes["data-id"]; } - $(this).find('a').html(store.value); - if($(this).css("display") != "none") { + $(this).find("a").html(store.value); + if ($(this).css("display") !== "none") { count++; } }); @@ -49,7 +49,7 @@ $("#sort_name").click(function() { // search for the middle of all visibe elements $(".row").each(function() { index++; - if($(this).css("display") != "none") { + if ($(this).css("display") !== "none") { middle--; if (middle <= 0) { return false; @@ -67,8 +67,8 @@ $("#desc").click(function() { return; } var index = 0; - var list = $('#list'); - var second = $('#second'); + var list = $("#list"); + var second = $("#second"); // var cnt = ; list.append(second.contents()); var listItems = list.children(".row"); @@ -78,13 +78,13 @@ $("#desc").click(function() { // Find count of middle element var count = $(".row:visible").length; if (count > 20) { - var middle = parseInt(count / 2) + (count % 2); + middle = parseInt(count / 2) + (count % 2); //var middle = parseInt(count / 2) + (count % 2); // search for the middle of all visible elements $(reversed).each(function() { index++; - if($(this).css("display") != "none") { + if ($(this).css("display") !== "none") { middle--; if (middle <= 0) { return false; @@ -93,9 +93,8 @@ $("#desc").click(function() { }); list.append(reversed.slice(0, index)); - second.append(reversed.slice(index,elementLength)); - } - else { + second.append(reversed.slice(index, elementLength)); + } else { list.append(reversed.slice(0, elementLength)); } direction = 0; @@ -108,11 +107,11 @@ $("#asc").click(function() { } var index = 0; var list = $("#list"); - var second = $('#second'); + var second = $("#second"); list.append(second.contents()); var listItems = list.children(".row"); - reversed = listItems.get().reverse(); - elementLength = reversed.length; + var reversed = listItems.get().reverse(); + var elementLength = reversed.length; // Find count of middle element var count = $(".row:visible").length; @@ -123,7 +122,7 @@ $("#asc").click(function() { // search for the middle of all visible elements $(reversed).each(function() { index++; - if($(this).css("display") != "none") { + if ($(this).css("display") !== "none") { middle--; if (middle <= 0) { return false; @@ -134,7 +133,7 @@ $("#asc").click(function() { // middle = parseInt(elementLength / 2) + (elementLength % 2); list.append(reversed.slice(0, index)); - second.append(reversed.slice(index,elementLength)); + second.append(reversed.slice(index, elementLength)); } else { list.append(reversed.slice(0, elementLength)); } @@ -145,7 +144,7 @@ $("#all").click(function() { var cnt = $("#second").contents(); $("#list").append(cnt); // Find count of middle element - var listItems = $('#list').children(".row"); + var listItems = $("#list").children(".row"); var listlength = listItems.length; var middle = parseInt(listlength / 2) + (listlength % 2); // go through all elements and make them visible @@ -154,7 +153,7 @@ $("#all").click(function() { }); // Move second half of all elements if (listlength > 20) { - $("#second").append(listItems.slice(middle,listlength)); + $("#second").append(listItems.slice(middle, listlength)); } }); @@ -166,7 +165,7 @@ $(".char").click(function() { var cnt = $("#second").contents(); $("#list").append(cnt); // Count no of elements - var listItems = $('#list').children(".row"); + var listItems = $("#list").children(".row"); var listlength = listItems.length; // check for each element if its Starting character matches $(".row").each(function() { @@ -183,7 +182,7 @@ $(".char").click(function() { // search for the middle of all visibe elements $(".row").each(function() { index++; - if($(this).css("display") != "none") { + if ($(this).css("display") !== "none") { middle--; if (middle <= 0) { return false; @@ -191,6 +190,6 @@ $(".char").click(function() { } }); // Move second half of visible elements - $("#second").append(listItems.slice(index,listlength)); + $("#second").append(listItems.slice(index, listlength)); } }); diff --git a/cps/static/js/io.js b/cps/static/js/io.js index 292f5f95..8425dd5a 100644 --- a/cps/static/js/io.js +++ b/cps/static/js/io.js @@ -64,7 +64,7 @@ bitjs.io = bitjs.io || {}; return 0; } - var movePointers = movePointers || false; + movePointers = movePointers || false; var bytePtr = this.bytePtr; var bitPtr = this.bitPtr; var result = 0; @@ -125,7 +125,7 @@ bitjs.io = bitjs.io || {}; return 0; } - var movePointers = movePointers || false; + movePointers = movePointers || false; var bytePtr = this.bytePtr; var bitPtr = this.bitPtr; var result = 0; @@ -197,7 +197,7 @@ bitjs.io = bitjs.io || {}; * @return {Uint8Array} The subarray. */ bitjs.io.BitStream.prototype.peekBytes = function(n, movePointers) { - if (n <= 0 || typeof n != typeof 1) { + if (n <= 0 || typeof n !== typeof 1) { return 0; } @@ -322,7 +322,7 @@ bitjs.io = bitjs.io || {}; * @return {Uint8Array} The subarray. */ bitjs.io.ByteStream.prototype.peekBytes = function(n, movePointers) { - if (n <= 0 || typeof n != typeof 1) { + if (n <= 0 || typeof n !== typeof 1) { return null; } @@ -352,7 +352,7 @@ bitjs.io = bitjs.io || {}; * @return {string} The next n bytes as a string. */ bitjs.io.ByteStream.prototype.peekString = function(n) { - if (n <= 0 || typeof n != typeof 1) { + if (n <= 0 || typeof n !== typeof 1) { return ""; } diff --git a/cps/static/js/kthoom.js b/cps/static/js/kthoom.js index 9146d603..33a2ac0e 100644 --- a/cps/static/js/kthoom.js +++ b/cps/static/js/kthoom.js @@ -15,7 +15,10 @@ * Typed Arrays: http://www.khronos.org/registry/typedarray/specs/latest/#6 */ -/* global screenfull, bitjs */ +/* global screenfull, bitjs, Uint8Array, opera */ +/* exported init, event */ + + if (window.opera) { window.console.log = function(str) { opera.postError(str); @@ -101,12 +104,12 @@ kthoom.setSettings = function() { var createURLFromArray = function(array, mimeType) { var offset = array.byteOffset; var len = array.byteLength; - var url; + // var url; var blob; - if (mimeType === 'image/xml+svg') { - const xmlStr = new TextDecoder('utf-8').decode(array); - return 'data:image/svg+xml;UTF-8,' + encodeURIComponent(xmlStr); + if (mimeType === "image/xml+svg") { + var xmlStr = new TextDecoder("utf-8").decode(array); + return "data:image/svg+xml;UTF-8," + encodeURIComponent(xmlStr); } // TODO: Move all this browser support testing to a common place @@ -140,7 +143,7 @@ kthoom.ImageFile = function(file) { var fileExtension = file.filename.split(".").pop().toLowerCase(); this.mimeType = fileExtension === "png" ? "image/png" : (fileExtension === "jpg" || fileExtension === "jpeg") ? "image/jpeg" : - fileExtension === "gif" ? "image/gif" : fileExtension == 'svg' ? 'image/xml+svg' : undefined; + fileExtension === "gif" ? "image/gif" : fileExtension === "svg" ? "image/xml+svg" : undefined; if ( this.mimeType !== undefined) { this.dataURI = createURLFromArray(file.fileData, this.mimeType); this.data = file; @@ -154,17 +157,18 @@ function initProgressClick() { currentImage = page; updatePage(); }); -}; +} function loadFromArrayBuffer(ab) { var start = (new Date).getTime(); var h = new Uint8Array(ab, 0, 10); var pathToBitJS = "../../static/js/archive/"; + var lastCompletion = 0; if (h[0] === 0x52 && h[1] === 0x61 && h[2] === 0x72 && h[3] === 0x21) { //Rar! unarchiver = new bitjs.archive.Unrarrer(ab, pathToBitJS); } else if (h[0] === 80 && h[1] === 75) { //PK (Zip) unarchiver = new bitjs.archive.Unzipper(ab, pathToBitJS); - } else if (h[0] == 255 && h[1] == 216) { // JPEG + } else if (h[0] === 255 && h[1] === 216) { // JPEG // ToDo: check updateProgress(100); lastCompletion = 100; @@ -180,12 +184,12 @@ function loadFromArrayBuffer(ab) { if (totalImages === 0) { totalImages = e.totalFilesInArchive; } - updateProgress(percentage *100); + updateProgress(percentage * 100); lastCompletion = percentage * 100; }); unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.INFO, function(e) { - // console.log(e.msg); 77 Enable debug output here + // console.log(e.msg); // Enable debug output here }); unarchiver.addEventListener(bitjs.archive.UnarchiveEvent.Type.EXTRACT, function(e) { @@ -211,8 +215,7 @@ function loadFromArrayBuffer(ab) { if (imageFiles.length === currentImage + 1) { updatePage(lastCompletion); } - } - else { + } else { totalImages--; } } @@ -231,22 +234,22 @@ function loadFromArrayBuffer(ab) { function scrollTocToActive() { // Scroll to the thumbnail in the TOC on page change - $('#tocView').stop().animate({ - scrollTop: $('#tocView a.active').position().top + $("#tocView").stop().animate({ + scrollTop: $("#tocView a.active").position().top }, 200); } function updatePage() { - $('.page').text((currentImage + 1 ) + "/" + totalImages); + $(".page").text((currentImage + 1 ) + "/" + totalImages); // Mark the current page in the TOC - $('#tocView a[data-page]') + $("#tocView a[data-page]") // Remove the currently active thumbnail - .removeClass('active') + .removeClass("active") // Find the new one - .filter('[data-page='+ (currentImage + 1) +']') + .filter("[data-page=" + (currentImage + 1) + "]") // Set it to active - .addClass('active'); + .addClass("active"); scrollTocToActive(); updateProgress(); @@ -270,8 +273,8 @@ function updateProgress(loadPercentage) { if (loadPercentage === 100) { $("#progress") - .removeClass('loading') - .find(".load").text(''); + .removeClass("loading") + .find(".load").text(""); } } @@ -326,7 +329,7 @@ function setImage(url) { xhr.onload = function() { $("#mainText").css("display", ""); $("#mainText").innerHTML(""); - } + }; xhr.send(null); } else if (!/(jpg|jpeg|png|gif)$/.test(imageFiles[currentImage].filename) && imageFiles[currentImage].data.uncompressedSize < 10 * 1024) { xhr.open("GET", url, true); @@ -378,17 +381,17 @@ function setImage(url) { function showLeftPage() { if (settings.direction === 0) { - showPrevPage() + showPrevPage(); } else { - showNextPage() + showNextPage(); } } function showRightPage() { if (settings.direction === 0) { - showNextPage() + showNextPage(); } else { - showPrevPage() + showPrevPage(); } } @@ -504,7 +507,7 @@ function keyHandler(evt) { updateScale(false); break; case kthoom.Key.SPACE: - var container = $('#mainContent'); + var container = $("#mainContent"); var atTop = container.scrollTop() === 0; var atBottom = container.scrollTop() >= container[0].scrollHeight - container.height(); @@ -577,9 +580,9 @@ function init(filename) { $(this).toggleClass("icon-menu icon-right"); // We need this in a timeout because if we call it during the CSS transition, IE11 shakes the page ¯\_(ツ)_/¯ - setTimeout(function(){ + setTimeout(function() { // Focus on the TOC or the main content area, depending on which is open - $('#main:not(.closed) #mainContent, #sidebar.open #tocView').focus(); + $("#main:not(.closed) #mainContent, #sidebar.open #tocView").focus(); scrollTocToActive(); }, 500); }); @@ -630,7 +633,7 @@ function init(filename) { } // Focus the scrollable area so that keyboard scrolling work as expected - $('#mainContent').focus(); + $("#mainContent").focus(); $("#mainImage").click(function(evt) { // Firefox does not support offsetX/Y so we have to manually calculate diff --git a/cps/static/js/table.js b/cps/static/js/table.js index 420478dc..47daa6da 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -15,18 +15,20 @@ * along with this program. If not, see . */ +/* exported TableActions */ + $(function() { $("#domain_submit").click(function(event) { event.preventDefault(); $("#domain_add").ajaxForm(); $(this).closest("form").submit(); - $.ajax({ + $.ajax ({ method:"get", url: window.location.pathname + "/../../ajax/domainlist", async: true, timeout: 900, - success:function(data){ + success:function(data) { $("#domain-table").bootstrapTable("load", data); } }); diff --git a/cps/static/js/uploadprogress.js b/cps/static/js/uploadprogress.js index 8f70d2d0..be987437 100644 --- a/cps/static/js/uploadprogress.js +++ b/cps/static/js/uploadprogress.js @@ -57,7 +57,7 @@ this.$modalBar = this.$modal.find(".progress-bar"); // Translate texts - this.$modalTitle.text(this.options.modalTitle) + this.$modalTitle.text(this.options.modalTitle); this.$modalFooter.children("button").text(this.options.modalFooter); this.$modal.on("hidden.bs.modal", $.proxy(this.reset, this)); @@ -113,8 +113,7 @@ if (contentType.indexOf("application/json") !== -1) { var response = $.parseJSON(xhr.responseText); url = response.location; - } - else{ + } else { url = this.options.redirect_url; } window.location.href = url; @@ -136,12 +135,10 @@ if (contentType.indexOf("text/plain") !== -1) { responseText = "
" + responseText + "
"; document.write(responseText); - } - else { + } else { this.$modalBar.text(responseText); } - } - else { + } else { this.$modalBar.text(this.options.modalTitleFailed); } }, diff --git a/cps/templates/readpdf.html b/cps/templates/readpdf.html index 146517e8..cb415b12 100644 --- a/cps/templates/readpdf.html +++ b/cps/templates/readpdf.html @@ -41,7 +41,7 @@ See https://github.com/adobe-type-tools/cmap-resources PDFViewerApplicationOptions.set('sidebarViewOnLoad', 0); PDFViewerApplicationOptions.set('imageResourcesPath', "{{ url_for('static', filename='css/images/') }}"); PDFViewerApplicationOptions.set('workerSrc', "{{ url_for('static', filename='js/libs/pdf.worker.js') }}"); - PDFViewerApplication.open("{{ url_for('serve_book', book_id=pdffile, book_format='pdf') }}"); + PDFViewerApplication.open("{{ url_for('web.serve_book', book_id=pdffile, book_format='pdf') }}"); }); diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index 097ed3ca..7f3c03cf 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -3,7 +3,7 @@

{{title}}

{% if g.user.role_download() %} - {{ _('Download') }} + {{ _('Download') }} {% endif %} {% if g.user.is_authenticated %} {% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public %} diff --git a/cps/web.py b/cps/web.py index 5c2151f6..2f1f047b 100644 --- a/cps/web.py +++ b/cps/web.py @@ -419,8 +419,8 @@ def get_matching_tags(): title_input = request.args.get('book_title') include_tag_inputs = request.args.getlist('include_tag') exclude_tag_inputs = request.args.getlist('exclude_tag') - q = q.filter(db.Books.authors.any(db.func.lower(db.Authors.name).ilike("%" + author_input + "%")), - db.func.lower(db.Books.title).ilike("%" + title_input + "%")) + q = q.filter(db.Books.authors.any(func.lower(db.Authors.name).ilike("%" + author_input + "%")), + func.lower(db.Books.title).ilike("%" + title_input + "%")) if len(include_tag_inputs) > 0: for tag in include_tag_inputs: q = q.filter(db.Books.tags.any(db.Tags.id == tag)) @@ -858,15 +858,15 @@ def advanced_search(): searchterm = " + ".join(filter(None, searchterm)) q = q.filter() if author_name: - q = q.filter(db.Books.authors.any(db.func.lower(db.Authors.name).ilike("%" + author_name + "%"))) + q = q.filter(db.Books.authors.any(func.lower(db.Authors.name).ilike("%" + author_name + "%"))) if book_title: - q = q.filter(db.func.lower(db.Books.title).ilike("%" + book_title + "%")) + q = q.filter(func.lower(db.Books.title).ilike("%" + book_title + "%")) if pub_start: q = q.filter(db.Books.pubdate >= pub_start) if pub_end: q = q.filter(db.Books.pubdate <= pub_end) if publisher: - q = q.filter(db.Books.publishers.any(db.func.lower(db.Publishers.name).ilike("%" + publisher + "%"))) + q = q.filter(db.Books.publishers.any(func.lower(db.Publishers.name).ilike("%" + publisher + "%"))) for tag in include_tag_inputs: q = q.filter(db.Books.tags.any(db.Tags.id == tag)) for tag in exclude_tag_inputs: @@ -889,7 +889,7 @@ def advanced_search(): rating_low = int(rating_low) * 2 q = q.filter(db.Books.ratings.any(db.Ratings.rating >= rating_low)) if description: - q = q.filter(db.Books.comments.any(db.func.lower(db.Comments.text).ilike("%" + description + "%"))) + q = q.filter(db.Books.comments.any(func.lower(db.Comments.text).ilike("%" + description + "%"))) # search custom culumns for c in cc: @@ -903,7 +903,7 @@ def advanced_search(): db.cc_classes[c.id].value == custom_query)) else: q = q.filter(getattr(db.Books, 'custom_column_'+str(c.id)).any( - db.func.lower(db.cc_classes[c.id].value).ilike("%" + custom_query + "%"))) + func.lower(db.cc_classes[c.id].value).ilike("%" + custom_query + "%"))) q = q.all() ids = list() for element in q: diff --git a/cps/worker.py b/cps/worker.py index 3d5f058a..a33ad99d 100644 --- a/cps/worker.py +++ b/cps/worker.py @@ -140,6 +140,7 @@ class emailbase(): else: raise smtplib.SMTPServerDisconnected('please run connect() first') + @classmethod def _print_debug(self, *args): log.debug(args) diff --git a/setup.cfg b/setup.cfg index 6bcd9931..470a13d9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -2,7 +2,7 @@ universal = 1 [metadata] -name = calibre-web +name = calibreweb version= 0.6.3 url = https://github.com/janeczku/calibre-web project_urls =