diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-11-16 12:53:43 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 12:53:43 -0800 |
commit | 54faa7e176ed2f8644ef4941c8a65522107a84c1 (patch) | |
tree | 336d69d37809041dcc38a932975fcf438ac60dfd /src/lib/media/image-sizes.ts | |
parent | e637798e05ba3bfc1c78be1b0f70e8b0ac22554d (diff) | |
download | voidsky-54faa7e176ed2f8644ef4941c8a65522107a84c1.tar.zst |
Remove deprecated models and mobx usage (react-query refactor) (#1934)
* Update login page to use service query * Update modal to use session instead of store * Move image sizes cache off store * Update settings to no longer use store * Update link-meta fetch to use agent instead of rootstore * Remove deprecated resolveName() * Delete deprecated link-metas cache * Delete deprecated posts cache * Delete all remaining mobx models, including the root store * Strip out unused mobx observer wrappers
Diffstat (limited to 'src/lib/media/image-sizes.ts')
-rw-r--r-- | src/lib/media/image-sizes.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/lib/media/image-sizes.ts b/src/lib/media/image-sizes.ts new file mode 100644 index 000000000..4ea95ea23 --- /dev/null +++ b/src/lib/media/image-sizes.ts @@ -0,0 +1,34 @@ +import {Image} from 'react-native' +import type {Dimensions} from 'lib/media/types' + +const sizes: Map<string, Dimensions> = new Map() +const activeRequests: Map<string, Promise<Dimensions>> = new Map() + +export function get(uri: string): Dimensions | undefined { + return sizes.get(uri) +} + +export async function fetch(uri: string): Promise<Dimensions> { + const Dimensions = sizes.get(uri) + if (Dimensions) { + return Dimensions + } + + const prom = + activeRequests.get(uri) || + new Promise<Dimensions>(resolve => { + Image.getSize( + uri, + (width: number, height: number) => resolve({width, height}), + (err: any) => { + console.error('Failed to fetch image dimensions for', uri, err) + resolve({width: 0, height: 0}) + }, + ) + }) + activeRequests.set(uri, prom) + const res = await prom + activeRequests.delete(uri) + sizes.set(uri, res) + return res +} |