
# TODO

 - [x] Message List
        * [x] CRUD
 - [x] Message Big-View
 - [x] Search/Filter Messages
 - [x] Channel List
        * [x] Show subs
        * [x] CRUD
        * [x] what about unsubbed foreign channels? - thex should still be visible (or should they, do i still get the messages?)
 - [x] Sub List
        * [x] Sub/Unsub/Accept/Deny
 - [x] Debug List (Show logs, requests)
 - [x] Key List
        * [x] CRUD
 - [x] Auto R-only key for admin, use for QR+link+send
 - [ ] settings
 - [?] notifications
 - [?] push navigation stack
 - [/] read + migrate old SharedPrefs (or not? - who uses SCN even??)
 - [x] Account-Page
 - [x] Logout
 - [x] Send-page

 - [ ] Still @ERROR on scn-init, but no logs? - better persist error (write in SharedPrefs at error_$date=txt ?), also perhaps print first error line in scn-init notification?

 - [x] fix time format (in message-list, in card, top right) - midnight is shown as "24:05" instead of "00:05" - thats weird

 - [x] Add scrollbar
       -> https://api.flutter.dev/flutter/material/Scrollbar-class.html

 - [x] you cant unsubscribe from foreign channel without completely loosing subscription.
       perhaps subscriptions should have two cofirmed bool (both must be true to receive messages): confirmed-owner && confirmed-subscriber
       Then the subscriber can unconfirm his half - without loosing the owner confirmation

 -----

# TODO iOS specific

 - [ ] payment / pro
 - [ ] show notifiactions (foreground/background/etc)
 - [ ] handle click-on-notifications should open message
 - [ ] share message
 - [ ] scan QR

 -----

# TODO Server

 - [ ] Switch server to sq style from faby
        - [ ] switch from mattn to go-sqlite
        - [ ] Single struct for model/db/json
        - [ ] use ginext
        - [ ] use sq.Query | sq.Update | sq.InsertAndQuery | ....
        - [ ] sq.DBOptions - enable CommentTrimmer and DefaultConverter
        - [ ] run unit-tests...
        - [ ] Copy db.Migrate code

 - [ ] Disable compat | remove code 
        - [x] compat message title
        - [ ] ...
 - [ ] RWLock directly in go - prevent/reduce db-locked exception
