mirror of
https://github.com/danbulant/Mangades
synced 2026-07-05 02:50:34 +00:00
add sort
This commit is contained in:
parent
020bd06203
commit
f6dccfcafb
1 changed files with 58 additions and 31 deletions
|
|
@ -35,6 +35,12 @@
|
||||||
Epub = "epub",
|
Epub = "epub",
|
||||||
Cbz = "cbz"
|
Cbz = "cbz"
|
||||||
}
|
}
|
||||||
|
enum ChapterOrder {
|
||||||
|
Asc = "asc",
|
||||||
|
Desc = "desc"
|
||||||
|
}
|
||||||
|
|
||||||
|
let order = ChapterOrder.Desc;
|
||||||
|
|
||||||
export var data;
|
export var data;
|
||||||
|
|
||||||
|
|
@ -53,9 +59,11 @@
|
||||||
let anilistData;
|
let anilistData;
|
||||||
$: anilistData = manga.links && manga.links.al && anilistInfo(manga.links.al);
|
$: anilistData = manga.links && manga.links.al && anilistInfo(manga.links.al);
|
||||||
|
|
||||||
let cache: { id: string, data: any, total } | null = null;
|
let cache: { id: string, data: any, languages, total, order: ChapterOrder } | null = null;
|
||||||
async function getMangaChapters(id, languages) {
|
async function getMangaChapters(id, languages: string[], order: ChapterOrder) {
|
||||||
if(cache?.id === id && cache.data.length >= cache.total) return cache;
|
console.log("Getting chapters", id, languages, order);
|
||||||
|
if(cache?.id === id && cache.data.length >= cache.total && cache.order == order && arraysEqual(cache.languages, languages)) return cache;
|
||||||
|
loadingChapters = true
|
||||||
const params = new URLSearchParams();
|
const params = new URLSearchParams();
|
||||||
params.append("limit", "500");
|
params.append("limit", "500");
|
||||||
for(let lang of languages)
|
for(let lang of languages)
|
||||||
|
|
@ -65,27 +73,28 @@
|
||||||
params.append("contentRating[]", "suggestive");
|
params.append("contentRating[]", "suggestive");
|
||||||
params.append("contentRating[]", "erotica");
|
params.append("contentRating[]", "erotica");
|
||||||
params.append("contentRating[]", "pornographic");
|
params.append("contentRating[]", "pornographic");
|
||||||
params.append("order[chapter]", "asc");
|
params.append("order[chapter]", order);
|
||||||
params.append("offset", cache?.id === id && cache?.data.length.toString() || 0);
|
params.append("offset", (cache?.id === id && cache.order === order && arraysEqual(cache.languages, languages)) && cache?.data.length.toString() || 0);
|
||||||
const data = await request("manga/" + id + "/feed?" + params.toString());
|
const data = await request("manga/" + id + "/feed?" + params.toString());
|
||||||
if(!cache || cache.id !== id) cache = { id, data: [], total: 0 };
|
if(!cache || cache.id !== id || cache.order !== order || arraysEqual(cache.languages, languages)) cache = { id, data: [], total: 0, languages: languages.slice(), order };
|
||||||
cache.total = data.total;
|
cache.total = data.total;
|
||||||
cache.data = cache.data.concat(data.data);
|
cache.data = cache.data.concat(data.data);
|
||||||
return cache;
|
cache.languages = languages.slice();
|
||||||
|
cache.order = order;
|
||||||
|
loadingChapters = false;
|
||||||
|
return chapters = cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
var chapters;
|
var chapters;
|
||||||
var loadingChapters = false;
|
var loadingChapters = false;
|
||||||
$: if(chapters?.id !== mangaId && !loadingChapters) {
|
$: if(!loadingChapters) {
|
||||||
loadingChapters = true;
|
getMangaChapters(mangaId, languages, order).then(async () => {
|
||||||
getMangaChapters(mangaId, languages).then(async data => {
|
|
||||||
chapters = data;
|
|
||||||
await tick();
|
await tick();
|
||||||
swiper.slideToClosest();
|
swiper.slideToClosest();
|
||||||
loadingChapters = false;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$: console.log(loadingChapters, chapters)
|
||||||
|
|
||||||
console.log("manga", manga);
|
console.log("manga", manga);
|
||||||
console.log("chapters", chapters);
|
console.log("chapters", chapters);
|
||||||
|
|
@ -254,13 +263,17 @@
|
||||||
break;
|
break;
|
||||||
case CoverArt.AutoVolume:
|
case CoverArt.AutoVolume:
|
||||||
let art = await list;
|
let art = await list;
|
||||||
items = files.map(file => {
|
items = await Promise.all(files.map(async file => {
|
||||||
|
let cover = coverForVolumeFromArt(file[0].attributes.volume, art);
|
||||||
|
if(!cover) {
|
||||||
|
cover = imageproxy + (await getURLs(file[0])).urls[0];
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
title: `${title} - ${getNameOf(file)}.${format}`,
|
title: `${title} - ${getNameOf(file)}.${format}`,
|
||||||
chapters: file.map(chapter => `${chapter.attributes.chapter}`),
|
chapters: file.map(chapter => `${chapter.attributes.chapter}`),
|
||||||
cover: coverForVolumeFromArt(file[0].attributes.volume, art),
|
cover,
|
||||||
};
|
};
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
|
|
@ -392,7 +405,7 @@
|
||||||
if(loadingNextPage) return;
|
if(loadingNextPage) return;
|
||||||
console.log("Loading next page");
|
console.log("Loading next page");
|
||||||
loadingNextPage = true;
|
loadingNextPage = true;
|
||||||
chapters = await getMangaChapters(mangaId, languages);
|
chapters = await getMangaChapters(mangaId, languages, order);
|
||||||
await tick();
|
await tick();
|
||||||
loadingNextPage = false;
|
loadingNextPage = false;
|
||||||
swiper.slideToClosest();
|
swiper.slideToClosest();
|
||||||
|
|
@ -434,6 +447,10 @@
|
||||||
|
|
||||||
let coverArt: CoverArt = CoverArt.FirstPage;
|
let coverArt: CoverArt = CoverArt.FirstPage;
|
||||||
let group: Group = Group.Single;
|
let group: Group = Group.Single;
|
||||||
|
|
||||||
|
let downloadPreview = false;
|
||||||
|
|
||||||
|
$: console.log("order", order)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:window on:beforeunload={beforeUnload} bind:innerWidth={width} bind:scrollY bind:innerHeight />
|
<svelte:window on:beforeunload={beforeUnload} bind:innerWidth={width} bind:scrollY bind:innerHeight />
|
||||||
|
|
@ -602,7 +619,10 @@
|
||||||
{text}
|
{text}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="download-btn" disabled={!selected.length} on:click={downloadMulti}>Download</button>
|
<div>
|
||||||
|
<button class="download-btn" disabled={!selected.length} on:click={downloadMulti}>Download</button>
|
||||||
|
<button disabled={!selected.length && !downloadPreview} on:click={() => downloadPreview = !downloadPreview}>{downloadPreview ? "Hide" : "Show"} preview</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="options">
|
<div class="options">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|
@ -653,15 +673,17 @@
|
||||||
</div>
|
</div>
|
||||||
<p class="note">Splitting into multiple files may require browser permission.</p>
|
<p class="note">Splitting into multiple files may require browser permission.</p>
|
||||||
|
|
||||||
<h3>Preview</h3>
|
{#if downloadPreview}
|
||||||
|
<h3>Preview</h3>
|
||||||
|
|
||||||
<ShowTypeChooser />
|
<ShowTypeChooser />
|
||||||
|
|
||||||
{#await previewItems(selected, group, coverArt, format)}
|
{#await previewItems(selected, group, coverArt, format)}
|
||||||
<div>Loading preview...</div>
|
<div>Loading preview...</div>
|
||||||
{:then items}
|
{:then items}
|
||||||
<FileItems chapters={items} />
|
<FileItems chapters={items} />
|
||||||
{/await}
|
{/await}
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
|
|
@ -670,13 +692,18 @@
|
||||||
Do not close the tab when a download is in progress.
|
Do not close the tab when a download is in progress.
|
||||||
</b>
|
</b>
|
||||||
</p>
|
</p>
|
||||||
<button on:click={selectAll}>
|
<div>
|
||||||
{#if chapters && chapters.data.length && arraysEqual(selected, chapters.data)}
|
<button on:click={() => order = order == ChapterOrder.Asc ? ChapterOrder.Desc : ChapterOrder.Asc}>
|
||||||
Deselect all
|
{order === ChapterOrder.Desc ? "Newest first" : "Oldest first"}
|
||||||
{:else}
|
</button>
|
||||||
Select all
|
<button on:click={selectAll}>
|
||||||
{/if}
|
{#if chapters && chapters.data.length && arraysEqual(selected, chapters.data)}
|
||||||
</button>
|
Deselect all
|
||||||
|
{:else}
|
||||||
|
Select all
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#if !chapters}
|
{#if !chapters}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue