This commit is contained in:
yumoqing 2025-10-19 21:14:28 +08:00
parent 5883ce8c82
commit d3bd7b89c6
9 changed files with 102 additions and 148 deletions

View File

@ -36,7 +36,7 @@ async def check_if_exists(url):
return True return True
return False return False
async def write_goodchannel(b): async def write_badchannel(b):
debug(f'write badchannels({b.url})') debug(f'write badchannels({b.url})')
env = ServerEnv() env = ServerEnv()
dbname = env.get_module_dbname('iptv') dbname = env.get_module_dbname('iptv')
@ -62,6 +62,57 @@ async def write_goodchannel(b):
${url}$, ${url}$,
${media_type}$, ${media_type}$,
${download_date}$, ${download_date}$,
'1'
)"""
r = b.copy()
r['media_type'] = 'iptv'
r['id'] = getID()
if not r.get('tv_group'):
r['tv_group'] = r.get('group-title','')[:500]
if not r.get('tv_name'):
r['tv_name'] = r.get('name','')[:500]
if not r.get('logo_url'):
r['logo_url'] = r.get('tvg-logo',None)
if r['logo_url'] and len(r['logo_url']) > 1000:
r['logo_url'] = None
if len(r['url']) >= 1000:
return
dt = datetime.now()
r['download_date'] = '%d-%02d-%02d' % (dt.year,dt.month,dt.day)
await sor.sqlExe(sql,r)
await sor.C('badchannels', {
'id': getID(),
'channelid': r['id']
})
async def write_goodchannel(b):
debug(f'write goodchannels({b.url})')
env = ServerEnv()
dbname = env.get_module_dbname('iptv')
db = DBPools()
async with db.sqlorContext(dbname) as sor:
sql = """insert into iptvchannels
(
id,
tv_group,
tv_name,
logo_url,
url,
media_type,
channel_delay,
download_date,
del_flg
)
values
(
${id}$,
${tv_group}$,
${tv_name}$,
${logo_url}$,
${url}$,
${media_type}$,
${channel_delay}$,
${download_date}$,
'0' '0'
)""" )"""
query = """select * from iptvchannels where url=${url}$""" query = """select * from iptvchannels where url=${url}$"""
@ -95,7 +146,9 @@ async def load_url_iptv(url):
if len(newchannels) > 0: if len(newchannels) > 0:
debug('%d new channels' % len(newchannels)) debug('%d new channels' % len(newchannels))
good, bad = await test_channels(newchannels, if_ok=write_goodchannel) good, bad = await test_channels(newchannels,
if_failed=write_badchannel,
if_ok=write_goodchannel)
debug(f'{len(good)} new channels add {len(bad)} channels exists') debug(f'{len(good)} new channels add {len(bad)} channels exists')
else: else:
debug(f'{url} return None') debug(f'{url} return None')

View File

@ -1,43 +0,0 @@
{
"widgettype":"HBox",
"options":{
"cwidth":22,
"cheight":3
},
"subwidgets":[
{
"widgettype":"Image",
"options":{
"cwidth":1.5,
"cheight":1,5,
"url":"{{params_kw.logo_url}}",
"default_url":"{{entire_url('/imgs/tv.png')}}"
}
},
{
"widgettype":"Title6",
"options":"{
"css":"filler",
"text":"{{params_kw.tv_name}}",
"wrap":true,
"halign":"left"
}
}
]
"binds":[
{
"wid":"self",
"event":"click",
"actiontype":"urlwidgt",
"target":"PopupWindow",
"popup_options":{
},
"options":{
"params":{
"id":"{{params_kw.id}}"
},
"url":"{{params_kw.click_url or entire_url('play.ui')}}"
}
}
]
}

View File

@ -1,56 +0,0 @@
{
"id":"channel_list",
"widgettype":"Tabular",
"options":{
"data_url":"{{entire_url('/api/channels.dspy')}}",
"noheader":true,
"row_options":{
"fields":[
{
"name":"logo_url",
"cwidth":2,
"cheight":2,
"uitype":"icon",
"label":"Icon",
"value":"${logo_url}"
},
{
"name":"tv_name",
"uitype":"str",
"lable":"Channel",
"cwidth":50,
"value":"${tv_name}"
}
],
"alters":{
"logo_url":{
"cwidth":2.5
},
"tv_name":{
"cwidth":20
}
},
"cheight":2.5,
"width":"100%"
},
"page_rows":80,
"cache_limit":5
},
"binds":[
{
"wid":"self",
"event":"row_selected",
"actiontype":"urlwidget",
"target":"PopupWindow",
"popup_options":{
"archor":"cc",
"width":"90%",
"height":"90%"
},
"options":{
"url":"{{entire_url('play.ui')}}",
"params":{}
}
}
]
}

View File

@ -1 +0,0 @@
return "noting in here"

View File

@ -1,34 +0,0 @@
{
"widgettype":"VBox",
"options":{
"width":"100%",
"height":"100%"
},
"subwidgets":[
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('header.ui')}}"
}
},
{
"id":"center",
"widgettype":"Filler",
"options":{},
"subwidgets":[
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('iptv.ui')}}"
}
}
]
},
{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('bottom.ui')}}"
}
}
]
}

Binary file not shown.

View File

@ -1,11 +0,0 @@
{% set d = get_channel_by_id(id) %}
{
"id":"myplayer",
"widgettype":"Video",
"options":{
"channel_id":"{{d.id}}",
"title":"{{d.tv_name}}"
"type":"application/x-mpegURL",
"url":"{{d.url}}"
}
}

View File

@ -28,7 +28,7 @@
"label":"搜索频道", "label":"搜索频道",
"url":"{{entire_url('iptvchannels.ui')}}" "url":"{{entire_url('iptvchannels.ui')}}"
}, },
{% if params_kw._is_mobile != '1' %} {% if int(params_kw._is_mobile) == 0 %}
{ {
"name":"tv_mode", "name":"tv_mode",
"label":"电视模式", "label":"电视模式",

46
wwwroot/tabs.ui Normal file
View File

@ -0,0 +1,46 @@
{
"widgettype":"IconbarPage",
"options":{
"bar_at": "top",
"bar_opts":{
"margin": "10px",
"rate":1.5,
"tools":[
{
"name":"channelsearch",
"icon":"{{entire_url('/imgs/channelsearch.svg')}}",
"tip":"Search Channel by enter channel name",
"dynsize": true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('searchchannels')}}"
}
}
},{
"name":"newestchannels",
"icon":"{{entire_url('/imgs/newestchannels.svg')}}",
"tip":"show newest channels",
"dynsize": true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('newest')}}"
}
}
}, {
"name":"declare",
"icon":"{{entire_url('/imgs/declare.svg')}}",
"tip":"show declaration",
"dynsize": true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('declare.ui')}}"
}
}
}
]
}
}
}