blob: 51c0bbfe12636fa748854f6b19341b233f3881c5 [file] [log] [blame]
from xml.dom import minidom, pulldom
import requests_cache
requests_session = requests_cache.CachedSession('updater', backend='memory')
class ApkRelease:
version_name: str
version_code: int
download_url: str
def __init__(self, version_name: str, version_code: int, download_url: str):
self.version_name = version_name
self.version_code = version_code
self.download_url = download_url
def _child_el_content(el: minidom.Element, tag_name: str):
return el.getElementsByTagName(tag_name).item(0).firstChild.data
def fdroid_recommended_release(repo: str, application_id: str):
with requests_session.get('{}/index.xml'.format(repo)) as r:
doc = pulldom.parseString(r.text)
for event, node in doc:
if event == pulldom.START_ELEMENT and node.tagName == 'application':
if node.getAttribute('id') == application_id:
doc.expandNode(node)
marketvercode = _child_el_content(node, 'marketvercode')
for p in node.getElementsByTagName('package'):
if _child_el_content(p, 'versioncode') == marketvercode:
return ApkRelease(
_child_el_content(p, 'version'),
int(marketvercode),
'{}/{}'.format(repo, _child_el_content(p, 'apkname'))
)
raise Exception('Did not find {} in repo {}'.format(application_id, repo))