Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
douban-api-proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
douban-api-proxy
Commits
6ab4ff9a
Unverified
Commit
6ab4ff9a
authored
Nov 19, 2017
by
Andriy Zasypkin
Committed by
GitHub
Nov 19, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'comic_server' into comic_server
parents
ec121818
57567850
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
146 additions
and
93 deletions
+146
-93
helper.py
cps/helper.py
+19
-0
kthoom.js
cps/static/js/kthoom.js
+105
-87
stats.html
cps/templates/stats.html
+4
-0
web.py
cps/web.py
+18
-6
No files found.
cps/helper.py
View file @
6ab4ff9a
...
@@ -508,3 +508,22 @@ class Updater(threading.Thread):
...
@@ -508,3 +508,22 @@ class Updater(threading.Thread):
logging
.
getLogger
(
'cps.web'
)
.
debug
(
"Could not remove:"
+
item_path
)
logging
.
getLogger
(
'cps.web'
)
.
debug
(
"Could not remove:"
+
item_path
)
shutil
.
rmtree
(
source
,
ignore_errors
=
True
)
shutil
.
rmtree
(
source
,
ignore_errors
=
True
)
def
check_unrar
(
unrarLocation
):
error
=
False
if
os
.
path
.
exists
(
unrarLocation
):
try
:
p
=
subprocess
.
Popen
(
unrarLocation
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
p
.
wait
()
for
lines
in
p
.
stdout
.
readlines
():
if
isinstance
(
lines
,
bytes
):
lines
=
lines
.
decode
(
'utf-8'
)
value
=
re
.
search
(
'UNRAR (.*) freeware'
,
lines
)
if
value
:
version
=
value
.
group
(
1
)
except
Exception
:
error
=
True
version
=
_
(
u'Excecution permissions missing'
)
else
:
version
=
_
(
u'Unrar binary file not found'
)
error
=
True
return
(
error
,
version
)
cps/static/js/kthoom.js
View file @
6ab4ff9a
...
@@ -289,16 +289,15 @@ function loadFromArrayBuffer(ab) {
...
@@ -289,16 +289,15 @@ function loadFromArrayBuffer(ab) {
imageFilenames
.
push
(
f
.
filename
);
imageFilenames
.
push
(
f
.
filename
);
imageFiles
.
push
(
new
kthoom
.
ImageFile
(
f
));
imageFiles
.
push
(
new
kthoom
.
ImageFile
(
f
));
// add thumbnails to the TOC list
// add thumbnails to the TOC list
$
(
'#thumbnails'
).
append
(
$
(
'#thumbnails'
).
append
(
"<li>
\
"<li>
\
<a data-page='"
+
imageFiles
.
length
+
"'>
\
<a data-page='"
+
imageFiles
.
length
+
"'>
\
<img src='"
+
imageFiles
[
imageFiles
.
length
-
1
].
dataURI
+
"' />
\
<img src='"
+
imageFiles
[
imageFiles
.
length
-
1
].
dataURI
+
"' />
\
<span>"
+
imageFiles
.
length
+
"</span>
\
<span>"
+
imageFiles
.
length
+
"</span>
\
</a>
\
</a>
\
</li>"
</li>"
);
);
//}
}
}
var
percentage
=
(
ab
.
page
+
1
)
/
(
ab
.
last
+
1
);
var
percentage
=
(
ab
.
page
+
1
)
/
(
ab
.
last
+
1
);
totalImages
=
ab
.
last
+
1
;
totalImages
=
ab
.
last
+
1
;
...
@@ -339,81 +338,93 @@ function setImage(url) {
...
@@ -339,81 +338,93 @@ function setImage(url) {
updateScale
(
true
);
updateScale
(
true
);
canvas
.
width
=
innerWidth
-
100
;
canvas
.
width
=
innerWidth
-
100
;
canvas
.
height
=
200
;
canvas
.
height
=
200
;
x
.
fillStyle
=
"red"
;
x
.
fillStyle
=
"black"
;
x
.
font
=
"50px sans-serif"
;
x
.
textAlign
=
"center"
;
x
.
font
=
"24px sans-serif"
;
x
.
strokeStyle
=
"black"
;
x
.
strokeStyle
=
"black"
;
x
.
fillText
(
"Loading Page #"
+
(
currentImage
+
1
),
100
,
100
);
x
.
fillText
(
"Loading Page #"
+
(
currentImage
+
1
),
innerWidth
/
2
,
100
);
}
else
{
}
else
{
if
(
$
(
"body"
).
css
(
"scrollHeight"
)
/
innerHeight
>
1
)
{
if
(
url
===
"error"
)
{
$
(
"body"
).
css
(
"overflowY"
,
"scroll"
);
}
var
img
=
new
Image
();
img
.
onerror
=
function
()
{
canvas
.
width
=
innerWidth
-
100
;
canvas
.
height
=
300
;
updateScale
(
true
);
updateScale
(
true
);
x
.
fillStyle
=
"orange"
;
canvas
.
width
=
innerWidth
-
100
;
x
.
font
=
"50px sans-serif"
;
canvas
.
height
=
200
;
x
.
fillStyle
=
"black"
;
x
.
textAlign
=
"center"
;
x
.
font
=
"24px sans-serif"
;
x
.
strokeStyle
=
"black"
;
x
.
strokeStyle
=
"black"
;
x
.
fillText
(
"Page #"
+
(
currentImage
+
1
)
+
" ("
+
x
.
fillText
(
"Unable to decompress image #"
+
(
currentImage
+
1
),
innerWidth
/
2
,
100
);
imageFiles
[
currentImage
].
filename
+
")"
,
100
,
100
);
}
else
{
x
.
fillStyle
=
"red"
;
if
(
$
(
"body"
).
css
(
"scrollHeight"
)
/
innerHeight
>
1
)
{
x
.
fillText
(
"Is corrupt or not an image"
,
100
,
200
);
$
(
"body"
).
css
(
"overflowY"
,
"scroll"
);
var
xhr
=
new
XMLHttpRequest
();
if
(
/
(
html|htm
)
$/
.
test
(
imageFiles
[
currentImage
].
filename
))
{
xhr
.
open
(
"GET"
,
url
,
true
);
xhr
.
onload
=
function
()
{
//document.getElementById('mainText').style.display = '';
$
(
"#mainText"
).
css
(
"display"
,
""
);
$
(
"#mainText"
).
innerHTML
(
"<iframe style=
\"
width:100%;height:700px;border:0
\"
src=
\"
data:text/html,"
+
escape
(
xhr
.
responseText
)
+
"
\"
></iframe>"
);
}
xhr
.
send
(
null
);
}
else
if
(
!
/
(
jpg|jpeg|png|gif
)
$/
.
test
(
imageFiles
[
currentImage
].
filename
)
&&
imageFiles
[
currentImage
].
data
.
uncompressedSize
<
10
*
1024
)
{
xhr
.
open
(
"GET"
,
url
,
true
);
xhr
.
onload
=
function
()
{
$
(
"#mainText"
).
css
(
"display"
,
""
);
$
(
"#mainText"
).
innerText
(
xhr
.
responseText
);
};
xhr
.
send
(
null
);
}
};
img
.
onload
=
function
()
{
var
h
=
img
.
height
,
w
=
img
.
width
,
sw
=
w
,
sh
=
h
;
settings
.
rotateTimes
=
(
4
+
settings
.
rotateTimes
)
%
4
;
x
.
save
();
if
(
settings
.
rotateTimes
%
2
===
1
)
{
sh
=
w
;
sw
=
h
;
}
canvas
.
height
=
sh
;
canvas
.
width
=
sw
;
x
.
translate
(
sw
/
2
,
sh
/
2
);
x
.
rotate
(
Math
.
PI
/
2
*
settings
.
rotateTimes
);
x
.
translate
(
-
w
/
2
,
-
h
/
2
);
if
(
settings
.
vflip
)
{
x
.
scale
(
1
,
-
1
);
x
.
translate
(
0
,
-
h
);
}
if
(
settings
.
hflip
)
{
x
.
scale
(
-
1
,
1
);
x
.
translate
(
-
w
,
0
);
}
}
canvas
.
style
.
display
=
"none"
;
scrollTo
(
0
,
0
);
x
.
drawImage
(
img
,
0
,
0
);
updateScale
();
var
img
=
new
Image
();
img
.
onerror
=
function
()
{
canvas
.
width
=
innerWidth
-
100
;
canvas
.
height
=
300
;
updateScale
(
true
);
x
.
fillStyle
=
"black"
;
x
.
font
=
"50px sans-serif"
;
x
.
strokeStyle
=
"black"
;
x
.
fillText
(
"Page #"
+
(
currentImage
+
1
)
+
" ("
+
imageFiles
[
currentImage
].
filename
+
")"
,
innerWidth
/
2
,
100
);
x
.
fillStyle
=
"black"
;
x
.
fillText
(
"Is corrupt or not an image"
,
innerWidth
/
2
,
200
);
var
xhr
=
new
XMLHttpRequest
();
if
(
/
(
html|htm
)
$/
.
test
(
imageFiles
[
currentImage
].
filename
))
{
xhr
.
open
(
"GET"
,
url
,
true
);
xhr
.
onload
=
function
()
{
//document.getElementById('mainText').style.display = '';
$
(
"#mainText"
).
css
(
"display"
,
""
);
$
(
"#mainText"
).
innerHTML
(
"<iframe style=
\"
width:100%;height:700px;border:0
\"
src=
\"
data:text/html,"
+
escape
(
xhr
.
responseText
)
+
"
\"
></iframe>"
);
}
xhr
.
send
(
null
);
}
else
if
(
!
/
(
jpg|jpeg|png|gif
)
$/
.
test
(
imageFiles
[
currentImage
].
filename
)
&&
imageFiles
[
currentImage
].
data
.
uncompressedSize
<
10
*
1024
)
{
xhr
.
open
(
"GET"
,
url
,
true
);
xhr
.
onload
=
function
()
{
$
(
"#mainText"
).
css
(
"display"
,
""
);
$
(
"#mainText"
).
innerText
(
xhr
.
responseText
);
};
xhr
.
send
(
null
);
}
};
img
.
onload
=
function
()
{
var
h
=
img
.
height
,
w
=
img
.
width
,
sw
=
w
,
sh
=
h
;
settings
.
rotateTimes
=
(
4
+
settings
.
rotateTimes
)
%
4
;
x
.
save
();
if
(
settings
.
rotateTimes
%
2
===
1
)
{
sh
=
w
;
sw
=
h
;
}
canvas
.
height
=
sh
;
canvas
.
width
=
sw
;
x
.
translate
(
sw
/
2
,
sh
/
2
);
x
.
rotate
(
Math
.
PI
/
2
*
settings
.
rotateTimes
);
x
.
translate
(
-
w
/
2
,
-
h
/
2
);
if
(
settings
.
vflip
)
{
x
.
scale
(
1
,
-
1
);
x
.
translate
(
0
,
-
h
);
}
if
(
settings
.
hflip
)
{
x
.
scale
(
-
1
,
1
);
x
.
translate
(
-
w
,
0
);
}
canvas
.
style
.
display
=
"none"
;
scrollTo
(
0
,
0
);
x
.
drawImage
(
img
,
0
,
0
);
updateScale
();
canvas
.
style
.
display
=
""
;
canvas
.
style
.
display
=
""
;
$
(
"body"
).
css
(
"overflowY"
,
""
);
$
(
"body"
).
css
(
"overflowY"
,
""
);
x
.
restore
();
x
.
restore
();
};
};
img
.
src
=
url
;
img
.
src
=
url
;
}
}
}
}
}
...
@@ -528,19 +539,26 @@ function keyHandler(evt) {
...
@@ -528,19 +539,26 @@ function keyHandler(evt) {
function
ImageLoadCallback
(
event
)
{
function
ImageLoadCallback
(
event
)
{
var
jso
=
this
.
response
;
var
jso
=
this
.
response
;
if
(
jso
.
page
!==
jso
.
last
)
// Unable to decompress file, or no response from server
{
if
(
jso
===
null
){
// var secRequest = new XMLHttpRequest();
setImage
(
"error"
);
this
.
open
(
"GET"
,
this
.
fileid
+
"/"
+
(
jso
.
page
+
1
));
this
.
addEventListener
(
"load"
,
ImageLoadCallback
);
this
.
send
();
}
}
else
else
{
{
var
diff
=
((
new
Date
).
getTime
()
-
start
)
/
1000
;
if
(
jso
.
page
!==
jso
.
last
)
console
.
log
(
'Transfer done in '
+
diff
+
's'
);
{
// var secRequest = new XMLHttpRequest();
this
.
open
(
"GET"
,
this
.
fileid
+
"/"
+
(
jso
.
page
+
1
));
this
.
addEventListener
(
"load"
,
ImageLoadCallback
);
this
.
send
();
}
else
{
var
diff
=
((
new
Date
).
getTime
()
-
start
)
/
1000
;
console
.
log
(
'Transfer done in '
+
diff
+
's'
);
}
loadFromArrayBuffer
(
jso
);
}
}
loadFromArrayBuffer
(
jso
);
}
}
function
init
(
fileid
)
{
function
init
(
fileid
)
{
start
=
(
new
Date
).
getTime
();
start
=
(
new
Date
).
getTime
();
...
...
cps/templates/stats.html
View file @
6ab4ff9a
...
@@ -42,6 +42,10 @@
...
@@ -42,6 +42,10 @@
<th>
Kindlegen
</th>
<th>
Kindlegen
</th>
<td>
{{versions['KindlegenVersion']}}
</td>
<td>
{{versions['KindlegenVersion']}}
</td>
</tr>
</tr>
<tr>
<th>
Unrar
</th>
<td>
{{versions['unrarVersion']}}
</td>
</tr>
<tr>
<tr>
<th>
ImageMagick
</th>
<th>
ImageMagick
</th>
<td>
{{versions['ImageVersion']}}
</td>
<td>
{{versions['ImageVersion']}}
</td>
...
...
cps/web.py
View file @
6ab4ff9a
...
@@ -941,11 +941,11 @@ def get_comic_book(book_id, book_format, page):
...
@@ -941,11 +941,11 @@ def get_comic_book(book_id, book_format, page):
extractedfile
=
"data:image/png;base64,"
+
b64
extractedfile
=
"data:image/png;base64,"
+
b64
fileData
=
{
"name"
:
rarNames
[
page
],
"page"
:
page
,
"last"
:
rarNames
.
__len__
()
-
1
,
"content"
:
extractedfile
}
fileData
=
{
"name"
:
rarNames
[
page
],
"page"
:
page
,
"last"
:
rarNames
.
__len__
()
-
1
,
"content"
:
extractedfile
}
except
:
except
:
return
""
# rarfile not valid
# rarfile not valid
# ToDo: error handling
app
.
logger
.
error
(
'Unrar binary not found unable to decompress file '
+
cbr_file
)
return
""
else
:
else
:
app
.
logger
.
info
(
'Unrar is not supported please install python rarfile extension'
)
# no support means return nothing
# no support means return nothing
return
""
return
""
if
book_format
==
"cbz"
:
if
book_format
==
"cbz"
:
...
@@ -1523,7 +1523,13 @@ def stats():
...
@@ -1523,7 +1523,13 @@ def stats():
versions
[
'requests'
]
=
requests
.
__version__
versions
[
'requests'
]
=
requests
.
__version__
versions
[
'pysqlite'
]
=
db
.
engine
.
dialect
.
dbapi
.
version
versions
[
'pysqlite'
]
=
db
.
engine
.
dialect
.
dbapi
.
version
versions
[
'sqlite'
]
=
db
.
engine
.
dialect
.
dbapi
.
sqlite_version
versions
[
'sqlite'
]
=
db
.
engine
.
dialect
.
dbapi
.
sqlite_version
if
rar_support
:
rarVersion
=
helper
.
check_unrar
(
config
.
config_rarfile_location
)
if
not
rarVersion
[
0
]:
versions
[
'unrarVersion'
]
=
rarVersion
[
1
]
else
:
versions
[
'unrarVersion'
]
=
_
(
'not installed'
)
app
.
logger
.
info
(
rarVersion
[
1
])
return
render_title_template
(
'stats.html'
,
bookcounter
=
counter
,
authorcounter
=
authors
,
versions
=
versions
,
return
render_title_template
(
'stats.html'
,
bookcounter
=
counter
,
authorcounter
=
authors
,
versions
=
versions
,
categorycounter
=
categorys
,
seriecounter
=
series
,
title
=
_
(
u"Statistics"
))
categorycounter
=
categorys
,
seriecounter
=
series
,
title
=
_
(
u"Statistics"
))
...
@@ -2551,8 +2557,14 @@ def configuration_helper(origin):
...
@@ -2551,8 +2557,14 @@ def configuration_helper(origin):
# Rarfile Content configuration
# Rarfile Content configuration
# ToDo check: location valid
# ToDo check: location valid
if
"config_rarfile_location"
in
to_save
:
if
"config_rarfile_location"
in
to_save
:
content
.
config_rarfile_location
=
to_save
[
"config_rarfile_location"
]
.
strip
()
check
=
helper
.
check_unrar
(
to_save
[
"config_rarfile_location"
]
.
strip
())
if
not
check
[
0
]
:
content
.
config_rarfile_location
=
to_save
[
"config_rarfile_location"
]
.
strip
()
else
:
flash
(
check
[
1
],
category
=
"error"
)
return
render_title_template
(
"config_edit.html"
,
content
=
config
,
origin
=
origin
,
gdrive
=
gdrive_support
,
goodreads
=
goodreads_support
,
rarfile_support
=
rar_support
,
title
=
_
(
u"Basic Configuration"
))
content
.
config_default_role
=
0
content
.
config_default_role
=
0
if
"admin_role"
in
to_save
:
if
"admin_role"
in
to_save
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment