ente/web/packages/shared/file-metadata.ts
Manav Rathi 18e3adde11
Refactor search code
In prep for moving location tags handling to @/new
2024-09-06 19:58:12 +05:30

34 lines
1.3 KiB
TypeScript

import { isDevBuild } from "@/base/env";
import {
decryptPublicMagicMetadata,
type PublicMagicMetadata,
} from "@/media/file-metadata";
import type { EnteFile } from "@/new/photos/types/file";
import { fileLogID } from "@/new/photos/utils/file";
/**
* On-demand decrypt the public magic metadata for an {@link EnteFile} for code
* running synchronously.
*
* It both modifies the given file object, and also returns the decrypted
* metadata.
*
* We are not expected to be in a scenario where the file gets to the UI without
* having its public magic metadata decrypted, so this function is a sanity
* check and should be a no-op in usually. On debug builds it'll throw if it
* finds its assumptions broken.
*/
export const getPublicMagicMetadataSync = (enteFile: EnteFile) => {
if (!enteFile.pubMagicMetadata) return undefined;
if (typeof enteFile.pubMagicMetadata.data == "string") {
if (isDevBuild)
throw new Error(
`Public magic metadata for ${fileLogID(enteFile)} had not been decrypted even when the file reached the UI layer`,
);
decryptPublicMagicMetadata(enteFile);
}
// This cast is unavoidable in the current setup. We need to refactor the
// types so that this cast in not needed.
return enteFile.pubMagicMetadata.data as PublicMagicMetadata;
};