mirror of
https://github.com/danbulant/Mangades
synced 2026-07-06 19:40:54 +00:00
fix not all chapters being shown
This commit is contained in:
parent
798aa0ea66
commit
19596d0638
3 changed files with 63 additions and 34 deletions
|
|
@ -23,7 +23,6 @@
|
||||||
dispatch("select", e);
|
dispatch("select", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("ch", chapter);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<tr class="chapter item" on:mouseenter={mouseenter} on:click={click} class:selected={selected} style="background-image: linear-gradient(to right, rgba(0, 255, 0, 0.247) {progress * 100}%, transparent {progress * 100}%)">
|
<tr class="chapter item" on:mouseenter={mouseenter} on:click={click} class:selected={selected} style="background-image: linear-gradient(to right, rgba(0, 255, 0, 0.247) {progress * 100}%, transparent {progress * 100}%)">
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<script>
|
<script lang="ts">
|
||||||
import Chapter from "$lib/components/chapter.svelte";
|
import Chapter from "$lib/components/chapter.svelte";
|
||||||
import { EpubGenerator } from "$lib/util/generateEpub";
|
import { EpubGenerator } from "$lib/util/generateEpub";
|
||||||
import { CBZGenerator } from "$lib/util/generateCbz";
|
import { CBZGenerator } from "$lib/util/generateCbz";
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
import streamSaver from "streamsaver";
|
import streamSaver from "streamsaver";
|
||||||
import Navbar from "./navbar.svelte";
|
import Navbar from "./navbar.svelte";
|
||||||
import ExpandableDescription from "./expandableDescription.svelte";
|
import ExpandableDescription from "./expandableDescription.svelte";
|
||||||
|
import { tick } from "svelte";
|
||||||
|
|
||||||
export var data;
|
export var data;
|
||||||
|
|
||||||
|
|
@ -27,17 +28,39 @@
|
||||||
var title = manga.title.en || manga.title.jp || Object.values(manga.title)[0];
|
var title = manga.title.en || manga.title.jp || Object.values(manga.title)[0];
|
||||||
$: title = manga.title.en || manga.title.jp || Object.values(manga.title)[0];
|
$: title = manga.title.en || manga.title.jp || Object.values(manga.title)[0];
|
||||||
|
|
||||||
|
let cache: { id: string, data: any, total } | null = null;
|
||||||
async function getMangaChapters(id) {
|
async function getMangaChapters(id) {
|
||||||
const data = await request("manga/" + id + "/feed?limit=500&translatedLanguage[]=en&translatedLanguage[]=uk&includes[]=scanlation_group&contentRating[]=safe&contentRating[]=suggestive&contentRating[]=erotica&contentRating[]=pornographic");
|
if(cache?.id === id && cache.data.length >= cache.total) return cache;
|
||||||
console.log(data);
|
const params = new URLSearchParams();
|
||||||
data.data = data.data
|
params.append("limit", "500");
|
||||||
.filter(item => !item.attributes?.externalUrl)
|
params.append("translatedLanguage[]", "en");
|
||||||
.sort((a, b) => a.attributes.chapter - b.attributes.chapter);
|
params.append("translatedLanguage[]", "uk");
|
||||||
return data;
|
params.append("includes[]", "scanlation_group");
|
||||||
|
params.append("contentRating[]", "safe");
|
||||||
|
params.append("contentRating[]", "suggestive");
|
||||||
|
params.append("contentRating[]", "erotica");
|
||||||
|
params.append("contentRating[]", "pornographic");
|
||||||
|
params.append("order[chapter]", "asc");
|
||||||
|
params.append("offset", cache?.id === id && cache?.data.length.toString() || 0);
|
||||||
|
const data = await request("manga/" + id + "/feed?" + params.toString());
|
||||||
|
if(!cache || cache.id !== id) cache = { id, data: [], total: 0 };
|
||||||
|
cache.total = data.total;
|
||||||
|
cache.data = cache.data.concat(data.data);
|
||||||
|
return cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
var chapters;
|
||||||
|
var loadingChapters = false;
|
||||||
|
$: if(chapters?.id !== mangaId && !loadingChapters) {
|
||||||
|
loadingChapters = true;
|
||||||
|
getMangaChapters(mangaId).then(async data => {
|
||||||
|
chapters = data;
|
||||||
|
await tick();
|
||||||
|
swiper.slideToClosest();
|
||||||
|
loadingChapters = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var chapters;
|
|
||||||
$: chapters = getMangaChapters(mangaId);
|
|
||||||
|
|
||||||
console.log("manga", manga);
|
console.log("manga", manga);
|
||||||
console.log("chapters", chapters);
|
console.log("chapters", chapters);
|
||||||
|
|
@ -209,19 +232,16 @@
|
||||||
var copyrightOpen = false;
|
var copyrightOpen = false;
|
||||||
|
|
||||||
function selectAll() {
|
function selectAll() {
|
||||||
chapters.then(res => {
|
if(arraysEqual(selected, chapters)) {
|
||||||
var chapters = res.data;
|
selected = [];
|
||||||
if(arraysEqual(selected, chapters)) {
|
} else {
|
||||||
selected = [];
|
selected = chapters.slice();
|
||||||
} else {
|
}
|
||||||
selected = chapters.slice();
|
if(selected.length) {
|
||||||
}
|
text = `Selected ${selected.length} chapters`;
|
||||||
if(selected.length) {
|
} else {
|
||||||
text = `Selected ${selected.length} chapters`;
|
text = defaultText;
|
||||||
} else {
|
}
|
||||||
text = defaultText;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function anilistInfo(id) {
|
function anilistInfo(id) {
|
||||||
|
|
@ -263,8 +283,6 @@
|
||||||
if(swiper && tabs.indexOf(selectedTab) !== swiper.realIndex) swiper.slideTo(tabs.indexOf(selectedTab));
|
if(swiper && tabs.indexOf(selectedTab) !== swiper.realIndex) swiper.slideTo(tabs.indexOf(selectedTab));
|
||||||
}
|
}
|
||||||
|
|
||||||
$: typeof window !== "undefined" && chapters && chapters.then(() => swiper.slideToClosest())
|
|
||||||
|
|
||||||
let swiper;
|
let swiper;
|
||||||
function swiperInit(e) {
|
function swiperInit(e) {
|
||||||
swiper = e.detail[0];
|
swiper = e.detail[0];
|
||||||
|
|
@ -292,7 +310,7 @@
|
||||||
var smallScreenMode = width < 700;
|
var smallScreenMode = width < 700;
|
||||||
$: smallScreenMode = width < 700;
|
$: smallScreenMode = width < 700;
|
||||||
|
|
||||||
var scrollY, innerHeight;
|
var scrollY, innerHeight, offsetHeight;
|
||||||
|
|
||||||
let additionalImages = [];
|
let additionalImages = [];
|
||||||
|
|
||||||
|
|
@ -306,9 +324,24 @@
|
||||||
additionalImages = additionalImages;
|
additionalImages = additionalImages;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$: if(chapters) console.log("ch", chapters, chapters.data.length, chapters.total, chapters.data.length < chapters.total);
|
||||||
|
|
||||||
|
let loadingNextPage = false;
|
||||||
|
async function loadNextPage() {
|
||||||
|
if(loadingNextPage) return;
|
||||||
|
console.log("Loading next page");
|
||||||
|
loadingNextPage = true;
|
||||||
|
chapters = await getMangaChapters(mangaId);
|
||||||
|
await tick();
|
||||||
|
loadingNextPage = false;
|
||||||
|
swiper.slideToClosest();
|
||||||
|
}
|
||||||
|
|
||||||
|
$: if(!loadingNextPage && chapters && chapters.data.length < chapters.total && scrollY > 300 && scrollY > document.body.scrollHeight * 0.8) loadNextPage();
|
||||||
</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 />
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>{title} - Chapter list</title>
|
<title>{title} - Chapter list</title>
|
||||||
|
|
@ -437,9 +470,9 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{#await chapters}
|
{#if !chapters}
|
||||||
Loading chapters...
|
Loading chapters...
|
||||||
{:then chapters}
|
{:else}
|
||||||
{#if chapters.data.length === 0}
|
{#if chapters.data.length === 0}
|
||||||
<p>No chapters found.</p>
|
<p>No chapters found.</p>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
@ -450,7 +483,7 @@
|
||||||
{/each}
|
{/each}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{/await}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</SwiperSlide>
|
</SwiperSlide>
|
||||||
<SwiperSlide>
|
<SwiperSlide>
|
||||||
|
|
@ -537,6 +570,7 @@
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: rgb(64,64,64);
|
background-color: rgb(64,64,64);
|
||||||
user-select: all;
|
user-select: all;
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
<script lang="ts">
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
Loading…
Reference in a new issue