From 9e1bb5e17b76f557d020088ac2a9e3022536024c Mon Sep 17 00:00:00 2001 From: milaq Date: Mon, 12 Aug 2019 16:31:15 +0200 Subject: [PATCH] Append bogus parameter to every target url To work around the issue that a few AVRs blindly append parameters with an ampersand. This also allows us to get rid of the search logic workaround. Furthermore the vTuner API also hacks around the issue this way. So this seems like the correct way to handle that even if it looks ugly. --- ycast/server.py | 7 +------ ycast/vtuner.py | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/ycast/server.py b/ycast/server.py index 21148f5..6b4372d 100644 --- a/ycast/server.py +++ b/ycast/server.py @@ -188,12 +188,7 @@ def radiobrowser_popular(): @app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_SEARCH, defaults={'path': ''}) @app.route('/' + PATH_ROOT + '/' + PATH_RADIOBROWSER + '/' + PATH_RADIOBROWSER_SEARCH + '') def radiobrowser_search(path): - # vtuner does totally weird stuff here: TWO request arguments are passed to the search URI - # thus, we need to parse the search query as path - query = None - if 'search' in path: - path_search = path[path.find('search'):] - query = path_search.partition('=')[2] + query = request.args.get('search') if not query or len(query) < 3: page = vtuner.Page() page.add(vtuner.Previous(url_for('landing', _external=True))) diff --git a/ycast/vtuner.py b/ycast/vtuner.py index 975a181..d5d4a75 100644 --- a/ycast/vtuner.py +++ b/ycast/vtuner.py @@ -13,6 +13,16 @@ def strip_https(url): return url +def add_bogus_parameter(url): + """ + We need this bogus parameter because some (if not all) AVRs blindly append additional request parameters + with an ampersand. E.g.: '&mac=&dlang=eng&fver=1.2&startitems=1&enditems=100'. + The original vTuner API hacks around that by adding a specific parameter or a bogus parameter like '?empty=' to + the target URL. + """ + return url + '?vtuner=true' + + class Page: def __init__(self): self.items = [] @@ -40,8 +50,8 @@ class Previous: def append_to_xml(self, xml): item = etree.SubElement(xml, 'Item') etree.SubElement(item, 'ItemType').text = 'Previous' - etree.SubElement(item, 'UrlPrevious').text = self.url - etree.SubElement(item, 'UrlPreviousBackUp').text = self.url + etree.SubElement(item, 'UrlPrevious').text = add_bogus_parameter(self.url) + etree.SubElement(item, 'UrlPreviousBackUp').text = add_bogus_parameter(self.url) return item @@ -64,8 +74,8 @@ class Search: def append_to_xml(self, xml): item = etree.SubElement(xml, 'Item') etree.SubElement(item, 'ItemType').text = 'Search' - etree.SubElement(item, 'SearchURL').text = self.url - etree.SubElement(item, 'SearchURLBackUp').text = self.url + etree.SubElement(item, 'SearchURL').text = add_bogus_parameter(self.url) + etree.SubElement(item, 'SearchURLBackUp').text = add_bogus_parameter(self.url) etree.SubElement(item, 'SearchCaption').text = self.caption etree.SubElement(item, 'SearchTextbox').text = None etree.SubElement(item, 'SearchButtonGo').text = "Search" @@ -82,8 +92,8 @@ class Directory: item = etree.SubElement(xml, 'Item') etree.SubElement(item, 'ItemType').text = 'Dir' etree.SubElement(item, 'Title').text = self.title - etree.SubElement(item, 'UrlDir').text = self.destination - etree.SubElement(item, 'UrlDirBackUp').text = self.destination + etree.SubElement(item, 'UrlDir').text = add_bogus_parameter(self.destination) + etree.SubElement(item, 'UrlDirBackUp').text = add_bogus_parameter(self.destination) return item