Skip to content

Commit

Permalink
feat: update mangal to v4, allow updating existing manga metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
oae committed Nov 1, 2022
1 parent 9abb2f8 commit 43b2693
Show file tree
Hide file tree
Showing 7 changed files with 226 additions and 111 deletions.
10 changes: 6 additions & 4 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ WORKDIR /tmp

RUN \
if [ "$(uname -m)" = "x86_64" ] ; then \
curl -L "https://github.com/metafates/mangal/releases/download/v3.14.2/mangal_3.14.2_Linux_x86_64.tar.gz" -o mangal.tar.gz ;\
curl -L "https://github.com/metafates/mangal/releases/download/v4.0.0/mangal_4.0.0_Linux_x86_64.tar.gz" -o mangal.tar.gz ;\
elif [ "$(uname -m)" = "armv6l" ] ; then \
curl -L "https://github.com/metafates/mangal/releases/download/v3.14.2/mangal_3.14.2_Linux_armv6.tar.gz" -o mangal.tar.gz ;\
curl -L "https://github.com/metafates/mangal/releases/download/v4.0.0/mangal_4.0.0_Linux_armv6.tar.gz" -o mangal.tar.gz ;\
elif [ "$(uname -m)" = "i386" ] ; then \
curl -L "https://github.com/metafates/mangal/releases/download/v3.14.2/mangal_3.14.2_Linux_i386.tar.gz" -o mangal.tar.gz ;\
curl -L "https://github.com/metafates/mangal/releases/download/v4.0.0/mangal_4.0.0_Linux_i386.tar.gz" -o mangal.tar.gz ;\
elif [ "$(uname -m)" = "aarch64" ] ; then \
curl -L "https://github.com/metafates/mangal/releases/download/v3.14.2/mangal_3.14.2_Linux_arm64.tar.gz" -o mangal.tar.gz ;\
curl -L "https://github.com/metafates/mangal/releases/download/v4.0.0/mangal_4.0.0_Linux_arm64.tar.gz" -o mangal.tar.gz ;\
fi
RUN tar xf mangal.tar.gz
RUN mv mangal /usr/bin/mangal
Expand All @@ -74,6 +74,8 @@ ENV NEXT_TELEMETRY_DISABLED 1
ENV HOME="/config"
ENV KAIZOKU_LOG_PATH="/logs"
ENV MANGAL_METADATA_COMIC_INFO_XML=true
ENV MANGAL_METADATA_COMIC_INFO_XML_ADD_DATE=true
ENV MANGAL_METADATA_COMIC_INFO_XML_ALTERNATIVE_DATE=true
ENV MANGAL_METADATA_FETCH_ANILIST=true
ENV MANGAL_METADATA_SERIES_JSON=true
ENV MANGAL_FORMATS_USE=cbz
Expand Down
2 changes: 1 addition & 1 deletion src/components/addLibrary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ function Form({ onClose }: { onClose: () => void }) {
})}
>
<LoadingOverlay visible={visible} overlayBlur={2} />
<TextInput data-autoFocus label="Library path" placeholder="/data" {...form.getInputProps('library.path')} />
<TextInput data-autofocus label="Library path" placeholder="/data" {...form.getInputProps('library.path')} />

<Box
sx={(theme) => ({
Expand Down
32 changes: 16 additions & 16 deletions src/components/addManga/steps/reviewStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,12 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {

const handleBind = async () => {
setOpened(false);
if (!anilistId || !manga?.Name) {
if (!anilistId || !manga?.name) {
return;
}
await bindMutation.mutateAsync({
anilistId,
title: manga.Name,
title: manga.name,
});

query.refetch();
Expand Down Expand Up @@ -82,10 +82,10 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
boxShadow: theme.shadows.xl,
})}
src="/cover-not-found.jpg"
alt={manga.Name}
alt={manga.name}
/>
}
src={manga.Metadata.Cover}
src={manga.metadata.cover.extraLarge || manga.metadata.cover.large || manga.metadata.cover.medium}
/>
</Grid.Col>
<Grid.Col span={8}>
Expand All @@ -94,7 +94,7 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
labelPosition="center"
label={
<>
<Title order={3}>{manga.Name}</Title>
<Title order={3}>{manga.name}</Title>
<Popover
width={300}
trapFocus
Expand Down Expand Up @@ -140,7 +140,7 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
rightSectionWidth={42}
label={
<Text size="sm" mb="xs">
Please enter a new AniList id for {manga.Name}
Please enter a new AniList id for {manga.name}
</Text>
}
placeholder="AniList Id"
Expand All @@ -150,9 +150,9 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
</>
}
/>
{manga.Metadata.Synonyms && (
{manga.metadata.synonyms && (
<Group spacing="xs">
{manga.Metadata.Synonyms.map((synonym) => (
{manga.metadata.synonyms.map((synonym) => (
<Tooltip label={synonym} key={synonym}>
<div style={{ maxWidth: 100 }}>
<Badge color="blue" variant="filled" size="sm" fullWidth>
Expand All @@ -164,9 +164,9 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
</Group>
)}
<Divider variant="dashed" my="xs" label="Status" />
{manga.Metadata.Status ? (
{manga.metadata.status ? (
<Badge color="cyan" variant="filled" size="sm">
{manga.Metadata.Status}
{manga.metadata.status}
</Badge>
) : (
<Text size="sm">No status...</Text>
Expand All @@ -175,16 +175,16 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
<Text>
There are &nbsp;
<Badge color="teal" variant="outline" size="lg">
{manga.Chapters?.length || 0}
{manga.chapters?.length || 0}
</Badge>
&nbsp; chapters
</Text>
<Divider variant="dashed" my="xs" label="Summary" />
<Text size="sm">{manga.Metadata.Summary || 'No summary...'}</Text>
<Text size="sm">{manga.metadata.summary || 'No summary...'}</Text>
<Divider variant="dashed" my="xs" label="Genres" />
{manga.Metadata.Genres ? (
{manga.metadata.genres ? (
<Group spacing="xs">
{manga.Metadata.Genres.map((genre) => (
{manga.metadata.genres.map((genre) => (
<Tooltip label={genre} key={genre}>
<div style={{ maxWidth: 100 }}>
<Badge color="indigo" variant="light" size="xs" fullWidth>
Expand All @@ -198,9 +198,9 @@ export function ReviewStep({ form }: { form: UseFormReturnType<FormType> }) {
<Text size="sm">No genres...</Text>
)}
<Divider variant="dashed" my="xs" label="Tags" />
{manga.Metadata.Tags ? (
{manga.metadata.tags ? (
<Group spacing="xs">
{manga.Metadata.Tags.map((tag) => (
{manga.metadata.tags.map((tag) => (
<Tooltip label={tag} key={tag}>
<div style={{ maxWidth: 100 }}>
<Badge color="violet" variant="light" size="xs" fullWidth>
Expand Down
8 changes: 7 additions & 1 deletion src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { logger } from '../utils/logging';
import { checkChaptersQueue, scheduleAll } from './queue/checkChapters';
import { downloadQueue } from './queue/download';
import { notificationQueue } from './queue/notify';
import { updateMetadataQueue } from './queue/updateMetadata';

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
Expand All @@ -17,7 +18,12 @@ const serverAdapter = new ExpressAdapter();
serverAdapter.setBasePath('/bull/queues');

createBullBoard({
queues: [new BullAdapter(downloadQueue), new BullAdapter(checkChaptersQueue), new BullAdapter(notificationQueue)],
queues: [
new BullAdapter(downloadQueue),
new BullAdapter(checkChaptersQueue),
new BullAdapter(notificationQueue),
new BullAdapter(updateMetadataQueue),
],
serverAdapter,
});

Expand Down
57 changes: 57 additions & 0 deletions src/server/queue/updateMetadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { Job, Queue, Worker } from 'bullmq';

import { getMangaPath, updateExistingMangaMetadata } from '../utils/mangal';

export interface IUpdateMetadataWorkerData {
libraryPath: string;
mangaTitle: string;
}

export const updateMetadataWorker = new Worker(
'updateMetadataQueue',
async (job: Job) => {
const { libraryPath, mangaTitle }: IUpdateMetadataWorkerData = job.data;
try {
await updateExistingMangaMetadata(libraryPath, mangaTitle);
await job.updateProgress(100);
} catch (err) {
await job.log(`${err}`);
throw err;
}
},
{
connection: {
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT || '6379', 10),
},
concurrency: 5,
},
);

export const updateMetadataQueue = new Queue('updateMetadataQueue', {
connection: {
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT || '6379', 10),
},
defaultJobOptions: {
removeOnComplete: true,
attempts: 10,
backoff: {
type: 'fixed',
delay: 1000 * 60 * 2,
},
},
});

export const scheduleUpdateMetadata = async (libraryPath: string, mangaTitle: string) => {
await updateMetadataQueue.add(
getMangaPath(libraryPath, mangaTitle),
{
libraryPath,
mangaTitle,
},
{
jobId: getMangaPath(libraryPath, mangaTitle),
},
);
};
Loading

0 comments on commit 43b2693

Please sign in to comment.