support ebrowser update

This commit is contained in:
James Feng Cao 2024-06-18 23:28:12 +08:00
parent 5f2116943f
commit c3173e0f97
13 changed files with 167 additions and 33 deletions

View file

@ -0,0 +1,47 @@
{"version":"1.0.21",
"name": "ebrowser",
"description": "The keyboard-friendly minimal suckless web browser",
"main": "webview.js",
"scripts": {
"release": "electron-builder"
},
"author": "Richard H. Cao",
"keywords": ["browser","minimal","suckless","command line","vim key map","user scripts"],
"license": "GPL-3.0",
"repository": {
"type": "git",
"url": "git+https://github.com/torappinfo/ebrowser.git"
},
"build": {
"appId": "torapp.eweb",
"publish": "github",
"asar": false,
"files": [
"webview.js",
"index.html",
"package.json",
"README.md"
],
"directories": {
"output": "release"
},
"dmg": {
"contents": [
{ "x": 110, "y": 150 },
{ "x": 240, "y": 150, "type": "link", "path": "/Applications" }
]
},
"nsis": {
"createDesktopShortcut": "always"
},
"linux": {
"target": "AppImage"
}
},
"dependencies": {
},
"devDependencies": {
"electron":"",
"electron-builder": ""
}
}

View file

@ -177,6 +177,17 @@ function addrCommand(cmd){
case "ext":
session.defaultSession.loadExtension(args[1]);
return;
case "gr":
if(args.length<2) {
gredirect_enable(0);
return;
}
let i = parseInt(args[1]);
if(i>=0 && i<gredirects.length)
gredirect_enable(i);
else
gredirect_disable();
return;
case "nc":
bForwardCookie = false;
msgbox_info("Cookie forwarding disabled");
@ -204,11 +215,7 @@ function addrCommand(cmd){
if(args.length>1)
proxy = proxies[args[1]]; //retrieve proxy
if(proxy){
if(gredirect){
gredirect=null;
unregisterHandler();
}
bRedirect = false;
gredirect_disable();
session.defaultSession.setProxy(proxy);
}
return;
@ -222,10 +229,33 @@ function addrCommand(cmd){
else
session.defaultSession.setUserAgent(defaultUA);
return;
case "update":
let updateurl;
if(1==args.length)
updateurl = "https://gitlab.com/jamesfengcao/uweb/-/raw/master/misc/ebrowser/";
else {
updateurl = args[1];
if(!updateurl.endsWith("/")) updateurl = updateurl +"/";
}
updateApp(updateurl);
return;
}
}
}
function gredirect_disable(){
if(gredirect){
gredirect=null;
unregisterHandler();
}
bRedirect = false;
}
function gredirect_enable(i){
if(i>=gredirects.length) return;
if(!gredirect) registerHandler();
gredirect=gredirects[i];
}
function cbConsoleMsg(e, level, msg, line, sourceid){
console.log(line);
console.log(sourceid);
@ -355,15 +385,10 @@ function topMenu(){
win.webContents.executeJavaScript(js,false);
}},
{ label: 'No redirect', accelerator: 'Ctrl+R', click: ()=>{
if(gredirect){
gredirect=null;
unregisterHandler();
}
gredirect_disable();
}},
{ label: 'Redirect', accelerator: 'Ctrl+Shift+R', click: ()=>{
if(0==gredirects.length) return;
if(!gredirect) registerHandler();
gredirect=gredirects[0];
gredirect_enable(0);
}},
{ label: 'Close', accelerator: 'Ctrl+W', click: ()=>{
win.webContents.executeJavaScript("tabClose()",false).then((r)=>{
@ -493,4 +518,66 @@ function msgbox_info(msg){
})
}
async function updateApp(url){//url must ending with "/"
let msg;
do {
try {
let res = await fetch(url+"package.json");
let packageS = await res.text();
let nLatestVer;
//the last part of version string is the version number, must keep increasing
{
let head = packageS.slice(2,40);
let iV = head.indexOf("version");
if(iV<0) {
msg = "remote package.json corrupted"
break;
}
iV = iV + 11;
let iE = head.indexOf('"',iV+4);
let iS = head.lastIndexOf('.',iE-1);
nLatestVer = parseInt(head.substring(iS+1,iE));
}
let nVer;
{
let ver = process.versions;
let iS = ver.lastIndexOf('.');
nVer = parseInt(ver.substring(iS+1));
}
if(nVer>=nLatestVer){
msg = "Already up to date";
break;
}
writeFile("package.json", packageS);
fetch2file(url,"webview.js");
fetch2file(url,"index.html");
msg = "Update completed";
}catch(e){
msg = "Fail to update"
}
}while(false);
dialog.showMessageBoxSync(null, {
type: 'info',
title: msg,
message: msg,
buttons: ['OK']
})
}
async function fetch2file(urlFolder, filename){
let res = await fetch(urlFolder+filename);
let str = await res.text();
writeFile(filename, str);
}
async function writeFile(filename, str){
let pathname=path.join(__dirname,filename+".new");
fs.writeFile(pathname, str, (err) => {
if(err) throw "Fail to write";
fs.rename(pathname,path.join(__dirname,filename),(e1)=>{
if(e1) throw "Fail to rename";
});
});
}