home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / bin / serpentine < prev    next >
Encoding:
Text File  |  2007-01-29  |  5.9 KB  |  192 lines

  1. #!/usr/bin/python
  2. import gtk
  3. import sys
  4. import gobject
  5. import gnome
  6. import gettext
  7.  
  8. from os import path
  9. from gtk import glade
  10. from optparse import OptionParser
  11. from gettext import gettext as _
  12.  
  13.  
  14. # Start threads subsystem
  15. gobject.threads_init ()
  16.  
  17. # Get the application locations
  18. class ApplicationLocations:
  19.     def __init__(self, root, appname):
  20.         self.root = path.abspath(root)
  21.         pyver = "python%d.%d" % sys.version_info[0:2]
  22.         self.lib = path.join(root, "lib", pyver, "site-packages")
  23.         self.data = path.join(root, "share", appname)
  24.         self.bin = path.join(root, "bin")
  25.         self.locale = path.join(root, "share", "locale")
  26.  
  27.     def get_data_file(self, filename):
  28.         return path.join(self.data, filename)
  29.     
  30.     def get_lib_file(self, filename):
  31.         return path.join(self.lib, filename)
  32.  
  33.     def get_bin_file(self, filename):
  34.         return path.join(self.bin, filename)
  35.  
  36.     def get_locale_file(self, filename):
  37.         return path.join(self.locale, filename)
  38.  
  39.     def get_root_file(self, filename):
  40.         return path.join(self.root, filename)
  41.  
  42. root = path.join(path.dirname (path.abspath (sys.argv[0])), "..")
  43. locations = ApplicationLocations(root, "serpentine")
  44.  
  45. # Setup i18n
  46. gettext.bindtextdomain("serpentine", locations.locale)
  47. gettext.textdomain("serpentine")
  48. glade.bindtextdomain("serpentine", locations.locale)
  49. glade.textdomain("serpentine")
  50.  
  51. # Parse args
  52. def parse_args (option, opt_str, value, parser):
  53.     setattr (parser.values, option.dest,  list (parser.rargs))
  54.  
  55. parser = OptionParser()
  56. parser.add_option ("-s", "--simulate", action="store_true", dest="simulate",
  57.                    help=_("Recording operations will be done in simulation mode."),
  58.                    default=False)
  59. parser.add_option ("-d", "--debug", action="store_true", dest="debug",
  60.                    help=_("Shows debugging information from recording backend."),
  61.                    default=False)
  62. parser.add_option ("-p", "--preferences", action="store_true", dest="preferences",
  63.                    help=_("Shows preferences dialog."), default=False)
  64.                    
  65. parser.add_option ("-w", "--write", action="callback", callback=parse_args,
  66.                    help=_("Writes the filenames after this option to a CD. "
  67.                    "This will show a dialog suitable for embedding in other "
  68.                    "applications."), dest="write_files", default=None)
  69.  
  70. parser.add_option ("-o", "--open", action="callback", callback=parse_args,
  71.                    help=_("Uses filenames after this option as the playlist "
  72.                    "contents."), dest="open_files", default=None)
  73.  
  74. parser.add_option ("-n", "--no-gnomevfs", action="store_true", dest="no_gvfs",
  75.                    help=_("Do not use GnomeVfs module."),
  76.                    default=False)
  77.                    
  78. (options, args) = parser.parse_args()
  79. sys.argv = sys.argv[:1]
  80.  
  81. # Depend on GStreamer 0.10 when available
  82. try:
  83.     import pygst
  84.     pygst.require("0.10")
  85. except ImportError:
  86.     pass
  87.     
  88. import gst
  89. try:
  90.     src = gst.element_factory_make("gnomevfssrc")
  91.     SUPPORTS_GNOMEVFS = src is not None
  92.     del src
  93.  
  94. # gst 0.10 raises an exception
  95. except Exception:
  96.     SUPPORTS_GNOMEVFS = False
  97.  
  98. # Add our default lib dir to the path
  99. assert path.isdir(locations.lib)
  100. if locations.lib not in sys.path:
  101.     sys.path.insert (0, locations.lib)
  102.  
  103. # Actually start the program
  104. from serpentine.common import SerpentineError
  105. from serpentine import SerpentineApplication, operations, gtkutil
  106. from serpentine import HeadlessApplication
  107.  
  108.  
  109. class OurListener (operations.OperationListener):
  110.     def on_finished (self, event):
  111.         # Route it to main loop
  112.         gobject.idle_add(gtk.main_quit)
  113.         
  114. listener = OurListener ()
  115. if options.write_files:
  116.     app = HeadlessApplication (locations)
  117. else:
  118.     app = SerpentineApplication (locations)
  119.  
  120. app.listeners.append (listener)
  121. app.preferences.simulate = options.simulate
  122. app.preferences.debug = options.debug
  123. app.preferences.useGnomeVfs = SUPPORTS_GNOMEVFS and not options.no_gvfs
  124.  
  125. if not SUPPORTS_GNOMEVFS and not options.no_gvfs:
  126.     print >> sys.stderr, ("GnomeVfs backend disabled. Install GnomeVfs plugin "
  127.                           "for GStreamer %d.%d.%d" % gst.gst_version)
  128.  
  129. gnome_app = gnome.init ('serpentine', app.preferences.version)
  130.  
  131. if app.preferences.simulate:
  132.     primary_text = _("Simulation mode")
  133.     secondary_text = _("Serpentine is on simulation mode, no actual writing "
  134.                        "will be done on inserted media.")
  135.                        
  136.     dlg = gtkutil.dialog_warn (primary_text, secondary_text, title = "Serpentine", run=False)
  137.     dlg.set_icon_name ("gnome-dev-cdrom-audio")
  138.     dlg.run ()
  139.     dlg.destroy ()
  140.  
  141. def check_error(ret):
  142.     if ret == operations.ERROR:
  143.         raise SystemError(1)
  144.  
  145. # Check if we want to write files
  146. if options.write_files is not None:
  147.     if len (options.write_files) == 0:
  148.         print >> sys.stderr, "Choose at least one valid filename"
  149.         sys.exit (1)
  150.     try:
  151.         # Check if the operation was successful
  152.         app.clear_files()
  153.         check_error(app.add_files(options.write_files, sync=True))
  154.         try:
  155.             app.validate_files()
  156.         except SerpentineError:
  157.             raise SystemError(1)
  158.             
  159.         check_error(app.write_files(sync=True))
  160.             
  161.     except SerpentineError, e:
  162.         print >> sys.stderr, e
  163.         sys.exit (1)
  164.     
  165.  
  166. # Show main window
  167. else:
  168.     if options.preferences:
  169.         from serpentine.preferences import recordingPreferencesWindow
  170.         win = recordingPreferencesWindow (app.preferences)
  171.         win.set_icon_name ("gnome-dev-cdrom-audio")
  172.         win.show ()
  173.         win.connect ("delete-event", gtk.main_quit)
  174.         gtk.main ()
  175.         sys.exit (0)
  176.         
  177.     else:
  178.         app.show_window ()
  179.  
  180.  
  181. try:
  182.     if options.open_files is not None and len(options.open_files) > 0:
  183.         app.clear_files()
  184.         app.add_files(options.open_files, sync=True)
  185.  
  186.     app.start ()
  187. except SerpentineError, e:
  188.     print >> sys.stderr, e
  189.     sys.exit (1)
  190.  
  191. gtk.main()
  192.