home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 January / maximum-cd-2011-01.iso / DiscContents / calibre-0.7.26.msi / file_1466 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-10-31  |  4.4 KB  |  104 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from __future__ import with_statement
  5. __license__ = 'GPL v3'
  6. __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
  7. __docformat__ = 'restructuredtext en'
  8. import os
  9. import cPickle
  10. import sys
  11. from multiprocessing.connection import Client
  12. from threading import Thread
  13. from Queue import Queue
  14. from contextlib import closing
  15. from binascii import unhexlify
  16. from calibre import prints
  17. from calibre.constants import iswindows, isosx
  18. PARALLEL_FUNCS = {
  19.     'lrfviewer': ('calibre.gui2.lrf_renderer.main', 'main', None),
  20.     'ebook-viewer': ('calibre.gui2.viewer.main', 'main', None),
  21.     'render_pages': ('calibre.ebooks.comic.input', 'render_pages', 'notification'),
  22.     'gui_convert': ('calibre.gui2.convert.gui_conversion', 'gui_convert', 'notification'),
  23.     'gui_catalog': ('calibre.gui2.convert.gui_conversion', 'gui_catalog', 'notification'),
  24.     'move_library': ('calibre.library.move', 'move_library', 'notification'),
  25.     'read_metadata': ('calibre.ebooks.metadata.worker', 'read_metadata_', 'notification'),
  26.     'read_pdf_metadata': ('calibre.utils.podofo.__init__', 'get_metadata_', None),
  27.     'write_pdf_metadata': ('calibre.utils.podofo.__init__', 'set_metadata_', None),
  28.     'save_book': ('calibre.ebooks.metadata.worker', 'save_book', 'notification') }
  29.  
  30. class Progress(Thread):
  31.     
  32.     def __init__(self, conn):
  33.         Thread.__init__(self)
  34.         self.daemon = True
  35.         self.conn = conn
  36.         self.queue = Queue()
  37.  
  38.     
  39.     def __call__(self, percent, msg = ''):
  40.         self.queue.put((percent, msg))
  41.  
  42.     
  43.     def run(self):
  44.         while True:
  45.             x = self.queue.get()
  46.             if x is None:
  47.                 break
  48.             
  49.             
  50.             try:
  51.                 self.conn.send(x)
  52.             continue
  53.             break
  54.             continue
  55.  
  56.  
  57.  
  58.  
  59. def get_func(name):
  60.     (module, func, notification) = PARALLEL_FUNCS[name]
  61.     module = __import__(module, fromlist = [
  62.         1])
  63.     func = getattr(module, func)
  64.     return (func, notification)
  65.  
  66.  
  67. def main():
  68.     if iswindows:
  69.         os.closerange(3, 256)
  70.     
  71.     if isosx and 'CALIBRE_WORKER_ADDRESS' not in os.environ:
  72.         gui_main = main
  73.         import calibre.gui2.main
  74.         return gui_main([
  75.             'calibre'])
  76.     if 'CALIBRE_LAUNCH_INTERPRETER' in os.environ:
  77.         main = main
  78.         import calibre.utils.pyconsole.interpreter
  79.         return main()
  80.     address = cPickle.loads(unhexlify(os.environ['CALIBRE_WORKER_ADDRESS']))
  81.     key = unhexlify(os.environ['CALIBRE_WORKER_KEY'])
  82.     resultf = unhexlify(os.environ['CALIBRE_WORKER_RESULT'])
  83.     
  84.     try:
  85.         conn = _[1]
  86.         (name, args, kwargs, desc) = conn.recv()
  87.         (func, notification) = get_func(name)
  88.         notifier = Progress(conn)
  89.         result = func(*args, **kwargs)
  90.         if result is not None and os.path.exists(os.path.dirname(resultf)):
  91.             cPickle.dump(result, open(resultf, 'wb'), -1)
  92.         
  93.         notifier.queue.put(None)
  94.     finally:
  95.         pass
  96.  
  97.     sys.stdout.flush()
  98.     sys.stderr.flush()
  99.     return 0
  100.  
  101. if __name__ == '__main__':
  102.     sys.exit(main())
  103.  
  104.