handle manga page numbers

This commit is contained in:
Aria Moradi 2021-01-19 15:07:20 +03:30
parent fade116a02
commit 32a9321b8a
5 changed files with 17 additions and 14 deletions

View File

@ -62,13 +62,15 @@ class Main {
ctx.json(getSourceList()) ctx.json(getSourceList())
} }
app.get("/api/v1/source/:source_id/popular") { ctx -> app.get("/api/v1/source/:source_id/popular/:pageNum") { ctx ->
val sourceId = ctx.pathParam("source_id") val sourceId = ctx.pathParam("source_id")
ctx.json(getPopularManga(sourceId)) val pageNum = ctx.pathParam("pageNum").toInt()
ctx.json(getPopularManga(sourceId,pageNum))
} }
app.get("/api/v1/source/:source_id/latest") { ctx -> app.get("/api/v1/source/:source_id/latest/:pageNum") { ctx ->
val sourceId = ctx.pathParam("source_id") val sourceId = ctx.pathParam("source_id")
ctx.json(getLatestManga(sourceId)) val pageNum = ctx.pathParam("pageNum").toInt()
ctx.json(getLatestManga(sourceId,pageNum))
} }
} }

View File

@ -3,8 +3,8 @@ package ir.armor.tachidesk.util
import ir.armor.tachidesk.database.dataclass.MangaDataClass import ir.armor.tachidesk.database.dataclass.MangaDataClass
import ir.armor.tachidesk.database.table.MangaStatus import ir.armor.tachidesk.database.table.MangaStatus
fun getPopularManga(sourceId: String): List<MangaDataClass> { fun getPopularManga(sourceId: String, pageNum: Int = 1): List<MangaDataClass> {
val manguasPage = getHttpSource(sourceId.toLong()).fetchPopularManga(1).toBlocking().first() val manguasPage = getHttpSource(sourceId.toLong()).fetchPopularManga(pageNum).toBlocking().first()
return manguasPage.mangas.map { return manguasPage.mangas.map {
MangaDataClass( MangaDataClass(
sourceId.toLong(), sourceId.toLong(),
@ -24,8 +24,8 @@ fun getPopularManga(sourceId: String): List<MangaDataClass> {
} }
} }
fun getLatestManga(sourceId: String): List<MangaDataClass> { fun getLatestManga(sourceId: String, pageNum: Int = 1): List<MangaDataClass> {
val manguasPage = getHttpSource(sourceId.toLong()).fetchLatestUpdates(1).toBlocking().first() val manguasPage = getHttpSource(sourceId.toLong()).fetchLatestUpdates(pageNum).toBlocking().first()
return manguasPage.mangas.map { return manguasPage.mangas.map {
MangaDataClass( MangaDataClass(
sourceId.toLong(), sourceId.toLong(),

View File

@ -6,7 +6,7 @@ import NavBar from './components/NavBar';
import Home from './screens/Home'; import Home from './screens/Home';
import Sources from './screens/Sources'; import Sources from './screens/Sources';
import Extensions from './screens/Extensions'; import Extensions from './screens/Extensions';
import MangaList from './screens/PopularManga'; import MangaList from './screens/MangaList';
export default function App() { export default function App() {
return ( return (
@ -17,10 +17,10 @@ export default function App() {
<Route path="/extensions"> <Route path="/extensions">
<Extensions /> <Extensions />
</Route> </Route>
<Route path="/sources/:sourceId/popular"> <Route path="/sources/:sourceId/popular/">
<MangaList popular /> <MangaList popular />
</Route> </Route>
<Route path="/sources/:sourceId/latest"> <Route path="/sources/:sourceId/latest/">
<MangaList popular={false} /> <MangaList popular={false} />
</Route> </Route>
<Route path="/sources"> <Route path="/sources">

View File

@ -65,8 +65,8 @@ export default function SourceCard(props: IProps) {
</div> </div>
</div> </div>
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>
{supportsLatest && <Button variant="outlined" style={{ marginLeft: 20 }} onClick={() => { window.location.href = `sources/${id}/latest`; }}>Latest</Button>} {supportsLatest && <Button variant="outlined" style={{ marginLeft: 20 }} onClick={() => { window.location.href = `sources/${id}/latest/`; }}>Latest</Button>}
<Button variant="outlined" style={{ marginLeft: 20 }} onClick={() => { window.location.href = `sources/${id}/popular`; }}>Browse</Button> <Button variant="outlined" style={{ marginLeft: 20 }} onClick={() => { window.location.href = `sources/${id}/popular/`; }}>Browse</Button>
</div> </div>
</CardContent> </CardContent>
</Card> </Card>

View File

@ -11,10 +11,11 @@ export default function MangaList(props: { popular: boolean }) {
const { sourceId } = useParams<{sourceId: string}>(); const { sourceId } = useParams<{sourceId: string}>();
let mapped; let mapped;
const [mangas, setMangas] = useState<IManga[]>([]); const [mangas, setMangas] = useState<IManga[]>([]);
const [lastPageNum] = useState<number>(1);
useEffect(() => { useEffect(() => {
const sourceType = props.popular ? 'popular' : 'latest'; const sourceType = props.popular ? 'popular' : 'latest';
fetch(`http://127.0.0.1:4567/api/v1/source/${sourceId}/${sourceType}`) fetch(`http://127.0.0.1:4567/api/v1/source/${sourceId}/${sourceType}/${lastPageNum}`)
.then((response) => response.json()) .then((response) => response.json())
.then((data: { title: string, thumbnail_url: string }[]) => setMangas( .then((data: { title: string, thumbnail_url: string }[]) => setMangas(
data.map((it) => ({ title: it.title, thumbnailUrl: it.thumbnail_url })), data.map((it) => ({ title: it.title, thumbnailUrl: it.thumbnail_url })),