[
  {
    "id": "class:1jwtkwo:syncservice",
    "kind": "class",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "canonicalName": "SyncService",
    "shortLabel": "SyncService",
    "longLabel": "SyncService",
    "purpose": "Client-side service that establishes a SignalR hub connection to synchronize reading progress (pages) with a remote server, providing debounce logic, event exposure, and lifecycle disposal."
  },
  {
    "id": "method:171cr2c:syncservice",
    "kind": "method",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 20,
    "canonicalName": "SyncService",
    "shortLabel": "SyncService()",
    "longLabel": "SyncService(httpClient: HttpClient, storageService: INativeStorageService, platformService: IPlatformService, logger: ILogger<SyncService>) -> SyncService",
    "signature": "(httpClient: HttpClient, storageService: INativeStorageService, platformService: IPlatformService, logger: ILogger<SyncService>) -> SyncService",
    "purpose": "Constructs the SyncService and stores injected dependencies."
  },
  {
    "id": "method:r2rlv7:initializeasync",
    "kind": "method",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 32,
    "canonicalName": "InitializeAsync",
    "shortLabel": "InitializeAsync()",
    "longLabel": "InitializeAsync() -> Task<Result>",
    "signature": "() -> Task<Result>",
    "purpose": "Initializes the SignalR HubConnection (with token from secure storage), registers a progress handler, and starts the connection with automatic reconnect."
  },
  {
    "id": "method:1w7mi8p:updateprogressasync",
    "kind": "method",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 70,
    "canonicalName": "UpdateProgressAsync",
    "shortLabel": "UpdateProgressAsync()",
    "longLabel": "UpdateProgressAsync(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
    "signature": "(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task<Result>",
    "purpose": "Debounces and sends reading progress updates to the server via the hub connection in a trailing-edge manner, avoiding duplicate sends for the same page."
  },
  {
    "id": "method:14llm2d:disposeasync",
    "kind": "method",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 103,
    "canonicalName": "DisposeAsync",
    "shortLabel": "DisposeAsync()",
    "longLabel": "DisposeAsync() -> Task",
    "signature": "() -> Task",
    "purpose": "Cancels pending debounce, disposes the hub connection if present."
  },
  {
    "id": "method:1oqk0x0:iasyncdisposable-disposeasync",
    "kind": "method",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 112,
    "canonicalName": "IAsyncDisposable.DisposeAsync",
    "shortLabel": "IAsyncDisposable.DisposeAsync()",
    "longLabel": "IAsyncDisposable.DisposeAsync() -> ValueTask",
    "signature": "() -> ValueTask",
    "purpose": "Explicit interface implementation that forwards to DisposeAsync to unify disposal semantics."
  },
  {
    "id": "type:1sbj28q:syncservice",
    "kind": "type",
    "fileId": "file:1la6lrw:syncservice-cs",
    "path": "NexusReader.UI.Shared/Services/SyncService.cs",
    "line": 8,
    "canonicalName": "SyncService",
    "shortLabel": "SyncService",
    "longLabel": "SyncService (model)",
    "purpose": "Encapsulates client synchronization logic for reading progress via SignalR, providing initialization, debounced update sending, event exposure, and disposal."
  }
]