Skip to content
Snippets Groups Projects
Commit 82016519 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Merge branch 'master' of gitlab.synchro.net:sbbs/sbbs

parents 1510b3e2 b821af43
Branches
No related merge requests found
# This file is a template, and might need editing before it works on your project.
# use the official gcc image, based on debian
# can use verions as well, like gcc:5.2
# see https://hub.docker.com/_/gcc/
image: gcc
# cache outputs to reduce the build time
cache:
paths:
- "**/*.o"
build-sbbs:
stage: build
# instead of calling g++ directly you can also use some build toolkit like make
# install the necessary build tools when needed
# before_script:
# - apt update && apt -y install make autoconf
script:
- cd src/sbbs3
- make all
- make gtkutils
- make RELEASE=1 all
- make RELEASE=1 gtkutils
artifacts:
name: sbbs
paths:
- "src/sbbs3/*.release/*"
- "src/sbbs3/*/*.release/*"
build-sexpots:
stage: build
# instead of calling g++ directly you can also use some build toolkit like make
# install the necessary build tools when needed
# before_script:
# - apt update && apt -y install make autoconf
script:
- cd src/sexpots
- make RELEASE=1
artifacts:
name: sexpots
paths:
- "src/sexpots/*.release/*"
build-syncterm:
stage: build
# instead of calling g++ directly you can also use some build toolkit like make
# install the necessary build tools when needed
# before_script:
# - apt update && apt -y install make autoconf
script:
- cd src/syncterm
- make RELEASE=1
artifacts:
name: syncterm
paths:
- "src/syncterm/*.release/*"
# run tests using the binary built before
#test:
# stage: test
# script:
# - ./runmytests.sh
...@@ -514,7 +514,7 @@ function callout_want_callback(fobj, fsize, fdate, offset, bp) ...@@ -514,7 +514,7 @@ function callout_want_callback(fobj, fsize, fdate, offset, bp)
if (this.received_files.indexOf(fobj.name) != -1) if (this.received_files.indexOf(fobj.name) != -1)
return this.file.REJECT; return this.file.REJECT;
// Reject or skip existing files. // Reject or skip existing files.
if (file_exists(fobj.name)) { if (file_size(fobj.name) > 0) {
log(LOG_WARNING, "Inbound file already exists: " + fobj.name); log(LOG_WARNING, "Inbound file already exists: " + fobj.name);
// If the size and date are the same, reject it. // If the size and date are the same, reject it.
if (fsize == file_size(fobj.name) && fdate == file_date(fobj.name)) if (fsize == file_size(fobj.name) && fdate == file_date(fobj.name))
......
...@@ -18,7 +18,7 @@ load("birthdate.js"); ...@@ -18,7 +18,7 @@ load("birthdate.js");
// Note: month is 0-based, day (of month) is optional and 1-based // Note: month is 0-based, day (of month) is optional and 1-based
function birthdays(month, day) function birthdays(month, day)
{ {
var u = new User(1); var u = new User;
var lastuser = system.stats.total_users; var lastuser = system.stats.total_users;
var list = []; var list = [];
for(u.number = 1; u.number <= lastuser; u.number++) { for(u.number = 1; u.number <= lastuser; u.number++) {
......
...@@ -61,7 +61,7 @@ HTTPRequest.prototype.SetupGet=function(url, referer, base) { ...@@ -61,7 +61,7 @@ HTTPRequest.prototype.SetupGet=function(url, referer, base) {
this.base=base; this.base=base;
this.url=new URL(url, this.base); this.url=new URL(url, this.base);
if(this.url.scheme!='http' && this.url.scheme!='https') if(this.url.scheme!='http' && this.url.scheme!='https')
throw("Unknown scheme! '"+this.url.scheme+"'"); throw new Error("Unknown scheme! '"+this.url.scheme+"' in url:" + url);
if(this.url.path=='') if(this.url.path=='')
this.url.path='/'; this.url.path='/';
this.request="GET "+this.url.request_path+" HTTP/1.0"; this.request="GET "+this.url.request_path+" HTTP/1.0";
...@@ -77,7 +77,7 @@ HTTPRequest.prototype.SetupPost=function(url, referer, base, data, content_type) ...@@ -77,7 +77,7 @@ HTTPRequest.prototype.SetupPost=function(url, referer, base, data, content_type)
this.base=base; this.base=base;
this.url=new URL(url, this.base); this.url=new URL(url, this.base);
if(this.url.scheme!='http' && this.url.scheme!='https') if(this.url.scheme!='http' && this.url.scheme!='https')
throw("Unknown scheme! '"+this.url.scheme+"'"); throw new Error("Unknown scheme! '"+this.url.scheme+"' in url: " + url);
if(this.url.path=='') if(this.url.path=='')
this.url.path='/'; this.url.path='/';
this.request="POST "+this.url.request_path+" HTTP/1.0"; this.request="POST "+this.url.request_path+" HTTP/1.0";
......
...@@ -109,111 +109,53 @@ ...@@ -109,111 +109,53 @@
Array of { type : String, url : String, length : Number } objects Array of { type : String, url : String, length : Number } objects
for any <enclosure> elements in the item. for any <enclosure> elements in the item.
Item.extra (Object)
If the item/entry contains additional elements not provided for
above, they are tacked on to this object in case you may need
to access them. Presumably these will all be E4X XML objects.
*/ */
load("http.js"); load("http.js");
// This is really not the way to do things, but meh. const Item = function (i) {
var toLocal = function(xmlObject) {
for each(var element in xmlObject) {
element.setName(element.localName());
toLocal(element);
}
}
var Feed = function (url, follow_redirects) {
var Item = function Item(xmlObject) {
this.id = ""; this.id = i.guid.length() ? i.guid[0].toString() : (i.id.length() ? i.id[0].toString() : '');
this.title = ""; this.title = ''; // uh ...
this.date = ""; this.date = i.pubDate.length() ? i.pubDate[0].toString() : (i.updated.length() ? i.updated[0].toString() : '');
this.author = ""; this.author = i.author.length() ? i.author.toString() : '';
this.body = ""; this.body = i.description.length() ? i.description[0].toString() : (i.summary.length() ? i.summary[0].toString() : '');
this.content = ""; this.content = i.encoded.length() ? i.encoded.toString() : '';
this.link = ""; this.link = i.link.length() ? skipsp(truncsp(i.link[0].toString())) : '';
this.enclosures = []; this.enclosures = [];
this.extra = {};
for each(var element in xmlObject) { var enclosures = i.enclosure.length();
switch (element.name()) { for (var n = 0; n < enclosures; n++) {
case 'guid':
case 'id':
this.id = element;
break;
case 'pubDate':
case 'updated':
this.date = element;
break;
case 'author':
this.author = element.text();
break;
case 'description':
case 'summary':
this.body = element;
break;
case 'link':
this.link = skipsp(truncsp(element.text()));
break;
case 'encoded':
this.content = element;
break;
case 'enclosure':
this.enclosures.push({ this.enclosures.push({
type: element.attribute('type'), type: i.enclosure[n].attribute('type'),
url: element.attribute("url"), url: i.enclosure[n].attribute('url'),
length: parseInt(element.attribute('length'), 10), length: parseInt(i.enclosure[n].attribute('length'), 10),
}); });
break;
default:
this.extra[element.name()] = element;
}
} }
} }
var Channel = function (xmlObject) { const Channel = function (c) {
this.title = "a"; this.title = c.title.length() ? c.title[0].toString() : '';
this.description = ""; this.description = c.description.length() ? c.description[0].toString() : (c.subtitle.length() ? c.subtitle[0].toString() : '');
this.link = ""; this.link = c.link.length() ? skipsp(truncsp(c.link[0].toString())) : '';
this.updated = ""; this.updated = c.lastBuildDate.length() ? c.lastBuildDate[0].toString() : (c.updated.length() ? c.updated[0].toString() : '');
this.items = []; this.items = [];
if (typeof xmlObject.title != "undefined") this.title = xmlObject.title; var items = c.item.length();
for (var n = 0; n < items; n++) {
if (typeof xmlObject.description != "undefined") { this.items.push(new Item(c.item[n]));
this.description = xmlObject.description;
} else if (typeof xmlObject.subtitle != "undefined") {
this.description = xmlObject.subtitle;
} }
// To do: deal with multiple links var entries = c.entry.length();
if (typeof xmlObject.link != "undefined") this.link = skipsp(truncsp(xmlObject.link.text())); for (var n = 0; n < entries; n++) {
this.items.push(new Item(c.entry[n]));
if (typeof xmlObject.lastBuildDate != "undefined") {
this.updated = xmlObject.lastBuildDate;
} else if (typeof xmlObject.updated != "undefined") {
this.updated = xmlObject.updated;
} }
var items = xmlObject.elements("item");
for each(var item in items) {
this.items.push(new Item(item));
} }
var entries = xmlObject.elements("entry"); const Feed = function (url, follow_redirects) {
for each(var entry in entries) {
this.items.push(new Item(entry));
}
}
this.channels = []; this.channels = [];
...@@ -221,14 +163,17 @@ var Feed = function (url, follow_redirects) { ...@@ -221,14 +163,17 @@ var Feed = function (url, follow_redirects) {
var httpRequest = new HTTPRequest(); var httpRequest = new HTTPRequest();
httpRequest.follow_redirects = follow_redirects || 0; httpRequest.follow_redirects = follow_redirects || 0;
var response = httpRequest.Get(url); var response = httpRequest.Get(url);
if (typeof response == "undefined" || response == "") throw "Empty response from server."; if (typeof response == "undefined" || response == "") {
throw new Error('Empty response from server.');
}
var feed = new XML(response.replace(/^<\?xml.*\?>/g, "")); var feed = new XML(response.replace(/^<\?xml.*\?>/g, ""));
toLocal(feed); // This is shitty httpRequest = undefined;
response = undefined;
switch (feed.localName()) { switch (feed.localName()) {
case "rss": case "rss":
var channels = feed.elements("channel"); var channels = feed.channel.length();
for each(var element in channels) { for (var n = 0; n < channels; n++) {
this.channels.push(new Channel(element)); this.channels.push(new Channel(feed.channel[n]));
} }
break; break;
case "feed": case "feed":
...@@ -237,6 +182,7 @@ var Feed = function (url, follow_redirects) { ...@@ -237,6 +182,7 @@ var Feed = function (url, follow_redirects) {
default: default:
break; break;
} }
feed = undefined;
} }
this.load(); this.load();
......
...@@ -750,6 +750,13 @@ function syncterm_list(list, dir) ...@@ -750,6 +750,13 @@ function syncterm_list(list, dir)
f.writeln(format("\tAddress=%s", list[i].service[j].address)); f.writeln(format("\tAddress=%s", list[i].service[j].address));
if(list[i].service[j].port) if(list[i].service[j].port)
f.writeln(format("\tPort=%s", list[i].service[j].port)); f.writeln(format("\tPort=%s", list[i].service[j].port));
if(list[i].service[j].description
&& (list[i].service[j].description.toUpperCase().indexOf("PETSCII") == 0
|| list[i].service[j].description.toUpperCase().indexOf("COMMODORE") == 0)) {
f.writeln(format("\tScreenMode=%s"
,list[i].service[j].description.indexOf("80") >= 0 ? "C128-80col" : "C64"));
f.writeln("\tNoStatus=true");
}
f.writeln(); f.writeln();
} }
} }
......
/* $Id: text.js,v 1.33 2020/08/01 22:06:51 rswindell Exp $ */
/* Synchronet static text string constants */ /* Synchronet static text string constants */
/* Automatically generated by textgen $ */ /* Automatically generated by textgen $ */
...@@ -839,7 +837,9 @@ var QWKSettingsUtf8=827; ...@@ -839,7 +837,9 @@ var QWKSettingsUtf8=827;
var MsgPostedToYouVia=828; var MsgPostedToYouVia=828;
var Unlimited=829; var Unlimited=829;
var NodeConnectionRaw=830; var NodeConnectionRaw=830;
var MouseTerminalQ=831;
var TerminalMouse=832;
var TOTAL_TEXT=831; var TOTAL_TEXT=833;
this; this;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment