Berry add local extension repository access based on OtaUrl
This commit is contained in:
parent
e851d23ce5
commit
a4b39af066
@ -66,6 +66,23 @@ class Extension_manager
|
||||
return wd[from .. to]
|
||||
end
|
||||
|
||||
#####################################################################################################
|
||||
# ext_repo_local()
|
||||
#
|
||||
# Takes OtaUrl, extract the host url and adds extensions/
|
||||
# Ex: 'http://otaserver/ota/tasmota/tasmota32.bin' becomes 'http://otaserver/extensions/'
|
||||
#
|
||||
# @return string - the url of the local extensions repository
|
||||
#####################################################################################################
|
||||
static def ext_repo_local()
|
||||
import string
|
||||
|
||||
var ota_url = tasmota.cmd("_OtaUrl", true)['OtaUrl']
|
||||
var url = string.split(ota_url, "/")
|
||||
var result = f"{url[0]}//{url[2]}/extensions/" # http://otaserver/extensions/
|
||||
return result
|
||||
end
|
||||
|
||||
#####################################################################################################
|
||||
# General functions to get information about tapp files (installed or from store)
|
||||
#####################################################################################################
|
||||
@ -295,7 +312,8 @@ class Extension_manager
|
||||
tapp_fname = self.tapp_name(tapp_fname) + ".tapp"
|
||||
# full url
|
||||
var ext_url = f"{self.EXT_REPO}{self.EXT_REPO_FOLDER}{tapp_fname}"
|
||||
log(f"EXT: installing from '{ext_url}'", 3)
|
||||
var ext_repo = self.ext_repo_local()
|
||||
var ext_url_local = f"{ext_repo}{self.EXT_REPO_FOLDER}{tapp_fname}"
|
||||
# load from web
|
||||
try
|
||||
# check if directory exists
|
||||
@ -303,12 +321,21 @@ class Extension_manager
|
||||
|
||||
var local_file = f"{self.EXT_FOLDER}{tapp_fname}"
|
||||
var cl = webclient()
|
||||
cl.begin(ext_url)
|
||||
log(f"EXT: installing from '{ext_url_local}'", 3)
|
||||
cl.begin(ext_url_local)
|
||||
var r = cl.GET()
|
||||
if r != 200
|
||||
cl.close()
|
||||
if self.EXT_REPO != ext_repo
|
||||
log(f"EXT: installing from '{ext_url}'", 3)
|
||||
cl.begin(ext_url)
|
||||
r = cl.GET()
|
||||
end
|
||||
if r != 200
|
||||
log(f"EXT: return_code={r}", 2)
|
||||
return false
|
||||
end
|
||||
end
|
||||
var ret = cl.write_file(local_file)
|
||||
cl.close()
|
||||
# test if file exists and tell its size
|
||||
@ -634,18 +661,28 @@ class Extension_manager
|
||||
var version = f"0x{tasmota.version():08X}"
|
||||
|
||||
var url = f"{self.EXT_REPO}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
||||
log(f"EXT: fetching extensions manifest '{url}'", 3)
|
||||
var ext_repo = self.ext_repo_local()
|
||||
var url_local = f"{ext_repo}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
|
||||
# Add architeture and version information
|
||||
# They are not used for now but may be interesting in the future to serve
|
||||
# different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1)
|
||||
# load the template
|
||||
var cl = webclient()
|
||||
cl.begin(url)
|
||||
log(f"EXT: fetching extensions manifest '{url_local}'", 3)
|
||||
cl.begin(url_local)
|
||||
var r = cl.GET()
|
||||
if r != 200
|
||||
cl.close()
|
||||
if self.EXT_REPO != ext_repo
|
||||
log(f"EXT: fetching extensions manifest '{url}'", 3)
|
||||
cl.begin(url)
|
||||
r = cl.GET()
|
||||
end
|
||||
if r != 200
|
||||
log(f"EXT: error fetching manifest {r}", 2)
|
||||
raise "webclient_error", f"Error fetching manifest code={r}"
|
||||
end
|
||||
end
|
||||
var s = cl.get_string()
|
||||
cl.close()
|
||||
return s
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user