From 5ef70890d9ab1812d0e3018f6b3031aeff971bfb Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sun, 12 Aug 2018 18:21:57 +0200 Subject: [PATCH] Search for custom columns implemented #494 Search for ratings related to #559 Search description #572 code cosmetics --- cps/static/js/unrar.js | 74 +++++----- cps/static/js/untar.js | 14 +- cps/static/js/unzip.js | 24 ++-- cps/templates/search.html | 4 + cps/templates/search_form.html | 94 ++++++++++--- cps/web.py | 243 ++++++++++++++++++--------------- cps/worker.py | 4 +- 7 files changed, 273 insertions(+), 184 deletions(-) diff --git a/cps/static/js/unrar.js b/cps/static/js/unrar.js index e061090a..f9713937 100644 --- a/cps/static/js/unrar.js +++ b/cps/static/js/unrar.js @@ -160,7 +160,8 @@ var RarVolumeHeader = function(bstream) { // read in filename this.filename = bstream.readBytes(this.nameSize); - for (var _i = 0, _s = ""; _i < this.filename.length ; _i++) { + var _s = "" + for (var _i = 0; _i < this.filename.length ; _i++) { _s += String.fromCharCode(this.filename[_i]); } @@ -209,7 +210,7 @@ var RarVolumeHeader = function(bstream) { } }; -var BLOCK_LZ = 0; +//var BLOCK_LZ = 0; var rLDecode = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224], rLBits = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5], @@ -227,17 +228,17 @@ var rDBits = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16]; -var rLOW_DIST_REP_COUNT = 16; +var rLowDistRepCount = 16; var rNC = 299, rDC = 60, rLDC = 17, rRC = 28, rBC = 20, - rHUFF_TABLE_SIZE = (rNC + rDC + rRC + rLDC); + rHuffTableSize = (rNC + rDC + rRC + rLDC); //var UnpBlockType = BLOCK_LZ; -var UnpOldTable = new Array(rHUFF_TABLE_SIZE); +var UnpOldTable = new Array(rHuffTableSize); var BD = { //bitdecode DecodeLen: new Array(16), @@ -270,8 +271,8 @@ var rBuffer; // read in Huffman tables for RAR function RarReadTables(bstream) { var BitLength = new Array(rBC), - Table = new Array(rHUFF_TABLE_SIZE); - + Table = new Array(rHuffTableSize); + var i; // before we start anything we need to get byte-aligned bstream.readBits( (8 - bstream.bitPtr) & 0x7 ); @@ -281,7 +282,6 @@ function RarReadTables(bstream) { } if (!bstream.readBits(1)) { //discard old table - var i; for (i = UnpOldTable.length; i--;) UnpOldTable[i] = 0; } @@ -307,24 +307,25 @@ function RarReadTables(bstream) { // now all 20 bit lengths are obtained, we construct the Huffman Table: - RarMakeDecodeTables(BitLength, 0, BD, rBC); + rarMakeDecodeTables(BitLength, 0, BD, rBC); - var TableSize = rHUFF_TABLE_SIZE; + var TableSize = rHuffTableSize; //console.log(DecodeLen, DecodePos, DecodeNum); for (i = 0; i < TableSize;) { + var N; var num = RarDecodeNumber(bstream, BD); if (num < 16) { Table[i] = (num + UnpOldTable[i]) & 0xf; i++; } else if (num < 18) { - var N = (num === 16) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); + N = (num === 16) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); while (N-- > 0 && i < TableSize) { Table[i] = Table[i - 1]; i++; } } else { - var N = (num === 18) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); + N = (num === 18) ? (bstream.readBits(3) + 3) : (bstream.readBits(7) + 11); while (N-- > 0 && i < TableSize) { Table[i++] = 0; @@ -332,10 +333,10 @@ function RarReadTables(bstream) { } } - RarMakeDecodeTables(Table, 0, LD, rNC); - RarMakeDecodeTables(Table, rNC, DD, rDC); - RarMakeDecodeTables(Table, rNC + rDC, LDD, rLDC); - RarMakeDecodeTables(Table, rNC + rDC + rLDC, RD, rRC); + rarMakeDecodeTables(Table, 0, LD, rNC); + rarMakeDecodeTables(Table, rNC, DD, rDC); + rarMakeDecodeTables(Table, rNC + rDC, LDD, rLDC); + rarMakeDecodeTables(Table, rNC + rDC + rLDC, RD, rRC); for (i = UnpOldTable.length; i--;) { UnpOldTable[i] = Table[i]; @@ -348,20 +349,20 @@ function RarDecodeNumber(bstream, dec) { var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum; var bitField = bstream.getBits() & 0xfffe; //some sort of rolled out binary search - var bits = ((bitField < DecodeLen[8])? + var bits = ((bitField < DecodeLen[8]) ? ((bitField < DecodeLen[4]) ? ((bitField < DecodeLen[2]) ? ((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[3]) ? 3 : 4)) + : (bitField < DecodeLen[6]) ? + ((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) + : ((bitField < DecodeLen[11]) ? 11 : 12)) + : (bitField < DecodeLen[14]) ? + ((bitField < DecodeLen[13]) ? 13 : 14) : 15)); bstream.readBits(bits); var N = DecodePos[bits] + ((bitField - DecodeLen[bits -1]) >>> (16 - bits)); @@ -370,7 +371,7 @@ function RarDecodeNumber(bstream, dec) { } -function RarMakeDecodeTables(BitLength, offset, dec, size) { +function rarMakeDecodeTables(BitLength, offset, dec, size) { var DecodeLen = dec.DecodeLen, DecodePos = dec.DecodePos, DecodeNum = dec.DecodeNum; var LenCount = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], TmpPos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], @@ -385,7 +386,7 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) { DecodeLen[0] = 0; for (var I = 1; I < 16; ++I) { - N = 2 * (N+LenCount[I]); + N = 2 * (N + LenCount[I]); M = (N << (15-I)); if (M > 0xFFFF) M = 0xFFFF; @@ -393,9 +394,11 @@ function RarMakeDecodeTables(BitLength, offset, dec, size) { DecodePos[I] = DecodePos[I-1] + LenCount[I-1]; TmpPos[I] = DecodePos[I]; } - for (I = 0; I < size; ++I) - if (BitLength[I + offset] != 0) - DecodeNum[ TmpPos[ BitLength[offset + I] & 0xF ]++] = I; + for (I = 0; I < size; ++I) { + if (BitLength[I + offset] != 0) { + DecodeNum[ TmpPos[ BitLength[offset + I] & 0xF ]++] = I; + } + } } // TODO: implement @@ -504,7 +507,7 @@ function RarReadTables20(bstream) { TableSize = rNC20 + rDC20 + rRC20; for (var I = 0; I < rBC20; I++) BitLength[I] = bstream.readBits(4); - RarMakeDecodeTables(BitLength, 0, BD, rBC20); + rarMakeDecodeTables(BitLength, 0, BD, rBC20); I = 0; while (I < TableSize) { var num = RarDecodeNumber(bstream, BD); @@ -528,9 +531,9 @@ function RarReadTables20(bstream) { } } } - RarMakeDecodeTables(Table, 0, LD, rNC20); - RarMakeDecodeTables(Table, rNC20, DD, rDC20); - RarMakeDecodeTables(Table, rNC20 + rDC20, RD, rRC20); + rarMakeDecodeTables(Table, 0, LD, rNC20); + rarMakeDecodeTables(Table, rNC20, DD, rDC20); + rarMakeDecodeTables(Table, rNC20 + rDC20, RD, rRC20); for (var i = UnpOldTable20.length; i--;) UnpOldTable20[i] = Table[i]; } @@ -596,7 +599,7 @@ function Unpack29(bstream, Solid) { } else { var LowDist = RarDecodeNumber(bstream, LDD); if (LowDist === 16) { - lowDistRepCount = rLOW_DIST_REP_COUNT - 1; + lowDistRepCount = rLowDistRepCount - 1; Distance += prevLowDist; } else { Distance += LowDist; @@ -774,8 +777,7 @@ var RarLocalFile = function(bstream) { if (this.header.headType != FILE_HEAD && this.header.headType != ENDARC_HEAD) { this.isValid = false; info("Error! RAR Volume did not include a FILE_HEAD header "); - } - else { + } else { // read in the compressed data this.fileData = null; if (this.header.packSize > 0) { diff --git a/cps/static/js/untar.js b/cps/static/js/untar.js index 56407408..fb8cdb8d 100644 --- a/cps/static/js/untar.js +++ b/cps/static/js/untar.js @@ -7,7 +7,7 @@ * * TAR format: http://www.gnu.org/software/automake/manual/tar/Standard.html */ - /* global bitjs, importScripts, Uint8Array */ +/* global bitjs, importScripts, Uint8Array */ // This file expects to be invoked as a Worker (see onmessage below). importScripts("io.js"); @@ -72,9 +72,9 @@ var TarLocalFile = function(bstream) { if (this.prefix.length) { this.name = this.prefix + this.name; } - bstream.readBytes(12); // 512 - 500 + bstream.readBytes(12); // 512 - 500 } else { - bstream.readBytes(255); // 512 - 257 + bstream.readBytes(255); // 512 - 257 } // Done header, now rest of blocks are the file contents. @@ -88,7 +88,7 @@ var TarLocalFile = function(bstream) { // A regular file. if (this.typeflag === 0) { info(" This is a regular file."); - var sizeInBytes = parseInt(this.size); + // var sizeInBytes = parseInt(this.size); this.fileData = new Uint8Array(bstream.bytes.buffer, bstream.ptr, this.size); if (this.name.length > 0 && this.size > 0 && this.fileData && this.fileData.buffer) { this.isValid = true; @@ -100,9 +100,9 @@ var TarLocalFile = function(bstream) { var remaining = 512 - this.size % 512; if (remaining > 0 && remaining < 512) { bstream.readBytes(remaining); - } + } } else if (this.typeflag === 5) { - info(" This is a directory.") + info(" This is a directory."); } }; @@ -127,7 +127,7 @@ var untar = function(arrayBuffer) { if (oneLocalFile && oneLocalFile.isValid) { localFiles.push(oneLocalFile); totalUncompressedBytesInArchive += oneLocalFile.size; - } + } } totalFilesInArchive = localFiles.length; diff --git a/cps/static/js/unzip.js b/cps/static/js/unzip.js index 6f5fe7cc..2d9e0bc6 100644 --- a/cps/static/js/unzip.js +++ b/cps/static/js/unzip.js @@ -119,8 +119,7 @@ ZipLocalFile.prototype.unzip = function() { // 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; } @@ -510,30 +509,30 @@ function inflate(compressedData, numDecompressedBytes) { var buffer = new bitjs.io.ByteBuffer(numDecompressedBytes); //var numBlocks = 0; var blockSize = 0; - + var bFinal; // block format: http://tools.ietf.org/html/rfc1951#page-9 do { - var bFinal = bstream.readBits(1); + bFinal = bstream.readBits(1); var bType = bstream.readBits(2); blockSize = 0; // ++numBlocks; // no compression if (bType === 0) { // skip remaining bits in this byte - while (bstream.bitPtr != 0) bstream.readBits(1); + while (bstream.bitPtr !== 0) bstream.readBits(1); var len = bstream.readBits(16), - nlen = bstream.readBits(16); + // nlen = bstream.readBits(16); // TODO: check if nlen is the ones-complement of len? - if(len > 0) buffer.insertBytes(bstream.readBytes(len)); + if (len > 0) buffer.insertBytes(bstream.readBytes(len)); blockSize = len; } // fixed Huffman codes - else if(bType === 1) { + else if (bType === 1) { blockSize = inflateBlockData(bstream, getFixedLiteralTable(), getFixedDistanceTable(), buffer); } // dynamic Huffman codes - else if(bType === 2) { + else if (bType === 2) { var numLiteralLengthCodes = bstream.readBits(5) + 257; var numDistanceCodes = bstream.readBits(5) + 1, numCodeLengthCodes = bstream.readBits(4) + 4; @@ -567,24 +566,25 @@ function inflate(compressedData, numDecompressedBytes) { var prevCodeLength = 0; while (literalCodeLengths.length < numLiteralLengthCodes + numDistanceCodes) { var symbol = decodeSymbol(bstream, codeLengthsCodes); + var repeat; if (symbol <= 15) { literalCodeLengths.push(symbol); prevCodeLength = symbol; } else if (symbol === 16) { - var repeat = bstream.readBits(2) + 3; + repeat = bstream.readBits(2) + 3; while (repeat--) { literalCodeLengths.push(prevCodeLength); } } else if (symbol === 17) { - var repeat = bstream.readBits(3) + 3; + repeat = bstream.readBits(3) + 3; while (repeat--) { literalCodeLengths.push(0); } } else if (symbol === 18) { - var repeat = bstream.readBits(7) + 11; + repeat = bstream.readBits(7) + 11; while (repeat--) { literalCodeLengths.push(0); } diff --git a/cps/templates/search.html b/cps/templates/search.html index 378fc33e..5a2a9c97 100644 --- a/cps/templates/search.html +++ b/cps/templates/search.html @@ -8,6 +8,10 @@ {% else %}

{{entries|length}} {{_('Results for:')}} {{searchterm}}

{%endif%} + {% if g.user.is_authenticated %} + + {% endif %} +
diff --git a/cps/templates/search_form.html b/cps/templates/search_form.html index ad561b19..a665f656 100644 --- a/cps/templates/search_form.html +++ b/cps/templates/search_form.html @@ -14,22 +14,21 @@
- -
-
- -
- - -
-
-
- -
- - -
-
+
+
+ +
+ + +
+
+
+ +
+ + +
+
@@ -71,7 +70,7 @@ {% endfor %}
- {% if languages %} + {% if languages %}
@@ -92,7 +91,65 @@ {% endfor %}
- {% endif%} + {% endif%} +
+
+ + +
+
+ + +
+
+
+ + +
+ + {% if cc|length > 0 %} + {% for c in cc %} +
+ + {% if c.datatype == 'bool' %} + + {% endif %} + + {% if c.datatype == 'int' %} + + {% endif %} + + {% if c.datatype in ['text', 'series'] and not c.is_multiple %} + + {% endif %} + + {% if c.datatype in ['text', 'series'] and c.is_multiple %} + + {% endif %} + + {% if c.datatype == 'enumeration' %} + + {% endif %} + + {% if c.datatype == 'rating' %} + 0 %} + value="{{ '%d' % (book['custom_column_' ~ c.id][0].value / 2) }}" + {% endif %}> + {% endif %} +
+ {% endfor %} + {% endif %} + @@ -107,6 +164,7 @@ {% if not g.user.locale == 'en' %} {% endif %} +