コード例 #1
0
def import_streams_to_server(db, server: ServiceSettings):
    cursor = db.cursor(dictionary=True)
    sql = 'SELECT stream_source, stream_display_name, stream_icon, channel_id from streams'
    cursor.execute(sql)
    sql_streams = cursor.fetchall()

    for sql_entry in sql_streams:
        stream = ProxyStream.make_stream(server)
        urls = json.loads(sql_entry['stream_source'])
        if not len(urls):
            continue

        stream.output.urls[0].uri = urls[0]
        stream.name = sql_entry['stream_display_name']
        tvg_logo = sql_entry['stream_icon']
        if len(tvg_logo) < constants.MAX_URL_LENGTH:
            if is_valid_http_url(tvg_logo, timeout=0.1):
                stream.tvg_logo = tvg_logo
        epg_id = sql_entry['channel_id']
        if epg_id:
            stream.tvg_id = epg_id

        stream.save()
        server.streams.append(stream)

    server.save()
    cursor.close()
コード例 #2
0
    def upload_file(self):
        form = UploadM3uForm()
        server = current_user.get_current_server()
        if server and form.validate_on_submit():
            stream_type = form.type.data
            file_handle = form.file.data
            m3u_parser = M3uParser()
            m3u_parser.load_content(file_handle.read().decode('utf-8'))
            m3u_parser.parse()

            for file in m3u_parser.files:
                if stream_type == constants.StreamType.PROXY:
                    stream = server.make_proxy_stream()
                elif stream_type == constants.StreamType.RELAY:
                    stream = server.make_relay_stream()
                    stream.output.urls[0] = stream.generate_http_link()
                elif stream_type == constants.StreamType.ENCODE:
                    stream = server.make_encode_stream()
                    stream.output.urls[0] = stream.generate_http_link()
                elif stream_type == constants.StreamType.VOD_RELAY:
                    stream = server.make_vod_relay_stream()
                    stream.output.urls[0] = stream.generate_vod_link()
                elif stream_type == constants.StreamType.VOD_ENCODE:
                    stream = server.make_vod_encode_stream()
                    stream.output.urls[0] = stream.generate_vod_link()
                elif stream_type == constants.StreamType.CATCHUP:
                    stream = server.make_catchup_stream()
                else:
                    stream = server.make_test_life_stream()

                input_url = file['link']
                if stream_type == constants.StreamType.PROXY:
                    stream.output.urls[0].uri = input_url
                else:
                    stream.input.urls[0].uri = input_url

                if file['title'] and len(
                        file['title']) < constants.MAX_STREAM_NAME_LENGTH:
                    stream.name = file['title']
                if file['tvg-id'] and len(
                        file['tvg-id']) < constants.MAX_STREAM_TVG_ID_LENGTH:
                    stream.tvg_id = file['tvg-id']
                if file['tvg-name'] and len(
                        file['tvg-name']) < constants.MAX_STREAM_NAME_LENGTH:
                    stream.tvg_name = file['tvg-name']
                if file['tvg-group'] and len(
                        file['tvg-group']
                ) < constants.MAX_STREAM_GROUP_TITLE_LENGTH:
                    stream.group_title = file['tvg-group']
                if file['tvg-logo'] and len(
                        file['tvg-logo']) < constants.MAX_URL_LENGTH:
                    logo_url = file['tvg-logo']
                    if is_valid_http_url(logo_url):
                        stream.tvg_logo = logo_url
                stream.save()
                server.add_stream(stream)

        return redirect(url_for('ProviderView:dashboard'))