Fix private calls
This commit is contained in:
@@ -70,17 +70,20 @@ export class AttachmentPersistenceService {
|
||||
} catch { /* persistence is best-effort */ }
|
||||
}
|
||||
|
||||
async saveFileToDisk(attachment: Attachment, blob: Blob): Promise<void> {
|
||||
async saveFileToDisk(attachment: Attachment, blob: Blob): Promise<string | null> {
|
||||
try {
|
||||
const roomName = await this.resolveCurrentRoomName();
|
||||
const diskPath = await this.attachmentStorage.saveBlob(attachment, blob, roomName);
|
||||
const storageContainer = await this.resolveStorageContainerName(attachment);
|
||||
const diskPath = await this.attachmentStorage.saveBlob(attachment, blob, storageContainer);
|
||||
|
||||
if (!diskPath)
|
||||
return;
|
||||
return null;
|
||||
|
||||
attachment.savedPath = diskPath;
|
||||
void this.persistAttachmentMeta(attachment);
|
||||
return diskPath;
|
||||
} catch { /* disk save is best-effort */ }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async initFromDatabase(): Promise<void> {
|
||||
@@ -120,6 +123,10 @@ export class AttachmentPersistenceService {
|
||||
});
|
||||
}
|
||||
|
||||
async resolveStorageContainerName(attachment: Pick<Attachment, 'messageId'>): Promise<string> {
|
||||
return this.runtimeStore.getMessageRoomId(attachment.messageId) ?? await this.resolveCurrentRoomName();
|
||||
}
|
||||
|
||||
private async loadFromDatabase(): Promise<void> {
|
||||
try {
|
||||
const allRecords: AttachmentMeta[] = await this.database.getAllAttachments();
|
||||
@@ -176,6 +183,11 @@ export class AttachmentPersistenceService {
|
||||
continue;
|
||||
|
||||
if (attachment.savedPath) {
|
||||
if (await this.restoreMediaAttachmentFromFileUrl(attachment, attachment.savedPath)) {
|
||||
hasChanges = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
const savedBase64 = await this.attachmentStorage.readFile(attachment.savedPath);
|
||||
|
||||
if (savedBase64) {
|
||||
@@ -186,6 +198,11 @@ export class AttachmentPersistenceService {
|
||||
}
|
||||
|
||||
if (attachment.filePath) {
|
||||
if (await this.restoreMediaAttachmentFromFileUrl(attachment, attachment.filePath)) {
|
||||
hasChanges = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
const originalBase64 = await this.attachmentStorage.readFile(attachment.filePath);
|
||||
|
||||
if (originalBase64) {
|
||||
@@ -222,6 +239,26 @@ export class AttachmentPersistenceService {
|
||||
);
|
||||
}
|
||||
|
||||
private async restoreMediaAttachmentFromFileUrl(attachment: Attachment, filePath: string): Promise<boolean> {
|
||||
if (!this.isPlayableMedia(attachment)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const fileUrl = await this.attachmentStorage.getFileUrl(filePath);
|
||||
|
||||
if (!fileUrl) {
|
||||
return false;
|
||||
}
|
||||
|
||||
attachment.objectUrl = fileUrl;
|
||||
attachment.available = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
private isPlayableMedia(attachment: Pick<Attachment, 'mime'>): boolean {
|
||||
return attachment.mime.startsWith('video/') || attachment.mime.startsWith('audio/');
|
||||
}
|
||||
|
||||
private async getRetainedSavedPathsForOtherMessages(messageId: string): Promise<Set<string>> {
|
||||
const retainedSavedPaths = new Set<string>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user