def reingest(sender=None): global last_checked # only run if it is time if (last_checked + check_after) >= time.time(): return worker = context.get_worker() for mp_id, mp in list(repo.items()): logger.debug('reingest checking: {0} status: {1}'.format( mp_id, mediapackage.op_status[mp.getOpStatus('ingest')])) # only finished recordings if not (mp.status == mediapackage.SCHEDULED or mp.status == mediapackage.RECORDING): if mp.getOpStatus('ingest') == mediapackage.OP_FAILED: # check mediapackage status on opencast if needed if (check_published and not is_published(mp_id, mp)) or not check_published: # postpone the ingest until the 'nightly' ingest time else ingest immediately if check_nightly: logger.info( 'scheduled nightly reingest of failed mediapackage: {}' .format(mp_id)) mp.setOpStatus("ingest", mediapackage.OP_NIGHTLY) repo.update(mp) else: logger.info( 'Starting reingest of failed mediapackage: {}'. format(mp_id)) worker.enqueue_job_by_name('ingest', mp) last_checked = time.time()
def reingest(sender=None): global last_checked # only run if it is time if (last_checked + check_after) >= time.time(): return worker = context.get_worker() for mp_id, mp in repo.iteritems(): logger.debug('reingest checking: {0} status: {1}'.format(mp_id, mediapackage.op_status[mp.getOpStatus('ingest')])) # only finished recordings if not (mp.status == mediapackage.SCHEDULED or mp.status == mediapackage.RECORDING): if mp.getOpStatus('ingest') == mediapackage.OP_FAILED: # check mediapackage status on matterhorn if needed if (check_published and not is_published(mp_id, mp)) or not check_published: # postpone the ingest until the 'nightly' ingest time else ingest immediately if check_nightly: logger.info('scheduled nightly reingest of failed mediapackage: {}'.format(mp_id)) mp.setOpStatus("ingest", mediapackage.OP_NIGHTLY) repo.update(mp) else: logger.info('Starting reingest of failed mediapackage: {}'.format(mp_id)) worker.ingest(mp) last_checked = time.time()
def reingest(sender=None): global last_checked # only run if it is time if (last_checked + check_after) >= time.time(): return worker = context.get_worker() for mp_id, mp in repo.iteritems(): logger.debug('reingest checking: %s status: %s', mp_id, mediapackage.op_status[mp.getOpStatus('ingest')]) if mp.getOpStatus('ingest') == mediapackage.OP_FAILED: # check mediapackage status on matterhorn if needed if (check_published and not is_published(mp_id, mp)) or not check_published: logger.info('Starting reingest of failed mediapackage: %s', mp_id) worker.ingest(mp) last_checked = time.time()
def __init__(self, package=None): logger.info("Creating Recording Area") gtk.Box.__init__(self) builder = gtk.Builder() builder.add_from_file(get_ui_path('recorder.glade')) self.repo = context.get_repository() self.dispatcher = context.get_dispatcher() self.worker = context.get_worker() self.recorder = None self.current_mediapackage = None self.current = None self.next = None self.restarting = False self.font = None self.scheduled_recording = False self.focus_is_active = False self.net_activity = None self.error_id = None self.error_text = None self.error_dialog = None self.ok_to_show = False self.swap_active = None self.swap = False # BUILD self.recorderui = builder.get_object("recorderbox") self.main_area = builder.get_object("videobox") self.vubox = builder.get_object("vubox") self.gui = builder # BIG STATUS big_status = builder.get_object("bg_status") self.view = self.set_status_view() big_status.add(self.view) # STATUS BAR self.statusbar=status_bar.StatusBarClass() self.dispatcher.connect("update-rec-status", self.statusbar.SetStatus) self.dispatcher.connect("update-video", self.statusbar.SetVideo) self.dispatcher.connect("galicaster-init", self.check_status_area) self.dispatcher.connect("galicaster-init", self.check_net) self.dispatcher.connect("restart-preview", self.check_status_area) self.dispatcher.connect("net-up", self.check_net, True) self.dispatcher.connect("net-down", self.check_net, False) self.statusbar.SetTimer(0) # VUMETER self.audiobar=Vumeter() # UI self.vubox.add(self.audiobar) self.pack_start(self.recorderui,True,True,0) # Event Manager self.dispatcher.connect("start-record", self.on_scheduled_start) self.dispatcher.connect("stop-record", self.on_stop) self.dispatcher.connect("start-before", self.on_start_before) self.dispatcher.connect("restart-preview", self.on_restart_preview) self.dispatcher.connect("update-rec-vumeter", self.audiobar.SetVumeter) self.dispatcher.connect("galicaster-status", self.event_change_mode) self.dispatcher.connect("galicaster-notify-quit", self.close) nb=builder.get_object("data_panel") pages = nb.get_n_pages() for index in range(pages): page=nb.get_nth_page(index) nb.set_tab_label_packing(page, True, True,gtk.PACK_START) # STATES self.status = GC_INIT self.previous = None self.change_state(GC_INIT) self.dispatcher.connect("reload-profile", self.on_recover_from_error) # PERMISSIONS self.conf = context.get_conf() self.allow_pause = self.conf.get_permission("pause") self.allow_start = self.conf.get_permission("start") self.allow_stop = self.conf.get_permission("stop") self.allow_manual = self.conf.get_permission("manual") self.allow_overlap = self.conf.get_permission("overlap") # OTHER builder.connect_signals(self) self.net_activity = self.conf.get_boolean('ingest', 'active') self.change_state(GC_READY) self.proportion = 1 self.on_start() # SCHEDULER FEEDBACK self.scheduler_thread_id = 1 self.clock_thread_id = 1 self.start_thread_id = None self.scheduler_thread = thread(target=self.scheduler_launch_thread) self.clock_thread = thread(target=self.clock_launch_thread) self.scheduler_thread.daemon = True self.clock_thread.daemon = True self.scheduler_thread.start() self.clock_thread.start() self.dispatcher.emit("galicaster-init") # SHOW OR HIDE SWAP BUTTON if self.conf.get_boolean('basic', 'swapvideos'): self.swap_active = True else: self.swap_active = False
def operationt(op, mpid): response.content_type = 'text/html' worker = context.get_worker() worker.enqueue_job_by_name(op, mpid) return "{0} over {1}".format(op,mpid)
def ingest_question(self,package): """Pops up a question dialog for available operations.""" buttons = None disabled = not self.conf.get_boolean("ingest", "active") day,night = context.get_worker().get_all_job_types_by_mp(package) jobs = day+night text = {"title" : "Media Manager", "main" : "Which operation do you want to perform?" } text['text'] = '' icon = message.QUESTION if disabled: text['text']=text['text']+"The ingest service is disabled." if not self.network: text['text']=text['text']+"Ingest disabled because of network problems." for job in day: if job.lower().count("ingest"): jobs.remove(job) day.remove(job) for job in night: if job.lower().count("ingest"): pass #jobs.remove(job) #night.remove(job) for job in day: op_state = package.operation[job.lower().replace(" ", "")] if op_state == mediapackage.OP_DONE: text['text']="\n" + text['text'] + job + " already perfomed" elif op_state == mediapackage.OP_NIGHTLY: text['text']="\n"+ text['text'] + job + " will be performed tonight" index = 0 response_dict = {} grouped1 = [] grouped2 = [] for job in day: index+=1 response_dict[index]=job grouped1.append(job) grouped1.append(index) for job in night: index+=1 response_dict[index]=job grouped2.append(job) grouped2.append(index) grouped2.append("Cancel") grouped2.append(0) buttons = tuple(grouped1) buttons2 = tuple(grouped2) if icon == message.QUESTION: icon = "INGEST" warning = message.PopUp(icon,text, context.get_mainwindow(), buttons2, buttons) if warning.response == 0: return True elif warning.response == gtk.RESPONSE_OK: # Warning return True else: chosen_job = response_dict[warning.response].lower().replace (" ", "_") if chosen_job.count('nightly'): context.get_worker().do_job_nightly(chosen_job.replace("_",""), package) else: context.get_worker().do_job(chosen_job, package) return True
def ingest_question(self, package): """Pops up a question dialog for available operations.""" buttons = None disabled = not self.conf.get_boolean("ingest", "active") day, night = context.get_worker().get_all_job_types_by_mp(package) jobs = day + night text = { "title": "Media Manager", "main": "Which operation do you want to perform?" } text['text'] = '' icon = message.QUESTION if disabled: text['text'] = text['text'] + "The ingest service is disabled." if not self.network: text['text'] = text[ 'text'] + "Ingest disabled because of network problems." for job in day: if job.lower().count("ingest"): jobs.remove(job) day.remove(job) for job in night: if job.lower().count("ingest"): pass #jobs.remove(job) #night.remove(job) for job in day: op_state = package.operation[job.lower().replace(" ", "")] if op_state == mediapackage.OP_DONE: text['text'] = "\n" + text['text'] + job + " already perfomed" elif op_state == mediapackage.OP_NIGHTLY: text['text'] = "\n" + text[ 'text'] + job + " will be performed tonight" index = 0 response_dict = {} grouped1 = [] grouped2 = [] for job in day: index += 1 response_dict[index] = job grouped1.append(job) grouped1.append(index) for job in night: index += 1 response_dict[index] = job grouped2.append(job) grouped2.append(index) grouped2.append("Cancel") grouped2.append(0) buttons = tuple(grouped1) buttons2 = tuple(grouped2) if icon == message.QUESTION: icon = "INGEST" warning = message.PopUp(icon, text, context.get_mainwindow(), buttons2, buttons) if warning.response == 0: return True elif warning.response == gtk.RESPONSE_OK: # Warning return True else: chosen_job = response_dict[warning.response].lower().replace( " ", "_") if chosen_job.count('nightly'): context.get_worker().do_job_nightly( chosen_job.replace("_", ""), package) else: context.get_worker().do_job(chosen_job, package) return True
def ingest_question(self,package): """Pops up a question dialog for available operations.""" disabled = not self.conf.get_boolean("ingest", "active") day,night = context.get_worker().get_all_job_types_by_mp(package) jobs = day+night text = {"title" : _("Media Manager"), "main" : _("Which operation do you want to perform?") } text['text'] = '' if disabled or not self.network: for job in day: if job.lower().count("ingest"): jobs.remove(job) day.remove(job) for job in night: if job.lower().count("ingest"): pass #jobs.remove(job) #night.remove(job) if disabled: text['text']=text['text']+_("The ingest service is disabled. ") elif not self.network: text['text'] = text['text'] + _("Ingest disabled because of network problems. ") for job in day: op_state = package.operations[job.lower().replace(" ", "")] if op_state == mediapackage.OP_DONE: text['text']=text['text'] + "\n" + _("{0} already performed").format(OPERATION_NAMES.get(job, job)) elif op_state == mediapackage.OP_NIGHTLY: text['text']=text['text'] + "\n" + _("{0} will be performed tonight").format(OPERATION_NAMES.get(job, job)) response_list = ['Ingest', # Resp 1 'Ingest Nightly', # Resp 2 'Cancel Ingest Nightly', # Resp 3 'Export to Zip', # Resp 4 'Export to Zip Nightly', # Resp 5 'Cancel Export to Zip Nightly', # Resp 6 'Side by Side', # Resp 7 'Side by Side Nightly', # Resp 8 'Cancel Side by Side Nightly'] # Resp 9 operations = {} for job in jobs: if job in response_list: operations[job] = response_list.index(job)+1 operations_dialog = message.PopUp(message.OPERATIONS,text, context.get_mainwindow(), operations) if operations_dialog.response == Gtk.ResponseType.REJECT or \ operations_dialog.response == Gtk.ResponseType.DELETE_EVENT or \ operations_dialog.response == Gtk.ResponseType.OK: return True elif 0 < operations_dialog.response <= len(response_list): chosen_job = response_list[operations_dialog.response-1].lower().replace (" ", "") if chosen_job.count('nightly'): context.get_worker().do_job_nightly(chosen_job.replace("_",""), package) else: context.get_worker().do_job(chosen_job, package) return True else: logger.error("Incorrect operation response: {}".format(operations_dialog.response)) return False
# run_galicaster # # Copyright (c) 2011, Teltek Video Research <*****@*****.**> # # This work is licensed under the Creative Commons Attribution- # NonCommercial-ShareAlike 3.0 Unported License. To view a copy of # this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ # or send a letter to Creative Commons, 171 Second Street, Suite 300, # San Francisco, California, 94105, USA. import sys import argparse from galicaster.core import context from galicaster.core.worker import JOBS worker = context.get_worker() repo = context.get_repository() def main(): parser = argparse.ArgumentParser() parser.add_argument("operation", choices=JOBS.values(), help="Galicaster operation") parser.add_argument("mp_id", help="MediaPackage Id in Galicaster Repository") args = parser.parse_args() try: mp = repo[args.mp_id] except KeyError: print "Mediapackage does not exit" return -1
def __init__(self, package=None): logger.info("Creating Recording Area") Gtk.Box.__init__(self) builder = Gtk.Builder() builder.add_from_file(get_ui_path('recorder.glade')) release = builder.get_object("release_label") release.set_label(get_footer()) # TEST self.repo = context.get_repository() self.dispatcher = context.get_dispatcher() self.worker = context.get_worker() self.conf = context.get_conf() self.recorder = context.get_recorder() self.recorder.set_create_drawing_areas_func(self.create_drawing_areas) self.start_recording = False self.font = None self.scheduled_recording = False self.focus_is_active = False self.net_activity = None self.error_dialog = None self.close_before_response_action = False # BUILD self.recorderui = builder.get_object("recorderbox") self.main_area = builder.get_object("videobox") self.vubox = builder.get_object("vubox") self.gui = builder # VUMETER self.rangeVum = 50 self.thresholdVum = self.conf.get_float('audio','min') self.mute = False self.stereo = True self.vumeterL = builder.get_object("progressbarL") self.vumeterR = builder.get_object("progressbarR") self.label_channels= builder.get_object("label_channels") self.low_audio = False self.lowaudio_threshold = self.conf.get_float('lowaudio','lowaudio_threshold') # SWAP if not self.conf.get_boolean('basic', 'swapvideos'): self.gui.get_object("swapbutton").destroy() self.swap = False # STATUS self.view = self.set_status_view() hbox1 = self.gui.get_object('hbox1') hbox1.add(self.view) self.dispatcher.connect_ui("init", self.check_status_area) self.dispatcher.connect_ui("init", self.check_net, None) self.dispatcher.connect_ui("opencast-status", self.check_net) self.dispatcher.connect_ui("operation-started", self.check_operations) self.dispatcher.connect_ui("operation-stopped", self.check_operations) # UI self.pack_start(self.recorderui,True,True,0) self.pause_dialog = None # Event Manager self.dispatcher.connect_ui("recorder-vumeter", self.set_vumeter) self.dispatcher.connect_ui("view-changed", self.event_change_mode) self.dispatcher.connect_ui("recorder-status", self.handle_status) self.dispatcher.connect_ui("recorder-ready", self.reset_mute) # STATES self.previous = None # PERMISSIONS self.allow_pause = self.conf.get_permission("pause") self.allow_start = self.conf.get_permission("start") self.allow_stop = self.conf.get_permission("stop") self.allow_manual = self.conf.get_permission("manual") self.allow_overlap = self.conf.get_permission("overlap") self.help_main_str = self.conf.get('help', 'main') self.help_text_str = self.conf.get('help', 'text') # OTHER builder.connect_signals(self) self.net_activity = self.conf.get_boolean('ingest', 'active') self.pausedialog_size = self.conf.get_int('basic', 'pausedialog_size', default=15) if self.pausedialog_size < 5: self.pausedialog_size = 5 elif self.pausedialog_size > 100: self.pausedialog_size = 100 self.proportion = 1 #TIMEOUTS deps = self.update_scheduler_deps() GObject.timeout_add(500, self.update_scheduler_timeout, *deps) self.update_clock_timeout(self.gui.get_object("local_clock")) GObject.timeout_add(10000, self.update_clock_timeout, self.gui.get_object("local_clock"))
def ingest_question(self, package): """Pops up a question dialog for available operations.""" disabled = not self.conf.get_boolean("ingest", "active") day, night = context.get_worker().get_all_job_types_by_mp(package) jobs = day + night text = { "title": _("Media Manager"), "main": _("Which operation do you want to perform?") } text['text'] = '' if disabled or not self.network: for job in day: if job.lower().count("ingest"): jobs.remove(job) day.remove(job) for job in night: if job.lower().count("ingest"): pass #jobs.remove(job) #night.remove(job) if disabled: text['text'] = text['text'] + _("The ingest service is disabled. ") elif not self.network: text['text'] = text['text'] + _( "Ingest disabled because of network problems. ") for job in day: op_state = package.operation[job.lower().replace(" ", "")] if op_state == mediapackage.OP_DONE: text['text'] = text['text'] + "\n" + _( "{0} already performed").format( OPERATION_NAMES.get(job, job)) elif op_state == mediapackage.OP_NIGHTLY: text['text'] = text['text'] + "\n" + _( "{0} will be performed tonight").format( OPERATION_NAMES.get(job, job)) response_list = [ 'Ingest', # Resp 1 'Ingest Nightly', # Resp 2 'Cancel Ingest Nightly', # Resp 3 'Export to Zip', # Resp 4 'Export to Zip Nightly', # Resp 5 'Cancel Export to Zip Nightly', # Resp 6 'Side by Side', # Resp 7 'Side by Side Nightly', # Resp 8 'Cancel Side by Side Nightly' ] # Resp 9 operations = {} for job in jobs: if job in response_list: operations[job] = response_list.index(job) + 1 operations_dialog = message.PopUp(message.OPERATIONS, text, context.get_mainwindow(), operations) if operations_dialog.response == Gtk.ResponseType.REJECT or \ operations_dialog.response == Gtk.ResponseType.DELETE_EVENT or \ operations_dialog.response == Gtk.ResponseType.OK: return True elif 0 < operations_dialog.response <= len(response_list): chosen_job = response_list[operations_dialog.response - 1].lower().replace(" ", "") if chosen_job.count('nightly'): context.get_worker().do_job_nightly( chosen_job.replace("_", ""), package) else: context.get_worker().do_job(chosen_job, package) return True else: logger.error("Incorrect operation response: {}".format( operations_dialog.response)) return False
def __init__(self, package=None): logger.info("Creating Recording Area") Gtk.Box.__init__(self) builder = Gtk.Builder() builder.add_from_file(get_ui_path('recorder.glade')) release = builder.get_object("release_label") release.set_label(get_footer()) # TEST self.repo = context.get_repository() self.dispatcher = context.get_dispatcher() self.worker = context.get_worker() self.conf = context.get_conf() self.recorder = context.get_recorder() self.recorder.set_create_drawing_areas_func(self.create_drawing_areas) self.start_recording = False self.font = None self.scheduled_recording = False self.focus_is_active = False self.net_activity = None self.error_dialog = None self.close_before_response_action = False # BUILD self.recorderui = builder.get_object("recorderbox") self.main_area = builder.get_object("videobox") self.vubox = builder.get_object("vubox") self.gui = builder # VUMETER self.rangeVum = 50 self.thresholdVum = self.conf.get_float('audio', 'min') self.mute = False self.stereo = True self.vumeterL = builder.get_object("progressbarL") self.vumeterR = builder.get_object("progressbarR") self.label_channels = builder.get_object("label_channels") # SWAP if not self.conf.get_boolean('basic', 'swapvideos'): self.gui.get_object("swapbutton").destroy() self.swap = False # STATUS self.view = self.set_status_view() hbox1 = self.gui.get_object('hbox1') hbox1.add(self.view) self.dispatcher.connect_ui("init", self.check_status_area) self.dispatcher.connect_ui("init", self.check_net, None) self.dispatcher.connect_ui("opencast-status", self.check_net) # UI self.pack_start(self.recorderui, True, True, 0) self.pause_dialog = None # Event Manager self.dispatcher.connect_ui("recorder-vumeter", self.set_vumeter) self.dispatcher.connect_ui("view-changed", self.event_change_mode) self.dispatcher.connect_ui("recorder-status", self.handle_status) self.dispatcher.connect_ui("recorder-ready", self.reset_mute) # STATES self.previous = None # PERMISSIONS self.allow_pause = self.conf.get_permission("pause") self.allow_start = self.conf.get_permission("start") self.allow_stop = self.conf.get_permission("stop") self.allow_manual = self.conf.get_permission("manual") self.allow_overlap = self.conf.get_permission("overlap") self.help_main_str = self.conf.get('help', 'main') self.help_text_str = self.conf.get('help', 'text') # OTHER builder.connect_signals(self) self.net_activity = self.conf.get_boolean('ingest', 'active') self.proportion = 1 #TIMEOUTS deps = self.update_scheduler_deps() GObject.timeout_add(500, self.update_scheduler_timeout, *deps) self.update_clock_timeout(self.gui.get_object("local_clock")) GObject.timeout_add(10000, self.update_clock_timeout, self.gui.get_object("local_clock"))
def __init__(self, package=None): logger.info("Creating Recording Area") Gtk.Box.__init__(self) builder = Gtk.Builder() builder.add_from_file(get_ui_path('recorder.glade')) # TEST recorderui = builder.get_object("recorderbox") self.repo = context.get_repository() self.dispatcher = context.get_dispatcher() self.worker = context.get_worker() self.conf = context.get_conf() self.recorder = context.get_recorder() self.recorder.set_create_drawing_areas_func(self.create_drawing_areas) self.start_recording = False self.font = None self.scheduled_recording = False self.focus_is_active = False self.net_activity = None self.error_dialog = None # BUILD self.recorderui = builder.get_object("recorderbox") self.main_area = builder.get_object("videobox") self.vubox = builder.get_object("vubox") self.gui = builder # SWAP if not self.conf.get_boolean('basic', 'swapvideos'): self.gui.get_object("swapbutton").hide() self.swap = False # STATUS big_status = builder.get_object("bg_status") self.view = self.set_status_view() big_status.add(self.view) self.dispatcher.connect("galicaster-init", self.check_status_area) self.dispatcher.connect("galicaster-init", self.check_net) self.dispatcher.connect("net-up", self.check_net, True) self.dispatcher.connect("net-down", self.check_net, False) # VUMETER self.audiobar=Vumeter() # UI self.vubox.add(self.audiobar) self.pack_start(self.recorderui,True,True,0) # Event Manager self.dispatcher.connect("recorder-vumeter", self.audiobar.SetVumeter) self.dispatcher.connect("galicaster-status", self.event_change_mode) self.dispatcher.connect("recorder-status", self.handle_status) nb=builder.get_object("data_panel") pages = nb.get_n_pages() for index in range(pages): page=nb.get_nth_page(index) # nb.set_tab_label_packing(page, True, True,Gtk.PackType.START) # STATES self.previous = None # PERMISSIONS self.allow_pause = self.conf.get_permission("pause") self.allow_start = self.conf.get_permission("start") self.allow_stop = self.conf.get_permission("stop") self.allow_manual = self.conf.get_permission("manual") self.allow_overlap = self.conf.get_permission("overlap") # OTHER builder.connect_signals(self) self.net_activity = self.conf.get_boolean('ingest', 'active') self.proportion = 1 #TIMEOUTS deps = self.update_scheduler_deps() GObject.timeout_add(500, self.update_scheduler_timeout, *deps) self.update_clock_timeout(self.gui.get_object("local_clock")) GObject.timeout_add(10000, self.update_clock_timeout, self.gui.get_object("local_clock"))
def __init__(self, package=None): logger.info("Creating Recording Area") gtk.Box.__init__(self) builder = gtk.Builder() builder.add_from_file(get_ui_path('recorder.glade')) self.repo = context.get_repository() self.dispatcher = context.get_dispatcher() self.worker = context.get_worker() self.record = None self.current_mediapackage = None self.current = None self.next = None self.restarting = False self.font = None self.scheduled_recording = False self.focus_is_active = False self.net_activity = None self.error_id = None self.error_text = None self.error_dialog = None self.start_id = None # BUILD self.recorderui = builder.get_object("recorderbox") self.main_area = builder.get_object("videobox") self.areas = None self.vubox = builder.get_object("vubox") self.gui = builder # BIG STATUS big_status = builder.get_object("bg_status") self.view = self.set_status_view() big_status.add(self.view) # STATUS BAR self.statusbar = status_bar.StatusBarClass() self.dispatcher.connect("update-rec-status", self.statusbar.SetStatus) self.dispatcher.connect("update-video", self.statusbar.SetVideo) self.dispatcher.connect("galicaster-init", self.check_status_area) self.dispatcher.connect("galicaster-init", self.check_net) self.dispatcher.connect("restart-preview", self.check_status_area) self.dispatcher.connect("net-up", self.check_net, True) self.dispatcher.connect("net-down", self.check_net, False) self.statusbar.SetTimer(0) # VUMETER self.audiobar = AudioBarClass() # UI self.vubox.add(self.audiobar.bar) self.pack_start(self.recorderui, True, True, 0) # Event Manager self.dispatcher.connect("start-record", self.on_scheduled_start) self.dispatcher.connect("stop-record", self.on_scheduled_stop) self.dispatcher.connect("start-before", self.on_start_before) self.dispatcher.connect("restart-preview", self.on_restart_preview) self.dispatcher.connect("update-rec-vumeter", self.audiobar.SetVumeter) self.dispatcher.connect("galicaster-status", self.event_change_mode) self.dispatcher.connect("galicaster-notify-quit", self.close) nb = builder.get_object("data_panel") pages = nb.get_n_pages() for index in range(pages): page = nb.get_nth_page(index) nb.set_tab_label_packing(page, True, True, gtk.PACK_START) # STATES self.status = GC_INIT self.previous = None self.change_state(GC_INIT) self.dispatcher.connect("reload_profile", self.on_recover_from_error) # PERMISSIONS self.conf = context.get_conf() self.allow_pause = self.conf.get_permission("pause") self.allow_start = self.conf.get_permission("start") self.allow_stop = self.conf.get_permission("stop") self.allow_manual = self.conf.get_permission("manual") self.allow_overlap = self.conf.get_permission("overlap") # OTHER builder.connect_signals(self) self.net_activity = self.conf.get_boolean('ingest', 'active') self.change_state(GC_READY) self.proportion = 1 self.on_start() # SCHEDULER FEEDBACK self.scheduler_thread_id = 1 self.clock_thread_id = 1 self.start_thread_id = None self.scheduler_thread = thread(target=self.scheduler_launch_thread) self.clock_thread = thread(target=self.clock_launch_thread) self.scheduler_thread.daemon = True self.clock_thread.daemon = True self.scheduler_thread.start() self.clock_thread.start() self.dispatcher.emit("galicaster-init")
# run_galicaster # # Copyright (c) 2011, Teltek Video Research <*****@*****.**> # # This work is licensed under the Creative Commons Attribution- # NonCommercial-ShareAlike 3.0 Unported License. To view a copy of # this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ # or send a letter to Creative Commons, 171 Second Street, Suite 300, # San Francisco, California, 94105, USA. import sys import argparse from galicaster.core import context from galicaster.core.worker import JOBS worker = context.get_worker() repo = context.get_repository() def main(): parser = argparse.ArgumentParser() parser.add_argument('operation', choices=JOBS.values(), help='Galicaster operation') parser.add_argument('mp_id', help='MediaPackage Id in Galicaster Repository') args = parser.parse_args() try: mp = repo[args.mp_id]