mirror of
https://github.com/JimmXinu/FanFicFare.git
synced 2026-05-09 05:21:13 +02:00
145 lines
5.4 KiB
Python
145 lines
5.4 KiB
Python
#!/usr/bin/env python
|
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
|
from __future__ import (unicode_literals, division, absolute_import,
|
|
print_function)
|
|
|
|
__license__ = 'Apache License'
|
|
__copyright__ = '2011, Fanficdownloader team'
|
|
__docformat__ = 'restructuredtext en'
|
|
|
|
if False:
|
|
# This is here to keep my python error checker from complaining about
|
|
# the builtin functions that will be defined by the plugin loading system
|
|
# You do not need this code in your plugins
|
|
get_icons = get_resources = None
|
|
|
|
from StringIO import StringIO
|
|
|
|
from PyQt4.Qt import QDialog, QVBoxLayout, QPushButton, QMessageBox, QLabel
|
|
from calibre.ptempfile import PersistentTemporaryFile
|
|
|
|
from calibre.ebooks.metadata.epub import get_metadata
|
|
|
|
from calibre_plugins.fanfictiondownloader_plugin.config import prefs
|
|
|
|
from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters,writers,exceptions
|
|
|
|
import ConfigParser
|
|
|
|
class DemoDialog(QDialog):
|
|
|
|
def __init__(self, gui, icon, do_user_config):
|
|
QDialog.__init__(self, gui)
|
|
self.gui = gui
|
|
self.do_user_config = do_user_config
|
|
|
|
# The current database shown in the GUI
|
|
# db is an instance of the class LibraryDatabase2 from database.py
|
|
# This class has many, many methods that allow you to do a lot of
|
|
# things.
|
|
self.db = gui.current_db
|
|
|
|
self.l = QVBoxLayout()
|
|
self.setLayout(self.l)
|
|
|
|
self.label = QLabel(prefs['hello_world_msg'])
|
|
self.l.addWidget(self.label)
|
|
|
|
self.setWindowTitle('FanFictionDownLoader')
|
|
self.setWindowIcon(icon)
|
|
|
|
self.about_button = QPushButton('About', self)
|
|
self.about_button.clicked.connect(self.about)
|
|
self.l.addWidget(self.about_button)
|
|
|
|
self.marked_button = QPushButton(
|
|
'Show books with only one format in the calibre GUI', self)
|
|
self.marked_button.clicked.connect(self.marked)
|
|
self.l.addWidget(self.marked_button)
|
|
|
|
self.view_button = QPushButton(
|
|
'View the most recently added book', self)
|
|
self.view_button.clicked.connect(self.view)
|
|
self.l.addWidget(self.view_button)
|
|
|
|
self.ffdl_button = QPushButton(
|
|
'Attempt FFDL', self)
|
|
self.ffdl_button.clicked.connect(self.ffdl)
|
|
self.l.addWidget(self.ffdl_button)
|
|
|
|
self.conf_button = QPushButton(
|
|
'Configure this plugin', self)
|
|
self.conf_button.clicked.connect(self.config)
|
|
self.l.addWidget(self.conf_button)
|
|
|
|
self.resize(self.sizeHint())
|
|
|
|
def about(self):
|
|
# Get the about text from a file inside the plugin zip file
|
|
# The get_resources function is a builtin function defined for all your
|
|
# plugin code. It loads files from the plugin zip file. It returns
|
|
# the bytes from the specified file.
|
|
#
|
|
# Note that if you are loading more than one file, for performance, you
|
|
# should pass a list of names to get_resources. In this case,
|
|
# get_resources will return a dictionary mapping names to bytes. Names that
|
|
# are not found in the zip file will not be in the returned dictionary.
|
|
text = get_resources('about.txt')
|
|
QMessageBox.about(self, 'About the Interface Plugin Demo',
|
|
text.decode('utf-8'))
|
|
|
|
def marked(self):
|
|
fmt_idx = self.db.FIELD_MAP['formats']
|
|
matched_ids = set()
|
|
for record in self.db.data.iterall():
|
|
# Iterate over all records
|
|
fmts = record[fmt_idx]
|
|
# fmts is either None or a comma separated list of formats
|
|
if fmts and ',' not in fmts:
|
|
matched_ids.add(record[0])
|
|
# Mark the records with the matching ids
|
|
self.db.set_marked_ids(matched_ids)
|
|
|
|
# Tell the GUI to search for all marked records
|
|
self.gui.search.setEditText('marked:true')
|
|
self.gui.search.do_search()
|
|
|
|
def ffdl(self):
|
|
|
|
config = ConfigParser.SafeConfigParser()
|
|
config.readfp(StringIO(get_resources("defaults.ini")))
|
|
adapter = adapters.getAdapter(config,"http://test1.com?sid=6646") # http://www.fanfiction.net/s/6439390/1/All_Hallows_Eve") #
|
|
|
|
writer = writers.getWriter("epub",config,adapter)
|
|
tmp = PersistentTemporaryFile(".epub")
|
|
writer.writeStory(tmp)
|
|
print("tmp: "+tmp.name)
|
|
mi = get_metadata(tmp,extract_cover=False)
|
|
self.db.add_books([tmp],["EPUB"],[mi])
|
|
QMessageBox.about(self, 'FFDL Metadata',
|
|
str(adapter.getStoryMetadataOnly()).decode('utf-8'))
|
|
|
|
def view(self):
|
|
most_recent = most_recent_id = None
|
|
timestamp_idx = self.db.FIELD_MAP['timestamp']
|
|
|
|
for record in self.db.data:
|
|
# Iterate over all currently showing records
|
|
timestamp = record[timestamp_idx]
|
|
if most_recent is None or timestamp > most_recent:
|
|
most_recent = timestamp
|
|
most_recent_id = record[0]
|
|
|
|
if most_recent_id is not None:
|
|
# Get the row number of the id as shown in the GUI
|
|
row_number = self.db.row(most_recent_id)
|
|
# Get a reference to the View plugin
|
|
view_plugin = self.gui.iactions['View']
|
|
# Ask the view plugin to launch the viewer for row_number
|
|
view_plugin._view_books([row_number])
|
|
|
|
def config(self):
|
|
self.do_user_config(parent=self)
|
|
# Apply the changes
|
|
self.label.setText(prefs['hello_world_msg'])
|
|
|