2026-02-19 14:30:37 +00:00
package main
import (
_ "embed"
"github.com/diamondburned/gotk4/pkg/gdk/v4"
2026-03-10 16:48:10 +00:00
"github.com/diamondburned/gotk4/pkg/gdkpixbuf/v2"
2026-05-23 06:45:18 +01:00
"sync"
2026-02-19 14:30:37 +00:00
)
2026-08-25 20:17:23 +01:00
// If you want to change the default profile picture used when Identicons are disabled, you can change the below line to an image in the repository and recompile Lambda.
//go:embed debug_psi.png
2026-02-19 14:30:37 +00:00
var defaultAvatarBytes [] byte
2026-03-12 16:09:22 +00:00
//go:embed failed_load.png
var failedBytes [] byte
2026-02-19 14:30:37 +00:00
//go:embed assets/owner.png
var ownerMedalBytes [] byte
//go:embed assets/admin.png
var adminMedalBytes [] byte
//go:embed assets/member.png
var memberMedalBytes [] byte
//go:embed assets/noaffiliation.png
var noneMedalBytes [] byte
//go:embed assets/outcast.png
var outcastMedalBytes [] byte
//go:embed assets/cancel.png
var cancelBytes [] byte
2026-03-15 09:55:26 +00:00
//go:embed assets/status_away.png
var sABytes [] byte
//go:embed assets/status_busy.png
var sBBytes [] byte
//go:embed assets/status_chatty.png
var sCBytes [] byte
//go:embed assets/status_online.png
var sOBytes [] byte
//go:embed assets/status_xa.png
var xaBytes [] byte
2026-02-19 14:30:37 +00:00
//go:embed assets/tag.png
var tagBytes [] byte
//go:embed assets/lambda-disabled.png
var logoDisabledBytes [] byte
2026-08-20 11:01:25 +01:00
//go:embed assets/icon.png
var logoBytes [] byte
2026-02-19 14:30:37 +00:00
//go:embed assets/group.png
var groupBytes [] byte
//go:embed assets/door_in.png
var doorInBytes [] byte
//go:embed assets/door_out.png
var doorOutBytes [] byte
//go:embed assets/large_group.png
var largeGroupBytes [] byte
//go:embed assets/world.png
var worldBytes [] byte
//go:embed assets/disconnect.png
var disconnectBytes [] byte
//go:embed assets/chart_bar.png
var barBytes [] byte
2026-04-26 10:40:13 +01:00
//go:embed assets/chart_bar_laggy.png
var barLaggyBytes [] byte
2026-02-19 14:30:37 +00:00
//go:embed assets/ok.png
var okBytes [] byte
//go:embed assets/hourglass.png
var hourglassBytes [] byte
2026-02-28 16:24:37 +00:00
//go:embed assets/connect_tls.png
2026-02-19 14:30:37 +00:00
var connectBytes [] byte
2026-02-22 08:16:14 +00:00
//go:embed assets/comment.png
var commentBytes [] byte
2026-03-10 16:35:56 +00:00
//go:embed assets/information.png
var informationBytes [] byte
2026-04-18 10:29:07 +01:00
//go:embed assets/car.png
var carBytes [] byte
2026-04-26 10:40:13 +01:00
//go:embed assets/car_high.png
var carHighBytes [] byte
// muc icons
//go:embed assets/muc_open.png
var mucOpenBytes [] byte
//go:embed assets/muc_membersonly.png
var mucMembersOnlyBytes [] byte
//go:embed assets/muc_passwordprotected.png
var mucPasswordProtectedBytes [] byte
//go:embed assets/muc_unsecured.png
var mucUnsecuredBytes [] byte
//go:embed assets/muc_hidden.png
var mucHiddenBytes [] byte
//go:embed assets/muc_public.png
var mucPublicBytes [] byte
//go:embed assets/muc_unmoderated.png
var mucUnmoderatedBytes [] byte
//go:embed assets/muc_moderated.png
var mucModeratedBytes [] byte
//go:embed assets/muc_nonanonymous.png
var mucNonAnonymousBytes [] byte
//go:embed assets/muc_semianonymous.png
var mucSemiAnonymousBytes [] byte
//go:embed assets/muc_persistent.png
var mucPersistentBytes [] byte
//go:embed assets/muc_temporary.png
var mucTemporaryBytes [] byte
2026-04-28 12:58:00 +01:00
//go:embed assets/moderate.png
var moderateBytes [] byte
2026-04-30 14:55:17 +01:00
//go:embed assets/jabber.png
var jabberBytes [] byte
2026-05-08 06:56:51 +01:00
//go:embed assets/fail.png
var failBytes [] byte
2026-05-10 14:46:19 +01:00
//go:embed assets/please_wait.gif
var pleaseWaitBytes [] byte
2026-07-14 07:51:46 +01:00
//go:embed assets/update.png
var updateBytes [] byte
2026-07-14 16:25:18 +01:00
//go:embed assets/solar.png
var solarBytes [] byte
2026-08-16 20:07:53 +01:00
//go:embed assets/timeline_marker.png
var timelineMarkerBytes [] byte
2026-08-25 20:17:23 +01:00
//go:embed assets/cap.png
var capIconBytes [] byte
// client icons
//go:embed assets/client_icons/monocles.png
var monoclesCapBytes [] byte
//go:embed assets/client_icons/gajim.png
var gajimCapBytes [] byte
//go:embed assets/client_icons/conversations.png
var conversationsCapBytes [] byte
//go:embed assets/client_icons/dino.png
var dinoCapBytes [] byte
//go:embed assets/client_icons/blabber.png
var blabberCapBytes [] byte
//go:embed assets/client_icons/profanity.png
var profanityCapBytes [] byte
//go:embed assets/client_icons/poezio.png
var poezioCapBytes [] byte
//go:embed assets/client_icons/mcabber.png
var mcabberCapBytes [] byte
//go:embed assets/client_icons/converse.png
var converseJSCapBytes [] byte
//go:embed assets/client_icons/pidgin.png
var pidginCapBytes [] byte
//go:embed assets/client_icons/anotherim.png
var anotherImCapBytes [] byte
//go:embed assets/client_icons/movim.png
var movimCapBytes [] byte
//go:embed assets/client_icons/yaxim.png
var yaximCapBytes [] byte
//go:embed assets/client_icons/psi.png
var psiCapBytes [] byte
2026-05-23 06:45:18 +01:00
var clientAssets sync . Map
2026-04-28 12:58:00 +01:00
func loadAsset ( key string , data [] byte ) {
2026-04-28 13:08:16 +01:00
loader := gdkpixbuf . NewPixbufLoader ()
loader . Write ( data )
loader . Close ()
2026-05-23 06:45:18 +01:00
clientAssets . Store ( key , gdk . NewTextureForPixbuf ( loader . Pixbuf ()))
}
func clientAssetsLoad ( key string ) gdk . Paintabler {
dat , ok := clientAssets . Load ( key )
if ! ok {
return nil
}
paintable , ok := dat .( gdk . Paintabler )
if ! ok {
return nil
}
return paintable
2026-02-19 14:30:37 +00:00
}
2026-04-28 12:58:00 +01:00
func init () {
2026-04-28 13:08:16 +01:00
for key , data := range map [ string ][] byte {
2026-08-20 11:01:25 +01:00
"logo" : logoBytes ,
2026-04-28 13:08:16 +01:00
"DefaultAvatar" : defaultAvatarBytes ,
"FailedAvatar" : failedBytes ,
"owner" : ownerMedalBytes ,
"admin" : adminMedalBytes ,
"member" : memberMedalBytes ,
"none" : noneMedalBytes ,
"outcast" : outcastMedalBytes ,
"cancel" : cancelBytes ,
"tag" : tagBytes ,
"disabled_logo" : logoDisabledBytes ,
"group" : groupBytes ,
"door_in" : doorInBytes ,
"door_out" : doorOutBytes ,
"large_group" : largeGroupBytes ,
"world" : worldBytes ,
"disconnect" : disconnectBytes ,
"chart_bar" : barBytes ,
"chart_bar_laggy" : barLaggyBytes ,
"ok" : okBytes ,
"hourglass" : hourglassBytes ,
"connect" : connectBytes ,
"comment" : commentBytes ,
"information" : informationBytes ,
"status_away" : sABytes ,
"status_dnd" : sBBytes ,
"status_chat" : sCBytes ,
"status_xa" : xaBytes ,
"status_" : sOBytes ,
"car" : carBytes ,
"car_high" : carHighBytes ,
"muc_open" : mucOpenBytes ,
"muc_membersonly" : mucMembersOnlyBytes ,
"muc_passwordprotected" : mucPasswordProtectedBytes ,
"muc_unsecured" : mucUnsecuredBytes ,
"muc_hidden" : mucHiddenBytes ,
"muc_public" : mucPublicBytes ,
"muc_unmoderated" : mucUnmoderatedBytes ,
"muc_moderated" : mucModeratedBytes ,
"muc_nonanonymous" : mucNonAnonymousBytes ,
"muc_semianonymous" : mucSemiAnonymousBytes ,
"muc_persistent" : mucPersistentBytes ,
"muc_temporary" : mucTemporaryBytes ,
"moderate" : moderateBytes ,
2026-04-30 14:55:17 +01:00
"jabber" : jabberBytes ,
2026-05-08 06:56:51 +01:00
"fail" : failBytes ,
2026-05-10 14:46:19 +01:00
"please_wait" : pleaseWaitBytes ,
2026-07-14 07:51:46 +01:00
"update" : updateBytes ,
2026-07-17 17:15:41 +01:00
"solar" : solarBytes ,
2026-08-16 20:07:53 +01:00
"timeline_marker" : timelineMarkerBytes ,
2026-08-25 20:17:23 +01:00
"cap" : capIconBytes ,
"https://monocles.eu" : monoclesCapBytes ,
"https://gajim.org" : gajimCapBytes ,
"http://conversations.im" : conversationsCapBytes ,
"https://dino.im" : dinoCapBytes ,
"http://blabber.im" : blabberCapBytes ,
"http://profanity-im.github.io" : profanityCapBytes ,
"https://poez.io" : poezioCapBytes ,
"http://mcabber.com/caps" : mcabberCapBytes ,
"https://conversejs.org" : converseJSCapBytes ,
"http://pidgin.im/" : pidginCapBytes ,
"https://dev.narayana.im/narayana/Conversations-Classic" : anotherImCapBytes ,
"https://movim.eu/" : movimCapBytes ,
"https://yaxim.org/" : yaximCapBytes ,
"https://psi-im.org" : psiCapBytes ,
2026-04-28 13:08:16 +01:00
} {
loadAsset ( key , data )
}
2026-05-19 14:07:21 +01:00
2026-04-28 13:08:16 +01:00
}