1
0
mirror of https://github.com/fHDHR/fHDHR_NextPVR.git synced 2025-12-06 12:16:58 -05:00

Compare commits

..

No commits in common. "8f9208c2cb5d7fa11bc77db6aeb3d59956415de0" and "c444d3123cb352e5c16235b43bfe6fb27916ced1" have entirely different histories.

29 changed files with 464 additions and 538 deletions

View File

@ -153,7 +153,7 @@ class Channel():
'GuideNumber': self.number, 'GuideNumber': self.number,
'GuideName': self.dict['name'], 'GuideName': self.dict['name'],
'Tags': ",".join(self.dict['tags']), 'Tags': ",".join(self.dict['tags']),
'URL': self.hdhr_stream_url, 'URL': self.stream_url,
'HD': self.dict["HD"], 'HD': self.dict["HD"],
"Favorite": self.dict["favorite"], "Favorite": self.dict["favorite"],
} }
@ -163,27 +163,11 @@ class Channel():
return "/api/images?method=generate&type=channel&message=%s" % self.number return "/api/images?method=generate&type=channel&message=%s" % self.number
@property @property
def hdhr_stream_url(self): def stream_url(self):
return '/auto/%s' % self.hdhr_stream_ident return '/auto/v%s' % self.number
@property @property
def hdhr_stream_ident(self): def play_url(self):
return 'v%s' % self.number
@property
def rmg_stream_url(self):
return "/devices/%s/media/%s" % (self.fhdhr.config.dict["main"]["uuid"], self.rmg_stream_ident)
@property
def rmg_stream_ident(self):
return "id://%s" % self.number
@property
def api_stream_url(self):
return '/api/tuners?method=%s&channel=%s' % (self.fhdhr.config.dict["fhdhr"]["stream_type"], self.number)
@property
def m3u_url(self):
return '/api/m3u?method=get&channel=%s' % self.number return '/api/m3u?method=get&channel=%s' % self.number
def set_favorite(self, enablement): def set_favorite(self, enablement):

View File

@ -9,9 +9,6 @@ class Channels():
endpoints = ["/api/channels"] endpoints = ["/api/channels"]
endpoint_name = "api_channels" endpoint_name = "api_channels"
endpoint_methods = ["GET", "POST"] endpoint_methods = ["GET", "POST"]
endpoint_default_parameters = {
"method": "get"
}
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr
@ -29,8 +26,8 @@ class Channels():
for fhdhr_id in [x["id"] for x in self.fhdhr.device.channels.get_channels()]: for fhdhr_id in [x["id"] for x in self.fhdhr.device.channels.get_channels()]:
channel_obj = self.fhdhr.device.channels.list[fhdhr_id] channel_obj = self.fhdhr.device.channels.list[fhdhr_id]
channel_dict = channel_obj.dict.copy() channel_dict = channel_obj.dict.copy()
channel_dict["m3u_url"] = channel_obj.m3u_url channel_dict["play_url"] = channel_obj.play_url
channel_dict["stream_url"] = channel_obj.api_stream_url channel_dict["stream_url"] = channel_obj.stream_url
channels_info[channel_obj.number] = channel_dict channels_info[channel_obj.number] = channel_dict
# Sort the channels # Sort the channels

View File

@ -7,9 +7,6 @@ class Cluster():
endpoints = ["/api/cluster"] endpoints = ["/api/cluster"]
endpoint_name = "api_cluster" endpoint_name = "api_cluster"
endpoint_methods = ["GET", "POST"] endpoint_methods = ["GET", "POST"]
endpoint_default_parameters = {
"method": "get"
}
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr

View File

@ -5,11 +5,6 @@ class Images():
endpoints = ["/api/images"] endpoints = ["/api/images"]
endpoint_name = "api_images" endpoint_name = "api_images"
endpoint_methods = ["GET", "POST"] endpoint_methods = ["GET", "POST"]
endpoint_default_parameters = {
"method": "generate",
"type": "content",
"message": "Internal Image Handling"
}
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr

View File

@ -75,7 +75,7 @@ class M3U():
"tvg-logo": logourl, "tvg-logo": logourl,
"group-title": self.fhdhr.config.dict["fhdhr"]["friendlyname"], "group-title": self.fhdhr.config.dict["fhdhr"]["friendlyname"],
"group-titleb": str(channel_obj.dict['name']), "group-titleb": str(channel_obj.dict['name']),
"stream_url": "%s%s" % (base_url, channel_obj.api_stream_url) "stream_url": "%s%s" % (base_url, channel_obj.stream_url)
} }
# Sort the channels # Sort the channels

View File

@ -1,8 +1,5 @@
from flask import request, redirect, Response, session from flask import request, redirect, session
import urllib.parse import urllib.parse
import threading
import time
import json
class Settings(): class Settings():
@ -13,9 +10,6 @@ class Settings():
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr
self.restart_url = "/api/settings?method=restart_actual"
self.restart_sleep = 5
def __call__(self, *args): def __call__(self, *args):
return self.get(*args) return self.get(*args)
@ -24,28 +18,7 @@ class Settings():
method = request.args.get('method', default="get", type=str) method = request.args.get('method', default="get", type=str)
redirect_url = request.args.get('redirect', default=None, type=str) redirect_url = request.args.get('redirect', default=None, type=str)
if method == "get": if method == "update":
web_settings_dict = {}
for config_section in list(self.fhdhr.config.conf_default.keys()):
web_settings_dict[config_section] = {}
for config_item in list(self.fhdhr.config.conf_default[config_section].keys()):
real_config_section = config_section
if config_section == self.fhdhr.config.dict["main"]["dictpopname"]:
real_config_section = "origin"
web_settings_dict[config_section][config_item] = {
"value": self.fhdhr.config.dict[real_config_section][config_item],
}
if self.fhdhr.config.conf_default[config_section][config_item]["config_web_hidden"]:
web_settings_dict[config_section][config_item]["value"] = "***********"
return_json = json.dumps(web_settings_dict, indent=4)
return Response(status=200,
response=return_json,
mimetype='application/json')
elif method == "update":
config_section = request.form.get('config_section', None) config_section = request.form.get('config_section', None)
config_name = request.form.get('config_name', None) config_name = request.form.get('config_name', None)
config_value = request.form.get('config_value', None) config_value = request.form.get('config_value', None)
@ -62,18 +35,11 @@ class Settings():
self.fhdhr.config.write(config_section, config_name, config_value) self.fhdhr.config.write(config_section, config_name, config_value)
elif method == "restart": elif method == "restart":
restart_thread = threading.Thread(target=self.restart_thread) instance_id = request.args.get('instance_id', default=None, type=str)
restart_thread.start() if instance_id == session["instance_id"]:
return redirect(redirect_url + "?retmessage=" + urllib.parse.quote("Restarting in %s seconds" % self.restart_sleep))
elif method == "restart_actual":
session["restart"] = True session["restart"] = True
if redirect_url: if redirect_url:
return redirect(redirect_url + "?retmessage=" + urllib.parse.quote("%s Success" % method)) return redirect(redirect_url + "?retmessage=" + urllib.parse.quote("%s Success" % method))
else: else:
return "%s Success" % method return "%s Success" % method
def restart_thread(self):
time.sleep(self.restart_sleep)
self.fhdhr.api.get(self.restart_url)

View File

@ -7,9 +7,6 @@ class API_Tools():
endpoints = ["/api/tools"] endpoints = ["/api/tools"]
endpoint_name = "api_tools" endpoint_name = "api_tools"
endpoint_methods = ["GET", "POST"] endpoint_methods = ["GET", "POST"]
endpoint_default_parameters = {
"method": "get"
}
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr
@ -23,15 +20,7 @@ class API_Tools():
redirect_url = request.args.get('redirect', default=None, type=str) redirect_url = request.args.get('redirect', default=None, type=str)
if method == "get": if method == "prettyjson":
return_json = json.dumps({"tools": "api for tools page"}, indent=4)
return Response(status=200,
response=return_json,
mimetype='application/json')
elif method == "prettyjson":
dirty_json_url = request.form.get('url', None) dirty_json_url = request.form.get('url', None)

View File

@ -10,9 +10,6 @@ class Tuners():
endpoints = ["/api/tuners"] endpoints = ["/api/tuners"]
endpoint_name = "api_tuners" endpoint_name = "api_tuners"
endpoint_methods = ["GET", "POST"] endpoint_methods = ["GET", "POST"]
endpoint_default_parameters = {
"method": "status"
}
def __init__(self, fhdhr): def __init__(self, fhdhr):
self.fhdhr = fhdhr self.fhdhr = fhdhr
@ -32,7 +29,7 @@ class Tuners():
method = request.args.get('method', default=self.fhdhr.config.dict["fhdhr"]["stream_type"], type=str) method = request.args.get('method', default=self.fhdhr.config.dict["fhdhr"]["stream_type"], type=str)
tuner_number = request.args.get('tuner', default=None, type=str) tuner_number = request.args.get('tuner', None, type=str)
redirect_url = request.args.get('redirect', default=None, type=str) redirect_url = request.args.get('redirect', default=None, type=str)

View File

@ -9,8 +9,8 @@ from .xmltv_html import xmlTV_HTML
from .version_html import Version_HTML from .version_html import Version_HTML
from .diagnostics_html import Diagnostics_HTML from .diagnostics_html import Diagnostics_HTML
from .settings_html import Settings_HTML from .settings_html import Settings_HTML
from .channels_editor_html import Channels_Editor_HTML from .channels_editor import Channels_Editor_HTML
from .tools_html import Tools_HTML from .tools import Tools_HTML
class fHDHR_Pages(): class fHDHR_Pages():
@ -20,7 +20,7 @@ class fHDHR_Pages():
self.index_html = Index_HTML(fhdhr) self.index_html = Index_HTML(fhdhr)
self.channels_html = Channels_HTML(fhdhr) self.channels_html = Channels_HTML(fhdhr)
self.channels_editor_html = Channels_Editor_HTML(fhdhr) self.channels_editor = Channels_Editor_HTML(fhdhr)
self.guide_html = Guide_HTML(fhdhr) self.guide_html = Guide_HTML(fhdhr)
self.cluster_html = Cluster_HTML(fhdhr) self.cluster_html = Cluster_HTML(fhdhr)
self.tuners_html = Tuners_HTML(fhdhr) self.tuners_html = Tuners_HTML(fhdhr)
@ -28,4 +28,4 @@ class fHDHR_Pages():
self.version_html = Version_HTML(fhdhr) self.version_html = Version_HTML(fhdhr)
self.diagnostics_html = Diagnostics_HTML(fhdhr) self.diagnostics_html = Diagnostics_HTML(fhdhr)
self.settings_html = Settings_HTML(fhdhr) self.settings_html = Settings_HTML(fhdhr)
self.tools_html = Tools_HTML(fhdhr) self.tools = Tools_HTML(fhdhr)

View File

@ -24,7 +24,7 @@ class Channels_Editor_HTML():
channel_dict["number"] = channel_obj.number channel_dict["number"] = channel_obj.number
channel_dict["chan_thumbnail"] = channel_obj.thumbnail channel_dict["chan_thumbnail"] = channel_obj.thumbnail
channel_dict["m3u_url"] = channel_obj.m3u_url channel_dict["play_url"] = channel_obj.play_url
channelslist[channel_dict["number"]] = channel_dict channelslist[channel_dict["number"]] = channel_dict

View File

@ -29,7 +29,7 @@ class Channels_HTML():
channel_dict["number"] = channel_obj.number channel_dict["number"] = channel_obj.number
channel_dict["chan_thumbnail"] = channel_obj.thumbnail channel_dict["chan_thumbnail"] = channel_obj.thumbnail
channel_dict["m3u_url"] = channel_obj.m3u_url channel_dict["play_url"] = channel_obj.play_url
channelslist[channel_dict["number"]] = channel_dict channelslist[channel_dict["number"]] = channel_dict
if channel_dict["enabled"]: if channel_dict["enabled"]:

View File

@ -35,15 +35,9 @@ class Diagnostics_HTML():
button_link += "%s=%s" % (parameter, parameter_val) button_link += "%s=%s" % (parameter, parameter_val)
button_link = button_link.replace("<devicekey>", self.fhdhr.config.dict["main"]["uuid"]) button_link = button_link.replace("<devicekey>", self.fhdhr.config.dict["main"]["uuid"])
button_link = button_link.replace("<base_url>", base_url) button_link = button_link.replace("<base_url>", base_url)
curr_button_dict = { button_dict[route_group].append({
"label": session["route_list"][route_group][route_item]["pretty_name"], "label": session["route_list"][route_group][route_item]["pretty_name"],
"link": button_link, "link": button_link,
"methods": ",".join(session["route_list"][route_group][route_item]["endpoint_methods"]), })
"button": True
}
if ("GET" not in session["route_list"][route_group][route_item]["endpoint_methods"]
or "<tuner_number>" in button_link or "<channel>" in button_link):
curr_button_dict["button"] = False
button_dict[route_group].append(curr_button_dict)
return render_template('diagnostics.html', session=session, request=request, fhdhr=self.fhdhr, button_dict=button_dict, list=list) return render_template('diagnostics.html', session=session, request=request, fhdhr=self.fhdhr, button_dict=button_dict, list=list)

View File

@ -67,7 +67,7 @@ class Guide_HTML():
chan_dict["number"] = chan_obj.number chan_dict["number"] = chan_obj.number
chan_dict["chan_thumbnail"] = chan_obj.thumbnail chan_dict["chan_thumbnail"] = chan_obj.thumbnail
chan_dict["enabled"] = chan_obj.dict["enabled"] chan_dict["enabled"] = chan_obj.dict["enabled"]
chan_dict["m3u_url"] = chan_obj.m3u_url chan_dict["play_url"] = chan_obj.play_url
chan_dict["listing_thumbnail"] = chan_dict["listing_thumbnail"] or chan_obj.thumbnail chan_dict["listing_thumbnail"] = chan_dict["listing_thumbnail"] or chan_obj.thumbnail
else: else:

View File

@ -27,7 +27,7 @@ class RMG_Devices_DeviceKey_Channels():
if channel_obj.enabled: if channel_obj.enabled:
sub_el(out, 'Channel', sub_el(out, 'Channel',
drm="0", drm="0",
channelIdentifier=channel_obj.rmg_stream_ident, channelIdentifier="id://%s" % channel_obj.number,
name=channel_obj.dict["name"], name=channel_obj.dict["name"],
origin=channel_obj.dict["callsign"], origin=channel_obj.dict["callsign"],
number=str(channel_obj.number), number=str(channel_obj.number),

View File

@ -1,12 +1,12 @@
<html> <html>
<head> <head>
<title>{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }}</title> <title>{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
table, th, td {border: 1px solid black;}
</style>
<link href="style.css" rel="stylesheet"> <link href="style.css" rel="stylesheet">
</head> </head>
<body> <body>
<h1 style="text-align: center;"> <h1 style="text-align: center;">
<span style="text-decoration: underline;"><strong><em>{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }}</em></strong> <span style="text-decoration: underline;"><strong><em>{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }}</em></strong>
@ -15,14 +15,14 @@
</h1> </h1>
<br><br> <br><br>
<p></p> <p></p>
<div> <div>
<button onclick="location.href='/index'" type="button">fHDHR</button>
<button onclick="location.href='/origin'" type="button">{{ fhdhr.config.dict["main"]["servicename"] }}</button> <button class="pull-left" onclick="OpenLink('/index')">fHDHR</button>
<button class="pull-left" onclick="OpenLink('/origin')">{{ fhdhr.config.dict["main"]["servicename"] }}</button>
{% for page_dict in session["route_list"]["pages"] %} {% for page_dict in session["route_list"]["pages"] %}
{% if session["route_list"]["pages"][page_dict]["name"] != "page_index_html" and fhdhr.config.dict["web_ui"]["access_level"] >= session["route_list"]["pages"][page_dict]["endpoint_access_level"] %} {% if session["route_list"]["pages"][page_dict]["name"] != "page_index_html" and fhdhr.config.dict["web_ui"]["access_level"] >= session["route_list"]["pages"][page_dict]["endpoint_access_level"] %}
<button onclick="location.href='{{ session["route_list"]["pages"][page_dict]["endpoints"][0] }}'" type="button">{{ session["route_list"]["pages"][page_dict]["pretty_name"] }}</button> <button class="pull-left" onclick="OpenLink('{{ session["route_list"]["pages"][page_dict]["endpoints"][0] }}')">{{ session["route_list"]["pages"][page_dict]["pretty_name"] }}</button>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
@ -58,7 +58,7 @@
{% if locations %} {% if locations %}
<div> <div>
{% for location in locations %} {% for location in locations %}
<button onclick="location.href='{{ location["base_url"] }}'" type="button">{{ location["name"] }}</button> <button class="pull-left" onclick="OpenLink('{{ location["base_url"] }}')">{{ location["name"] }}</a></button>
{% endfor %} {% endfor %}
</div> </div>
<hr align="center" width="100%"> <hr align="center" width="100%">
@ -73,3 +73,6 @@
{% block content %}{% endblock %} {% block content %}{% endblock %}
</body> </body>
</html> </html>
<script>
function OpenLink(NewURL) {window.open(NewURL, "_self");}
</script>

View File

@ -5,8 +5,7 @@
<h4 style="text-align: center;">{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }} Channels</h4> <h4 style="text-align: center;">{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }} Channels</h4>
<div style="text-align: center;"> <div style="text-align: center;">
<button onclick="location.href='/api/tuners?method=scan&redirect=/channels'" type="button">Force Channel Update</button> <button onclick="OpenLink('/api/tuners?method=scan&redirect=%2Fchannels')">Force Channel Update</a></button><p> Note: This may take some time.</p>
<p> Note: This may take some time.</p>
</div> </div>
<br> <br>
@ -25,7 +24,7 @@
<br> <br>
<div style="text-align: center;"> <div style="text-align: center;">
<button onclick="location.href='/channels_editor'" type="button">Edit Channels</button> <button onclick="OpenLink('/channels_editor')">Edit Channels</a></button>
</div> </div>
<br> <br>
@ -46,11 +45,12 @@
<tbody class="body-half-screen"> <tbody class="body-half-screen">
{% for chan_dict in channelslist %} {% for chan_dict in channelslist %}
<tr> <tr>
<td> <td>
{% if chan_dict["enabled"] %} {% if chan_dict["enabled"] %}
<a href="{{ chan_dict["m3u_url"] }}">Play</a> <a href="{{ chan_dict["play_url"] }}">Play</a>
{% else %} {% else %}
<a href="{{ chan_dict["m3u_url"] }}" style="visibility:hidden">Play</a> <a href="{{ chan_dict["play_url"] }}" style="visibility:hidden">Play</a>
{% endif %} {% endif %}
</td> </td>

View File

@ -25,6 +25,7 @@
document["enable_button"].value = "0" document["enable_button"].value = "0"
document["enable_button"].text = "Disable All" document["enable_button"].text = "Disable All"
@bind("#chanSubmit", "submit") @bind("#chanSubmit", "submit")
def submit_fixup(evt): def submit_fixup(evt):
for element in document.get(selector='input[type="checkbox"]'): for element in document.get(selector='input[type="checkbox"]'):
@ -52,7 +53,7 @@
postForm = document.createElement('form') postForm = document.createElement('form')
postData = document.createElement('input') postData = document.createElement('input')
postForm.method = "POST" postForm.method = "POST"
postForm.action = "/api/channels?method=modify&redirect=/channels_editor" postForm.action = "/api/channels?method=modify&redirect=%2Fchannels_editor"
postForm.setRequestHeader = "('Content-Type', 'application/json')" postForm.setRequestHeader = "('Content-Type', 'application/json')"
postData.name = "channels" postData.name = "channels"
postData.value = chanlist postData.value = chanlist
@ -94,8 +95,7 @@
{% for chan_dict in channelslist %} {% for chan_dict in channelslist %}
<tr> <tr>
<td><input type="hidden" name="id" class="channels" value={{ chan_dict["id"] }}> <td><input type="hidden" name="id" class="channels" value={{ chan_dict["id"] }}>
<input type="text" class="channels" name="name" value="{{ chan_dict["name"] }}"> <input type="text" class="channels" name="name" value="{{ chan_dict["name"] }}"></td>
</td>
<td><input type="text" class="channels" name="callsign" value="{{ chan_dict["callsign"] }}"></td> <td><input type="text" class="channels" name="callsign" value="{{ chan_dict["callsign"] }}"></td>
<td><input type="text" class="channels" name="number" value="{{ chan_dict["number"] }}"></td> <td><input type="text" class="channels" name="number" value="{{ chan_dict["number"] }}"></td>
<td><input type="text" class="channels" name="thumbnail" value="{{ chan_dict["thumbnail"] }}"></td> <td><input type="text" class="channels" name="thumbnail" value="{{ chan_dict["thumbnail"] }}"></td>
@ -110,7 +110,7 @@
<td><input type="checkbox" class="channels" name="favorite" value=1 ></td> <td><input type="checkbox" class="channels" name="favorite" value=1 ></td>
{% endif %} {% endif %}
<td> <td>
<form method="post" action="/api/channels?method=update&redirect=/channels_editor"> <form method="post" action="/api/channels?method=update&redirect=%2Fchannels_editor">
<input type="hidden" class="reset" name="id" value="{{ chan_dict["id"] }}"> <input type="hidden" class="reset" name="id" value="{{ chan_dict["id"] }}">
<input type="hidden" class="reset" name="name" value="{{ chan_dict["origin_name"] }}"> <input type="hidden" class="reset" name="name" value="{{ chan_dict["origin_name"] }}">
<input type="hidden" class="reset" name="callsign" value="{{ chan_dict["origin_callsign"] }}"> <input type="hidden" class="reset" name="callsign" value="{{ chan_dict["origin_callsign"] }}">
@ -121,6 +121,7 @@
</form> </form>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View File

@ -8,15 +8,16 @@
{% else %} {% else %}
<div style="text-align: center;"> <div style="text-align: center;">
<button onclick="location.href='/api/cluster?method=scan&redirect=/cluster'" type="button">Force Scan</button> <button onclick="OpenLink('/api/cluster?method=scan&redirect=%2Fcluster')">Force Scan</a></button>
<button onclick="location.href='/api/cluster?method=alive&redirect=/cluster'" type="button">Send Alive</button> <button onclick="OpenLink('/api/cluster?method=alive&redirect=%2Fcluster')">Send Alive</a></button>
<button onclick="location.href='/api/cluster?method=disconnect&redirect=/cluster'" type="button">Disconnect</button> <button onclick="OpenLink('/api/cluster?method=disconnect&redirect=%2Fcluster')">Disconnect</a></button>
</div> </div>
<br> <br>
<div class="container"> <div class="container">
<table class="table-medium center action-col"> <table class="table-medium center action-col">
<tbody> <tbody>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Location</th> <th>Location</th>
@ -31,13 +32,15 @@
<td>{{ location["joined"] }}</td> <td>{{ location["joined"] }}</td>
<td> <td>
{% if location["joined"] in ["True", "False"] %} {% if location["joined"] in ["True", "False"] %}
<button onclick="location.href='{{ location["location"] }}'" type="button">Visit</button> <button onclick="OpenLink('{{ location["location"] }}')">Visit</a></button>
{% endif %} {% endif %}
{% if location["joined"] == "True" %} {% if location["joined"] == "True" %}
<button onclick="location.href='/api/cluster?method=del&location={{ location["url_query"] }}&redirect=/cluster'" type="button">Remove</button> <button onclick="OpenLink('/api/cluster?method=del&location={{ location["url_query"] }}&redirect=%2Fcluster')">Remove</a></button>
{% elif location["joined"] == "False" %} {% elif location["joined"] == "False" %}
<button onclick="location.href='/api/cluster?method=add&location={{ location["url_query"] }}&redirect=/cluster'" type="button">Add</button> <button onclick="OpenLink('/api/cluster?method=add&location={{ location["url_query"] }}&redirect=%2Fcluster')">Add</a></button>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}

View File

@ -13,21 +13,16 @@
<thead> <thead>
<tr> <tr>
<th>Link</th> <th>Link</th>
<th>Methods</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for button_item in button_dict[route_group] %} {% for button_item in button_dict[route_group] %}
<tr> <tr>
<td> <td><button onclick="OpenLink('{{ button_item["link"] }}')">{{ button_item["label"] }}</a></button></td>
{% if button_item["button"] %}
<button onclick="location.href='{{ button_item["link"] }}'" type="button">{{ button_item["label"] }}</button>
{% else %}
<a>{{ button_item["link"] }}</a>
{% endif %}
</td>
<td><a>{{ button_item["methods"] }}</a></td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View File

@ -6,7 +6,7 @@
<p> <p>
{% for epg_method in epg_methods %} {% for epg_method in epg_methods %}
<button onclick="location.href='/guide?source={{ epg_method }}'" type="button">{{ epg_method }}</button> <button onclick="OpenLink('/guide?source={{ epg_method }}')">{{ epg_method }}</a></button>
{% endfor %} {% endfor %}
</p> </p>
@ -35,9 +35,9 @@
{% if source in ["blocks", "origin", fhdhr.config.dict["main"]["dictpopname"]] %} {% if source in ["blocks", "origin", fhdhr.config.dict["main"]["dictpopname"]] %}
<td> <td>
{% if chan_dict["enabled"] %} {% if chan_dict["enabled"] %}
<a href="{{ chan_dict["m3u_url"] }}">Play</a> <a href="{{ chan_dict["play_url"] }}">Play</a>
{% else %} {% else %}
<a href="{{ chan_dict["m3u_url"] }}" style="visibility:hidden">Play</a> <a href="{{ chan_dict["play_url"] }}" style="visibility:hidden">Play</a>
{% endif %} {% endif %}
</td> </td>
{% endif %} {% endif %}

View File

@ -5,7 +5,7 @@
<h4 style="text-align: center;">fHDHR Status</h4> <h4 style="text-align: center;">fHDHR Status</h4>
<div class="container"> <td class="container">
<table class="table-medium center"> <table class="table-medium center">
<tbody> <tbody>

View File

@ -7,8 +7,7 @@
<h4 style="text-align: center;">Some Settings will require a manual restart.</h4> <h4 style="text-align: center;">Some Settings will require a manual restart.</h4>
<div style="text-align: center;"> <div style="text-align: center;">
<button onclick="location.href='/api/settings?method=restart&redirect=/settings'" type="button">Restart fHDHR</button> <button onclick="OpenLink('/api/settings?method=restart&instance_id={{ session["instance_id"] }}&redirect=%2Fsettings')">Restart fHDHR</a></button><p> Note: This may take some time, and you will have to refresh your page.</p>
<p> Note: This may take some time, and you will have to refresh your page.</p>
</div> </div>
<br> <br>
@ -33,11 +32,14 @@
<tbody> <tbody>
{% for config_item in list(web_settings_dict[config_section].keys()) %} {% for config_item in list(web_settings_dict[config_section].keys()) %}
<tr> <tr>
<td>{{ config_item }}</td> <td>{{ config_item }}</td>
<td>{{ web_settings_dict[config_section][config_item]["value_default"] }}</td> <td>{{ web_settings_dict[config_section][config_item]["value_default"] }}</td>
<td> <td>
<form method="post" action="/api/settings?method=update&redirect=/settings"> <form method="post" action="/api/settings?method=update&redirect=%2Fsettings">
<input type="hidden" name="config_section" value="{{ config_section }}"> <input type="hidden" name="config_section" value="{{ config_section }}">
<input type="hidden" name="config_name" value="{{ config_item }}"> <input type="hidden" name="config_name" value="{{ config_item }}">
<input type="hidden" name="config_default" value="{{ web_settings_dict[config_section][config_item]["value_default"] }}"> <input type="hidden" name="config_default" value="{{ web_settings_dict[config_section][config_item]["value_default"] }}">
@ -60,7 +62,9 @@
<input type="submit" value="Reset"> <input type="submit" value="Reset">
</form> </form>
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View File

@ -4,7 +4,7 @@
<h4 style="text-align: center;">{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }} Tools</h4> <h4 style="text-align: center;">{{ fhdhr.config.dict["fhdhr"]["friendlyname"] }} Tools</h4>
<form method="post" action="/api/tools?method=prettyjson&redirect=/tools"> <form method="post" action="/api/tools?method=prettyjson&redirect=%2Ftools">
<a data-th="URL"><input type="text" name="url" value=""></a> <a data-th="URL"><input type="text" name="url" value=""></a>
<a data-th="Convert Json url to tabbbed"><input type="submit" value="Convert Json url to tabbbed"></a> <a data-th="Convert Json url to tabbbed"><input type="submit" value="Convert Json url to tabbbed"></a>
</form> </form>

View File

@ -37,10 +37,10 @@
{% endif %} {% endif %}
<td> <td>
{% if tuner_dict["status"] != "Inactive" %} {% if tuner_dict["status"] != "Inactive" %}
<button onclick="location.href='/api/tuners?method=close&tuner={{ tuner_dict["number"] }}&redirect=/tuners'" type="button">Close</button> <button onclick="OpenLink('/api/tuners?method=close&tuner={{ tuner_dict["number"] }}&redirect=%2Ftuners')">Close</a></button>
{% endif %} {% endif %}
{% if not tuner_scanning and tuner_dict["status"] == "Inactive" %} {% if not tuner_scanning and tuner_dict["status"] == "Inactive" %}
<button onclick="location.href='/api/tuners?method=scan&tuner={{ tuner_dict["number"] }}&redirect=/tuners'" type="button">Channel Scan</button> <button onclick="OpenLink('/api/tuners?method=scan&tuner={{ tuner_dict["number"] }}&redirect=%2Ftuners')">Channel Scan</a></button>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View File

@ -8,6 +8,7 @@
<div class="container"> <div class="container">
<table class="table-medium center"> <table class="table-medium center">
<tbody> <tbody>
{% for key in list(version_dict.keys()) %} {% for key in list(version_dict.keys()) %}
<tr> <tr>
<td>{{ key }}</td> <td>{{ key }}</td>

View File

@ -20,18 +20,23 @@
{% if epg_method == "origin" %} {% if epg_method == "origin" %}
{% set epg_method_name = fhdhr.config.dict["main"]["dictpopname"] %} {% set epg_method_name = fhdhr.config.dict["main"]["dictpopname"] %}
{% endif %} {% endif %}
<tr> <tr>
<td> {{ epg_method_name }}</td> <td> {{ epg_method_name }}</td>
<td><a href="/api/xmltv?method=get&source={{ epg_method }}">{{ epg_method_name }}</a></td> <td><a href="/api/xmltv?method=get&source={{ epg_method }}">{{ epg_method_name }}</a></td>
<td><a href="/api/epg?method=get&source={{ epg_method }}">{{ epg_method_name }}</a></td> <td><a href="/api/epg?method=get&source={{ epg_method }}">{{ epg_method_name }}</a></td>
<td> <td>
<button onclick="location.href='/api/xmltv?method=update&source={{ epg_method }}&redirect=/xmltv'" type="button">Update</button> <button onclick="OpenLink('/api/xmltv?method=update&source={{ epg_method }}&redirect=%2Fxmltv')">Update</a></button>
<button onclick="location.href='/api/xmltv?method=clearcache&source={{ epg_method }}&redirect=/xmltv'" type="button">Clear Cache</button> <button onclick="OpenLink('/api/xmltv?method=clearcache&source={{ epg_method }}&redirect=%2Fxmltv')">Clear Cache</a></button>
</td> </td>
</tr> </tr>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</tbody> </body>
</table> </table>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -1,7 +1,3 @@
table {border: 1px solid black;}
th {border: 1px solid black;}
td {border: 1px solid black;}
.pull-right { float: right; } .pull-right { float: right; }
.pull-left { float: left; } .pull-left { float: left; }

View File

@ -4,18 +4,17 @@
<h4 style="text-align: center;">{{ fhdhr.config.dict["main"]["servicename"] }} Status</h4> <h4 style="text-align: center;">{{ fhdhr.config.dict["main"]["servicename"] }} Status</h4>
<table class="center" style="width:50%">
<tr>
<th></th>
<th></th>
</tr>
<div class="container">
<table class="table-medium center">
<tbody>
{% for key in list(origin_status_dict.keys()) %} {% for key in list(origin_status_dict.keys()) %}
<tr> <tr>
<td>{{ key }}</td> <td>{{ key }}</td>
<td>{{ origin_status_dict[key] }}</td> <td>{{ origin_status_dict[key] }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody>
</table>
</div>
{% endblock %} {% endblock %}