Check for existing duplicate, other minor improvements.

This commit is contained in:
Jim Miller
2011-12-18 19:09:08 -06:00
parent c0ea637aef
commit f634629b98
3 changed files with 48 additions and 29 deletions
+42 -28
View File
@@ -9,11 +9,12 @@ __docformat__ = 'restructuredtext en'
from StringIO import StringIO
from PyQt4.Qt import (QDialog, QVBoxLayout, QGridLayout, QPushButton, QMessageBox,
from PyQt4.Qt import (QDialog, QVBoxLayout, QGridLayout, QPushButton,
QLabel, QLineEdit, QInputDialog, QComboBox )
from calibre.ptempfile import PersistentTemporaryFile
from calibre.ebooks.metadata import MetaInformation
from calibre.gui2 import question_dialog
from calibre_plugins.fanfictiondownloader_plugin.config import prefs
from calibre_plugins.fanfictiondownloader_plugin.fanficdownloader import adapters,writers,exceptions
@@ -88,13 +89,14 @@ class DemoDialog(QDialog):
config.readfp(StringIO(get_resources("defaults.ini")))
config.readfp(StringIO(prefs['personal.ini']))
print("URL:"+unicode(self.url.text()))
adapter = adapters.getAdapter(config,unicode(self.url.text()))
try:
adapter.getStoryMetadataOnly()
except exceptions.FailedToLogin:
print("Login Failed, Need Username/Password.")
userpass = UserPassDialog(self.gui)
userpass = UserPassDialog(self.gui,adapter.getSiteDomain())
userpass.exec_() # exec_ will make it act modal
if userpass.status:
adapter.username = userpass.user.text()
@@ -103,12 +105,9 @@ class DemoDialog(QDialog):
del adapter
return
except exceptions.AdultCheckRequired:
adult = QMessageBox.warning(self, 'Are You Adult?',
"This story requires that you be an adult. Please confirm you are an adult in your locale:",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if adult == QMessageBox.Yes:
if question_dialog(self.gui, 'Are You Adult?', '<p>'+
"This story requires that you be an adult. Please confirm you are an adult in your locale:",
show_copy_button=False):
adapter.is_adult=True
else:
del adapter
@@ -117,33 +116,48 @@ class DemoDialog(QDialog):
story = adapter.getStoryMetadataOnly()
fileform = unicode(self.format.currentText())
writer = writers.getWriter(fileform,config,adapter)
tmp = PersistentTemporaryFile("."+fileform)
print("tmp: "+tmp.name)
writer.writeStory(tmp)
mi = MetaInformation(story.getMetadata("title"),
(story.getMetadata("author"),)) # author is a list.
mi.set_identifiers({'url':story.getMetadata("storyUrl")})
mi.publisher = story.getMetadata("site")
mi.tags = writer.getTags()
mi.languages = ['en']
mi.pubdate = story.getMetadataRaw('datePublished').strftime("%Y-%m-%d")
mi.timestamp = story.getMetadataRaw('dateCreated').strftime("%Y-%m-%d")
mi.comments = story.getMetadata("description")
add=True
identicalbooks = self.db.find_identical_books(mi)
if identicalbooks:
add=False
if question_dialog(self.gui, 'Add Duplicate?', '<p>'+
"That story is already in your library. Create a new one?",
show_copy_button=False):
add=True
if add:
writer = writers.getWriter(fileform,config,adapter)
tmp = PersistentTemporaryFile("."+fileform)
print("tmp: "+tmp.name)
writer.writeStory(tmp)
self.db.add_books([tmp],[fileform],[mi])
self.hide()
mi.set_identifiers({'url':story.getMetadata("storyUrl")})
mi.publisher = story.getMetadata("site")
# Otherwise list of books doesn't update right away.
self.gui.library_view.model().books_added(1)
mi.tags = writer.getTags()
mi.languages = ['en']
mi.pubdate = story.getMetadataRaw('datePublished').strftime("%Y-%m-%d")
mi.timestamp = story.getMetadataRaw('dateCreated').strftime("%Y-%m-%d")
mi.comments = story.getMetadata("description")
(notadded,addedcount)=self.db.add_books([tmp],[fileform],[mi], add_duplicates=True)
# Otherwise list of books doesn't update right away.
self.gui.library_view.model().books_added(addedcount)
self.hide()
# QMessageBox.about(self, 'FFDL Metadata',
# str(adapter.getStoryMetadataOnly()).decode('utf-8'))
del adapter
del writer
try:
del writer
except:
pass
def config(self):
@@ -153,7 +167,7 @@ class DemoDialog(QDialog):
class UserPassDialog(QDialog):
def __init__(self, gui):
def __init__(self, gui, site):
QDialog.__init__(self, gui)
self.gui = gui
self.status=False
@@ -162,7 +176,7 @@ class UserPassDialog(QDialog):
self.l = QGridLayout()
self.setLayout(self.l)
self.l.addWidget(QLabel("This site/story requires you to login."),0,0,1,2)
self.l.addWidget(QLabel("%s requires you to login to download this story."%site),0,0,1,2)
self.l.addWidget(QLabel("User:"),1,0)
self.user = QLineEdit(self)
+3 -1
View File
@@ -26,8 +26,10 @@ class InterfacePlugin(InterfaceAction):
# shortcut. Remember that currently calibre has no central management for
# keyboard shortcuts, so try to use an unusual/unused shortcut.
action_spec = ('FanFictionDownLoader', None,
'Run the FanFictionDownLoader Plugin', None)
'Download FanFiction stories from various web sites', None)
action_type = 'current'
def genesis(self):
# This method is called once per plugin, do initial setup here
@@ -54,6 +54,9 @@ class TestSiteAdapter(BaseSiteAdapter):
if self.story.getMetadata('storyId') == '666':
raise exceptions.StoryDoesNotExist(self.url)
if self.story.getMetadata('storyId') == '670':
time.sleep(2.0)
if self.getConfig("username"):
self.username = self.getConfig("username")