Skip to content

Latest commit

 

History

History
80 lines (68 loc) · 5.36 KB

File metadata and controls

80 lines (68 loc) · 5.36 KB

TODOs

  • improve readme, add screenshots

  • publish to homebrew

  • add example Swift script that consumes the library

  • improve permissions prompt, use https://github.com/zats/permiso

  • replace SQLite w https://github.com/pointfreeco/sqlite-data and benchmark

  • remove .parity when no longer needed

  • consider folding callback from PlatformAPI.onThreadSelected into subscribeToEvents

  • bridgev2 version for self hosting support

  • add cross-process coordination when more than one process is driving Messages.app at the same time (e.g. Beeper Desktop + a separate CLI process, or two CLIs w secondary instance off)

  • separate UserDefaults somehow so that CLI and other consumers don't share the prefs

  • user manually killing the messages.app causes cli to not detect that ("Domain=NSOSStatusErrorDomain Code=-600 "procNotFound: no eligible process with specified descriptor"")

  • when scheduled messages are actually sent, send a message update event

  • surface terminal-failure attachment state so a failed/rejected download clears the loading spinner. Today loading = transferState != .finished (MessageMapper+Attachments.swift:26), so error/recoverableError/rejected (states 6/7/8, Attachment.swift:31-33) read as loading: true forever; PlatformSDK.Attachment (PlatformSDKAttachment.swift:26) has no failed flag. After the EventWatcher hydration path stops polling failed transfers, the last emitted state still says loading, so the consumer spins indefinitely. Needs: a failed/error field on the attachment type + mapper wiring + EventWatcher emitting it on terminal failure + consumer-side rendering. The EventWatcher hydration path already drops terminally-failed candidates via IMFileTransferState.isTerminalFailure.

  • perhaps move PlatformSDK to https://github.com/TextsHQ/platform-sdk

  • concurrency

    • review for races, PlatformAPI.messagesController is mutated without isolation
    • kill PassivelyAwareDispatchQueue
  • improve misfire prevention and robustness

  • DatabaseTickWaits.{sentMessageIDs,sentThreadIDs} shouldn't exist, we get ServerEvents for new messages, use that. wip

  • cli

    • command to watch chat that prints new activity for just that chat, json new-line separated
    • use better library for repl?
    • autocomplete
    • tests
  • parity

    • add delete message for me command
    • add add/remove group participant command
    • add rename group title command
    • add update group image command
    • add schedule message command
    • add draft message command
    • add leave group command
    • support rich text sending
    • support sending multipart messages (image(s) with caption)
    • fix parsing for multi-part messages w inline stickers
    • fix real time sync of message deletions (for self, undo send already works)

Done

  • publish to gh releases
  • publish to spm
  • transpile to pure Swift with TypeScript/Electron bindings
  • add support for spinning up a discrete instance of Messages.app
  • remove event-watching side effect from PlatformAPI.getThreads(...). It currently bootstraps event watching from the first chat fetch (cursor == nil) via EventWatcherLifecycle.shared.startBootstrapIfNecessary(...); a fetch function should only perform a single read and return data. Starting event watching from inside it makes calls non-idempotent. Fix by moving event-watcher bootstrap ownership to the caller/lifecycle layer, e.g. the existing explicit startEventWatchingFromCurrentState / IMessageHost.startEventWatchingFromCurrentState path.
  • fix receiving typing indicators on tahoe
  • fix graphic for old school tapback reactions (👍, ❤️) – should not be same as emoji reactions (like, heart)
  • cli messages/chats command: add pagination
  • add undo send CLI command
  • fix notify anyway on tahoe
  • fix unmute chat on tahoe
  • instead of thread_messages_refresh
    • new incoming messages should be state sync message upserts
    • new added/removed reactions should be state sync message upserts/deletes (for the hidden reaction message) and a state sync message update (for the og message)
    • messages edited should be state sync message updates
    • messages getting read should be state sync message updates
  • when the user sends a message w tweets/links, when the link/tweet preview resolves, send a message update event
  • https://github.com/SwiftPackageIndex/PackageList/issues/new?template=add_package.yml
  • cli
    • resolve chat id as email/phone # if any;-; prefix isn't passed
    • notarize before gh release and do universal binary/x86 target
    • w system contacts, resolve phone #s and emails and populate Thread.title, User.fullName, User.imgURL
    • format flag for yaml readable output
    • one off command to print presence (dnd / dnd w notify) and typing status
    • syntax highlight
  • fix sending emoji reactions (🎉)
  • add download attachment command
  • map all message edits
  • add example JS script that consumes the library
  • run with node instead of electron kabiroberai/node-swift#4