From be45637435844358713872b5f4053fc182a4c7d0 Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Sat, 5 Nov 2016 13:43:57 +0000 Subject: [PATCH] Use GZIP to decrease length of modifications URL string --- src/app/shipyard/Ship.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/app/shipyard/Ship.js b/src/app/shipyard/Ship.js index 05784e45..7aed5db8 100755 --- a/src/app/shipyard/Ship.js +++ b/src/app/shipyard/Ship.js @@ -4,6 +4,7 @@ import Module from './Module'; import LZString from 'lz-string'; import isEqual from 'lodash/lang'; import { Modifications } from 'coriolis-data/dist'; +var zlib = require('zlib'); const UNIQUE_MODULES = ['psg', 'sg', 'bsg', 'rf', 'fs', 'fh']; @@ -575,7 +576,11 @@ export default class Ship { if (modstr.match(':')) { this.decodeModificationsString(modstr, mods); } else { - this.decodeModificationsStruct(Buffer.from(modstr, 'base64'), mods); + try { + this.decodeModificationsStruct(zlib.gunzipSync(new Buffer(modstr, 'base64')), mods); + } catch (err) { + // Could be out-of-date URL; ignore + } } } @@ -1142,7 +1147,7 @@ export default class Ship { buffer.writeInt8(-1, curpos++); } - this.serialized.modifications = buffer.toString('base64').replace(/\//g, '-'); + this.serialized.modifications = zlib.gzipSync(buffer).toString('base64').replace(/\//g, '-'); } else { this.serialized.modifications = null; }