Initial commit
This commit is contained in:
commit
d3eadee951
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/.idea
|
||||||
|
/__pycache__
|
98
app.py
Normal file
98
app.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
from flask import Flask
|
||||||
|
from flask import render_template
|
||||||
|
from flask import request
|
||||||
|
from flask import g
|
||||||
|
import threading
|
||||||
|
from urllib import parse
|
||||||
|
import scripts.func as func
|
||||||
|
from scripts import database
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_comics():
|
||||||
|
with app.app_context():
|
||||||
|
func.get_comics()
|
||||||
|
|
||||||
|
|
||||||
|
def verify_paths():
|
||||||
|
with app.app_context():
|
||||||
|
database.verify_paths()
|
||||||
|
|
||||||
|
|
||||||
|
with app.app_context():
|
||||||
|
database.initialize_db()
|
||||||
|
thread = threading.Thread(target=get_comics, args=())
|
||||||
|
thread.daemon = True
|
||||||
|
thread.start()
|
||||||
|
thread2 = threading.Thread(target=verify_paths, args=())
|
||||||
|
thread2.daemon = True
|
||||||
|
thread2.start()
|
||||||
|
|
||||||
|
|
||||||
|
@app.teardown_appcontext
|
||||||
|
def close_connection(exception):
|
||||||
|
db = getattr(g, '_database', None)
|
||||||
|
if db is not None:
|
||||||
|
db.close()
|
||||||
|
|
||||||
|
|
||||||
|
def update_comic_db(sender, **kw):
|
||||||
|
try:
|
||||||
|
database.add_comics(kw["meta"])
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
func.comic_loaded.connect(update_comic_db)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def hello_world():
|
||||||
|
return render_template("index.html", title="Hello World")
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/movies")
|
||||||
|
def movies():
|
||||||
|
return "No Movies"
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/music")
|
||||||
|
def music():
|
||||||
|
return "No music"
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/games")
|
||||||
|
def games():
|
||||||
|
return "No Games"
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/comics")
|
||||||
|
def comics():
|
||||||
|
polling = request.args.get("polling")
|
||||||
|
|
||||||
|
if polling:
|
||||||
|
try:
|
||||||
|
return render_template("publisherList.html", comics=database.get_publishers())
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return "Sucks to be you"
|
||||||
|
try:
|
||||||
|
return render_template("publisherView.html", title="Comics", comics=database.get_publishers())
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/comics/<publisher>")
|
||||||
|
def comics_publisher(publisher):
|
||||||
|
publisher = parse.unquote(publisher)
|
||||||
|
series = request.args.get("series")
|
||||||
|
series_year = request.args.get("seriesYear")
|
||||||
|
comic = request.args.get("comic")
|
||||||
|
if series:
|
||||||
|
return render_template("comicView.html", title="Comics", comics=database.db_get_comics_in_series(series, publisher, series_year))
|
||||||
|
return render_template("seriesView.html", title="Comics", comics=database.db_get_series_by_publisher(publisher))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run()
|
8
nginx.conf
Normal file
8
nginx.conf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
server_name rpi.narnian.us;
|
||||||
|
#location / { try_files $uri @rpiWebApp; }
|
||||||
|
location / {
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param SCRIPT_NAME "";
|
||||||
|
fastcgi_pass unix:/run/matt/rpiWebApp/fcgi.sock;
|
||||||
|
}
|
BIN
scripts/__pycache__/database.cpython-37.pyc
Normal file
BIN
scripts/__pycache__/database.cpython-37.pyc
Normal file
Binary file not shown.
BIN
scripts/__pycache__/func.cpython-37.pyc
Normal file
BIN
scripts/__pycache__/func.cpython-37.pyc
Normal file
Binary file not shown.
160
scripts/database.py
Normal file
160
scripts/database.py
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
from flask import Flask
|
||||||
|
from flask import g
|
||||||
|
import sqlite3
|
||||||
|
import os, time
|
||||||
|
|
||||||
|
from comicapi.issuestring import IssueString
|
||||||
|
|
||||||
|
DATABASE = "/var/lib/rpiWebApp/database.db"
|
||||||
|
|
||||||
|
|
||||||
|
def get_db():
|
||||||
|
db = getattr(g, '_database', None)
|
||||||
|
if db is None:
|
||||||
|
db = g._database = sqlite3.connect(DATABASE)
|
||||||
|
return db
|
||||||
|
|
||||||
|
|
||||||
|
def initialize_db():
|
||||||
|
get_db().execute("""CREATE TABLE IF NOT EXISTS "comics" (
|
||||||
|
"path" TEXT UNIQUE,
|
||||||
|
"tagOrigin" TEXT,
|
||||||
|
"series" TEXT,
|
||||||
|
"issue" REAL,
|
||||||
|
"issueText" TEXT,
|
||||||
|
"title" TEXT,
|
||||||
|
"publisher" TEXT,
|
||||||
|
"month" INTEGER,
|
||||||
|
"year" INTEGER,
|
||||||
|
"day" INTEGER,
|
||||||
|
"seriesYear" INTEGER,
|
||||||
|
"issueCount" INTEGER,
|
||||||
|
"volume" TEXT,
|
||||||
|
"genre" TEXT,
|
||||||
|
"language" TEXT,
|
||||||
|
"comments" TEXT,
|
||||||
|
"volumeCount" INTEGER,
|
||||||
|
"criticalRating" TEXT,
|
||||||
|
"country" TEXT,
|
||||||
|
"alternateSeries" TEXT,
|
||||||
|
"alternateNumber" TEXT,
|
||||||
|
"alternateCount" INTEGER,
|
||||||
|
"imprint" TEXT,
|
||||||
|
"notes" TEXT,
|
||||||
|
"webLink" TEXT,
|
||||||
|
"format" TEXT,
|
||||||
|
"manga" TEXT,
|
||||||
|
"blackAndWhite" TEXT,
|
||||||
|
"pageCount" TEXT,
|
||||||
|
"maturityRating" TEXT,
|
||||||
|
"storyArc" TEXT,
|
||||||
|
"seriesGroup" TEXT,
|
||||||
|
"scanInfo" TEXT,
|
||||||
|
"characters" TEXT,
|
||||||
|
"teams" TEXT,
|
||||||
|
"locations" TEXT,
|
||||||
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE
|
||||||
|
)""")
|
||||||
|
get_db().execute("""CREATE TABLE IF NOT EXISTS "credits" (
|
||||||
|
"id" INTEGER NOT NULL,
|
||||||
|
"role" TEXT,
|
||||||
|
"name" TEXT,
|
||||||
|
"primary" INTEGER NOT NULL
|
||||||
|
)""")
|
||||||
|
get_db().execute("CREATE INDEX IF NOT EXISTS path_index ON comics(path);")
|
||||||
|
get_db().commit()
|
||||||
|
|
||||||
|
|
||||||
|
def table_exists(table_name):
|
||||||
|
cursor = get_db().execute("SELECT name FROM sqlite_master WHERE type='table' AND name='{}'".format(table_name))
|
||||||
|
get_db().commit()
|
||||||
|
if cursor.rowcount == 0:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def add_comics(meta):
|
||||||
|
data = []
|
||||||
|
for info in meta:
|
||||||
|
issue = IssueString(info[1].issue).asFloat()
|
||||||
|
data.append((info[0], info[1].tagOrigin, info[1].series, (issue or -1), info[1].issue, info[1].title, info[1].publisher,
|
||||||
|
info[1].month, info[1].year, info[1].day, info[1].seriesYear, info[1].issueCount, info[1].volume, info[1].genre,
|
||||||
|
info[1].language, info[1].comments, info[1].volumeCount, info[1].criticalRating, info[1].country,
|
||||||
|
info[1].alternateSeries, info[1].alternateNumber, info[1].alternateCount, info[1].imprint,
|
||||||
|
info[1].notes, info[1].webLink, info[1].format, info[1].manga, info[1].blackAndWhite,
|
||||||
|
info[1].pageCount, info[1].maturityRating, info[1].storyArc, info[1].seriesGroup, info[1].scanInfo,
|
||||||
|
info[1].characters, info[1].teams, info[1].locations))
|
||||||
|
get_db().executemany(
|
||||||
|
"""INSERT into comics(path, tagOrigin, series, issue, issueText, title, publisher,
|
||||||
|
month, year, day, seriesYear, issueCount, volume, genre, language, comments, volumeCount,
|
||||||
|
criticalRating, country, alternateSeries, alternateNumber, alternateCount, imprint,
|
||||||
|
notes, webLink, format, manga, blackAndWhite, pageCount, maturityRating, storyArc,
|
||||||
|
seriesGroup, scanInfo, characters, teams, locations)
|
||||||
|
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
|
||||||
|
data)
|
||||||
|
get_db().commit()
|
||||||
|
|
||||||
|
|
||||||
|
def db_get_all_comics():
|
||||||
|
original_factory = get_db().row_factory
|
||||||
|
|
||||||
|
def dict_factory(cursor, row):
|
||||||
|
d = {}
|
||||||
|
for idx, col in enumerate(cursor.description):
|
||||||
|
d[col[0]] = row[idx]
|
||||||
|
return d
|
||||||
|
get_db().row_factory = dict_factory
|
||||||
|
result = get_db().execute("SELECT series, issue, title FROM comics ORDER BY series, issue").fetchall()
|
||||||
|
get_db().commit()
|
||||||
|
get_db().row_factory = original_factory
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def db_get_series_by_publisher(publisher):
|
||||||
|
series = []
|
||||||
|
rows = get_db().execute("SELECT DISTINCT series, seriesYear, publisher FROM comics WHERE publisher LIKE ? ORDER BY series, seriesYear", [publisher]).fetchall()
|
||||||
|
for row in rows:
|
||||||
|
series.append(row)
|
||||||
|
return series
|
||||||
|
|
||||||
|
|
||||||
|
def db_get_comics_in_series(series, publisher, series_year):
|
||||||
|
comics = []
|
||||||
|
rows = get_db().execute("SELECT series, issue, title FROM comics WHERE series LIKE ? AND publisher LIKE ? AND seriesYear LIKE ? ORDER BY series, issue", [series, publisher, series_year]).fetchall()
|
||||||
|
get_db().commit()
|
||||||
|
for row in rows:
|
||||||
|
comics.append(row)
|
||||||
|
return comics
|
||||||
|
|
||||||
|
|
||||||
|
def get_publishers():
|
||||||
|
publishers = []
|
||||||
|
rows = get_db().execute("SELECT DISTINCT publisher FROM comics ORDER BY publisher").fetchall()
|
||||||
|
|
||||||
|
for row in rows:
|
||||||
|
publishers.append(row[0])
|
||||||
|
return publishers
|
||||||
|
|
||||||
|
|
||||||
|
def comic_path_in_db(path):
|
||||||
|
try:
|
||||||
|
result = get_db().execute("SELECT path FROM comics WHERE path LIKE ?", [path])
|
||||||
|
get_db().commit()
|
||||||
|
|
||||||
|
if result.fetchone():
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
print(path)
|
||||||
|
print(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def verify_paths():
|
||||||
|
while True:
|
||||||
|
paths = get_db().execute("SELECT path FROM comics").fetchall()
|
||||||
|
get_db().commit()
|
||||||
|
for path in paths:
|
||||||
|
if not os.path.exists(path[0]):
|
||||||
|
get_db().execute("DELETE FROM comics WHERE path LIKE ?", [path[0]])
|
||||||
|
get_db().commit()
|
||||||
|
time.sleep(60*60*24*5)
|
67
scripts/func.py
Normal file
67
scripts/func.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
from comicapi import comicarchive
|
||||||
|
from blinker import Namespace
|
||||||
|
import os, sys
|
||||||
|
|
||||||
|
from scripts import database
|
||||||
|
|
||||||
|
rpi_signals = Namespace()
|
||||||
|
comic_loaded = rpi_signals.signal("comic-loaded")
|
||||||
|
|
||||||
|
# Directories
|
||||||
|
|
||||||
|
COMICS_DIRECTORY = "/usb/storage/media/Comics/"
|
||||||
|
MOVIES_DIRECTORY = "/usb/storage/media/Videos/Movies/"
|
||||||
|
TV_SHOWS_DIRECTORY = "/usb/storage/media/Videos/TV/"
|
||||||
|
VIDEOS_DIRECTORY = "/usb/storage/media/Videos/Videos/"
|
||||||
|
GAMES_DIRECTORY = "/usb/storage/media/games/"
|
||||||
|
MUSIC_DIRECTORY = "/usb/storage/media/Music/"
|
||||||
|
|
||||||
|
#############
|
||||||
|
|
||||||
|
|
||||||
|
def get_comics():
|
||||||
|
meta = []
|
||||||
|
i = 0
|
||||||
|
for root, dirs, files in os.walk(COMICS_DIRECTORY):
|
||||||
|
for f in files:
|
||||||
|
if f.endswith(".cbr"):
|
||||||
|
path = os.path.join(root, f)
|
||||||
|
if not database.comic_path_in_db(path):
|
||||||
|
archive = comicarchive.ComicArchive(path, default_image_path="/usb/www/matthew/rpiWebApp/static/icon.png")
|
||||||
|
meta.append((path, archive.readCIX()))
|
||||||
|
i += 1
|
||||||
|
if i > 20:
|
||||||
|
comic_loaded.send("anonymous", meta=meta.copy())
|
||||||
|
meta.clear()
|
||||||
|
i = 0
|
||||||
|
comic_loaded.send("anonymous", meta=meta)
|
||||||
|
|
||||||
|
|
||||||
|
def bytestring_path(path):
|
||||||
|
"""Given a path, which is either a bytes or a unicode, returns a str
|
||||||
|
path (ensuring that we never deal with Unicode pathnames).
|
||||||
|
"""
|
||||||
|
# Pass through bytestrings.
|
||||||
|
if isinstance(path, bytes):
|
||||||
|
return path
|
||||||
|
|
||||||
|
# Try to encode with default encodings, but fall back to UTF8.
|
||||||
|
try:
|
||||||
|
return path.encode(_fsencoding())
|
||||||
|
except (UnicodeError, LookupError):
|
||||||
|
return path.encode('utf8')
|
||||||
|
|
||||||
|
|
||||||
|
def _fsencoding():
|
||||||
|
"""Get the system's filesystem encoding. On Windows, this is always
|
||||||
|
UTF-8 (not MBCS).
|
||||||
|
"""
|
||||||
|
encoding = sys.getfilesystemencoding() or sys.getdefaultencoding()
|
||||||
|
if encoding == 'mbcs':
|
||||||
|
# On Windows, a broken encoding known to Python as "MBCS" is
|
||||||
|
# used for the filesystem. However, we only use the Unicode API
|
||||||
|
# for Windows paths, so the encoding is actually immaterial so
|
||||||
|
# we can avoid dealing with this nastiness. We arbitrarily
|
||||||
|
# choose UTF-8.
|
||||||
|
encoding = 'utf8'
|
||||||
|
return encoding
|
BIN
static/icon.png
Normal file
BIN
static/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
15
templates/base.html
Normal file
15
templates/base.html
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>{{ title }}</title>
|
||||||
|
<link rel="icon" type="image/png" href="static/icon.png" sizes="32x32">
|
||||||
|
{% block head %}
|
||||||
|
{% endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block content %}
|
||||||
|
<p>Hello World!</p>
|
||||||
|
{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
5
templates/comicList.html
Normal file
5
templates/comicList.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% for comic in comics %}
|
||||||
|
<li>
|
||||||
|
{{ comic[0] }} {% if comic[1] > 0 %}{{ "#{0:g}".format(comic[1]) }}{% endif %} {% if comic[2] != None %}{{ comic[2] }} {% endif %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
7
templates/comicView.html
Normal file
7
templates/comicView.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<ul id="comics">
|
||||||
|
{% include "comicList.html" %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
1
templates/index.html
Normal file
1
templates/index.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
{% extends "base.html" %}
|
3
templates/publisherList.html
Normal file
3
templates/publisherList.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{% for publisher in comics %}
|
||||||
|
<li><a href="/comics/{{ publisher }}">{{ publisher }}</a></li>
|
||||||
|
{% endfor %}
|
27
templates/publisherView.html
Normal file
27
templates/publisherView.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
window.setInterval(function () {
|
||||||
|
$.ajax({
|
||||||
|
url: "comics",
|
||||||
|
type: "get",
|
||||||
|
data: {polling: true},
|
||||||
|
success: function(response) {
|
||||||
|
$("#publishers").html(response);
|
||||||
|
},
|
||||||
|
error: function(xhr) {
|
||||||
|
//Do Something to handle error
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 5000);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<ul id="publishers">
|
||||||
|
{% include "publisherList.html" %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
3
templates/seriesList.html
Normal file
3
templates/seriesList.html
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{% for comic in comics %}
|
||||||
|
<li><a href="/comics/{{ comic[2]|urlencode }}?series={{ comic[0]|urlencode }}&seriesYear={{ comic[1] }}">{{ comic[0] }} {{ comic[1] }}</a></li>
|
||||||
|
{% endfor %}
|
7
templates/seriesView.html
Normal file
7
templates/seriesView.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<ul id="series">
|
||||||
|
{% include "seriesList.html" %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
142
test.py
Normal file
142
test.py
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
import threading
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
from comicapi import comicarchive
|
||||||
|
from comicapi.issuestring import IssueString
|
||||||
|
from urllib import parse
|
||||||
|
|
||||||
|
os.environ["UNRAR_LIB_PATH"] = 'C:\\Program Files (x86)\\UnrarDLL\\UnRAR.dll'
|
||||||
|
|
||||||
|
COMICS_DIRECTORY = "F:\\comics"
|
||||||
|
|
||||||
|
print(b'\xE2\x80\x93'.decode("utf-8", "replace"))
|
||||||
|
#os._exit(0)
|
||||||
|
|
||||||
|
def get_comics():
|
||||||
|
meta = []
|
||||||
|
i = 0
|
||||||
|
for root, dirs, files in os.walk(COMICS_DIRECTORY):
|
||||||
|
for f in files:
|
||||||
|
if f.endswith(".cbr"):
|
||||||
|
path = os.path.join(root, f)
|
||||||
|
print(path)
|
||||||
|
if not og_comic_path_in_db(path):
|
||||||
|
archive = comicarchive.ComicArchive(path, default_image_path="C:\\Users\\Matthew\\Documents\\MyPrograms\\Websites\\rpi web interface\\rpiWebApp\\static\\icon.png")
|
||||||
|
meta.append((path, archive.readCIX()))
|
||||||
|
return meta
|
||||||
|
|
||||||
|
'''
|
||||||
|
thread = threading.Thread(target=get_comics, args=())
|
||||||
|
thread.daemon = True
|
||||||
|
print('start')
|
||||||
|
thread.start()
|
||||||
|
time.sleep(3)'''
|
||||||
|
|
||||||
|
|
||||||
|
DATABASE = "C:\\Users\\Matthew\\Documents\\MyPrograms\\Websites\\rpi web interface\\database.db"
|
||||||
|
|
||||||
|
db = sqlite3.connect(DATABASE)
|
||||||
|
|
||||||
|
|
||||||
|
def get_db():
|
||||||
|
global db
|
||||||
|
return db
|
||||||
|
|
||||||
|
|
||||||
|
def initialize_db():
|
||||||
|
get_db().execute("""CREATE TABLE IF NOT EXISTS "comics" (
|
||||||
|
"path" TEXT UNIQUE,
|
||||||
|
"tagOrigin" TEXT,
|
||||||
|
"series" TEXT,
|
||||||
|
"issue" REAL,
|
||||||
|
"issueText" TEXT,
|
||||||
|
"title" TEXT,
|
||||||
|
"publisher" TEXT,
|
||||||
|
"month" INTEGER,
|
||||||
|
"year" INTEGER,
|
||||||
|
"day" INTEGER,
|
||||||
|
"issueCount" INTEGER,
|
||||||
|
"volume" TEXT,
|
||||||
|
"genre" TEXT,
|
||||||
|
"language" TEXT,
|
||||||
|
"comments" TEXT,
|
||||||
|
"volumeCount" INTEGER,
|
||||||
|
"criticalRating" TEXT,
|
||||||
|
"country" TEXT,
|
||||||
|
"alternateSeries" TEXT,
|
||||||
|
"alternateNumber" TEXT,
|
||||||
|
"alternateCount" INTEGER,
|
||||||
|
"imprint" TEXT,
|
||||||
|
"notes" TEXT,
|
||||||
|
"webLink" TEXT,
|
||||||
|
"format" TEXT,
|
||||||
|
"manga" TEXT,
|
||||||
|
"blackAndWhite" TEXT,
|
||||||
|
"pageCount" TEXT,
|
||||||
|
"maturityRating" TEXT,
|
||||||
|
"storyArc" TEXT,
|
||||||
|
"seriesGroup" TEXT,
|
||||||
|
"scanInfo" TEXT,
|
||||||
|
"characters" TEXT,
|
||||||
|
"teams" TEXT,
|
||||||
|
"locations" TEXT,
|
||||||
|
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE
|
||||||
|
)""")
|
||||||
|
get_db().execute("""CREATE TABLE IF NOT EXISTS "credits" (
|
||||||
|
"id" INTEGER NOT NULL,
|
||||||
|
"role" TEXT,
|
||||||
|
"name" TEXT,
|
||||||
|
"primary" INTEGER NOT NULL
|
||||||
|
)""")
|
||||||
|
get_db().execute("CREATE INDEX IF NOT EXISTS path_index ON comics(path);")
|
||||||
|
get_db().commit()
|
||||||
|
|
||||||
|
|
||||||
|
def add_comics(meta):
|
||||||
|
data = []
|
||||||
|
for info in meta:
|
||||||
|
issue = IssueString(info[1].issue).asFloat()
|
||||||
|
data.append((info[0], info[1].tagOrigin, info[1].series, (issue or -1), info[1].issue, info[1].title, info[1].publisher,
|
||||||
|
info[1].month, info[1].year, info[1].day, info[1].issueCount, info[1].volume, info[1].genre,
|
||||||
|
info[1].language, info[1].comments, info[1].volumeCount, info[1].criticalRating, info[1].country,
|
||||||
|
info[1].alternateSeries, info[1].alternateNumber, info[1].alternateCount, info[1].imprint,
|
||||||
|
info[1].notes, info[1].webLink, info[1].format, info[1].manga, info[1].blackAndWhite,
|
||||||
|
info[1].pageCount, info[1].maturityRating, info[1].storyArc, info[1].seriesGroup, info[1].scanInfo,
|
||||||
|
info[1].characters, info[1].teams, info[1].locations))
|
||||||
|
get_db().executemany(
|
||||||
|
"""INSERT into comics(path, tagOrigin, series, issue, issueText, title, publisher,
|
||||||
|
month, year, day, issueCount, volume, genre, language, comments, volumeCount,
|
||||||
|
criticalRating, country, alternateSeries, alternateNumber, alternateCount, imprint,
|
||||||
|
notes, webLink, format, manga, blackAndWhite, pageCount, maturityRating, storyArc,
|
||||||
|
seriesGroup, scanInfo, characters, teams, locations)
|
||||||
|
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
|
||||||
|
data)
|
||||||
|
get_db().commit()
|
||||||
|
|
||||||
|
|
||||||
|
def og_comic_path_in_db(path):
|
||||||
|
result = get_db().execute("SELECT EXISTS(SELECT * FROM comics WHERE path=?) LIMIT 1;", (path,))
|
||||||
|
if result.fetchone()[0] == 1:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def comic_path_in_db(path):
|
||||||
|
result = get_db().execute("SELECT path FROM comics WHERE path LIKE ?", [path.encode("utf8")])
|
||||||
|
if result.fetchone():
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
#initialize_db()
|
||||||
|
#add_comics(get_comics())
|
||||||
|
|
||||||
|
|
||||||
|
#for row in get_db().execute('SELECT * FROM comics ORDER BY series'):
|
||||||
|
# print(row)
|
||||||
|
|
||||||
|
|
||||||
|
#test_path = "/usb/storage/media/Comics/Marvel/Marvel Super Hero Adventures - Spider-Man – Web Designers 2019/Marvel Super Hero Adventures - Spider-Man – Web Designers #001 (2019).cbr"
|
||||||
|
|
||||||
|
#print(comic_path_in_db(test_path))
|
8
yourapplication.fcgi
Normal file
8
yourapplication.fcgi
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
from flup.server.fcgi import WSGIServer
|
||||||
|
from app import app
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.debug = True
|
||||||
|
WSGIServer(app, bindAddress='/run/matt/rpiWebApp/fcgi.sock').run()
|
Loading…
Reference in New Issue
Block a user