Class: Teems::Services::SyncStore

Inherits:
Object
  • Object
show all
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

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

#initialize(xdg_paths: Support::XdgPaths.new) ⇒ SyncStore

Returns a new instance of SyncStore.



160
161
162
# File 'lib/teems/services/sync_store.rb', line 160

def initialize(xdg_paths: Support::XdgPaths.new)
  @xdg_paths = xdg_paths
end

Instance Method Details

#chat_unavailable?(state, chat_id) ⇒ Boolean

Returns:

  • (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_stateObject



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_dirObject



164
# File 'lib/teems/services/sync_store.rb', line 164

def sync_dir = @sync_dir ||= File.join(@xdg_paths.data_dir, SYNC_DIR)