Beispiel #1
0
def gen_script():
    """Generates liquidsoap script from templates

    """

    interface = os.path.join(get_path('bin'), 'rfk-liquidsoaphandler')
    logfile = os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'logpath')))
    address = rfk.CONFIG.get('liquidsoap', 'address')
    port = rfk.CONFIG.get('liquidsoap', 'port')

    lastfm = make_lastfm()

    template_string = open(_get_template_path('main.liq'), 'r').read()

    template = Template(template_string)
    config = template.substitute(address=address,
                                 port=port,
                                 logfile=logfile,
                                 lastFM=lastfm,
                                 script=interface)
    if isinstance(config, str):
        config = config.decode('utf-8')
    if not isinstance(config, unicode):
        config = unicode(config)
    config += make_output(dir)
    return config
Beispiel #2
0
def gen_script():
    """Generates liquidsoap script from templates

    """

    interface = os.path.join(get_path('bin'), 'rfk-liquidsoaphandler')
    logfile = os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'logpath')))
    address = rfk.CONFIG.get('liquidsoap', 'address')
    port = rfk.CONFIG.get('liquidsoap', 'port')

    lastfm = make_lastfm()

    template_string = open(_get_template_path('main.liq'), 'r').read()

    template = Template(template_string)
    config = template.substitute(address=address,
                                 port=port,
                                 logfile=logfile,
                                 lastFM=lastfm,
                                 script=interface)
    if isinstance(config, str):
        config = config.decode('utf-8')
    if not isinstance(config, unicode):
        config = unicode(config)
    config += make_output(dir)
    return config
Beispiel #3
0
def main(foreground):
    if not foreground:
        rfk.helper.daemonize.createDaemon(get_path())

    rfk.init()
    rfk.database.init_db("%s://%s:%s@%s/%s" % (rfk.CONFIG.get('database', 'engine'),
                                               rfk.CONFIG.get('database', 'username'),
                                               rfk.CONFIG.get('database', 'password'),
                                               rfk.CONFIG.get('database', 'host'),
                                               rfk.CONFIG.get('database', 'database')))

    global redis_client
    redis_client = redis.StrictRedis(host='127.0.0.1', port=6379, decode_responses=True)
    pubsub = redis_client.pubsub(ignore_subscribe_messages=True)
    pubsub.subscribe('rfk-event')

    try:
        for message in pubsub.listen():
            if message and message['type'] == 'message':
                data = ast.literal_eval(message['data'])
                try:
                    if data['event'] == 'show_change':
                        handle_show_change(data['show_id'])
                    elif data['event'] == 'track_change':
                        handle_track_change(data['track_id'])
                except (KeyError, TypeError):
                    pass
    except KeyboardInterrupt:
        return False
Beispiel #4
0
def main():
    parser = argparse.ArgumentParser(
        description='PyRfK Daemon for running Liquidsoap',
        epilog='Anyways this should normally not called manually')
    parser.add_argument('--foreground', action='store_true')
    parser.add_argument('--debug', action='store_true')
    args = parser.parse_args()
    if not args.foreground:
        rfk.helper.daemonize.createDaemon(get_path())

    rfk.init()

    rfk.database.init_db(
        "%s://%s:%s@%s/%s" % (rfk.CONFIG.get(
            'database', 'engine'), rfk.CONFIG.get('database', 'username'),
                              rfk.CONFIG.get('database', 'password'),
                              rfk.CONFIG.get('database', 'host'),
                              rfk.CONFIG.get('database', 'database')))
    try:
        daemon = LiquidsoapDaemon(rfk.CONFIG.get('liquidsoap-daemon',
                                                 'socket'))
        if args.debug:
            daemon.set_debug(args.debug)
        if args.foreground:
            daemon.enable_stdout()
        daemon.run()

    except SocketExists:
        print 'Socket is already there, maybe another instance running?'
    finally:
        rfk.database.session.rollback()
        rfk.database.session.remove()
Beispiel #5
0
def loop_list(page):
    if request.method == 'POST':
        if request.form.get('action') == 'add':
        #           try:
            spl = request.form.get('begin').split(':')
            begin = int(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100)
            spl = request.form.get('end').split(':')
            end = math.ceil(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100)
            if end == begin and end == 0:
                end = 2400
            loop = Loop(begin=begin, end=end, filename=request.form.get('filename'))
            rfk.database.session.add(loop)
            rfk.database.session.commit()
        #            except Exception as e:
        #                flash('error while inserting Loop')
        elif request.form.get('action') == 'delete':
            try:
                rfk.database.session.delete(Loop.query.get(request.form.get('loopid')))
                rfk.database.session.commit()
            except Exception as e:
                flash('error while deleting Loop')
    per_page = 25
    (result, total_count) = paginate_query(Loop.query, page=page)
    current_loop = Loop.get_current_loop()
    loops = []
    for loop in result:
        loops.append({'loop': loop.loop,
                      'begin': '%02d:%02d' % (int(loop.begin / 100), int(((loop.begin % 100) / 100.) * 60)),
                      'end': '%02d:%02d' % (int(loop.end / 100), int(((loop.end % 100) / 100.) * 60)),
                      'current': loop == current_loop,
                      'filename': loop.filename,
                      'file_missing': not (loop.file_exists)})
    pagination = Pagination(page, per_page, total_count)
    searchpath = get_path(rfk.CONFIG.get('liquidsoap', 'looppath'))
    return render_template('admin/loops/list.html', loops=loops, pagination=pagination, searchpath=searchpath)
Beispiel #6
0
def main():
    parser = argparse.ArgumentParser(description='PyRfK Daemon for running Liquidsoap',
                                     epilog='Anyways this should normally not called manually')
    parser.add_argument('--foreground', action='store_true')
    parser.add_argument('--debug', action='store_true')
    args = parser.parse_args()
    if not args.foreground:
        rfk.helper.daemonize.createDaemon(get_path())
    
    rfk.init()
    
    rfk.database.init_db("%s://%s:%s@%s/%s" % (rfk.CONFIG.get('database', 'engine'),
                                                            rfk.CONFIG.get('database', 'username'),
                                                            rfk.CONFIG.get('database', 'password'),
                                                            rfk.CONFIG.get('database', 'host'),
                                                            rfk.CONFIG.get('database', 'database')))
    try:
        daemon = LiquidsoapDaemon(rfk.CONFIG.get('liquidsoap-daemon','socket'))
        if args.debug:
            daemon.set_debug(args.debug)
        if args.foreground:
            daemon.enable_stdout()
        daemon.run()

    except SocketExists:
        print 'Socket is already there, maybe another instance running?'
        return 1
Beispiel #7
0
def liquidsoap_playlist():
    """Returns the path to the current loop file that should be played

    """

    loop = Loop.get_current_loop()
    return os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'looppath')), loop.filename)
Beispiel #8
0
def loop_list():
    if request.method == 'POST':
        if request.form.get('action') == 'add':
        #           try:
            spl = request.form.get('begin').split(':')
            begin = int(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100)
            spl = request.form.get('end').split(':')
            end = math.ceil(int(spl[0]) * 100 + (int(spl[1]) / 60.) * 100)
            if end == begin and end == 0:
                end = 2400
            loop = Loop(begin=begin, end=end, filename=request.form.get('filename'))
            rfk.database.session.add(loop)
            rfk.database.session.commit()
        #            except Exception as e:
        #                flash('error while inserting Loop')
        elif request.form.get('action') == 'delete':
            try:
                rfk.database.session.delete(Loop.query.get(request.form.get('loopid')))
                rfk.database.session.commit()
            except Exception as e:
                flash('error while deleting Loop')
    page = int(request.args.get('page') or 0)
    (result, total_pages) = paginate(Loop.query, page=page)
    current_loop = Loop.get_current_loop()
    loops = []
    for loop in result:
        loops.append({'loop': loop.loop,
                      'begin': '%02d:%02d' % (int(loop.begin / 100), int(((loop.begin % 100) / 100.) * 60)),
                      'end': '%02d:%02d' % (int(loop.end / 100), int(((loop.end % 100) / 100.) * 60)),
                      'current': loop == current_loop,
                      'filename': loop.filename,
                      'file_missing': not (loop.file_exists)})
    pagination = pagelinks('.loop_list', page, total_pages)
    searchpath = get_path(rfk.CONFIG.get('liquidsoap', 'looppath'))
    return render_template('admin/loops/list.html', loops=loops, pagination=pagination, searchpath=searchpath)
Beispiel #9
0
def get_stats(relay):
    statsfile = get_path(os.path.join('var', 'tmp', 'traffic{0}'.format(relay.relay)))
    try:
        with open(statsfile) as f:
            (last_total, last_timestamp) = struct.unpack('qi', f.read())
    except IOError, struct.error:
        last_total = None
        last_timestamp = None
Beispiel #10
0
def make_emergency():
    if rfk.CONFIG.has_option('liquidsoap', 'fallback'):
        fallback_filename = rfk.CONFIG.get('liquidsoap', 'fallback')
        fallback = os.path.join(
            get_path(rfk.CONFIG.get('liquidsoap', 'looppath')),
            fallback_filename)
        if os.path.isfile(fallback):
            return 'emergency = single("{}")'.format(fallback)
    return 'emergency = blank()'
Beispiel #11
0
def get_stats(relay):
    statsfile = get_path(
        os.path.join('var', 'tmp', 'traffic{0}'.format(relay.relay)))
    try:
        with open(statsfile) as f:
            (last_total, last_timestamp) = struct.unpack('qi', f.read())
    except IOError, struct.error:
        last_total = None
        last_timestamp = None
Beispiel #12
0
 def __init__(self, socket="/tmp/liquiddaemon.sock"):
     logging.Handler.__init__(self)
     self.logger = logging.getLogger("LiquidsoapDaemon")
     self.logger.setLevel(logging.INFO)
     self.logger.addHandler(self)
     self.liquidsoap_logger = logging.getLogger("Liquidsoap")
     self.liquidsoap_logger.setLevel(logging.INFO)
     self.liquidsoap_logger.addHandler(self)
     self.process = None
     self.socket_handler = SocketHandler(get_path(socket), self)
     self.log = RingBuffer(100)
     self.quit = False
     self.run_liquid = True
     self.skip_telnet = True
Beispiel #13
0
 def __init__(self, socket='/tmp/liquiddaemon.sock'):
     logging.Handler.__init__(self)
     self.logger = logging.getLogger('LiquidsoapDaemon')
     self.logger.setLevel(logging.INFO)
     self.logger.addHandler(self)
     self.liquidsoap_logger = logging.getLogger('Liquidsoap')
     self.liquidsoap_logger.setLevel(logging.INFO)
     self.liquidsoap_logger.addHandler(self)
     self.process = None
     self.socket_handler = SocketHandler(get_path(socket), self)
     self.log = RingBuffer(100)
     self.quit = False
     self.run_liquid = True
     self.skip_telnet = True
Beispiel #14
0
def main(jid, password, foreground):
    rfk.init(enable_geoip=False)
    if not jid:
        jid = rfk.CONFIG.get('xmpp', 'jid')
    if not password:
        password = rfk.CONFIG.get('xmpp', 'password')
    if not foreground:
        rfk.helper.daemonize.createDaemon(get_path())

    # Setup logging
    logging.basicConfig(level=logging.INFO,
                        format='%(levelname)-8s %(message)s')

    # Setup XMPP instance
    xmpp = RfKBot(jid, password)

    # Connect to the XMPP server and start processing XMPP stanzas
    if xmpp.connect():
        xmpp.process(block=False)

        def message_handler(message):
            if message and message['type'] == 'message':
                data = ast.literal_eval(message['data'])
                try:
                    if data['type'] == 'message':
                        xmpp.send_messages(data)
                    elif data['type'] == 'tune':
                        xmpp.update_tune(data)
                except (KeyError, TypeError) as err:
                    logging.error('message_handler error: {}'.format(err))

        try:
            redis_client = StrictRedis(host='localhost',
                                       port=6379,
                                       decode_responses=True)
            redis_pubsub = redis_client.pubsub(ignore_subscribe_messages=True)
            redis_pubsub.subscribe('rfk-xmpp')
            for message in redis_pubsub.listen():
                message_handler(message)
        except (ConnectionError, KeyboardInterrupt):
            xmpp.disconnect(wait=True)
            return False

    else:
        return False
Beispiel #15
0
def doPlaylist():
    loop = Loop.get_current_loop()
    print os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'looppath')),
                       loop.filename)
Beispiel #16
0
 def file_exists(self):
     if self.filename is None:
         return False
     return os.path.exists(os.path.join(get_path(CONFIG.get('liquidsoap', 'looppath')), self.filename))
Beispiel #17
0
def _get_template_path(template):
    return os.path.join(get_path(os.path.join('rfk', 'templates', 'liquidsoap', template), internal=True))
Beispiel #18
0
def doPlaylist():
    loop = Loop.get_current_loop()
    print os.path.join(get_path(rfk.CONFIG.get('liquidsoap', 'looppath')), loop.filename)
Beispiel #19
0
 def file_exists(self):
     if self.filename is None:
         return False
     return os.path.exists(
         os.path.join(get_path(CONFIG.get('liquidsoap', 'looppath')),
                      self.filename))
Beispiel #20
0
def liquidsoap_start():
    returncode = call(os.path.join(get_path('bin'),'rfk-liquidsoap'), env=os.environ.copy())
    return jsonify({'status': returncode})
Beispiel #21
0
def liquidsoap_start():
    returncode = call(os.path.join(get_path('bin'), 'rfk-liquidsoap'),
                      env=os.environ.copy())
    return jsonify({'status': returncode})
Beispiel #22
0
def _get_template_path(template):
    return os.path.join(
        get_path(os.path.join('rfk', 'templates', 'liquidsoap', template),
                 internal=True))