~singpolyma/cheogram

cheogram/cheogram.cabal -rw-r--r-- 2.2 KiB
Change JID Command

If the backend sends us a command we recognize as a JID change, we
intercept it and replace it with ours.

Ours asks which JID we want to move to and then asks that JID if it
wants to do this. When they register we ask them to confirm they want to
swap, and then send the backend the actual JID change operation.
Add new dependencies to cabal file also
-O2 takes too much RAM for CI
Merge branch 'guix-no-tc'

* guix-no-tc:
  Guixify
  No more TC
  Don't need to rewrite anymore
Abstract DB

We want to change the storage backend, because we are pushing past the limits of
what is a good idea with TokyoCabinet and have had several corruption events.

So, as a first step, break the hard dependency of the main app code on
TokyoCabinet and instead express the operations in a more abstract data model.
This data model is pretty much based on Redis, which is the intended new storage
driver, but isn't directly tied to that either.
Loosen dhall constraint
Merge branch 'componentStanzaRecord'

* componentStanzaRecord:
  Use Record for componentStanza context
Use Record for componentStanza context

componentStanza is a rediculous procedure with far too many branches, and as a
result it gets bits of context relavant to this branch or that one, but most
branches use only a few of the bits of context.  This change bundles the context
up into a record and only unpacks the fields used by a given branch.

While this does not fix the underlying design issues, it *is* more readable than
a long string of underscores that one must count through, and adding a new bit
of context will no longer require editing every single branch.  This seems like
a win.
Later versions have a bug
Merge branch 'cache-inbound-oob'

* cache-inbound-oob:
  Intrument cacheOOB
  Fetch any OOB URL from route and cache in jingle store
  Set up structure to cache OOB coming from a direct message route
Fetch any OOB URL from route and cache in jingle store

Now we actually cache the data.  Always assumes URLs are HTTP, but they always
are in practise and if one is not it will simply fail and in case of any error
we just pass the oob element through unmodified.
Temporary fix for broken mmorph version
Merge branch 'cv_adhoc_squashed'

* cv_adhoc_squashed:
  Change Case to Select
  Add Thread to Bot Responses
  Add Text-Single Handling
  AdHoc Bot Forms
Change Case to Select

I was abusing the case syntax pretty hard, so this should be more accurate to
what's actually going on.

I was going to reintegrate this change back into the earlier commits, but I've
fixed that same ugly merge conflict when the new stuff gets added in the case
statement like 10 times by now, and I'm just not interested in doing it again.

So this is its own commit, at the end.
AdHoc Bot Forms

Before this when a user got back a form it was considered an error. Only
commands that returned a note could be executed.
Now, though, we see the form and try to handle it as a series of chat questions
asked to the people. This is only the first version of the technique, though,
so it has some pretty strong limitations.

First, it only supports lists because that's all the test flow I pulled out of
the spec had in it. There are obviously other field types that this will need
to support to be considered finished.

Second, it only goes forwards. There's no cancel, no returning to previous
questions, etc. It also waits forever (well, until the next restart) for the
user to finish, occupying memory in the session holder until then. We could
also maybe ask confirmation before crossing from one form to another, from the
server's perspective, since there's no guarantee that changes made aren't
immediately applied, rather than waiting for the end. At the very least we
should have timeouts and cancelling though.

Third, there's no error handling at all. It just takes things and assumes
success. That should maybe go along with cancellation, at least, but handling
it with some kind of error message and retry may be nice, if the standard and
the server command accepts it.
Relax Dhall Version

I constrained it to the one version I happened to have installed to ensure it
worked. Now that I have more time, though, I've tested and it appears to also
work on these other versions.
Update Dhall to Newer Version

Some classes changed names, others changed types.
All in all it was a relatively straight-forward port.
Better URL block for whispers
Command-only commands work

That is, if the command returns completed immediately with a note, the
note is returned to the user.  Anything else is treated as an error.
Next