Пример #1
0
    def fill_metadata(self, table, mp):
        """
        Fill the table with available data, empty otherwise
        """
        for child in table.get_children():
            table.remove(
                child
            )  #FIXME maybe change the glade to avoid removing any widget
        table.resize(1, 2)
        row = 1

        for meta in DCTERMS:
            t = gtk.Label(metadata[meta])
            t.set_justify(gtk.JUSTIFY_LEFT)
            t.set_alignment(0, 0)
            modification = str(int(self.hprop * 16)) + "px"
            t.modify_font(pango.FontDescription(modification))
            t.set_width_chars(15)

            d = gtk.Entry()
            d.set_name(meta)
            try:
                if meta in ["ispartof", "isPartOf"]:
                    d = ComboBoxEntryExt(self.par, listseries.get_series(),
                                         NO_SERIES)
                    d.set_name(meta)
                    if mp.getSeriesIdentifier() != None:
                        d.child.set_text(mp.getSeriesTitle())
                    else:
                        d.child.set_text(NO_SERIES)
                elif mp.metadata_episode.has_key(meta):
                    d.set_text(mp.metadata_episode[meta] or '')
                else:
                    d.set_text('')

            except (TypeError, KeyError) as error:
                context.get_logger().error("Exception Filling Metadata " +
                                           meta)

            if meta == "created":  # currently Unused
                d.connect("button-press-event", self.edit_date)
            if meta == "title":
                d.set_tooltip_text(d.get_text())

            d.modify_font(pango.FontDescription(modification))

            table.attach(t, 0, 1, row - 1, row, False, False, 0, 0)
            table.attach(d, 1, 2, row - 1, row, gtk.EXPAND | gtk.FILL, False,
                         0, 0)
            row = row + 1
Пример #2
0
def init():
    global conf, logger, event_handler, jobs
    dispatcher = context.get_dispatcher()
    conf = context.get_conf()
    logger = context.get_logger()

    path = conf.get('cameracontrol', 'path')
    pysca.connect(path)
    pysca.set_zoom(1, 0)
    pysca.pan_tilt_home(1)
    dispatcher.connect('init', load_ui)
    pysca.osd_off(1)
    logger.info("Cam connected")

    icons = [
        "left", "right", "up1", "down1", "up_right", "up_left", "down_left",
        "down_right", "plus", "minus"
    ]
    icontheme = Gtk.IconTheme()
    for name in icons:
        pixbuf = GdkPixbuf.Pixbuf.new_from_file(get_image_path(name + ".svg"))
        icontheme.add_builtin_icon(name, 20, pixbuf)

    dispatcher.connect("action-key-press", on_key_press)
    dispatcher.connect("action-key-release", on_key_release)

    event_handler = Handler()
    jobs = Queue.Queue()
    t = T(jobs)
    t.setDaemon(True)
    t.start()
def init():
    try:
        conf = context.get_conf()
        mode = conf.get('qrcode', 'pause_mode') or 'hold'  # or 'start_stop'
        symbols = {}
        symbols['start'] = conf.get('qrcode', 'start_code') or 'start'
        symbols['stop'] = conf.get('qrcode', 'stop_code') or 'stop'
        symbols['hold'] = conf.get('qrcode', 'hold_code') or 'hold'
        rescale = conf.get('qrcode', 'rescale') or 'source'
        drop_frames = conf.get_boolean('qrcode', 'drop_frames') or False
        buffers = conf.get_int('qrcode', 'buffers') or 200
        hold_timeout = conf.get_int('qrcode', 'hold_timeout') or 1  # secs
        ignore_bins = conf.get('qrcode', 'ignore_track_name') or None
        qr = QRCodeScanner(mode, symbols, hold_timeout, rescale, drop_frames,
                           buffers, ignore_bins, context.get_logger())

        dispatcher = context.get_dispatcher()
        dispatcher.connect('recorder-ready', qr.qrcode_add_pipeline)
        # only process sync-messages when recording to reduce overhead
        dispatcher.connect('recorder-started',
                           qr.qrcode_connect_to_sync_message)
        dispatcher.connect('recorder-stopped',
                           qr.qrcode_disconnect_to_sync_message)
        qr.set_add_edits(conf.get_boolean('qrcode', 'mp_add_edits') or False)
        qr.set_trimhold(
            conf.get_boolean('qrcode', 'mp_force_trimhold') or False)
        qr.set_add_smil(conf.get_boolean('qrcode', 'mp_add_smil') or False)
        dispatcher.connect('recorder-stopped', qr.qrcode_update_mediapackage)

    except ValueError:
        pass
Пример #4
0
def init():
    global conf, logger
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()
    dispatcher.connect('init', show_msg)
    dispatcher.connect('record-finished', show_msg)
Пример #5
0
def init():
    global conf, logger, recorder, dispatcher
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()
    recorder = context.get_recorder()
    dispatcher.connect('init', manage_button)
Пример #6
0
def main(args):
    def usage():
        sys.stderr.write("usage: %s\n" % args[0])
        return 1

    if len(args) != 1:
        return usage()
    try:
        Gst.init(None)
        gc = core.Main()
        Gtk.main()
    except KeyboardInterrupt:
        gc.emit_quit()
        print "Interrupted by user!"
    except Exception as exc:
        # debug
        # print traceback.format_exc()

        msg = "Error starting Galicaster: {0}".format(exc)
        print msg

        from galicaster.core import context
        logger = context.get_logger()
        logger and logger.error(msg)

        d = context.get_dispatcher()
        d.emit("galicaster-notify-quit")
        return -1


    return 0
 def test_fromXML_without_galicaster_xml(self):
     logger = context.get_logger()
     xml = path.join(self.baseDir, 'wrongmp', 'manifest.xml')
     mp = fromXML(xml, logger)
     self.assertEqual(mp.title, "Opening a folder...")
     self.assertEqual(mp.getIdentifier(), "dae91194-2114-481b-8908-8a8962baf8dc")
     self.assertEqual(mp.status, 4)
Пример #8
0
def init():
    global minfree, logger, repo, ocservice, dispatcher

    conf = context.get_conf()
    dispatcher = context.get_dispatcher()
    repo = context.get_repository()
    logger = context.get_logger()
    ocservice = context.get_ocservice()

    minfree = None
    try:
        minfree = int(conf.get('checkspace', 'minfreespace'))
    except Exception as exc:
        raise Exception("Wrong parameter minfreespace: {}".format(exc))

    if minfree:
        logger.info("Parameter 'minfreespace' set to {} GB".format(minfree))
        dispatcher.connect('timer-nightly', check_space)
        dispatcher.connect('recorder-status', check_space_status)

        oninit = conf.get('checkspace', 'checkoninit')
        if oninit in ["True", "true"]:
            check_space(None)
    else:
        raise Exception("Parameter minfreespace not configured")
Пример #9
0
def set_property():
    logger = context.get_logger()
    recorder = context.get_recorder()
    if not recorder.current_mediapackage:
        error_message = "[{}] No current_mediapackage available. Recording should be started before calling the endpoint.".format(request.fullpath)
        logger.error(error_message)
        abort(400, error_message)

    mp = recorder.current_mediapackage
    try:
        property_name = request.forms['name']
    except KeyError as exc:
        error_message = "[{}] The request does not have the required field {}".format(request.fullpath, exc)
        logger.error(error_message)
        abort(400, error_message)

    if mp.getProperty(property_name):
        error_message = "[{}] The mp already has the property {}, we do not overwrite it.".format(request.fullpath, property_name)
        logger.error(error_message)
        abort(400, error_message)

    try:
        property_value = request.forms['value']
    except KeyError as exc:
        error_message = "[{}] The request does not have the required field {}".format(request.fullpath, exc)
        logger.error(error_message)
        abort(400, error_message)

    mp.setProperty(property_name, property_value)
    logger.info("Setting property {} with value {} for the mediapackage {}".format(property_name, property_value, mp.getIdentifier()))
Пример #10
0
def init():
    global recorder, dispatcher, logger, config, repo

    config = context.get_conf().get_section(CONFIG_SECTION) or {}
    dispatcher = context.get_dispatcher()
    repo = context.get_repository()
    logger = context.get_logger()

    backend = config.get(BACKEND)

    if backend == "onvif":
        global cam
        import galicaster.utils.camctrl_onvif_interface as camera
        # connect to the camera
        cam = camera.AXIS_V5915()
        cam.connect(config.get(IPADDRESS), config.get(PORT, DEFAULT_PORT),
                    config.get(USERNAME), config.get(PASSWORD))
        # initiate the onvif user interface
        dispatcher.connect("init", init_onvif_ui)

    elif backend == "visca":
        global pysca
        import galicaster.utils.pysca as pysca
        # If port is not defined, a None value will make this method fail
        pysca.connect(config.get(PORT_KEY))
        # initiate the visca user interface
        dispatcher.connect("init", init_visca_ui)
    else:
        logger.warn(
            "You have to choose a backend in the config file before starting Galicaster, otherwise the cameracontrol plugin does not work."
        )
        raise RuntimeError("No backend for the cameracontrol plugin defined.")
    logger.info("Camera connected.")
Пример #11
0
def init():
    global conf, logger, recorder, dispatcher
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()
    recorder = context.get_recorder()
    dispatcher.connect('init', manage_button)
def init():
    global conf, logger, event_handler, jobs, cam_ctrl
    dispatcher = context.get_dispatcher()
    conf = context.get_conf()
    logger = context.get_logger()
    camera = conf.get('cameracontrol', 'camera')

    cam = __import__(camera, globals())
    cam_ctrl = cam.Controls()

    icons = [
        "left", "right", "up1", "down1", "up_right", "up_left", "down_left",
        "down_right", "plus", "minus"
    ]
    icontheme = Gtk.IconTheme()
    for name in icons:
        pixbuf = GdkPixbuf.Pixbuf.new_from_file(get_image_path(name + ".svg"))
        icontheme.add_builtin_icon(name, 20, pixbuf)

    dispatcher.connect('init', load_ui)
    dispatcher.connect("action-key-press", on_key_press)
    dispatcher.connect("action-key-release", on_key_release)

    event_handler = Handler()
    jobs = Queue.Queue()
    t = T(jobs)
    t.setDaemon(True)
    t.start()
Пример #13
0
 def test_fromXML_without_galicaster_xml(self):
     logger = context.get_logger()
     xml = path.join(self.baseDir, 'wrongmp', 'manifest.xml')
     mp = fromXML(xml, logger)
     self.assertEqual(mp.title, "Opening a folder...")
     self.assertEqual(mp.getIdentifier(),
                      "dae91194-2114-481b-8908-8a8962baf8dc")
     self.assertEqual(mp.status, 4)
Пример #14
0
    def fill_metadata(self,table,mp):
        """
        Fill the table with available data, empty otherwise
        """        
        for child in table.get_children():
            table.remove(child) #FIXME maybe change the glade to avoid removing any widget
        table.resize(1,2) 
        row = 1

        for meta in DCTERMS:
            t=gtk.Label(metadata[meta])
            t.set_justify(gtk.JUSTIFY_LEFT)
            t.set_alignment(0,0)
            modification = str(int(self.hprop*16))+"px"        
            t.modify_font(pango.FontDescription(modification))
            t.set_width_chars(15)
            
            d=gtk.Entry()
            d.set_name(meta)
            try:
                if meta in ["ispartof", "isPartOf"]:
                    d = ComboBoxEntryExt(self.par,listseries.get_series(),
                                         NO_SERIES)
                    d.set_name(meta)
                    if mp.getSeriesIdentifier() != None:
                        d.child.set_text(mp.getSeriesTitle())
                    else:
                        d.child.set_text(NO_SERIES)
                elif mp.metadata_episode.has_key(meta):
                    d.set_text(mp.metadata_episode[meta] or '')
                else:
                    d.set_text('')
                    
            except (TypeError, KeyError) as error: 
                context.get_logger().error("Exception Filling Metadata "+meta)
            
            if meta == "created": # currently Unused
                d.connect("button-press-event",self.edit_date)
            if meta == "title":
                d.set_tooltip_text(d.get_text())

            d.modify_font(pango.FontDescription(modification))

            table.attach(t,0,1,row-1,row,False,False,0,0)
            table.attach(d,1,2,row-1,row,gtk.EXPAND|gtk.FILL,False,0,0)
            row=row+1
Пример #15
0
    def wrapper(*args,**kwargs):
        try:
            return func(*args,**kwargs)
        except Exception as e:
            logger = context.get_logger()
            error_txt = str(e)
            logger.error("Error in function '{}': {}".format(func.func_name, error_txt))

            abort(503, error_txt)
Пример #16
0
def init():
    global logger, repo, ocservice, dispatcher

    conf = context.get_conf()
    dispatcher = context.get_dispatcher()
    repo = context.get_repository()
    logger = context.get_logger()
    ocservice = context.get_ocservice()

    logger.info("Logging process memory use")
    dispatcher.connect('timer-long', check_mem)
Пример #17
0
 def run(self):
     """Runs and removes a job from the queue.
     Marks the job as done.
     """
     logger = context.get_logger()
     while True:
         job, params = self.queue.get()
         try:
             job(*params)
         except Exception as exc:
             logger.error(exc)
         self.queue.task_done()
Пример #18
0
    def __init__(self):
        conf = context.get_conf()
        self.logger = context.get_logger()
        self.url = conf.get('cameracontrol', 'path')
        self.zoom_levels = conf.get_int('cameracontrol', 'zoom_levels')
        self.max_speed_pan_tilt = conf.get_int('cameracontrol',
                                               'max_speed_pan_tilt')

        r = self.send_cmd("#O")
        if r.text == "p0":
            self.send_cmd("#O1")
        self.logger.info("Connected to remote cam {}".format(self.url))
Пример #19
0
def init():
    global logger

    logger = context.get_logger()

    # If port is not defined, a None value will make this method fail
    pysca.connect(context.get_conf().get(CONFIG_SECTION, PORT_KEY))

    dispatcher = context.get_dispatcher()
    dispatcher.connect('starting-record', on_start_recording)
    # We don't have such thing as a "post-stop" signal, so we have to live with what we do have
    dispatcher.connect('restart-preview', on_stop_recording)
Пример #20
0
def main(args):
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-v',
        '--version',
        action='version',
        version='Galicaster {version}'.format(version=__version__))
    parser.parse_args(args=args[1:])
    try:
        Gst.init(None)
        gc = core.Main()

        # Bug with Gtk.main() not raising a KeyboardInterrupt(SIGINT) exception
        # https://bugzilla.gnome.org/show_bug.cgi?id=622084
        # Calling GObject.MainLoop.run() instead could be an option.
        # Sadly, Gtk.main_quit() does not work with it.
        # This workaround will stay until a better solution
        # is found or the bug is fixed.

        def handler(gc):
            print("SIGINT sent. Interrupted by user!")
            gc.quit()

        GLib.unix_signal_add(GLib.PRIORITY_HIGH, 2, handler, gc)  # 2 = SIGINT
        Gtk.main()
    except KeyboardInterrupt:
        gc.emit_quit()
        print("Interrupted by user!")

    except AlreadyRunning as exc:
        #Added custom exception when galicaster it's already running
        msg = "Error starting Galicaster: {0}".format(exc)
        print(msg)

        d = context.get_dispatcher()
        d.emit("quit")
        return -2

    except Exception as exc:
        # debug
        # print traceback.format_exc()

        msg = "Error starting Galicaster: {0}".format(exc)
        print(msg)

        logger = context.get_logger()
        logger and logger.error(msg)

        d = context.get_dispatcher()
        d.emit("quit")
        return -1

    return 0
Пример #21
0
def init():
    global logger, hidecursor, settings, default_settings
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()

    dispatcher.connect('init', configure_init)
    dispatcher.connect('quit', configure_quit)

    settings = conf.get_json('appearance', 'settings')
    default_settings = conf.get_json('appearance', 'defaultsettings')
    hidecursor = conf.get_boolean('appearance', 'hidecursor')
Пример #22
0
    def test_recover_recording(self):
        repo_folder = get_resource('repository')
        rectemp_aux = get_resource('utils/temporary_recording')
        rectemp = get_resource('repository/rectemp')

        # Read info.json
        info = {}
        info_filename = os.path.join(rectemp_aux, 'info.json')
        with open(info_filename, 'r') as handle:
            info = json.load(handle)

        # Modify path of tracks
        for indx, track in enumerate(info['tracks']):
            info['tracks'][indx]['path'] = rectemp

        # Copy temporary files
        for temp_file in os.listdir(rectemp_aux):
            full_path = os.path.join(rectemp_aux, temp_file)
            copy(full_path, os.path.join(rectemp, temp_file))

        # Overwrite info.json with new paths
        f = open(os.path.join(rectemp, 'info.json'), 'w')
        f.write(json.dumps(info, indent=4, sort_keys=True))
        f.close()

        # Get old length
        old_length = len(self.get_folders_in_repository(repo_folder))

        # Create the repository
        from galicaster.core import context
        logger = context.get_logger()
        repo = repository.Repository(
            repo_folder, '',
            'gc_{hostname}_{year}-{month}-{day}T{hour}h{minute}m{second}',
            logger)

        # Check 1
        self.assertEqual(old_length + 1,
                         len(self.get_folders_in_repository(repo_folder)))

        # Check 2
        mp = repo.get('4ea1049f-c946-4d36-95d4-b8d01223bd73')
        self.assertNotEqual(mp, None)
        mp_info = mp.getAsDict()
        self.assertEqual(mp_info['status'], 4)
        self.assertTrue('Recovered' in mp_info['title'])
        self.assertEqual(len(mp_info['tracks']), 2)

        # Clean
        for temp_file in os.listdir(rectemp):
            os.remove(os.path.join(rectemp, temp_file))
        repo.delete(mp)
Пример #23
0
def quit():
    logger = context.get_logger()
    recorder = context.get_recorder()
    main_window = context.get_mainwindow()

    force = request.forms.get('force')

    if not recorder.is_recording() or readable.str2bool(force):
        logger.info("Quit Galicaster through API rest")

        GObject.idle_add(main_window.do_quit)
    else:
        abort(401, "Sorry, there is a current recording")
Пример #24
0
def init():
    global conf, logger, repo, dispatcher, minfreespace, freespace
    conf = context.get_conf()
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    repo = context.get_repository()

    minfreespace = conf.get_int('checkspace','minfreespace')
    if not minfreespace:
        raise Exception("Parameter minfreespace not configured")

    logger.info("Parameter 'minfreespace' set to {} GB".format(minfreespace))
    dispatcher.connect("recorder-ready", check_space)
Пример #25
0
def get_series():
    logger = context.get_logger()
    recorder = context.get_recorder()

    if not recorder.current_mediapackage:
        error_message = "[{}] No current_mediapackage available. Recording should be started before calling the endpoint.".format(request.fullpath)
        logger.error(error_message)
        abort(400, error_message)

    mp = recorder.current_mediapackage
    series = mp.getSeries()
    logger.info("Called {} api. Returned series of mp {} as {}".format(request.fullpath, mp.getIdentifier(), series))
    return json.dumps(series);
Пример #26
0
def init():
    global conf, logger, repo, dispatcher, minfreespace, freespace
    conf = context.get_conf()
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    repo = context.get_repository()

    minfreespace = conf.get_int('checkspace', 'minfreespace')
    if not minfreespace:
        raise Exception("Parameter minfreespace not configured")

    logger.info("Parameter 'minfreespace' set to {} GB".format(minfreespace))
    dispatcher.connect("recorder-ready", check_space)
Пример #27
0
def init():
    global dispatcher, logger, timeout
    logger = context.get_logger()
    dispatcher = context.get_dispatcher()
    conf = context.get_conf()
    threshold = conf.get('lowaudio','lowaudio_threshold')
    timeout = conf.get_float('lowaudio','timeout')
    if not threshold or not timeout:
        raise Exception("Failed to load plugin lowaudio, no parameters set in configuration file")
    dispatcher.add_new_signal("low-audio")
    dispatcher.add_new_signal("low-audio-recovered")
    dispatcher.connect('low-audio', low_audio)
    dispatcher.connect('low-audio-recovered', low_audio_recovered)
Пример #28
0
    def __init__(self):
        conf = context.get_conf()
        self.logger = context.get_logger()
        self.path = conf.get('cameracontrol', 'path')
        self.zoom_levels = conf.get_int('cameracontrol', 'zoom_levels')
        self.max_speed_pan_tilt = int(
            conf.get('cameracontrol', 'max_speed_pan_tilt'), 16)

        pysca.connect(self.path)
        pysca.set_zoom(1, 0)
        pysca.pan_tilt_home(1)
        pysca.osd_off(1)
        self.logger.info("Connected to remote cam {}".format(self.path))
Пример #29
0
def init():
    global dispatcher, logger, timeout
    logger = context.get_logger()
    dispatcher = context.get_dispatcher()
    conf = context.get_conf()
    threshold = conf.get('lowaudio', 'lowaudio_threshold')
    timeout = conf.get_float('lowaudio', 'timeout')
    if not threshold or not timeout:
        raise Exception(
            "Failed to load plugin lowaudio, no parameters set in configuration file"
        )
    dispatcher.add_new_signal("low-audio")
    dispatcher.add_new_signal("low-audio-recovered")
    dispatcher.connect('low-audio', low_audio)
    dispatcher.connect('low-audio-recovered', low_audio_recovered)
Пример #30
0
    def test_recover_recording(self):
        repo_folder = get_resource('repository')
        rectemp_aux = get_resource('utils/temporary_recording')
        rectemp = get_resource('repository/rectemp')

        # Read info.json
        info = {}
        info_filename = os.path.join(rectemp_aux, 'info.json')
        with open(info_filename, 'r') as handle:
            info = json.load(handle)

        # Modify path of tracks
        for indx, track in enumerate(info['tracks']):
            info['tracks'][indx]['path'] = rectemp

        # Copy temporary files
        for temp_file in os.listdir(rectemp_aux):
            full_path = os.path.join(rectemp_aux, temp_file)
            copy(full_path, os.path.join(rectemp, temp_file))

        # Overwrite info.json with new paths
        f = open(os.path.join(rectemp, 'info.json'), 'w')
        f.write(json.dumps(info, indent=4, sort_keys=True))
        f.close()    

        # Get old length
        old_length = len(self.get_folders_in_repository(repo_folder))

        # Create the repository
        from galicaster.core import context
        logger = context.get_logger()
        repo = repository.Repository(repo_folder, '', 'gc_{hostname}_{year}-{month}-{day}T{hour}h{minute}m{second}', logger)

        # Check 1
        self.assertEqual(old_length +1 , len(self.get_folders_in_repository(repo_folder)))

        # Check 2
        mp = repo.get('4ea1049f-c946-4d36-95d4-b8d01223bd73')
        self.assertNotEqual(mp, None)
        mp_info = mp.getAsDict()
        self.assertEqual(mp_info['status'], 4)
        self.assertTrue('Recovered' in mp_info['title'])
        self.assertEqual(len(mp_info['tracks']), 2)
        
        # Clean
        for temp_file in os.listdir(rectemp):
            os.remove(os.path.join(rectemp, temp_file))
        repo.delete(mp)
Пример #31
0
def post_calendar():
    # DEBUG purposes
    # TODO: be able to receive an icalendar using a post field

    conf = context.get_conf()
    if conf.get_boolean('ingest', 'active'):
        abort(503, "The Opencast service is enabled, so ingoring this command to avoid inconsisten behaviour")

    repo = context.get_repository()
    scheduler = context.get_scheduler()
    logger = context.get_logger()

    repo.delete_next_mediapackages()
    ical_data = repo.get_attach('calendar.ical').read()
    ical.handle_ical(ical_data, None, repo, scheduler, logger)

    return "OK"
Пример #32
0
def get_property():
    logger = context.get_logger()
    recorder = context.get_recorder()
    if not recorder.current_mediapackage:
        error_message = "[{}] No current_mediapackage available. Recording should be started before calling the endpoint.".format(request.fullpath)
        logger.error(error_message)
        abort(400, error_message)

    mp = recorder.current_mediapackage
    try:
        property_name = request.query['name']
    except KeyError as exc:
        error_message = "[{}] The request does not have the required field {}".format(request.fullpath, exc)
        logger.error(error_message)
        abort(400, error_message)

    property = mp.getProperty(property_name)
    logger.info("Called {} api for property {} of mp {}: {}".format(request.fullpath, property_name,  mp.getIdentifier(), property))
    return json.dumps(property)
Пример #33
0
def main(args):
    def usage():
        sys.stderr.write("usage: %s\n" % args[0])
        return 1

    if len(args) != 1:
        return usage()
    try:
        Gst.init(None)
        gc = core.Main()

        # Bug with Gtk.main() not raising a KeyboardInterrupt(SIGINT) exception
        # https://bugzilla.gnome.org/show_bug.cgi?id=622084
        # Calling GObject.MainLoop.run() instead could be an option.
        # Sadly, Gtk.main_quit() does not work with it.
        # This workaround will stay until a better solution
        # is found or the bug is fixed.

        def handler(gc):
            print("SIGINT sent. Interrupted by user!")
            gc.quit()

        GLib.unix_signal_add(GLib.PRIORITY_HIGH, 2, handler, gc)  # 2 = SIGINT
        Gtk.main()
    except KeyboardInterrupt:
        gc.emit_quit()
        print("Interrupted by user!")
    except Exception as exc:
        # debug
        # print traceback.format_exc()

        msg = "Error starting Galicaster: {0}".format(exc)
        print(msg)

        from galicaster.core import context
        logger = context.get_logger()
        logger and logger.error(msg)

        d = context.get_dispatcher()
        d.emit("quit")
        return -1

    return 0
def init():
    global inactivity, logger, power_settings, default_power_settings
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()

    inactivity_val = conf.get('screensaver', 'inactivity')
    try:
        inactivity = int(inactivity_val)
    except Exception as exc:
        raise Exception("Error trying to convert inactivity value to integer: {}".format(exc))

    dispatcher.connect('recorder-upcoming-event', deactivate_and_poke)
    dispatcher.connect('recorder-starting', deactivate_and_poke)
    dispatcher.connect('recorder-stopped', activate_and_poke)
    dispatcher.connect('quit', configure_quit)

    power_settings = conf.get_json('screensaver', 'powersettings')
    default_power_settings = conf.get_json('screensaver', 'defaultpowersettings')
    activate_screensaver()
Пример #35
0
def init():
    global days, logger

    conf = context.get_conf()
    dispatcher = context.get_dispatcher()
    dispatcher.connect('galicaster-notify-nightly', clear_job)

    logger = context.get_logger()

    days = None
    try:
        days = int(conf.get('cleanstale', 'maxarchivaldays'))
        if days:
            logger.info("Parameter 'maxarchivaldays' set to {} days".format(days))

        oninit = conf.get('cleanstale', 'checkoninit')
        if oninit in ["True", "true"]:
            clear_job(None)

    except Exception as exc:
        logger.error("Could not read the config parameters: {}".format(exc))
Пример #36
0
def logstale():
    conf = context.get_conf()
    logger = context.get_logger()

    filename = logger.get_path()
    stale = conf.get('logger', 'stale') or 300 # 5 minutes

    info = {}

    if not logger:
        abort(503, "The logger service is not available")

    age = int (math.ceil( (time.time() - os.path.getmtime(filename)) ))
    info['filename'] = filename
    info['stale'] = False
    info['age'] = age

    if age > stale:
        info['stale'] = True

    return json.dumps(info)
Пример #37
0
def init():
    global inactivity, logger, power_settings, default_power_settings
    dispatcher = context.get_dispatcher()
    logger = context.get_logger()
    conf = context.get_conf()

    try:
        inactivity = conf.get_int('screensaver', 'inactivity')
    except Exception as exc:
        raise Exception(
            "Error trying to convert inactivity value to integer: {}".format(
                exc))

    dispatcher.connect('recorder-upcoming-event', deactivate_and_poke)
    dispatcher.connect('recorder-starting', deactivate_and_poke)
    dispatcher.connect('recorder-stopped', activate_and_poke)
    dispatcher.connect('quit', configure_quit)

    power_settings = conf.get_json('screensaver', 'powersettings')
    default_power_settings = conf.get_json('screensaver',
                                           'defaultpowersettings')
    activate_screensaver()
Пример #38
0
def resize_button(button,**kwargs):
    try:
        image = button.get_children()
        if type(image[0]) == Gtk.Image:
            image[0].set_pixel_size(int(kwargs.get('size_image',None)))
        elif type(image[0]) == Gtk.Box:
            for element in image[0].get_children():
                if type(element) == Gtk.Image:
                    element.set_pixel_size(int(kwargs.get('size_box',None)))
                if type(element) == Gtk.Label:
                    relabel(image[0],kwargs.get('size_label',None),False)
        elif type(image[0]) == Gtk.VBox:
            for element in image[0].get_children():
                if type(element) == Gtk.Image:
                    element.set_pixel_size(int(kwargs.get('size_vbox',None)))
        else:
            relabel(image[0],kwargs.get('size_label',None),False)
    except Exception as exc:
        logger = context.get_logger()
        logger.error(exc)

    return button
Пример #39
0
def resize_button(button, **kwargs):
    try:
        image = button.get_children()
        if type(image[0]) == Gtk.Image:
            image[0].set_pixel_size(int(kwargs.get('size_image', None)))
        elif type(image[0]) == Gtk.Box:
            for element in image[0].get_children():
                if type(element) == Gtk.Image:
                    element.set_pixel_size(int(kwargs.get('size_box', None)))
                if type(element) == Gtk.Label:
                    relabel(image[0], kwargs.get('size_label', None), False)
        elif type(image[0]) == Gtk.VBox:
            for element in image[0].get_children():
                if type(element) == Gtk.Image:
                    element.set_pixel_size(int(kwargs.get('size_vbox', None)))
        else:
            relabel(image[0], kwargs.get('size_label', None), False)
    except Exception as exc:
        logger = context.get_logger()
        logger.error(exc)

    return button
Пример #40
0
def init():
    global days, logger

    conf = context.get_conf()
    dispatcher = context.get_dispatcher()

    logger = context.get_logger()

    days = None
    try:
        days = int(conf.get('cleanstale', 'maxarchivaldays'))
    except Exception as exc:
        raise Exception("Wrong parameter maxarchivaldays: {}".format(exc))

    if days:
        logger.info("Parameter 'maxarchivaldays' set to {} days".format(days))
        dispatcher.connect('timer-nightly', clear_job)

        oninit = conf.get('cleanstale', 'checkoninit')
        if oninit in ["True", "true"]:
            clear_job(None)
    else:
        raise Exception("Parameter maxarchivaldays not configured")
Пример #41
0
def init():
    global days, logger

    conf = context.get_conf()
    dispatcher = context.get_dispatcher()

    logger = context.get_logger()

    days = None
    try:
        days = int(conf.get('cleanstale', 'maxarchivaldays'))
    except Exception as exc:
        raise Exception("Wrong parameter maxarchivaldays: {}".format(exc))

    if days:
        logger.info("Parameter 'maxarchivaldays' set to {} days".format(days))
        dispatcher.connect('timer-nightly', clear_job)

        oninit = conf.get('cleanstale', 'checkoninit')
        if oninit in ["True", "true"]:
            clear_job(None)
    else:
        raise Exception("Parameter maxarchivaldays not configured")
Пример #42
0
def init():
    global recorder, dispatcher, logger, config, repo, oc_client, METADATA, ACL

    config = context.get_conf().get_section(CONFIG_SECTION) or {}
    dispatcher = context.get_dispatcher()
    repo = context.get_repository()
    logger = context.get_logger()
    recorder = context.get_recorder()
    oc_client = context.get_occlient()

    with open(get_ui_path("series_metadata_template.json"),
              "r") as metadataFile:
        METADATA = Template(metadataFile.read())

    with open(get_ui_path("acl_template.json"), "r") as aclFile:
        ACL = Template(aclFile.read())

    try:
        dispatcher.connect("init", init_user_ui)

    except Exception as e:
        logger.error(e)
    logger.info("Set user loaded.")
def init():
    try:
        global MAX_AMPLITUDE
        global audio_track
        global pipe, bus
        global dispatcher, logger, repo, conf
        
        dispatcher = context.get_dispatcher()
        logger = context.get_logger()
        conf = context.get_conf()
        
        audio_device = conf.get('failovermic', 'device', 'default')
        MAX_AMPLITUDE = conf.get('failovermic', 'failover_threshold')
        audio_track = conf.get('failovermic', 'audio_track')
        logger.info("Max amplutide: {}".format(MAX_AMPLITUDE))

        dispatcher.connect('recorder-vumeter', check_pipeline_amp)
        dispatcher.connect('recorder-stopped', save_failover_audio)
        dispatcher.connect('recorder-starting', record)
        dispatcher.connect('recorder-stopping', stop)
        pipe, bus = set_pipeline(audio_device)
    except ValueError:
        pass
Пример #44
0
import gtk
glib.threads_init()
gtk.gdk.threads_init()

import os
from galicaster import __version__
from galicaster.core import context
from galicaster import plugins

from galicaster.utils.dbusservice import DBusService
from galicaster.classui.recorderui import RecorderClassUI
from galicaster.classui.listing import ListingClassUI
from galicaster.classui.playerui import PlayerClassUI
from galicaster.classui.distrib import DistribUI

logger = context.get_logger()

REC = 0
PLA = 2
MMA = 1
DIS = 3

class Main():
    def __init__(self):
        DBusService(self)

        logger.info('galicaster.__version__: %r', __version__)
        logger.info('galicaster.__file__: %r', __file__)

        self.change_cwd()