(sessionId: string, tempFile: string)
| 104 | } |
| 105 | |
| 106 | private async incrementalImportFile(sessionId: string, tempFile: string): Promise<ImportResult> { |
| 107 | try { |
| 108 | this.dbManager.close(sessionId) |
| 109 | const result = await incrementalImport(this.dbManager, sessionId, tempFile) |
| 110 | |
| 111 | if (result.success) { |
| 112 | const newMessageCount = result.newMessageCount |
| 113 | const duplicateCount = result.batch?.duplicateCount ?? 0 |
| 114 | this.logger.info( |
| 115 | `[DirectImporter] Incremental OK: +${newMessageCount} messages (${duplicateCount} duplicates skipped)` |
| 116 | ) |
| 117 | return { success: true, newMessageCount, sessionId } |
| 118 | } |
| 119 | |
| 120 | if (result.error === 'error.session_not_found' || result.error?.includes('no such table')) { |
| 121 | return { success: false, newMessageCount: 0, sessionId, needFullResync: true } |
| 122 | } |
| 123 | |
| 124 | return { success: false, newMessageCount: 0, sessionId, error: result.error } |
| 125 | } catch (err: any) { |
| 126 | this.logger.error(`[DirectImporter] Incremental import failed`, err) |
| 127 | return { success: false, newMessageCount: 0, sessionId, error: err.message } |
| 128 | } |
| 129 | } |
| 130 | |
| 131 | private async fullImportFile(tempFile: string, externalId: string): Promise<ImportResult> { |
| 132 | try { |
no test coverage detected