From 9d889b75eaf7dc379277f44795644dabfbebe78f Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sat, 30 Dec 2017 03:12:25 +0000
Subject: [PATCH] New methods: compress_preview(), encode_preview(),
 decode_preview(), and draw_preview(). This file is now dependent on
 lz-string.js (for compressing preview data)

---
 exec/load/sbbslist_lib.js | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/exec/load/sbbslist_lib.js b/exec/load/sbbslist_lib.js
index b056a75c27..ae1cbf52d3 100644
--- a/exec/load/sbbslist_lib.js
+++ b/exec/load/sbbslist_lib.js
@@ -3,6 +3,8 @@
 // Synchronet BBS List (SBL) v4 Library
 
 load("synchronet-json.js"); // For compatibility with older verisons of Synchronet/JavaScript-C without the JSON object
+load("graphic.js");
+load("lz-string.js");
 
 var list_fname = system.data_dir + 'sbbslist.json';
 
@@ -577,6 +579,35 @@ function syncterm_list(list, dir)
 	return f.name;
 }
 
+const base64_max_line_len = 72;
+
+function compress_preview(preview)
+{
+	var compressed = LZString.compressToBase64(base64_decode(preview.join("")));
+	return ["!LZ"].concat(compressed.match(new RegExp('([\x00-\xff]{0,' + base64_max_line_len + '})', 'g')));
+}
+
+function encode_preview(ansi_capture)
+{
+	var graphic = new Graphic();
+	graphic.ANSI = ansi_capture.join("\r\n");
+	return compress_preview(graphic.base64_encode());
+}
+
+function decode_preview(preview)
+{
+	if(preview[0] == "!LZ")
+		return LZString.decompressFromBase64(preview.slice(1).join(""));
+	else
+		return base64_decode(preview.join(""));
+}
+
+function draw_preview(bbs)
+{
+	var graphic = new Graphic();
+	graphic.BIN = decode_preview(bbs.preview);
+	graphic.draw();
+}
 
 /* Leave as last line for convenient load() usage: */
 this;
-- 
GitLab