diff --git a/data/www/templates/channels.html b/data/www/templates/channels.html
index 0997f84..5a49898 100644
--- a/data/www/templates/channels.html
+++ b/data/www/templates/channels.html
@@ -11,7 +11,8 @@
Channel CallSign |
Channel Number |
Channel Thumbnail |
- Status |
+ Enabled |
+ Favorite |
Update |
Reset |
@@ -41,6 +42,17 @@
{% endif %}
+
+
+ |
|
diff --git a/fHDHR/device/channels/__init__.py b/fHDHR/device/channels/__init__.py
index bcfd6ce..261a420 100644
--- a/fHDHR/device/channels/__init__.py
+++ b/fHDHR/device/channels/__init__.py
@@ -33,6 +33,12 @@ class Channels():
def set_channel_status(self, keyfind, valfind, updatedict):
self.get_channel_obj(keyfind, valfind).set_status(updatedict)
+ def set_channel_enablement(self, keyfind, valfind, enablement):
+ self.get_channel_obj(keyfind, valfind).set_enablement(enablement)
+
+ def set_channel_favorite(self, keyfind, valfind, enablement):
+ self.get_channel_obj(keyfind, valfind).set_favorite(enablement)
+
def get_db_channels(self):
self.fhdhr.logger.info("Checking for Channel information stored in the database.")
channel_ids = self.fhdhr.db.get_fhdhr_value("channels", "list") or []
diff --git a/fHDHR/device/channels/channel.py b/fHDHR/device/channels/channel.py
index 5cc8a46..dfa8378 100644
--- a/fHDHR/device/channels/channel.py
+++ b/fHDHR/device/channels/channel.py
@@ -62,6 +62,10 @@ class Channel():
if not self.dict["thumbnail"]:
self.dict["thumbnail"] = self.dict["origin_thumbnail"]
+ if "HD" not in list(channel_info.keys()):
+ channel_info["HD"] = 0
+ self.dict["HD"] = channel_info["HD"]
+
self.fhdhr.db.set_channel_value(self.dict["id"], "dict", self.dict)
def default_dict(self, channel_id):
@@ -71,8 +75,9 @@ class Channel():
"callsign": None, "origin_callsign": None,
"number": None, "origin_number": None,
"tags": [], "origin_tags": [],
- "enabled": True,
- "thumbnail": None, "origin_thumbnail": None
+ "thumbnail": None, "origin_thumbnail": None,
+ "enabled": True, "favorite": 0,
+ "HD": 0,
}
def destroy(self):
@@ -95,6 +100,8 @@ class Channel():
'GuideName': self.dict['name'],
'Tags': ",".join(self.dict['tags']),
'URL': self.stream_url(),
+ 'HD': self.dict["HD"],
+ "Favorite": self.dict["favorite"],
}
def stream_url(self):
@@ -103,6 +110,25 @@ class Channel():
def play_url(self):
return ('/api/m3u?method=get&channel=%s' % self.dict['number'])
+ def set_favorite(self, enablement):
+ if enablement == "+":
+ self.dict["favorite"] = 1
+ elif enablement == "+":
+ self.dict["favorite"] = 0
+ self.fhdhr.db.set_channel_value(self.dict["fhdhr_id"], "info", self.dict)
+
+ def set_enablement(self, enablement):
+ if enablement == "disable":
+ self.dict["enabled"] = False
+ elif enablement == "enable":
+ self.dict["enabled"] = True
+ elif enablement == "toggle":
+ if self.dict["enabled"]:
+ self.dict["enabled"] = False
+ else:
+ self.dict["enabled"] = True
+ self.fhdhr.db.set_channel_value(self.dict["fhdhr_id"], "info", self.dict)
+
def __getattr__(self, name):
''' will only get called for undefined attributes '''
if name in list(self.dict.keys()):
diff --git a/fHDHR/http/api/channels.py b/fHDHR/http/api/channels.py
index 4ab1a4f..6154b03 100644
--- a/fHDHR/http/api/channels.py
+++ b/fHDHR/http/api/channels.py
@@ -1,4 +1,4 @@
-from flask import request, redirect, Response
+from flask import request, redirect, Response, abort
import urllib.parse
import json
@@ -33,6 +33,46 @@ class Channels():
response=channels_info_json,
mimetype='application/json')
+ elif method == "favorite":
+
+ channel = request.args.get('channel', default=None, type=str)
+ if not channel:
+ if redirect_url:
+ return redirect(redirect_url + "?retmessage=" + urllib.parse.quote("%s Failed" % method))
+ else:
+ return "%s Falied" % method
+
+ if channel.startstwith(tuple(["+", "-", "x"])):
+
+ channel_method = channel[0]
+ channel_number = channel[1:]
+
+ if str(channel_number) not in [str(x) for x in self.fhdhr.device.channels.get_channel_list("number")]:
+ response = Response("Not Found", status=404)
+ response.headers["X-fHDHR-Error"] = "801 - Unknown Channel"
+ self.fhdhr.logger.error(response.headers["X-fHDHR-Error"])
+ abort(response)
+
+ if channel_method == "+":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, channel_method)
+ elif channel_method == "-":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, channel_method)
+ elif channel_method == "x":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, "toggle")
+
+ else:
+ self.fhdhr.logger.warning("Unknown favorite command " + request.args['favorite'])
+ return abort(200, "Not a valid favorite command")
+
+ elif method in ["enable", "disable"]:
+ channel = request.args.get('channel', default=None, type=str)
+ if not channel or str(channel) not in [str(x) for x in self.fhdhr.device.channels.get_channel_list("number")]:
+ if redirect_url:
+ return redirect(redirect_url + "?retmessage=" + urllib.parse.quote("%s Failed" % method))
+ else:
+ return "%s Falied" % method
+ self.fhdhr.device.channels.set_channel_enablement("number", channel, method)
+
elif method == "update":
channel_id = request.form.get('id', None)
updatedict = {}
@@ -49,6 +89,8 @@ class Channels():
elif str(confvalue).lower() in ["true"]:
confvalue = True
updatedict[key] = confvalue
+ elif key in ["favorite", "HD"]:
+ updatedict[key] = int(request.form.get(key))
self.fhdhr.device.channels.set_channel_status("id", channel_id, updatedict)
elif method == "scan":
diff --git a/fHDHR/http/api/lineup_post.py b/fHDHR/http/api/lineup_post.py
index a9cc62c..491a435 100644
--- a/fHDHR/http/api/lineup_post.py
+++ b/fHDHR/http/api/lineup_post.py
@@ -27,5 +27,28 @@ class Lineup_Post():
self.fhdhr.logger.warning("Unknown scan command " + request.args['scan'])
return abort(200, "Not a valid scan command")
+ elif 'favorite' in list(request.args.keys()):
+ if request.args['favorite'].startstwith(tuple(["+", "-", "x"])):
+
+ channel_method = request.args['favorite'][0]
+ channel_number = request.args['favorite'][1:]
+
+ if str(channel_number) not in [str(x) for x in self.fhdhr.device.channels.get_channel_list("number")]:
+ response = Response("Not Found", status=404)
+ response.headers["X-fHDHR-Error"] = "801 - Unknown Channel"
+ self.fhdhr.logger.error(response.headers["X-fHDHR-Error"])
+ abort(response)
+
+ if channel_method == "+":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, channel_method)
+ elif channel_method == "-":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, channel_method)
+ elif channel_method == "x":
+ self.fhdhr.device.channels.set_channel_enablement("number", channel_number, "toggle")
+
+ else:
+ self.fhdhr.logger.warning("Unknown favorite command " + request.args['favorite'])
+ return abort(200, "Not a valid favorite command")
+
else:
return abort(501, "Not a valid command")
diff --git a/fHDHR/http/files/lineup_json.py b/fHDHR/http/files/lineup_json.py
index 7a4e3c4..aaf9187 100644
--- a/fHDHR/http/files/lineup_json.py
+++ b/fHDHR/http/files/lineup_json.py
@@ -16,12 +16,18 @@ class Lineup_JSON():
base_url = request.url_root[:-1]
+ show = request.args.get('show', default="all", type=str)
+
jsonlineup = []
for fhdhr_id in list(self.fhdhr.device.channels.list.keys()):
channel_obj = self.fhdhr.device.channels.list[fhdhr_id]
- if channel_obj.enabled:
+ if channel_obj.enabled or show == "found":
lineup_dict = channel_obj.lineup_dict()
lineup_dict["URL"] = base_url + lineup_dict["URL"]
+ if show == "found" and channel_obj.enabled:
+ lineup_dict["Enabled"] = 1
+ elif show == "found" and not channel_obj.enabled:
+ lineup_dict["Enabled"] = 0
jsonlineup.append(lineup_dict)
lineup_json = json.dumps(jsonlineup, indent=4)
diff --git a/fHDHR/http/files/lineup_xml.py b/fHDHR/http/files/lineup_xml.py
index 8a8a687..695c6f2 100644
--- a/fHDHR/http/files/lineup_xml.py
+++ b/fHDHR/http/files/lineup_xml.py
@@ -19,17 +19,21 @@ class Lineup_XML():
base_url = request.url_root[:-1]
+ show = request.args.get('show', default="all", type=str)
+
out = xml.etree.ElementTree.Element('Lineup')
for fhdhr_id in list(self.fhdhr.device.channels.list.keys()):
channel_obj = self.fhdhr.device.channels.list[fhdhr_id]
- if channel_obj.enabled:
+ if channel_obj.enabled or show == "found":
+ program_out = sub_el(out, 'Program')
lineup_dict = channel_obj.lineup_dict()
lineup_dict["URL"] = base_url + lineup_dict["URL"]
- program_out = sub_el(out, 'Program')
- sub_el(program_out, 'GuideNumber', lineup_dict['GuideNumber'])
- sub_el(program_out, 'GuideName', lineup_dict['GuideName'])
- sub_el(program_out, 'Tags', lineup_dict['Tags'])
- sub_el(program_out, 'URL', lineup_dict['URL'])
+ if show == "found" and channel_obj.enabled:
+ lineup_dict["Enabled"] = 1
+ elif show == "found" and not channel_obj.enabled:
+ lineup_dict["Enabled"] = 0
+ for key in list(lineup_dict.keys()):
+ sub_el(program_out, str(key), str(lineup_dict[key]))
fakefile = BytesIO()
fakefile.write(b'\n')