Dev section
parent
de8b06f54c
commit
52d0a46c70
@ -1,31 +0,0 @@
|
||||
---
|
||||
title: Contribute
|
||||
description: Find out how to help translate or build the app and parsers.
|
||||
lastUpdated: false
|
||||
editLink: false
|
||||
prev: false
|
||||
next: false
|
||||
---
|
||||
|
||||
# Contribute
|
||||
Find out how to help translate or build the app and parsers.
|
||||
|
||||
## Code
|
||||
Know how to code and want to improve something or you generally want to support the creation of the app?
|
||||
|
||||
[](https://github.com/KotatsuApp/Kotatsu)
|
||||
|
||||
[](https://github.com/KotatsuApp/kotatsu-parsers)
|
||||
|
||||
[](https://github.com/KotatsuApp/website)
|
||||
|
||||
## Translation
|
||||

|
||||
|
||||
Want to help translate the app to your language? You can easily help by utilizing a service we use called **Weblate**.
|
||||
|
||||
### Helpful links
|
||||
* [Translators guide](https://docs.weblate.org/en/latest/user/translating.html)
|
||||
* [Secondary languages](https://docs.weblate.org/en/latest/user/profile.html#secondary-languages)
|
||||
* [Subscriptions](https://docs.weblate.org/en/latest/user/profile.html#subscriptions)
|
||||
* [Glossary](https://docs.weblate.org/en/latest/user/translating.html#glossary)
|
||||
@ -0,0 +1,110 @@
|
||||
---
|
||||
title: Contribute
|
||||
description: Find out how to help translate or build the app and parsers.
|
||||
---
|
||||
|
||||
# Contribute
|
||||
Find out how to help translate or build the app and parsers.
|
||||
|
||||
## App contribution guidelines
|
||||
- If you want to fix bug or implement a new feature, that already mention in the [issues](https://github.com/KotatsuApp/Kotatsu/issues), please, assign this issue to you and/or comment about it.
|
||||
- Whether you have to implement new feature, please, open an issue or discussion regarding it to ensure it will be accepted.
|
||||
- Translations have to be managed using the [Weblate](https://hosted.weblate.org/engage/kotatsu/) platform.
|
||||
- In case you want to add a new manga source, refer to the [parsers repository](https://github.com/KotatsuApp/kotatsu-parsers).
|
||||
|
||||
Refactoring or some dev-faces improvements are also might be accepted, however please stick to the following principles:
|
||||
- Performance matters. In the case of choosing between source code beauty and performance, performance should be a priority.
|
||||
- Please, do not modify readme and other information files (except for typos).
|
||||
- Avoid adding new dependencies unless required. APK size is important.
|
||||
|
||||
## Parsers contribution guidelines
|
||||
The following is guide for creating a Kotatsu parsers. Thanks for taking the time to contribute!
|
||||
|
||||
### Prerequisites
|
||||
Before you start, please note that the ability to use following technologies is **required**.
|
||||
|
||||
- Basic [Android development](https://developer.android.com/)
|
||||
- [Kotlin](https://kotlinlang.org/)
|
||||
- Web scraping ([JSoup](https://jsoup.org/)) or JSON API
|
||||
|
||||
#### Tools
|
||||
|
||||
- [Android Studio](https://developer.android.com/studio)
|
||||
- [IntelliJ IDEA](https://www.jetbrains.com/idea/) (Community edition is enough)
|
||||
- Android device (or emulator)
|
||||
|
||||
Kotatsu parsers is not a part of Android application, but you can easily develop and test it directly inside an Android
|
||||
application project and relocate it to the library project when done.
|
||||
|
||||
#### Before you start
|
||||
|
||||
First, take a look at `kotatsu-parsers` project structure. Each parser is a single class that
|
||||
extends `MangaParser` class and have a `MangaSourceParser` annotation.
|
||||
Also pay attention on extensions in `util` package. For example, extensions from `Jsoup` file
|
||||
should be used instead of existing JSoup functions because they have better nullability support
|
||||
and improved error messages.
|
||||
|
||||
### Writing your parser
|
||||
|
||||
So, you want to create a parser, that will provide access to manga from a website.
|
||||
First, you should explore a website for API availability.
|
||||
If it does not contain any documentation about
|
||||
API, [explore network requests](https://firefox-source-docs.mozilla.org/devtools-user/):
|
||||
some websites use ajax.
|
||||
|
||||
- [Example](https://github.com/KotatsuApp/kotatsu-parsers/blob/master/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/DesuMeParser.kt)
|
||||
of Json API usage.
|
||||
- [Example](https://github.com/KotatsuApp/kotatsu-parsers/blob/master/src/main/kotlin/org/koitharu/kotatsu/parsers/site/be/AnibelParser.kt)
|
||||
of GraphQL API usage
|
||||
- [Example](https://github.com/KotatsuApp/kotatsu-parsers/blob/master/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/MangaTownParser.kt)
|
||||
of pure HTML parsing.
|
||||
|
||||
If website is based on some engine it is rationally to use common base class for this one (for example, Madara wordress
|
||||
theme
|
||||
and the `MadaraParser` class)
|
||||
|
||||
#### Parser class skeleton
|
||||
|
||||
Parser class must have exactly one primary constructor parameter of type `MangaLoaderContext` and have an
|
||||
`MangaSourceParser` annotation that provides internal name, title and language of a manga source.
|
||||
|
||||
All functions in `MangaParser` class are documented. Pay attention to some peculiarities:
|
||||
|
||||
- Never hardcode domain. Specify default domain in `configKeyDomain` field and obtain an actual one using `getDomain()`.
|
||||
- All ids must be unique and domain-independent. Use `generateUid` functions with relative url or some internal id which
|
||||
is unique across the manga source.
|
||||
- `sortOrders` set should not be empty. If your source is not support sorting, specify one most relevance value.
|
||||
- If you cannot obtain direct links to pages images inside `getPages` method, it is ok to use an intermediate url
|
||||
as `Page.url` and fetch a direct link at `getPageUrl` function.
|
||||
- You can use _asserts_ to check some optional fields. For example. `Manga.author` field is not required, but if your
|
||||
source provide such information, add `assert(it != null)`. This will not have any effect on production but help to
|
||||
find issues during unit testing.
|
||||
- If your source website (or it's api) uses pages for pagination instead of offset you should extend `PagedMangaParser`
|
||||
instead of `MangaParser`.
|
||||
- Your parser may also implement the `Interceptor` interface for additional manipulation of all network requests and/or
|
||||
responses, including image loading.
|
||||
|
||||
### Development process
|
||||
|
||||
During the development it is recommended (but not necessary) to write it directly
|
||||
in the Kotatsu android application project. You can use `core.parser.DummyParser` class as a sandbox. `Dummy` manga
|
||||
source is available in debug Kotatsu build.
|
||||
|
||||
Once parser is ready you can relocate your code into `kotatsu-parsers` library project in a `site` package and create a
|
||||
Pull Request.
|
||||
|
||||
#### Testing
|
||||
|
||||
It is recommended to run unit tests before submitting a PR.
|
||||
|
||||
- Temporary modify the `MangaSources` annotation class: specify your parser(s) name(s) and change mode to `EnumSource.Mode.INCLUDE`
|
||||
- Run the `MangaParserTest`
|
||||
```bash
|
||||
gradlew :test --tests "org.koitharu.kotatsu.parsers.MangaParserTest"
|
||||
```
|
||||
- Optionally, you can run the `generateTestsReport` gradle task to get a pretty readable html report from test results.
|
||||
|
||||
### Help
|
||||
|
||||
If you need a help or have some questions, ask a community in our [Telegram chat](https://t.me/kotatsuapp)
|
||||
or [Discord server](https://discord.gg/NNJ5RgVBC5).
|
||||
@ -0,0 +1,59 @@
|
||||
---
|
||||
title: Parsers library
|
||||
description: Instructions for using the Kotatsu parser library.
|
||||
---
|
||||
|
||||
# Kotatsu parsers
|
||||
This library provides manga sources.
|
||||
|
||||
## Usage
|
||||
Add it to your root `build.gradle` at the end of repositories:
|
||||
|
||||
```groovy{4}
|
||||
allprojects {
|
||||
repositories {
|
||||
...
|
||||
maven { url 'https://jitpack.io' } // [!code focus]
|
||||
}
|
||||
}
|
||||
```
|
||||
Add the dependency
|
||||
|
||||
:::tip For Java/Kotlin project:
|
||||
```groovy
|
||||
dependencies {
|
||||
implementation("com.github.KotatsuApp:kotatsu-parsers:$parsers_version")
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
:::tip For Android project:
|
||||
```groovy
|
||||
dependencies {
|
||||
implementation("com.github.KotatsuApp:kotatsu-parsers:$parsers_version") {
|
||||
exclude group: 'org.json', module: 'json'
|
||||
}
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
Versions are available on [JitPack](https://jitpack.io/#KotatsuApp/kotatsu-parsers)
|
||||
|
||||
:::tip Usage in code
|
||||
```kotlin
|
||||
val parser = mangaLoaderContext.newParserInstance(MangaSource.MANGADEX)
|
||||
```
|
||||
:::
|
||||
|
||||
`mangaLoaderContext` is an implementation of the `MangaLoaderContext` class.
|
||||
|
||||
See examples
|
||||
of [Android](https://github.com/KotatsuApp/Kotatsu/blob/devel/app/src/main/java/org/koitharu/kotatsu/core/parser/MangaLoaderContextImpl.kt)
|
||||
and [Non-Android](https://github.com/KotatsuApp/kotatsu-dl/blob/master/src/main/kotlin/org/koitharu/kotatsu_dl/env/MangaLoaderContextImpl.kt) implementation.
|
||||
|
||||
Note that the `MangaSource.LOCAL` and `MangaSource.DUMMY` parsers cannot be instantiated.
|
||||
|
||||
## DMCA disclaimer
|
||||
|
||||
The developers of this application have no affiliation with the content available in the app. It is collected from
|
||||
sources freely available through any web browser.
|
||||
@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Synchronization server
|
||||
description: Instructions for installing the synchronization server.
|
||||
---
|
||||
|
||||
# Synchronization server
|
||||
Instructions for installing the synchronization server.
|
||||
|
||||
## Installation
|
||||
|
||||
### Docker
|
||||
Build image container:
|
||||
|
||||
```bash
|
||||
docker build github.com/KotatsuApp/kotatsu-syncserver.git -t kotatsuapp/syncserver
|
||||
```
|
||||
|
||||
Run container:
|
||||
|
||||
```bash
|
||||
docker run -d -p 8081:8080 \
|
||||
-e DATABASE_HOST=your_db_host \
|
||||
-e DATABASE_USER=your_db_user \
|
||||
-e DATABASE_PASSWORD=your_db_password \
|
||||
-e DATABASE_NAME=your_db_name \
|
||||
-e DATABASE_PORT=your_db_port \
|
||||
-e JWT_SECRET=your_secret \
|
||||
--restart always \
|
||||
--name kotatsu-sync kotatsuapp/syncserver
|
||||
```
|
||||
|
||||
### Systemd
|
||||
Requirements:
|
||||
- JDK 11+
|
||||
- Gradle 7.0+
|
||||
|
||||
Commands:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/KotatsuApp/kotatsu-syncserver.git
|
||||
cd kotatsu-syncserver && ./gradlew shadowJar
|
||||
```
|
||||
|
||||
Then edit file `kotatsu-sync.service`, change `replaceme` fields with your values and specify the `kotatsu-syncserver-0.0.1.jar` file location (it can be found in `build/libs` directory after buliding)
|
||||
|
||||
```bash
|
||||
cp kotatsu-sync.service /etc/systemd/system
|
||||
systemctl enable kotatsu-sync
|
||||
systemctl daemon-reload
|
||||
systemctl start kotatsu-sync
|
||||
```
|
||||
|
||||
For any questions, please, contact us in [Telegram group](https://t.me/kotatsuapp) or write an issue, thanks.
|
||||
@ -1,4 +1,39 @@
|
||||
---
|
||||
title: Synchronization
|
||||
description: Allows you to continue reading on your device from where you left off on another device.
|
||||
---
|
||||
---
|
||||
|
||||
# Synchronization
|
||||
Allows you to continue reading on your device from where you left off on another device.
|
||||
|
||||
List of official servers:
|
||||
|
||||
| Domain | IP:Port | Location |
|
||||
| ---------------- | ------------------ | ---------------- |
|
||||
| sync.kotatsu.app | 86.57.183.214:8081 | Belarus |
|
||||
| - | 86.57.183.214:1337 | Belarus (Mirror) |
|
||||
|
||||
## What is synchronization?
|
||||
Synchronization is needed to store your collection of favorites, history and categories and have remote access to them. On a synchronized device, you can restore your manga collection in real time without loss. It also supports working across multiple devices. It is convenient for those who use several devices.
|
||||
|
||||
## How does synchronization work?
|
||||
- An account is created and configured in the application where it will store data;
|
||||
- Synchronization starts. The data selected by the user is saved on the service and stored there under protection;
|
||||
- Another device connects and syncs with the service;
|
||||
- The uploaded data appears on the device connected to the account.
|
||||
|
||||
## What data can be synchronized?
|
||||
- Favorites (with categories);
|
||||
- History.
|
||||
|
||||
## How do I sync my data?
|
||||
Go to <nav to='services'>, then select **Synchronization**. Enter your email address (even if you have not registered in the synchronization system, the authorization screen also acts as a registration screen), then come up with and enter a password.
|
||||
|
||||
:::warning Attention
|
||||
There is no password recovery from the account at the moment, if you forget the password, you will not be able to log into your account on other devices, so we recommend that you do not forget the password or write it down somewhere.
|
||||
:::
|
||||
|
||||
After the authorization/registration process, you will return back to the **Content** screen. To set up synchronization, select **Synchronization** again, and then you will go to system sync settings. Choose what you want to sync, history, favorites or all together, after which automatic synchronization to our server will begin.
|
||||
|
||||
## Can I use a synchronization server on my hosting?
|
||||
Yes, you can use your synchronization server in the application by specifying its address (<nav to='server_address'>). Instructions for deploying the server are [here](/dev/sync-server/).
|
||||
Loading…
Reference in New Issue