From 3cd9ef7b1a88e3a3fb6016ff79df114d7556473c Mon Sep 17 00:00:00 2001 From: Braun Patrik Date: Mon, 11 Jul 2016 12:52:15 +0200 Subject: [PATCH] keywords decoding error fix --- backend/model/DiskManger.ts | 47 ++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/backend/model/DiskManger.ts b/backend/model/DiskManger.ts index b031a746..4b77a8ae 100644 --- a/backend/model/DiskManger.ts +++ b/backend/model/DiskManger.ts @@ -81,7 +81,38 @@ export class DiskManager { return false; } + /* + UTF8 = { + encode: function(s){ + + for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l; + + s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i] + + ); + + return s.join(""); + + }, + + decode: function(s){ + + for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l; + + ((a = s[i][c](0)) & 0x80) && + + (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? + + o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "") + + ); + + return s.join(""); + + } + + };*/ private static loadPhotoMetadata(fullPath):Promise { return new Promise((resolve:(metadata:PhotoMetadata)=>void, reject) => { fs.readFile(fullPath, function (err, data) { @@ -115,8 +146,22 @@ export class DiskManager { city: iptcData.city }; - let keywords:[string] = iptcData.keywords; + //Decode characters to UTF8 + let decode = (s)=> { + for (var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l; + + ((a = s[i][c](0)) & 0x80) && + + (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? + + o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "") + ); + return s.join(""); + }; + + let keywords:[string] = iptcData.keywords.map(s => decode(s)); let creationDate:Date = iptcData.date_time; + console.log(keywords); let metadata:PhotoMetadata = new PhotoMetadata(keywords, cameraData, positionData, imageSize, creationDate);