import { ipcClient } from './ipc-client'; export function nhentaiSaveFavorites(): Promise { return ipcClient.ask(IpcChannel.NHENTAI_SAVE_FAVORITES, undefined); } export function nhentaiGetWork(galleryId: string): Promise { return ipcClient.ask(IpcChannel.NHENTAI_GET_WORK, { galleryId }); } type IpcChannelEntityRead = | IpcChannel.ENTITY_READ_AUTHOR | IpcChannel.ENTITY_READ_AUTHOR_NAME | IpcChannel.ENTITY_READ_AUTHOR_ROLE | IpcChannel.ENTITY_READ_AUTHOR_ROLE_NAME | IpcChannel.ENTITY_READ_CHARACTER_TAG | IpcChannel.ENTITY_READ_COLLECTION | IpcChannel.ENTITY_READ_COLLECTION_NAME | IpcChannel.ENTITY_READ_COLLECTION_PART | IpcChannel.ENTITY_READ_COPY | IpcChannel.ENTITY_READ_INTERACTION_TAG | IpcChannel.ENTITY_READ_LANGUAGE | IpcChannel.ENTITY_READ_SITE | IpcChannel.ENTITY_READ_SITE_NAME | IpcChannel.ENTITY_READ_SOURCE | IpcChannel.ENTITY_READ_TAG | IpcChannel.ENTITY_READ_TAG_NAME | IpcChannel.ENTITY_READ_TRANSFORMATION | IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE | IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE_NAME | IpcChannel.ENTITY_READ_WORK_AUTHOR | IpcChannel.ENTITY_READ_WORK_CHARACTER | IpcChannel.ENTITY_READ_WORK_CHARACTER_NAME | IpcChannel.ENTITY_READ_WORK | IpcChannel.ENTITY_READ_WORK_NAME | IpcChannel.ENTITY_READ_WORK_TAG | IpcChannel.ENTITY_READ_WORLD | IpcChannel.ENTITY_READ_WORLD_NAME | IpcChannel.ENTITY_READ_WORLD_CHARACTER | IpcChannel.ENTITY_READ_WORLD_CHARACTER_NAME; /** * when there are duplicate requests to the same entity, the existing promise is returned * * this promise is deleted once resolved, this is not a cache! */ const entityReadPromiseCollector: { [channel in IpcChannelEntityRead]: { [identifier in Identifier]?: Promise>; }; } = { [IpcChannel.ENTITY_READ_AUTHOR]: {}, [IpcChannel.ENTITY_READ_AUTHOR_NAME]: {}, [IpcChannel.ENTITY_READ_AUTHOR_ROLE]: {}, [IpcChannel.ENTITY_READ_AUTHOR_ROLE_NAME]: {}, [IpcChannel.ENTITY_READ_CHARACTER_TAG]: {}, [IpcChannel.ENTITY_READ_COLLECTION]: {}, [IpcChannel.ENTITY_READ_COLLECTION_NAME]: {}, [IpcChannel.ENTITY_READ_COLLECTION_PART]: {}, [IpcChannel.ENTITY_READ_COPY]: {}, [IpcChannel.ENTITY_READ_INTERACTION_TAG]: {}, [IpcChannel.ENTITY_READ_LANGUAGE]: {}, [IpcChannel.ENTITY_READ_SITE]: {}, [IpcChannel.ENTITY_READ_SITE_NAME]: {}, [IpcChannel.ENTITY_READ_SOURCE]: {}, [IpcChannel.ENTITY_READ_TAG]: {}, [IpcChannel.ENTITY_READ_TAG_NAME]: {}, [IpcChannel.ENTITY_READ_TRANSFORMATION]: {}, [IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE]: {}, [IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE_NAME]: {}, [IpcChannel.ENTITY_READ_WORK_AUTHOR]: {}, [IpcChannel.ENTITY_READ_WORK_CHARACTER]: {}, [IpcChannel.ENTITY_READ_WORK_CHARACTER_NAME]: {}, [IpcChannel.ENTITY_READ_WORK]: {}, [IpcChannel.ENTITY_READ_WORK_NAME]: {}, [IpcChannel.ENTITY_READ_WORK_TAG]: {}, [IpcChannel.ENTITY_READ_WORLD]: {}, [IpcChannel.ENTITY_READ_WORLD_NAME]: {}, [IpcChannel.ENTITY_READ_WORLD_CHARACTER]: {}, [IpcChannel.ENTITY_READ_WORLD_CHARACTER_NAME]: {}, }; function readCollected(channel: T, identifier: IpcParameter): Promise> { if (entityReadPromiseCollector[channel][identifier] === undefined) { // @ts-ignore -- no fucking clue how to type this correctly entityReadPromiseCollector[channel][identifier] = ipcClient.ask(channel, identifier).then((value) => { delete entityReadPromiseCollector[channel][identifier]; return value; }); } return entityReadPromiseCollector[channel][identifier] as unknown as Promise>; } export const entityApi = { createAuthor(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_AUTHOR, data); }, createAuthorName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_AUTHOR_NAME, data); }, createAuthorRole(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_AUTHOR_ROLE, data); }, createAuthorRoleName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_AUTHOR_ROLE_NAME, data); }, createCharacterTag(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_CHARACTER_TAG, data); }, createCollection(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_COLLECTION, data); }, createCollectionName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_COLLECTION_NAME, data); }, createCollectionPart(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_COLLECTION_PART, data); }, createCopy(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_COPY, data); }, createInteractionTag(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_INTERACTION_TAG, data); }, createSite(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_SITE, data); }, createSiteName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_SITE_NAME, data); }, createSource(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_SOURCE, data); }, createTag(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_TAG, data); }, createTagName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_TAG_NAME, data); }, createTransformation(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_TRANSFORMATION, data); }, createTransformationType( data: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_TRANSFORMATION_TYPE, data); }, createTransformationTypeName( data: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_TRANSFORMATION_TYPE_NAME, data); }, createWorkAuthor(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK_AUTHOR, data); }, createWorkCharacter(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK_CHARACTER, data); }, createWorkCharacterName( data: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK_CHARACTER_NAME, data); }, createWork(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK, data); }, createWorkName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK_NAME, data); }, createWorkTag(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORK_TAG, data); }, createWorld(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORLD, data); }, createWorldName(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORLD_NAME, data); }, createWorldCharacter(data: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORLD_CHARACTER, data); }, createWorldCharacterName( data: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_CREATE_WORLD_CHARACTER_NAME, data); }, readAuthor(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_AUTHOR, id); }, readAuthorName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_AUTHOR_NAME, id); }, readAuthorRole(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_AUTHOR_ROLE, id); }, readAuthorRoleName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_AUTHOR_ROLE_NAME, id); }, readCharacterTag(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_CHARACTER_TAG, id); }, readCollection(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_COLLECTION, id); }, readCollectionName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_COLLECTION_NAME, id); }, readCollectionPart(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_COLLECTION_PART, id); }, readCopy(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_COPY, id); }, readInteractionTag(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_INTERACTION_TAG, id); }, readLanguage(code: string): Promise { return readCollected(IpcChannel.ENTITY_READ_LANGUAGE, code); }, readSite(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_SITE, id); }, readSiteName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_SITE_NAME, id); }, readSource(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_SOURCE, id); }, readTag(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_TAG, id); }, readTagName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_TAG_NAME, id); }, readTransformation(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_TRANSFORMATION, id); }, readTransformationType(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE, id); }, readTransformationTypeName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_TRANSFORMATION_TYPE_NAME, id); }, readWorkAuthor(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK_AUTHOR, id); }, readWorkCharacter(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK_CHARACTER, id); }, readWorkCharacterName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK_CHARACTER_NAME, id); }, readWork(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK, id); }, readWorkName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK_NAME, id); }, readWorkTag(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORK_TAG, id); }, readWorld(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORLD, id); }, readWorldName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORLD_NAME, id); }, readWorldCharacter(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORLD_CHARACTER, id); }, readWorldCharacterName(id: number): Promise { return readCollected(IpcChannel.ENTITY_READ_WORLD_CHARACTER_NAME, id); }, updateAuthor(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_AUTHOR, { id, partial }); }, updateAuthorName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_AUTHOR_NAME, { id, partial }); }, updateAuthorRole( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_AUTHOR_ROLE, { id, partial }); }, updateAuthorRoleName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_AUTHOR_ROLE_NAME, { id, partial }); }, updateCharacterTag( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_CHARACTER_TAG, { id, partial }); }, updateCollection( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_COLLECTION, { id, partial }); }, updateCollectionName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_COLLECTION_NAME, { id, partial }); }, updateCollectionPart( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_COLLECTION_PART, { id, partial }); }, updateCopy(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_COPY, { id, partial }); }, updateInteractionTag( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_INTERACTION_TAG, { id, partial }); }, updateSite(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_SITE, { id, partial }); }, updateSiteName(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_SITE_NAME, { id, partial }); }, updateSource(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_SOURCE, { id, partial }); }, updateTag(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_TAG, { id, partial }); }, updateTagName(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_TAG_NAME, { id, partial }); }, updateTransformation( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_TRANSFORMATION, { id, partial }); }, updateTransformationType( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_TRANSFORMATION_TYPE, { id, partial }); }, updateTransformationTypeName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_TRANSFORMATION_TYPE_NAME, { id, partial }); }, updateWorkAuthor( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK_AUTHOR, { id, partial }); }, updateWorkCharacter( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK_CHARACTER, { id, partial }); }, updateWorkCharacterName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK_CHARACTER_NAME, { id, partial }); }, updateWork(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK, { id, partial }); }, updateWorkName(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK_NAME, { id, partial }); }, updateWorkTag(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORK_TAG, { id, partial }); }, updateWorld(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORLD, { id, partial }); }, updateWorldName(id: number, partial: Partial): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORLD_NAME, { id, partial }); }, updateWorldCharacter( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORLD_CHARACTER, { id, partial }); }, updateWorldCharacterName( id: number, partial: Partial, ): Promise { return ipcClient.ask(IpcChannel.ENTITY_UPDATE_WORLD_CHARACTER_NAME, { id, partial }); }, deleteAuthor(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_AUTHOR, id); }, deleteAuthorName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_AUTHOR_NAME, id); }, deleteAuthorRole(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_AUTHOR_ROLE, id); }, deleteAuthorRoleName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_AUTHOR_ROLE_NAME, id); }, deleteCharacterTag(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_CHARACTER_TAG, id); }, deleteCollection(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_COLLECTION, id); }, deleteCollectionName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_COLLECTION_NAME, id); }, deleteCollectionPart(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_COLLECTION_PART, id); }, deleteCopy(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_COPY, id); }, deleteInteractionTag(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_INTERACTION_TAG, id); }, deleteSite(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_SITE, id); }, deleteSiteName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_SITE_NAME, id); }, deleteSource(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_SOURCE, id); }, deleteTag(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_TAG, id); }, deleteTagName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_TAG_NAME, id); }, deleteTransformation(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_TRANSFORMATION, id); }, deleteTransformationType(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_TRANSFORMATION_TYPE, id); }, deleteTransformationTypeName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_TRANSFORMATION_TYPE_NAME, id); }, deleteWorkAuthor(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK_AUTHOR, id); }, deleteWorkCharacter(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK_CHARACTER, id); }, deleteWorkCharacterName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK_CHARACTER_NAME, id); }, deleteWork(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK, id); }, deleteWorkName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK_NAME, id); }, deleteWorkTag(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORK_TAG, id); }, deleteWorld(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORLD, id); }, deleteWorldName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORLD_NAME, id); }, deleteWorldCharacter(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORLD_CHARACTER, id); }, deleteWorldCharacterName(id: number): Promise { return ipcClient.ask(IpcChannel.ENTITY_DELETE_WORLD_CHARACTER_NAME, id); }, };