Class: Teems::Services::SyncStore
- Inherits:
-
Object
- Object
- Teems::Services::SyncStore
- Includes:
- SyncChatDir, SyncChatWrite, SyncDirNaming, SyncFileOps, SyncRenameOps, SyncStateMutation, SyncStateQuery
- Defined in:
- lib/teems/services/sync_store.rb
Overview
Manages local sync state and file storage for the sync command. Stores chat history as Markdown + JSON in XDG data directory.
Constant Summary collapse
- SYNC_DIR =
'sync'- STATE_FILE =
'sync_state.json'- CHATS_DIR =
'chats'
Constants included from SyncDirNaming
Teems::Services::SyncDirNaming::GENERIC_LABELS, Teems::Services::SyncDirNaming::MAX_DIR_NAME_LENGTH, Teems::Services::SyncDirNaming::TYPE_DIRS
Instance Method Summary collapse
- #chat_unavailable?(state, chat_id) ⇒ Boolean
- #ensure_dir_name(state, chat_info:) ⇒ Object
-
#initialize(xdg_paths: Support::XdgPaths.new) ⇒ SyncStore
constructor
A new instance of SyncStore.
- #last_synced_time(state, chat_id) ⇒ Object
- #load_state ⇒ Object
- #save_state(state) ⇒ Object
- #sync_dir ⇒ Object
Methods included from SyncChatWrite
#write_chat_metadata, #write_messages
Methods included from SyncChatDir
#chat_dir, #read_messages_json
Methods included from SyncStateMutation
#mark_unavailable, #update_chat_state
Methods included from SyncDirNaming
build_dir_name, sanitize_display_name, sanitize_id, type_dir
Constructor Details
Instance Method Details
#chat_unavailable?(state, chat_id) ⇒ Boolean
170 171 172 173 |
# File 'lib/teems/services/sync_store.rb', line 170 def chat_unavailable?(state, chat_id) chat_entry = state.dig('chats', chat_id) chat_entry_unavailable?(chat_entry) end |
#ensure_dir_name(state, chat_info:) ⇒ Object
184 185 186 187 188 189 190 |
# File 'lib/teems/services/sync_store.rb', line 184 def ensure_dir_name(state, chat_info:) chat_id, display_name, chat_type = chat_info.values_at(:chat_id, :display_name, :chat_type) new_dir_name = build_dir_name(chat_id, display_name) entry = (state['chats'] ||= {})[chat_id] ||= {} rename_entry_dir(entry, new_dir_name, chat_type) new_dir_name end |
#last_synced_time(state, chat_id) ⇒ Object
166 167 168 |
# File 'lib/teems/services/sync_store.rb', line 166 def last_synced_time(state, chat_id) parse_synced_at(state.dig('chats', chat_id, 'last_synced_at')) end |
#load_state ⇒ Object
175 176 177 |
# File 'lib/teems/services/sync_store.rb', line 175 def load_state load_json_or_default(File.join(sync_dir, STATE_FILE), {}) end |
#save_state(state) ⇒ Object
179 180 181 182 |
# File 'lib/teems/services/sync_store.rb', line 179 def save_state(state) FileUtils.mkdir_p(sync_dir) atomic_write(File.join(sync_dir, STATE_FILE), JSON.pretty_generate(state)) end |
#sync_dir ⇒ Object
164 |
# File 'lib/teems/services/sync_store.rb', line 164 def sync_dir = @sync_dir ||= File.join(@xdg_paths.data_dir, SYNC_DIR) |