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"
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)