# Development notes

These are the development notes for the Go version.

The idea is to use the help files to implement BULLETIN.

Look up how godoc does references to other things.

Figure out readline completion.  Case sensitive - issue?  Building from
repl.commands?

Switch between MAIL and BULLETIN modes? MAIL commands are documented
[here](https://marc.vos.net/books/vms/help/mail/).

 ## sqlite
 
  * sqlite trigger tracing: `.trace stdout --row --profile --stmt --expanded --plain --close`
  * https://sqlite.org/cli.html
  * https://www.sqlitetutorial.net/

## Things to do

  * Run [godoc](http://localhost:6060/) and then review where the help text is lacking.
  * Implement each command.
    * Next: folder commands - MODIFY
    * Messages edit: CHANGE, REPLY
    * Moving messages: COPY, MOVE
    * Mark messages: MARK, UNMARK
    * ~~Compound commands: SET and SHOW - make HELP work for them.~~
    * Mail: MAIL, FORWARD, RESPOND
  * Review each command and fully implement it.
  * Run this.Skew.Safe() before... each command?  each write?
  * Handle broadcast messages - have bulletin watch a directory and
    display files from it.  Then have them delete the file if it's older
    than 5 minutes (allow for failure)
  * Database
    * trigger to limit values for 'visibility'?
  * Add commands:
    * ~~A way to add / delete ssh keys.~~
    * A way to manage files?
    * Commands for a local mail system?
    * Commands to connect to Mattermost or mastodon?
    * ~~Commands to manage users.~~

Done:

  * ~~Editor - need an embedded editor~~ Implemented using tview; good enough
    * An EDT inspired [editor](https://sourceforge.net/projects/edt-text-editor/)
    * [gkilo](https://github.com/vcnovaes/gkilo)
    * This [kilo editor](https://viewsourcecode.org/snaptoken/kilo/) tutorial
    * Using giu, a [text-editor](https://serge-hulne.medium.com/coding-a-simple-text-editor-in-go-using-giu-quick-and-dirty-b9b97ab41e4a) (needs cgo, no)
    * [bubbletea](https://github.com/charmbracelet/bubbletea) seems to be the tui that's winning
    * Another option is tview - [simpler](https://github.com/rivo/tview).
  * ~~Implement batch jobs~~
     * ~~Have install populate the database with some test data.~~
     * ~~reboot~~
     * ~~expire~~
  * ~~Add a pager~~
  * ~~SHOW VERSION~~
  * ~~Check db version; notify user if it changes; refuse to write to db if it has.~~
  * ~~this.Folder should be a storage.Folder.~~
  * ~~Add some of the early announcements from the sources - see the
    conversion branch - to the GENERAL folder.~~
  * ~~Move to a storage layer.~~
  * ~~Cleanup help output.~~
    * ~~Remove the node/cluster/newsgroup/mailing-list related flags.~~
    * ~~Remove BBOARD references.~~
    * ~~format with `par w72j1`~~
  * ~~Handle MARK for SELECT and DIRECTORY.~~

## Module links

  * cli - [docs](https://cli.urfave.org/v3/getting-started/)
  * readline - [docs](https://pkg.go.dev/github.com/chzyer/readline)
  * xdg - [docs](https://pkg.go.dev/github.com/adrg/xdg)
  * sqlite - [docs](https://modernc.org/sqlite)