mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
Add Random/Preferred/None modes, preferred provider selection, and provider-order fallback. Catbox/Imgur/PostImages on Android via WebView; Electron CDP automation for Imgur/PostImages. Hide upload controls on web runtime.
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { create } from 'zustand';
|
|
import { persist } from 'zustand/middleware';
|
|
import type { ProviderId, UploadMode } from '../lib/media-hosting/types';
|
|
import { MEDIA_HOSTING_PROVIDERS as PROVIDER_REGISTRY } from '../lib/media-hosting/providers';
|
|
|
|
/** Provider registry for UI: id, label, homepage URL, runtime support */
|
|
export const MEDIA_HOSTING_PROVIDERS = PROVIDER_REGISTRY;
|
|
|
|
interface MediaHostingStore {
|
|
uploadMode: UploadMode;
|
|
preferredProvider: ProviderId;
|
|
setUploadMode: (mode: UploadMode) => void;
|
|
setPreferredProvider: (provider: ProviderId) => void;
|
|
}
|
|
|
|
const PERSIST_VERSION = 2;
|
|
|
|
function migrate(_state: unknown): MediaHostingStore {
|
|
return {
|
|
uploadMode: 'random',
|
|
preferredProvider: 'catbox',
|
|
} as MediaHostingStore;
|
|
}
|
|
|
|
const useMediaHostingStore = create<MediaHostingStore>()(
|
|
persist(
|
|
(set) => ({
|
|
uploadMode: 'random',
|
|
preferredProvider: 'catbox',
|
|
setUploadMode: (mode) => set({ uploadMode: mode }),
|
|
setPreferredProvider: (provider) => set({ preferredProvider: provider }),
|
|
}),
|
|
{
|
|
name: 'media-hosting-storage',
|
|
version: PERSIST_VERSION,
|
|
migrate: (persistedState, version) => {
|
|
if (version < PERSIST_VERSION) {
|
|
return migrate(persistedState);
|
|
}
|
|
return persistedState as MediaHostingStore;
|
|
},
|
|
},
|
|
),
|
|
);
|
|
|
|
export default useMediaHostingStore;
|