home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1155 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  7.3 KB  |  158 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __license__ = 'GPL v3'
  5. __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
  6. __docformat__ = 'restructuredtext en'
  7. import os
  8. from PyQt4.Qt import QWizard, QWizardPage, QIcon, QPixmap, Qt, QThread, pyqtSignal
  9. from calibre.gui2 import error_dialog, choose_dir, gprefs
  10. from calibre.constants import filesystem_encoding
  11. from calibre.library.add_to_library import find_folders_under, find_books_in_folder, hash_merge_format_collections
  12.  
  13. class WizardPage(QWizardPage):
  14.     
  15.     def __init__(self, db, parent):
  16.         QWizardPage.__init__(self, parent)
  17.         self.db = db
  18.         self.register = parent.register
  19.         self.setupUi(self)
  20.         self.do_init()
  21.  
  22.     
  23.     def do_init(self):
  24.         pass
  25.  
  26.  
  27. from calibre.gui2.add_wizard.scan_ui import Ui_WizardPage as ScanWidget
  28.  
  29. class RecursiveFinder(QThread):
  30.     activity_changed = pyqtSignal(object, object)
  31.     activity_iterated = pyqtSignal(object, object)
  32.     
  33.     def __init__(self, parent = None):
  34.         QThread.__init__(self, parent)
  35.         self.canceled = False
  36.         
  37.         self.cancel_callback = lambda : self.canceled
  38.         self.folders = set([])
  39.         self.books = []
  40.  
  41.     
  42.     def cancel(self, *args):
  43.         self.canceled = True
  44.  
  45.     
  46.     def set_params(self, root, db, one_per_folder):
  47.         self.root = root
  48.         self.db = db
  49.         self.one_per_folder = one_per_folder
  50.  
  51.     
  52.     def run(self):
  53.         self.activity_changed.emit(_('Searching for sub-folders'), 0)
  54.         self.folders = find_folders_under(self.root, self.db, cancel_callback = self.cancel_callback)
  55.         if self.canceled:
  56.             return None
  57.         self.activity_changed.emit(_('Searching for books'), len(self.folders))
  58.         for i, folder in enumerate(self.folders):
  59.             if self.canceled:
  60.                 break
  61.             
  62.             books_in_folder = find_books_in_folder(folder, self.one_per_folder, cancel_callback = self.cancel_callback)
  63.             if self.canceled:
  64.                 break
  65.             
  66.             self.books.extend(books_in_folder)
  67.             self.activity_iterated.emit(folder, i)
  68.         
  69.         self.activity_changed.emit(_('Looking for duplicates based on file hash'), 0)
  70.         self.books = hash_merge_format_collections(self.books, cancel_callback = self.cancel_callback)
  71.  
  72.  
  73.  
  74. class ScanPage(WizardPage, ScanWidget):
  75.     ID = 2
  76.  
  77. from calibre.gui2.add_wizard.welcome_ui import Ui_WizardPage as WelcomeWidget
  78.  
  79. class WelcomePage(WizardPage, WelcomeWidget):
  80.     ID = 1
  81.     
  82.     def do_init(self):
  83.         self.registerField('root_folder*', self.opt_root_folder)
  84.         self.register['root_folder'] = self.get_root_folder
  85.         self.register['one_per_folder'] = self.get_one_per_folder
  86.         self.button_choose_root_folder.clicked.connect(self.choose_root_folder)
  87.  
  88.     
  89.     def choose_root_folder(self, *args):
  90.         x = self.get_root_folder()
  91.         if x is None:
  92.             x = '~'
  93.         
  94.         x = choose_dir(self, 'add wizard choose root folder', _('Choose root folder'), default_dir = x)
  95.         if x is not None:
  96.             self.opt_root_folder.setText(os.path.abspath(x))
  97.         
  98.  
  99.     
  100.     def initializePage(self):
  101.         opf = gprefs.get('add wizard one per folder', True)
  102.         self.opt_one_per_folder.setChecked(opf)
  103.         self.opt_many_per_folder.setChecked(not opf)
  104.         add_dir = gprefs.get('add wizard root folder', None)
  105.         if add_dir is not None:
  106.             self.opt_root_folder.setText(add_dir)
  107.         
  108.  
  109.     
  110.     def get_root_folder(self):
  111.         x = unicode(self.opt_root_folder.text()).strip()
  112.         if not x:
  113.             return None
  114.         return os.path.abspath(x.encode(filesystem_encoding))
  115.  
  116.     
  117.     def get_one_per_folder(self):
  118.         return self.opt_one_per_folder.isChecked()
  119.  
  120.     
  121.     def validatePage(self):
  122.         x = self.get_root_folder()
  123.         xu = x.decode(filesystem_encoding)
  124.         if x and os.access(x, os.R_OK) and os.path.isdir(x):
  125.             gprefs['add wizard root folder'] = xu
  126.             gprefs['add wizard one per folder'] = self.get_one_per_folder()
  127.             return True
  128.         error_dialog(self, _('Invalid root folder'), xu + _('is not a valid root folder'), show = True)
  129.         return False
  130.  
  131.  
  132.  
  133. class Wizard(QWizard):
  134.     
  135.     def __init__(self, db, parent = None):
  136.         QWizard.__init__(self, parent)
  137.         self.setModal(True)
  138.         self.setWindowTitle(_('Add books to calibre'))
  139.         self.setWindowIcon(QIcon(I('add_book.svg')))
  140.         self.setPixmap(self.LogoPixmap, QPixmap(P('content_server/calibre.png')).scaledToHeight(80, Qt.SmoothTransformation))
  141.         self.setPixmap(self.WatermarkPixmap, QPixmap(I('welcome_wizard.svg')))
  142.         self.register = { }
  143.         for attr, cls in [
  144.             ('welcome_page', WelcomePage),
  145.             ('scan_page', ScanPage)]:
  146.             setattr(self, attr, cls(db, self))
  147.             self.setPage(getattr(cls, 'ID'), getattr(self, attr))
  148.         
  149.  
  150.  
  151. if __name__ == '__main__':
  152.     from PyQt4.Qt import QApplication
  153.     from calibre.library import db
  154.     app = QApplication([])
  155.     w = Wizard(db())
  156.     w.exec_()
  157.  
  158.