git.guelker.eu fernschreiberx / master TODO.org
master

Tree @master (Download .tar.gz)

TODO.org @masterraw · history · blame

#+TITLE: TODO List for Fernschreiber X
#+AUTHOR: Marvin G├╝lker

* Frontend

** TODO Add Emoji support 					    :feature:
- Emoji Font: Noto Color Emoji (OFL): https://www.google.com/get/noto/help/emoji/
** TODO Fix multiple occasions of client icon in roster 		:bug:
- The reason for this is that each presence is transformed into an
  icon.
- Problem with the resolution of this is that if a user is really
  online in parallel with multiple devices, there *should* be multiple
  icons, one for each device.
** TODO Reconnect when the connection dies 			    :feature:
** TODO Logging 						    :feature:
** TODO Set presence status to 'away' if user does not interact     :feature:
** TODO Long messages don't break properly if the window is small 	:bug:
** TODO Rename AccountDialogConfig's Blocklist tab to "Privacy" and add a box for display and regeneneration of the OTR fingerprint :feature:
** TODO Tray Icon / Notifications 				    :feature:

** TODO Some Crashes 							:bug:

Crash 1:

2018/03/06 01:20:06 <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='12538616705709745757' from='example.com' version='1.0' xml:lang='de'>
2018/03/06 01:20:06 <stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='AC6YpUkEgZqi0CJQw6bRvljBJUI='/><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/><session xmlns='urn:ietf:params:xml:ns:xmpp-session'><optional/></session><sm xmlns='urn:xmpp:sm:2'/><sm xmlns='urn:xmpp:sm:3'/><csi xmlns='urn:xmpp:csi:0'/></stream:features>
2018/03/06 01:20:06 Received features
2018/03/06 01:20:06 &{http://jabber.org/protocol/caps map[hash:sha-1 node:http://www.process-one.net/en/ejabberd/ ver:AC6YpUkEgZqi0CJQw6bRvljBJUI=] false}
2018/03/06 01:20:06 &{urn:ietf:params:xml:ns:xmpp-bind map[] false}
2018/03/06 01:20:06 &{urn:ietf:params:xml:ns:xmpp-session map[] true}
2018/03/06 01:20:06 Ignoring unknown feature: urn:ietf:params:xml:ns:xmpp-session
2018/03/06 01:20:06 &{urn:xmpp:sm:2 map[] true}
2018/03/06 01:20:06 Ignoring unknown feature: urn:xmpp:sm:2
2018/03/06 01:20:06 &{urn:xmpp:sm:3 map[] true}
2018/03/06 01:20:06 Ignoring unknown feature: urn:xmpp:sm:3
2018/03/06 01:20:06 &{urn:xmpp:csi:0 map[] true}
2018/03/06 01:20:06 Ignoring unknown feature: urn:xmpp:csi:0
2018/03/06 01:20:06 <iq id='9620rjxlgtfk28250134745' type='set'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>fchatclient</resource></bind></iq>
2018/03/06 01:20:06 <iq id='9620rjxlgtfk28250134745' type='result'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>user1@example.com/fchatclient</jid></bind></iq>
2018/03/06 01:20:06 <iq from='user1@example.com/fchatclient' id='42155iqnehrla1980625801' type='get'><query xmlns='jabber:iq:roster'/></iq>
2018/03/06 01:20:06 <iq from='user1@example.com' to='user1@example.com/fchatclient' id='42155iqnehrla1980625801' type='result'><query xmlns='jabber:iq:roster'><item subscription='both' name='m-guelker' jid='user3@example.com'><group>Buddies</group></item><item subscription='both' name='sydney' jid='user2@example.com'><group>Buddies</group></item></query></iq>
2018/03/06 01:20:06 <presence id='38983zxulbvtg21262324017'><c xmlns='http://jabber.org/protocol/caps' node='https://somedomain.eu/projects/fchatclient' ver='yCrxWemxVz1OJJ0kcGCliwVSOS8='/></presence>
2018/03/06 01:20:06 <message from='user2@example.com/b78cb2a7-657d-41fd-973f-00facc1449ce' to='user1@example.com/fchatclient' type='chat' id='ffaa11c1-8f20-44cd-b3f3-9e0b182ce35f'><body>o_O</body><request xmlns='urn:xmpp:receipts'/><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread><delay xmlns='urn:xmpp:delay' from='example.com' stamp='2018-03-05T23:19:42.697Z'>Offline Storage</delay></message>
panic: runtime error: slice bounds out of range

goroutine 1 [running]:
main.(*Mainwindow).ProcessMessage(0xc42015cc00, 0xc42016e0c0)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/main_window.go:239 +0x13a5
main.(*Application).onMessageStanza(0xc42008cf70)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:422 +0x120
main.NewApplication.func9()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:74 +0x2a
reflect.Value.call(0x9ae080, 0xc42006cb90, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x5a32f701, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc42006cb90, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x1411480, 0x18d3ed0, 0x200000001, 0x1863d70, 0x7ffd6072bd90, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x1411480, 0x18d3ed0, 0x7f0700000001, 0x1863d70, 0x7ffd6072bd90, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/glib._Cfunc_g_signal_emitv(0x1863d70, 0x14, 0x18d3ed0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:2969 +0x45
github.com/gotk3/gotk3/glib.(*Object).Emit(0xc42007c0d0, 0xaac1fe, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:771 +0x4f6
main.emitXMPPSignal(0xaac1fe, 0x13)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/transformer.go:94 +0x62
reflect.Value.call(0x9b5520, 0xac0ca8, 0x13, 0xaa2c74, 0x4, 0xc42031a860, 0x1, 0x1, 0xa690a0, 0x9ba620, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9b5520, 0xac0ca8, 0x13, 0xc42031a860, 0x1, 0x1, 0x0, 0x4bf6c2, 0x1)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.sourceAttach.func2()
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:311 +0x1be
reflect.Value.call(0x9ae080, 0xc420344820, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x5a32f701, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc420344820, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x7f07a4004170, 0x7ffd6072c0d0, 0xc400000000, 0x0, 0x0, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x7f07a4004170, 0x7ffd6072c0d0, 0x7ffd00000000, 0x0, 0x0, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/gtk._Cfunc_gtk_main()
	github.com/gotk3/gotk3/gtk/_obj/_cgo_gotypes.go:12796 +0x41
github.com/gotk3/gotk3/gtk.Main()
	/home/username/go/src/github.com/gotk3/gotk3/gtk/gtk.go:893 +0x20
main.(*Application).onActivate(0xc42008cf70)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:220 +0x1db
main.NewApplication.func2()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:66 +0x2a
reflect.Value.call(0x9ae080, 0xc42006cb20, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x5a32f701, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc42006cb20, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x1410cb0, 0x0, 0xc400000001, 0x7ffd6072c5b0, 0x7ffd6072c530, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x1410cb0, 0x0, 0x1, 0x7ffd6072c5b0, 0x7ffd6072c530, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/glib._Cfunc_g_application_run(0x140e150, 0x1, 0x140fe30, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:1214 +0x4d
github.com/gotk3/gotk3/glib.(*Application).Run.func4(0x140e150, 0x1, 0x140fe30, 0x1253c40)
	/home/username/go/src/github.com/gotk3/gotk3/glib/application.go:203 +0xab
github.com/gotk3/gotk3/glib.(*Application).Run(0xc420130300, 0xc42006c160, 0x1, 0x1, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/application.go:203 +0x134
main.(*Application).Run(0xc42008cf70, 0x0)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:99 +0x54
main.main()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/main.go:32 +0x5e


Crash 2:

2018/03/06 01:21:08 <iq id='2919qrnrxvwo4721618744' type='set'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>fchatclient</resource></bind></iq>
2018/03/06 01:21:08 <iq id='2919qrnrxvwo4721618744' type='result'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>user1@example.com/fchatclient</jid></bind></iq>
2018/03/06 01:21:08 <iq from='user1@example.com/fchatclient' id='42203olfumufc24852240122' type='get'><query xmlns='jabber:iq:roster'/></iq>
2018/03/06 01:21:08 <iq from='user1@example.com' to='user1@example.com/fchatclient' id='42203olfumufc24852240122' type='result'><query xmlns='jabber:iq:roster'><item subscription='both' name='m-guelker' jid='user3@example.com'><group>Buddies</group></item><item subscription='both' name='sydney' jid='user2@example.com'><group>Buddies</group></item></query></iq>
2018/03/06 01:21:08 <presence id='34431ckuwwepy47891319920'><c xmlns='http://jabber.org/protocol/caps' node='https://somedomain.eu/projects/fchatclient' ver='yCrxWemxVz1OJJ0kcGCliwVSOS8='/></presence>
2018/03/06 01:21:08 <message from='user2@example.com/b78cb2a7-657d-41fd-973f-00facc1449ce' to='user1@example.com/fchatclient' type='chat' id='b35cc0d9-7bfe-497b-ba64-266ba7065cb3'><body>Another crash?</body><request xmlns='urn:xmpp:receipts'/><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread><delay xmlns='urn:xmpp:delay' from='example.com' stamp='2018-03-05T23:20:31.349Z'>Offline Storage</delay></message>
2018/03/06 01:21:08 <presence from='user1@example.com/fchatclient' to='user1@example.com/fchatclient' xml:lang='fi' id='34431ckuwwepy47891319920'><c xmlns='http://jabber.org/protocol/caps' node='https://somedomain.eu/projects/fchatclient' ver='yCrxWemxVz1OJJ0kcGCliwVSOS8='/></presence>
2018/03/06 01:21:08 <presence from='user2@example.com/b78cb2a7-657d-41fd-973f-00facc1449ce' to='user1@example.com/fchatclient' id='fc494c1a-fd56-4ef0-9b22-c752cae69b9b'><priority>50</priority><x xmlns='vcard-temp:x:update'><photo>257347a2156c9b7d54e943f2348f94fb3625dfff</photo></x><c xmlns='http://jabber.org/protocol/caps' ver='G7hCWD+1uaE+Xrn6L9kalbDVQk4=' hash='sha-1' node='http://gajim.org'/><delay xmlns='urn:xmpp:delay' from='sydev.us' stamp='2018-03-05T22:57:39Z'/></presence>
2018/03/06 01:21:18 <message id='19246rublvtoj14334417248' type='chat' from='user1@example.com/fchatclient' to='user2@example.com'><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread><composing xmlns='http://jabber.org/protocol/chatstates'/></message>
2018/03/06 01:21:18 <message from='user1@example.com/fchatclient' to='user2@example.com' id='35631azlfsoan95885149' type='chat'><body>yes</body><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread></message>
2018/03/06 01:21:23 <message type='chat' from='user1@example.com/fchatclient' to='user2@example.com' id='42686zgqihvjj4777640416'><body>I got debug log now</body><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread></message>
2018/03/06 01:21:27 <message type='chat' from='user1@example.com/fchatclient' to='user2@example.com' id='1014fdnuemph48513730611'><body>started from terminal</body><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread></message>
2018/03/06 01:21:34 <message id='14487lwwkjcla26619818094' type='chat' from='user1@example.com/fchatclient' to='user2@example.com'><body>I will send it to Quintus</body><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread></message>
2018/03/06 01:21:35 <presence from='user2@example.com/fchatclient' to='user1@example.com/fchatclient' id='22036amhzwrfk4692136884'><c xmlns='http://jabber.org/protocol/caps' ver='yCrxWemxVz1OJJ0kcGCliwVSOS8=' node='https://somedomain.eu/projects/fchatclient'/></presence>
2018/03/06 01:21:55 <message from='user2@example.com/b78cb2a7-657d-41fd-973f-00facc1449ce' to='user1@example.com/fchatclient' type='chat' id='dfc30fcb-0344-44de-b331-8fed61b6bb34'><body>Ok.</body><request xmlns='urn:xmpp:receipts'/><thread>717ee9a3-7283-443f-9993-41e1a4922a36</thread></message>
panic: runtime error: slice bounds out of range

goroutine 1 [running]:
main.(*Mainwindow).ProcessMessage(0xc42014dad0, 0xc4201800c0)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/main_window.go:239 +0x13a5
main.(*Application).onMessageStanza(0xc42008d110)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:422 +0x120
main.NewApplication.func9()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:74 +0x2a
reflect.Value.call(0x9ae080, 0xc42006cba0, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x71fa1501, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc42006cba0, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x1712480, 0x18e9fc0, 0x200000001, 0x1a92650, 0x7fff68f6b9e0, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x1712480, 0x18e9fc0, 0x7f6f00000001, 0x1a92650, 0x7fff68f6b9e0, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/glib._Cfunc_g_signal_emitv(0x1a92650, 0x14, 0x18e9fc0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:2969 +0x45
github.com/gotk3/gotk3/glib.(*Object).Emit(0xc42007c0d8, 0xaac1fe, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:771 +0x4f6
main.emitXMPPSignal(0xaac1fe, 0x13)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/transformer.go:94 +0x62
reflect.Value.call(0x9b5520, 0xac0ca8, 0x13, 0xaa2c74, 0x4, 0xc4203a5ce0, 0x1, 0x1, 0xa690a0, 0x9ba620, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9b5520, 0xac0ca8, 0x13, 0xc4203a5ce0, 0x1, 0x1, 0x0, 0x4bf6c2, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.sourceAttach.func2()
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:311 +0x1be
reflect.Value.call(0x9ae080, 0xc42026c730, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x71fa1501, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc42026c730, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x7f6f30002bd0, 0x7fff68f6bd20, 0xc400000000, 0x0, 0x0, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x7f6f30002bd0, 0x7fff68f6bd20, 0x7fff00000000, 0x0, 0x0, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/gtk._Cfunc_gtk_main()
	github.com/gotk3/gotk3/gtk/_obj/_cgo_gotypes.go:12796 +0x41
github.com/gotk3/gotk3/gtk.Main()
	/home/username/go/src/github.com/gotk3/gotk3/gtk/gtk.go:893 +0x20
main.(*Application).onActivate(0xc42008d110)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:220 +0x1db
main.NewApplication.func2()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:66 +0x2a
reflect.Value.call(0x9ae080, 0xc42006cb30, 0x13, 0xaa2c74, 0x4, 0x1272af8, 0x0, 0x0, 0xa690a0, 0x71fa1501, ...)
	/usr/local/go/src/reflect/value.go:434 +0x905
reflect.Value.Call(0x9ae080, 0xc42006cb30, 0x13, 0x1272af8, 0x0, 0x0, 0x0, 0x0, 0x0)
	/usr/local/go/src/reflect/value.go:302 +0xa4
github.com/gotk3/gotk3/glib.goMarshal(0x1711cb0, 0x0, 0xc400000001, 0x7fff68f6c200, 0x7fff68f6c180, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/glib.go:216 +0x5af
github.com/gotk3/gotk3/glib._cgoexpwrap_8730c49bb24c_goMarshal(0x1711cb0, 0x0, 0x1, 0x7fff68f6c200, 0x7fff68f6c180, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:4246 +0x5b
github.com/gotk3/gotk3/glib._Cfunc_g_application_run(0x170f150, 0x1, 0x1710e30, 0x0)
	github.com/gotk3/gotk3/glib/_obj/_cgo_gotypes.go:1214 +0x4d
github.com/gotk3/gotk3/glib.(*Application).Run.func4(0x170f150, 0x1, 0x1710e30, 0x1253c40)
	/home/username/go/src/github.com/gotk3/gotk3/glib/application.go:203 +0xab
github.com/gotk3/gotk3/glib.(*Application).Run(0xc420130340, 0xc42006c160, 0x1, 0x1, 0x0)
	/home/username/go/src/github.com/gotk3/gotk3/glib/application.go:203 +0x134
main.(*Application).Run(0xc42008d110, 0x0)
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/application.go:99 +0x54
main.main()
	/home/username/go/src/somedomain.eu/fchatclient/fchatclient/main.go:32 +0x5e

* Backend

** TODO Exchange expat for Go's own SAX decoder 		    :feature:
- Cannot be done before https://github.com/golang/go/issues/21823 is
  resolved, because that decoder is a CPU hog, which is expressly
  against Fernschreiber X's goal to be low on the battary.
** TODO Implement OTR encryption, XEP-0364 			    :feature:
** TODO Implement OMEMO encryption, XEP-384 			    :feature:
- Currently too much flux to properly implement it. Needs waiting for
  more standardisation.
** TODO Change ID generation mechanism
- The current one tries to not reveal much info about the client
  by being random, but it's rather slow and isn't really random
  because it includes a counter.
- Be just more honest and use something that will always be unique
  like a Unix timestamp with sub-second precision or so.