From 6a434f35ccf3aa8fa2254c221dab731e238c426a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 12 Dec 2022 11:32:20 +0000 Subject: [PATCH] 0.03: Fix icons broken in 0v02 (#2386) + Store all icons in a separate binary file (much faster lookup) --- apps/messageicons/icons.img | Bin 0 -> 5168 bytes apps/messageicons/icons/bibel.png | Bin 0 -> 204 bytes apps/messageicons/icons/bring.png | Bin 0 -> 210 bytes apps/messageicons/icons/default.png | Bin 0 -> 207 bytes apps/messageicons/icons/etar.png | Bin 0 -> 182 bytes apps/messageicons/icons/generate.js | 143 +++++++++++++++++++++ apps/messageicons/icons/gmx.png | Bin 0 -> 227 bytes apps/messageicons/icons/home assistant.png | Bin 0 -> 269 bytes apps/messageicons/icons/icon_names.json | 111 ++++++++++++++++ apps/messageicons/icons/kalender.png | Bin 0 -> 249 bytes apps/messageicons/icons/music.png | Bin 0 -> 209 bytes apps/messageicons/icons/n26.png | Bin 0 -> 188 bytes apps/messageicons/icons/nextbike.png | Bin 0 -> 228 bytes apps/messageicons/icons/nina.png | Bin 0 -> 261 bytes apps/messageicons/icons/warnapp.png | Bin 0 -> 247 bytes apps/messageicons/icons/wordfeud.png | Bin 0 -> 213 bytes apps/messageicons/lib.js | 80 +----------- apps/messageicons/metadata.json | 5 +- 18 files changed, 262 insertions(+), 77 deletions(-) create mode 100644 apps/messageicons/icons.img create mode 100644 apps/messageicons/icons/bibel.png create mode 100644 apps/messageicons/icons/bring.png create mode 100644 apps/messageicons/icons/default.png create mode 100644 apps/messageicons/icons/etar.png create mode 100755 apps/messageicons/icons/generate.js create mode 100644 apps/messageicons/icons/gmx.png create mode 100644 apps/messageicons/icons/home assistant.png create mode 100644 apps/messageicons/icons/icon_names.json create mode 100644 apps/messageicons/icons/kalender.png create mode 100644 apps/messageicons/icons/music.png create mode 100644 apps/messageicons/icons/n26.png create mode 100644 apps/messageicons/icons/nextbike.png create mode 100644 apps/messageicons/icons/nina.png create mode 100644 apps/messageicons/icons/warnapp.png create mode 100644 apps/messageicons/icons/wordfeud.png diff --git a/apps/messageicons/icons.img b/apps/messageicons/icons.img new file mode 100644 index 0000000000000000000000000000000000000000..104168357f754ea3bd419eb544afd41ea7d297f9 GIT binary patch literal 5168 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 Cl2Dxh literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/bring.png b/apps/messageicons/icons/bring.png new file mode 100644 index 0000000000000000000000000000000000000000..673d1b7be024acf0f943766bca951af24b0536a4 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|dOTemLp;3S zP7UO1FyL^0`mg<1f|Jp6x78=)>t@dQx-lpqB((pKyHvxSr8+_r+xc!=NhLJ#eJW=Y zVhWqOUZ>L`nn6470Nb4$`Ppyf>o%WgefDn&L$S*Jb1Xg=Bkt-&u9U9eS$ty|W5)d{ z%!?A6Z5^)G&r7jBv4(rghZVWIcC{Xy_#-sszfmB^DP1c@=QGQ9sunD$0=kRA)78&q Iol`;+0E%=`3jhEB literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/default.png b/apps/messageicons/icons/default.png new file mode 100644 index 0000000000000000000000000000000000000000..1f85079df4e48ecf3280039a267fb380a4a05afc GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Iz3$+Lp;3S zPQA$2pupk!_`m%ux7mKaJCv?XJFPC?z$_k+lx8PqvxUE*V;a}gDeG0DST%1~F{%`( zv1w~QK4Hu3GGAlK*Zqu26XJ?u5Ae9Gj$y4(n6^eOfu*U6jZut+)qmerk<8i4Y{N71 z+q62?eCKa?m8&xGN|zhotBVqQe#=*E{(PhU|7CkdEA~S>JyuMx13HSq)78&qol`;+ E00LS_)Bpeg literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/etar.png b/apps/messageicons/icons/etar.png new file mode 100644 index 0000000000000000000000000000000000000000..24f0cc587b46848dc5c6507bdbfdfcf83d211947 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|3OrpLLp;2b z|NQ^|zn)Es>Da?`MrCDXSH?EEM;eYUD<2w6SB!4D%2f1N_Spf!1V-15XAT^2Fz9HT z&Z_W!(Q>{NJ3TWU5jHjX3pRWgno~_W9*FX7T**A!>Pdz4F-hJhzFx0c_K5N=eJMZt e-@^Ep%nTD6kM6wK-%$&+o59o7&t;ucLK6TUt3VY1 literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/generate.js b/apps/messageicons/icons/generate.js new file mode 100755 index 000000000..e857032af --- /dev/null +++ b/apps/messageicons/icons/generate.js @@ -0,0 +1,143 @@ +#!/usr/bin/node + +// Creates lib.js from icons +// npm install png-js + +// default icon must come first in icon_names + +var imageconverter = require("../../../webtools/imageconverter.js"); +var icons = JSON.parse(require("fs").readFileSync(__dirname+"/icon_names.json")); +const imgOptions = { + mode : "1bit", + inverted : true, + transparent : true, + output: "raw" +}; +var PNG = require('png-js'); +var IMAGE_BYTES = 76; + +var iconTests = []; +var iconImages = []; // array of converted icons +var iconIndices = {}; // maps filename -> index in iconImages + +var promises = []; + +icons.forEach(icon => { + var index = iconIndices[icon.icon]; + if (index===undefined) { // need a new icon + index = iconImages.length; + iconIndices[icon.icon] = index; + iconImages.push(""); // placeholder + // create image + console.log("Loading "+icon.icon); + var png = new PNG(require("fs").readFileSync(__dirname+"/"+icon.icon)); + if (png.width!=24 || png.height!=24) { + console.warn(icon.icon+" should be 24x24px"); + } + + promises.push(new Promise(r => { + png.decode(function (pixels) { + var rgba = new Uint8Array(pixels); + var isTransparent = false; + for (var i=0;i { + // Yay, more JS. Why is it so hard to get the bytes??? + iconData.set(Array.prototype.slice.call(Buffer.from(img,"binary")), idx*IMAGE_BYTES) + }); + + console.log("Saving images"); + require("fs").writeFileSync(__dirname+"/../icons.img", Buffer.from(iconData,"binary")); + + console.log("Saving library"); + require("fs").writeFileSync(__dirname+"/../lib.js", `exports.getImage = function(msg) { + if (msg.img) return atob(msg.img); + let s = (("string"=== typeof msg) ? msg : (msg.src || "")).toLowerCase(); + if (msg.id=="music") s="music"; + let match = ${JSON.stringify(","+icons.map(icon=>icon.app+"|"+icon.index).join(",")+",")}.match(new RegExp(\`,\${s}\\\\|(\\\\d+)\`)) + return require("Storage").read("messageicons.img", (match===null)?0:match[1]*${IMAGE_BYTES}, ${IMAGE_BYTES}); +}; + +exports.getColor = function(msg,options) { + options = options||{}; + var st = options.settings || require('Storage').readJSON("messages.settings.json", 1) || {}; + if (options.default===undefined) options.default=g.theme.fg; + if (st.iconColorMode == 'mono') return options.default; + const s = (("string"=== typeof msg) ? msg : (msg.src || "")).toLowerCase(); + return { + // generic colors, using B2-safe colors + // DO NOT USE BLACK OR WHITE HERE, just leave the declaration out and then the theme's fg color will be used + "airbnb": "#ff385c", // https://news.airbnb.com/media-assets/category/brand/ + "mail": "#ff0", + "music": "#f0f", + "phone": "#0f0", + "sms message": "#0ff", + // brands, according to https://www.schemecolor.com/?s (picking one for multicolored logos) + // all dithered on B2, but we only use the color for the icons. (Could maybe pick the closest 3-bit color for B2?) + "bibel": "#54342c", + "bring": "#455a64", + "discord": "#5865f2", // https://discord.com/branding + "etar": "#36a18b", + "facebook": "#1877f2", // https://www.facebook.com/brand/resources/facebookapp/logo + "gmail": "#ea4335", + "gmx": "#1c449b", + "google": "#4285F4", + "google home": "#fbbc05", +// "home assistant": "#41bdf5", // ha-blue is #41bdf5, but that's the background + "instagram": "#ff0069", // https://about.instagram.com/brand/gradient + "lieferando": "#ff8000", + "linkedin": "#0a66c2", // https://brand.linkedin.com/ + "messenger": "#0078ff", + "mastodon": "#563acc", // https://www.joinmastodon.org/branding + "mattermost": "#00f", + "n26": "#36a18b", + "nextbike": "#00f", + "newpipe": "#f00", + "nina": "#e57004", + "opentasks": "#409f8f", + "outlook mail": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "paypal": "#003087", + "pocket": "#ef4154f", // https://blog.getpocket.com/press/ + "post & dhl": "#f2c101", + "reddit": "#ff4500", // https://www.redditinc.com/brand + "signal": "#3a76f0", // https://github.com/signalapp/Signal-Desktop/blob/main/images/signal-logo.svg + "skype": "#0078d4", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "slack": "#e51670", + "snapchat": "#ff0", + "steam": "#171a21", + "teams": "#6264a7", // https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products + "telegram": "#0088cc", + "telegram foss": "#0088cc", + "to do": "#3999e5", + "twitch": "#9146ff", // https://brand.twitch.tv/ + "twitter": "#1d9bf0", // https://about.twitter.com/en/who-we-are/brand-toolkit + "vlc": "#ff8800", + "whatsapp": "#4fce5d", + "wordfeud": "#e7d3c7", + "youtube": "#f00", // https://www.youtube.com/howyoutubeworks/resources/brand-resources/#logos-icons-and-colors + }[s]||options.default; +}; + `); +}); diff --git a/apps/messageicons/icons/gmx.png b/apps/messageicons/icons/gmx.png new file mode 100644 index 0000000000000000000000000000000000000000..185c90aa3195fcaeebc433838e2badfaac39fb6c GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|=6bp~hIn|t z4RPdaFyLtZZ!gs>cuA2Z_L1JX+0sjw@7q; z5|8bQCSC)R_nY2{I)Px#$4Nv%R7gv`mD>`4AP7X`|3BKsCLBaAOOEwcLmYu+rPf-z4nBkei0C;+^*j)O zlXIaJND9!&tB?@jC9gnSK$cuWWUOwV39yp$j~O@xc*&)TB1i~`2D%MEOGo2)M$Zg9 zom<1pzUgJ`>p59P@1fNWJ!CIVOL(ZrOR6mbjhkB3UqUSt4G-#Zi&9>nvb<`kKpJc2 zInlm^6(A7QqrwV2&-t`ysJ_uSxJ8TX#6Yc!(6tKmWN6&~6`Z>F(<^fqd>n8C0C)1a TN$tt&00000NkvXXu0mjfXbEl7 literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/icon_names.json b/apps/messageicons/icons/icon_names.json new file mode 100644 index 000000000..0085731cc --- /dev/null +++ b/apps/messageicons/icons/icon_names.json @@ -0,0 +1,111 @@ +[ + { "app":"default", "icon":"default.png" }, + { "app":"airbnb", "icon":"airbnb.png" }, + { "app":"alarm", "icon":"alarm.png" }, + { "app":"alarmclockreceiver", "icon":"alarm.png" }, + { "app":"amazon shopping", "icon":"amazon.png" }, + { "app":"bibel", "icon":"bibel.png" }, + { "app":"bitwarden", "icon":"security.png" }, + { "app":"1password", "icon":"security.png" }, + { "app":"lastpass", "icon":"security.png" }, + { "app":"dashlane", "icon":"security.png" }, + { "app":"bring", "icon":"bring.png" }, + { "app":"calendar", "icon":"etar.png" }, + { "app":"etar", "icon":"etar.png" }, + { "app":"chat", "icon":"google chat.png" }, + { "app":"chrome", "icon":"chrome.png" }, + { "app":"corona-warn", "icon":"coronavirus.png" }, + { "app":"bmo", "icon":"bank.png" }, + { "app":"desjardins", "icon":"bank.png" }, + { "app":"rbc mobile", "icon":"bank.png" }, + { "app":"nbc", "icon":"bank.png" }, + { "app":"rabobank", "icon":"bank.png" }, + { "app":"scotiabank", "icon":"bank.png" }, + { "app":"td (canada)", "icon":"bank.png" }, + { "app":"discord", "icon":"discord.png" }, + { "app":"drive", "icon":"google drive.png" }, + { "app":"element", "icon":"matrix element.png" }, + { "app":"facebook", "icon":"facebook.png" }, + { "app":"messenger", "icon":"facebook messenger.png" }, + { "app":"firefox", "icon":"firefox.png" }, + { "app":"firefox beta", "icon":"firefox.png" }, + { "app":"firefox nightly", "icon":"firefox.png" }, + { "app":"f-droid", "icon":"security.png" }, + { "app":"neo store", "icon":"security.png" }, + { "app":"aurora droid", "icon":"security.png" }, + { "app":"github", "icon":"github.png" }, + { "app":"gitlab", "icon":"gitlab.png" }, + { "app":"gmx", "icon":"gmx.png" }, + { "app":"google", "icon":"google.png" }, + { "app":"google home", "icon":"google home.png" }, + { "app":"google play store", "icon":"google play store.png" }, + { "app":"home assistant", "icon":"home assistant.png" }, + { "app":"instagram", "icon":"instagram.png" }, + { "app":"kalender", "icon":"kalender.png" }, + { "app":"keep notes", "icon":"google keep.png" }, + { "app":"lieferando", "icon":"lieferando.png" }, + { "app":"linkedin", "icon":"linkedin.png" }, + { "app":"maps", "icon":"map.png" }, + { "app":"organic maps", "icon":"map.png" }, + { "app":"osmand", "icon":"map.png" }, + { "app":"mastodon", "icon":"mastodon.png" }, + { "app":"fedilab", "icon":"mastodon.png" }, + { "app":"tooot", "icon":"mastodon.png" }, + { "app":"tusky", "icon":"mastodon.png" }, + { "app":"mattermost", "icon":"mattermost.png" }, + { "app":"n26", "icon":"n26.png" }, + { "app":"netflix", "icon":"netflix.png" }, + { "app":"news", "icon":"news.png" }, + { "app":"cbc news", "icon":"news.png" }, + { "app":"rc info", "icon":"news.png" }, + { "app":"reuters", "icon":"news.png" }, + { "app":"ap news", "icon":"news.png" }, + { "app":"la presse", "icon":"news.png" }, + { "app":"nbc news", "icon":"news.png" }, + { "app":"nextbike", "icon":"nextbike.png" }, + { "app":"nina", "icon":"nina.png" }, + { "app":"outlook mail", "icon":"outlook.png" }, + { "app":"paypal", "icon":"paypal.png" }, + { "app":"phone", "icon":"phone.png" }, + { "app":"plex", "icon":"plex.png" }, + { "app":"pocket", "icon":"pocket.png" }, + { "app":"post & dhl", "icon":"delivery.png" }, + { "app":"proton mail", "icon":"protonmail.png" }, + { "app":"reddit", "icon":"reddit.png" }, + { "app":"sync pro", "icon":"reddit.png" }, + { "app":"sync dev", "icon":"reddit.png" }, + { "app":"boost", "icon":"reddit.png" }, + { "app":"infinity", "icon":"reddit.png" }, + { "app":"slide", "icon":"reddit.png" }, + { "app":"signal", "icon":"signal.png" }, + { "app":"skype", "icon":"skype.png" }, + { "app":"slack", "icon":"slack.png" }, + { "app":"snapchat", "icon":"snapchat.png" }, + { "app":"starbucks", "icon":"cafe.png" }, + { "app":"steam", "icon":"steam.png" }, + { "app":"teams", "icon":"teams.png" }, + { "app":"telegram", "icon":"telegram.png" }, + { "app":"telegram foss", "icon":"telegram.png" }, + { "app":"threema", "icon":"threema.png" }, + { "app":"tiktok", "icon":"tiktok.png" }, + { "app":"to do", "icon":"task.png" }, + { "app":"opentasks", "icon":"task.png" }, + { "app":"tasks", "icon":"task.png" }, + { "app":"transit", "icon":"transit.png" }, + { "app":"twitch", "icon":"twitch.png" }, + { "app":"twitter", "icon":"twitter.png" }, + { "app":"uber", "icon":"taxi.png" }, + { "app":"lyft", "icon":"taxi.png" }, + { "app":"vlc", "icon":"vlc.png" }, + { "app":"warnapp", "icon":"warnapp.png" }, + { "app":"whatsapp", "icon":"whatsapp.png" }, + { "app":"wordfeud", "icon":"wordfeud.png" }, + { "app":"youtube", "icon":"youtube.png" }, + { "app":"newpipe", "icon":"youtube.png" }, + { "app":"zoom", "icon":"videoconf.png" }, + { "app":"meet", "icon":"videoconf.png" }, + { "app":"music", "icon":"music.png" }, + { "app":"sms message", "icon":"default.png" }, + { "app":"mail", "icon":"default.png" }, + { "app":"gmail", "icon":"default.png" } +] diff --git a/apps/messageicons/icons/kalender.png b/apps/messageicons/icons/kalender.png new file mode 100644 index 0000000000000000000000000000000000000000..dd807dd9e9241b33e305dc65c4756ff387b0afc3 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Hha1_hIn{i z4RhpcFyNT{-(JdCh{utOd$!cxlU%MD;+->p7Vryts#tsqs679ng~RRR#E6L+Y>BN7 z)*IexI^NjCt+eLI)B|NvrKzu#--x=ithV;xOgk2on8y<8^jzlMf?%CVzsgxA=A`e_ z3Q1B6E?ucsbv&xLa`9B7t*#SiPv=N;dt~@laOKN49h(YoUR)O5dY^GpQcL#Rgx8be x?;cdv`nBE1`t$#Pn{Hn$ee&kR`Xu$6oHDo4Pncbqb^+*o22WQ%mvv4FO#ptQWV!$V literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/music.png b/apps/messageicons/icons/music.png new file mode 100644 index 0000000000000000000000000000000000000000..62f7acfeef8108ce0f8c7018e3d11a361367301e GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|x;uZ`dLbqk@%!p4}%4DMW@CLJz m!k>Kys@J_wci7(Yfsg;e?43p}b1Q%@VDNPHb6Mw<&;$TQXi9Vd literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/nextbike.png b/apps/messageicons/icons/nextbike.png new file mode 100644 index 0000000000000000000000000000000000000000..467bed8ac11be9365381c81579f3cc3e89c3d23f GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|=6Sj}hIn|t zo$AeZK!L;M>A&`62V2-Q?QhSxv25MJ=RAv*9SK-OktR~E0tm9u1h?7+FmGS-Y&V)F1g{par2rxbN|L){{El+ ces}@H<{hW^GjqJV3Un!hr>mdKI;Vst0G$h4B>(^b literal 0 HcmV?d00001 diff --git a/apps/messageicons/icons/nina.png b/apps/messageicons/icons/nina.png new file mode 100644 index 0000000000000000000000000000000000000000..2669b640155d5e3b008316621bccd36f5d55e849 GIT binary patch literal 261 zcmV+g0s8)lP)Px#zez+vR7gwBmfH@%AP7U{|3BKrWiE(CE4%u(1bQr>PIAsUJ-7q`L?lJHD6a!V z#cL64{=0yyyGJe>2O6*n^KwrBD?S1vjU_-4s0&RQ1sFN;08scC_1(cJKsU~wNA03& zSgi)&HcFMogLs>S02@5JNvad;qI`b?C_BF69CQw}a1;QW>6qG*u)?AjV3ig)1H^sV6aaYbvsI^x(tCe$k`~J_TYg+ctZ4^(?KA`nAB=s#%WJ`o#tm)|n zkF#b9n^;4qYGp7-s8=37@p?sS_r7