Example #1
0
 def __init__(self):
     if definitions.WINDOWS:
         self.lame_command = definitions.path_with("bin", "lame.exe")
         self.ffmpeg_command = definitions.path_with("bin", "ffmpeg.exe")
     else:
         self.lame_command = "lame"
         self.ffmpeg_command = "ffmpeg"
Example #2
0
 def can_be_used():
     if not definitions.WINDOWS:
         # I don't know how to check it, then, let's assume everything is OK.
         return True
     else:
         lame_cmd = definitions.path_with("bin", "lame.exe")
         ffmpeg_cmd = definitions.path_with("bin", "ffmpeg.exe")
         if os.path.exists(lame_cmd) and os.path.exists(ffmpeg_cmd):
             return True
         else:
             return False
 def __init__(self):
     self.builder = Gtk.Builder()
     prepare_builder_for_translation(self.builder)
     self.builder.add_from_file(path_with("glade", "insertDialog.glade"))
     self.dialog = self.builder.get_object("insertDialog")
     self.builder.connect_signals(self)
     self.links = self.builder.get_object("links")
 def can_be_used():
     if not definitions.WINDOWS:
         return True # Same situation as LAME
     else:
         ffmpeg_cmd = definitions.path_with("bin", "ffmpeg.exe")
         if os.path.exists(ffmpeg_cmd):
             return True
         else:
             return False
 def on_video_finish(self, marshaller, video):
     logging.info("on_video_finish called")
     self.refresh_marshaller()
     self.refresh_download_progress()
     self.reset_data_label()
     if not definitions.WINDOWS:
         finished = len(self.marshaller.finished)
         total = len(self.marshaller.all)
         string = _("\"{}\" finished. ({}/{})").format(video.video.title, finished, total)             
         self.notification.update("Bat-man", string, path_with("glade", "batman-logo.png"))
         self.notification.show()
 def __init__(self):
     self.builder = Gtk.Builder()
     prepare_builder_for_translation(self.builder)
     self.builder.add_from_file(path_with("glade", "optionsDialog.glade"))
     self.dialog = self.builder.get_object("optionsDialog")
     self.videoqualityComboBox = self.builder.get_object("videoqualityComboBox")
     self.conversionqualityScale = self.builder.get_object("conversionqualityScale")
     self.videocodecCheckButton = self.builder.get_object("videocodecCheckButton")
     self.audiocodecCheckButton = self.builder.get_object("audiocodecCheckButton")
     self.videocodecComboBox = self.builder.get_object("videocodecComboBox")
     self.audiocodecComboBox = self.builder.get_object("audiocodecComboBox")
     
     # Smart-ass solution.
     qualityIndex = [240, 360, 480, 720, 1080].index(definitions.OPTIONS.quality)
     self.videoqualityComboBox.set_active(qualityIndex)
     self.conversionqualityScale.set_value(definitions.OPTIONS.VBRquality)
     self.videocodecCheckButton.set_active(definitions.OPTIONS.videoCodecEnabled)
     self.audiocodecCheckButton.set_active(definitions.OPTIONS.audioCodecEnabled)
     
     self.videoCodecEnabled = definitions.OPTIONS.videoCodecEnabled
     self.audioCodecEnabled = definitions.OPTIONS.audioCodecEnabled
     if self.videoCodecEnabled:
         self.videoCodec = definitions.OPTIONS.videoCodec
     if self.audioCodecEnabled:
         self.audioCodec = definitions.OPTIONS.audioCodec
     
     self.videocodecListStore = Gtk.ListStore(object, str)
     self.audiocodecListStore = Gtk.ListStore(object, str)
     self.builder.connect_signals(self)
     with self.handlers_blocked():
         self.set_combo_boxes_fields()
     
     renderer_text = Gtk.CellRendererText()
     with self.handlers_blocked():
         self.videocodecComboBox.set_model(self.videocodecListStore)
         self.videocodecComboBox.pack_start(renderer_text, True)
         self.videocodecComboBox.add_attribute(renderer_text, "text", 1)
         self.audiocodecComboBox.set_model(self.audiocodecListStore)
         self.audiocodecComboBox.pack_start(renderer_text, True)
         self.audiocodecComboBox.add_attribute(renderer_text, "text", 1)
 def __init__(self, marshaller):
     # Threads
     self.helperThread = HelperThread(marshaller)
     self.inserterThread = InserterThread(self.helperThread)
     self.inserterThread.message_callback = self.on_inserter_thread_callback
     
     # Gtk
     self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
     self.builder = Gtk.Builder()
     prepare_builder_for_translation(self.builder)
     self.builder.add_from_file(path_with("glade", "mainWindow.glade"))
     self.window = self.builder.get_object("mainWindow")
     self.insertLinksDialog = InsertLinksDialog()
     self.aboutDialog = AboutDialog()
     self.optionsDialog = OptionsDialog()
     self.destination = definitions.OPTIONS.defaultFolder
     self.folderChoose = Gtk.FileChooserDialog(
                             title=_("Choose destination folder"),
                             action=Gtk.FileChooserAction.SELECT_FOLDER,
                             buttons=(Gtk.STOCK_OK, Gtk.ResponseType.OK,
                                      Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL))
     
     #                              DownloadAndEncode, title, state
     self.liststore = self.builder.get_object("videoListStore")
     self.marshaller = marshaller
     self.marshaller.on_video_start_download = lambda x, y: GObject.idle_add(lambda *args: self.refresh_marshaller(), None)
     self.marshaller.on_video_progress = lambda *args: GObject.idle_add(lambda *args: self.refresh_download_progress(), None)
     self.marshaller.on_video_start_encoding = lambda x, y, z: GObject.idle_add(self.on_video_start_encoding, None)
     self.marshaller.on_video_finish = lambda x, y: GObject.idle_add(self.on_video_finish, x, y)
     self.helperThread.start()
     self.inserterThread.start()
     
     self.treeview = self.builder.get_object("videoTreeView")
     cellRendererTitle = Gtk.CellRendererText()
     columnTitle = Gtk.TreeViewColumn(_("Title"), cellRendererTitle, text=1)
     cellRendererState = Gtk.CellRendererText()
     columnState = Gtk.TreeViewColumn(_("State"), cellRendererState, text=2)
     self.treeview.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
     self.treeview.connect("drag-data-received", self.onTreeViewDragDataRecieved)
     self.treeview.drag_dest_add_text_targets()
     self.clear_list = self.builder.get_object("clearList")
     self.clear_list.set_sensitive(False)
     self.set_destination = self.builder.get_object("setDestination")
     
     self.treeview.append_column(columnTitle)
     self.treeview.append_column(columnState)
     
     self.popupTreeView = self.builder.get_object("popupTreeView")
     
     self.progressbar = self.builder.get_object("progressbar")
     self.download_progressbar = self.builder.get_object("downloadProgressbar")
     self.download_progressbar.set_show_text(True)
     self.download_progressbar.set_text("")
     self.general_data = self.builder.get_object("generalData")
     self.statusbar = self.builder.get_object("statusbar")
     ctx_id = self.statusbar.get_context_id("inserter")
     self.statusbar.push(ctx_id, _("Ready!"))
     self.itemFeedback = self.builder.get_object("imagemenuitemFeedback")
     
     self.refresh_marshaller()
     self.reset_destination()
     self.reset_data_label()
     
     self.builder.connect_signals(self)
     
     # LibNotify
     if not definitions.WINDOWS:
         self.notification = Notify.Notification.new("Bat-man", "",
                                                     path_with("glade", "batman-logo.png"))
 def __init__(self):
     self.builder = Gtk.Builder()
     prepare_builder_for_translation(self.builder)
     self.builder.add_from_file(path_with("glade", "aboutDialog.glade"))
     self.dialog = self.builder.get_object("aboutDialog")
     self.dialog.set_version(definitions.VERSION)
import gettext
# For some awkward reason, gettext module doesn't works with Gtk, because it's a C library
# Locale, instead, works.
import locale
import os
import gc
from multiprocessing import freeze_support
import logging
import sys
from contextlib import contextmanager

GObject.threads_init()

APP = "batman"
DIR = path_with("locale")
if definitions.WINDOWS:
    os.environ["LANG"] = locale.getdefaultlocale()[0]

# Don't know if it's just with me, but, under Windows, this doesn't works.
try:
    locale.bindtextdomain(APP, DIR)
except:
    logging.warning("Couldn't bind text domain, translations are partially disabled")

gettext.bindtextdomain(APP, DIR)
gettext.textdomain(APP)
gettext.install(APP, DIR)

def prepare_builder_for_translation(builder):
    builder.set_translation_domain(APP)