1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-11-20 13:50:12 +01:00

Improve http update check mode

This commit is contained in:
Ciaran Gultnieks 2013-10-01 15:06:02 +01:00
parent 057c1f06e4
commit 381bbb60ac
2 changed files with 30 additions and 21 deletions

View File

@ -1084,13 +1084,19 @@ It currently only works for git, hg and git-svn repositories. In the case of
the latter, the repo URL must encode the path to the trunk and tags or else no the latter, the repo URL must encode the path to the trunk and tags or else no
tags will be found. tags will be found.
@item @item
@code{HTTP} - An HTTP request is performed, and the resulting document is @code{HTTP} - HTTP requests are used to determine the current version code and
scanned for two regular expressions, the first specifying the version name version name. This is controlled by the @code{Update Check Data} field, which
and the second the version code. The expression for the version name can be is of the form @code{urlcode|excode|urlver|exver}.
blank, but the version code must always be correct.
The @code{Update Check Data} field is used to provide the url and the two Firstly, if @code{urlcode} is non-empty, the document from that URL is
regular expressions, in the form @code{url|ex1|ex2}. retrieved, and matched against the regular expression @code{excode}, with the
first group becoming the version code.
Secondly, if @code{urlver} is non-empty, the document from that URL is
retrieved, and matched against the regular expression @code{exver}, with the
first group becoming the version name. The @code{urlver} field can be set to
simply '.' which says to use the same document returned for the version code
again, rather than retrieving a different one.
@end itemize @end itemize
@node Update Check Data @node Update Check Data

View File

@ -43,27 +43,30 @@ def check_http(app):
if not 'Update Check Data' in app: if not 'Update Check Data' in app:
raise Exception('Missing Update Check Data') raise Exception('Missing Update Check Data')
url, verex, codeex = app['Update Check Data'].split('|') urlcode, codeex, urlver, verex = app['Update Check Data'].split('|')
req = urllib2.Request(url, None) vercode = "99999999"
resp = urllib2.urlopen(req, None, 20) if len(urlcode) > 0:
page = resp.read() req = urllib2.Request(urlcode, None)
resp = urllib2.urlopen(req, None, 20)
page = resp.read()
if len(verex) > 0:
m = re.search(verex, page)
if not m:
raise Exception("No RE match for version")
version = m.group(1)
else:
version = "??"
if len(codeex) > 0:
m = re.search(codeex, page) m = re.search(codeex, page)
if not m: if not m:
raise Exception("No RE match for version code") raise Exception("No RE match for version code")
vercode = m.group(1) vercode = m.group(1)
else:
vercode = "99999999" version = "??"
if len(urlver) > 0:
if urlver != '.':
req = urllib2.Request(urlver, None)
resp = urllib2.urlopen(req, None, 20)
page = resp.read()
m = re.search(verex, page)
if not m:
raise Exception("No RE match for version")
version = m.group(1)
return (version, vercode) return (version, vercode)