Improved sKai support and overall download algo

This commit is contained in:
Luxferre
2023-03-26 15:44:43 +03:00
parent 175fbe4312
commit 5e4c21e30d
5 changed files with 60 additions and 8 deletions
+23 -2
View File
@@ -1,5 +1,20 @@
// Kopher UI logic
function saveBlob(blob, fname, successCb, errorCb) {
var storage = navigator.getDeviceStorage(blob.type.startsWith('image/') ? 'pictures' : 'sdcard'),
freeSpaceReq = storage.freeSpace()
freeSpaceReq.onsuccess = function() {
var freeSize = freeSpaceReq.result
if(freeSize > blob.size) {
var req = storage.addNamed(blob, fname)
req.onsuccess = successCb
req.onerror = errorCb
}
else errorCb(new Error('No free space available'))
}
freeSpaceReq.onerror = errorCb
}
function openURL(url, successCb, errorCb) {
if(url.startsWith('about:')) { // handle about: pages first
var pageName = url.split(':')[1], allowedPageNames = ['kopher', 'blank', 'help']
@@ -27,8 +42,14 @@ function openURL(url, successCb, errorCb) {
if(resource.length > 4) input = resource[4]
Hi01379.load(resource, input, function(res) {
if(res.content && res.content instanceof Blob) { // handle the download here
successCb({content: null, serviceMsg: 'Downloaded ' + res.contentName, updateAddr: false})
window.open(URL.createObjectURL(res.content))
if(res.contentType.startsWith('image/') && confirm('View the image? (press Cancel to save it)')) { // try to open it in an external image viewer
window.open(URL.createObjectURL(res.content))
successCb({content: null, serviceMsg: 'Viewed ' + res.contentName, updateAddr: false})
} else // proceed with storing the file
saveBlob(res.content, res.contentName, function() {
successCb({content: null, serviceMsg: 'Saved ' + res.contentName, updateAddr: false})
navigator.mozNotification.createNotification('File saved', res.contentName).show()
}, errorCb)
}
else successCb(res) // proceed to UI with non-downloads
}, errorCb)