fixes to wtv-favorites

This commit is contained in:
zefie
2022-10-09 10:00:38 -04:00
parent 7bf2d2e6fa
commit 0210e4f9a4
12 changed files with 196 additions and 97 deletions

View File

@@ -1,4 +1,8 @@
var minisrv_service_file = true; var minisrv_service_file = true;
var request_is_async = true;
var max_redirects = 3;
var redirects = 0;
function hex_to_ascii(POST) function hex_to_ascii(POST)
{ {
@@ -9,37 +13,126 @@ function hex_to_ascii(POST)
} }
return str; return str;
} }
if (request_headers.post_data) {
var POST = request_headers.post_data; var POST = request_headers.post_data;
var image = hex_to_ascii(POST); var image = hex_to_ascii(POST);
}
var url = request_headers.request; function getTitle(url) {
return new Promise(function (resolve, reject) {
var page_title = "Web Page";
var request_type = (url.substring(0, 5) == "https") ? "https" : "http";
var proxy_agent = null;
switch (request_type) {
case "https":
var proxy_agent = require('https');
break;
case "http":
var proxy_agent = require('http');;
break;
}
if (proxy_agent) {
var options = {
method: 'GET'
}
const request = proxy_agent.get(url, options, (response) => {
let req_data = '';
if (response.statusCode == 301 || response.statusCode == 302) {
redirects++;
if (redirects < max_redirects) resolve(getTitle(response.headers.location));
else reject(`Too many redirects. Max: ${max_redirects}, Current: ${redirects}`);
}
response.on('data', (chunk) => {
req_data += chunk.toString();
});
var title = url.split('favorite-title=')[1] response.on('end', () => {
title = title.split('&')[0] let match = req_data.match(/<title>([^<]*)<\/title>/) // regular expression to parse contents of the <title> tag
if (match && typeof match[1] === 'string') page_title = match[1];
resolve(page_title);
});
});
var folder = url.split('favorite-category=')[1] request.on('error', (error) => {
folder = folder.split('&')[0] console.log(' *** Error getting title for wtv-favorite', error);
folder = folder.replaceAll("+", " ") reject();
});
var imagetype = url.split('favorite-thumbnail-type=')[1] }
imagetype = imagetype.split('&')[0] });
}
var favurl = url.split('favorite-url=')[1]
favurl = favurl.split('&')[0]
async function saveFavorite(favstore, title, folder, imagetype, favurl) {
var headers, data = '';
if (!favstore.favstoreExists()) {
// create favstore if the user hasn't already navigated to favorites
favstore.createFavstore();
}
if (favstore.favstoreExists()) {
var default_folder = "Personal"; // default to "Personal"
var favoritenum = 0; var favoritenum = 0;
var favstore_exists = ssid_sessions[socket.ssid].favstore.favstoreExists();
var favarray = ssid_sessions[socket.ssid].favstore.listFavorites(folder); if (!folder) folder = default_folder;
if (!favstore.folderExists(folder)) {
// user did not define a folder, and the default folder does not exist
// so choose the user's first available folder
var favfolders = favstore.listFolders();
if (favfolders.length > 0) folder = favfolders[0];
}
if (!folder) {
// user has no folders, forcefully recreate "Personal"
folder = default_folder;
favstore.createTemplateFolder(folder);
}
var favarray = favstore.listFavorites(folder);
favoritenum = Object.keys(favarray).length; favoritenum = Object.keys(favarray).length;
if (favoritenum == minisrv_config.services[service_name].max_favorites_per_folder)
{ if (!title) {
try {
await getTitle(favurl).then(function (res) {
title = res;
if (!minisrv_config.config.debug_flags.quiet) console.log(" * Client sent favorite-url without title, got title:", title);
});
} catch (e) {
console.error(" * Error: Client sent favorite-url without title, and we could not get the title from the server:", e);
}
}
if (!image) {
imagetype = "url";
image = "canned/favorite_default.gif"
}
if (favoritenum == minisrv_config.services[service_name].max_favorites_per_folder) {
headers = `400 You can only have ${minisrv_config.services[service_name].max_favorites_per_folder} favorites in a folder. Discard some favorites or choose a different folder, then try again.` headers = `400 You can only have ${minisrv_config.services[service_name].max_favorites_per_folder} favorites in a folder. Discard some favorites or choose a different folder, then try again.`
} else { } else {
var createresult = ssid_sessions[socket.ssid].favstore.createFavorite(title, favurl, folder, image, imagetype); var createresult = favstore.createFavorite(title, favurl, folder, image, imagetype);
if (!createresult) { // true if fail
headers = `200 OK headers = `200 OK
wtv-expire: wtv-favorite:/serve-browser?favorite_folder_name=${folder}` wtv-expire: wtv-favorite:/serve-browser?favorite_folder_name=${folder}`
} else {
var err = wtvshared.doErrorPage(500);
headers = err[0];
data = err[1];
} }
sendToClient(socket, headers, data);
}
} else {
var err = wtvshared.doErrorPage(500);
headers = err[0];
data = err[1];
sendToClient(socket, headers, data);
}
}
var title = request_headers.query['favorite-title'];
var folder = request_headers.query['favorite-category'];
if (folder) folder = folder.replaceAll("+", " ")
var imagetype = request_headers.query['favorite-thumbnail-type']
var favurl = request_headers.query['favorite-url'];
saveFavorite(ssid_sessions[socket.ssid].favstore, title, folder, imagetype, favurl);

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

View File

@@ -56,7 +56,6 @@ if (errpage) {
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html Content-Type: text/html
wtv-expire-all: wtv-favorite: wtv-expire-all: wtv-favorite:
wtv-visit: ${confirmAlert}
Location: ${confirmAlert}` Location: ${confirmAlert}`
} else { } else {
@@ -72,7 +71,6 @@ Location: ${confirmAlert}`
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html Content-Type: text/html
wtv-expire-all: wtv-favorite: wtv-expire-all: wtv-favorite:
wtv-visit: ${gourl}
Location: ${gourl}` Location: ${gourl}`
} }
} }

View File

@@ -2,7 +2,9 @@ var minisrv_service_file = true;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-
wtv-expire-all: wtv-favorite:/favorite`
data = `<HTML> data = `<HTML>

View File

@@ -17,7 +17,8 @@ favoritenum = Object.keys(favarray).length;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<html><head> data = `<html><head>

View File

@@ -17,7 +17,7 @@ favoritenum = Object.keys(favarray).length;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-browser wtv-expire-all: wtv-favorite:/serve-
wtv-expire-all: wtv-favorite:/favorite wtv-expire-all: wtv-favorite:/favorite
` `

View File

@@ -32,7 +32,8 @@ folderlist += "</select>"
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<html><head> data = `<html><head>

View File

@@ -17,7 +17,8 @@ favoritenum = Object.keys(favarray).length;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<html><head> data = `<html><head>

View File

@@ -17,7 +17,8 @@ favoritenum = Object.keys(favarray).length;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<html><head> data = `<html><head>

View File

@@ -2,7 +2,8 @@ var minisrv_service_file = true;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<HTML> data = `<HTML>

View File

@@ -17,7 +17,8 @@ favoritenum = Object.keys(favarray).length;
headers = `200 OK headers = `200 OK
Connection: Keep-Alive Connection: Keep-Alive
Content-Type: text/html` Content-Type: text/html
wtv-expire-all: wtv-favorite:/serve-`
data = `<html> data = `<html>

View File

@@ -172,7 +172,7 @@ class WTVFavorites {
var folderpath = this.getFolderDir(folder); var folderpath = this.getFolderDir(folder);
var self = this; var self = this;
self.messageArr = []; self.messageArr = [];
var files = this.fs.readdirSync(folderpath) this.fs.readdirSync(folderpath)
.map(function (v) { .map(function (v) {
var favorite_data_raw = null; var favorite_data_raw = null;
var favoritepath = folderpath + self.path.sep + v; var favoritepath = folderpath + self.path.sep + v;