mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-26 19:17:51 +02:00
Compare commits
33 Commits
Author | SHA1 | Date | |
---|---|---|---|
0db4fcc27e | |||
f3080b6277 | |||
69cbbd5811 | |||
0b85760939 | |||
03f3a4805f | |||
d95adf2631 | |||
e971d40e06 | |||
c65a01a5f0 | |||
8586014e17 | |||
bdfae4ba04 | |||
75cb94b51a | |||
2f6d163a7a | |||
ecfe72bcad | |||
e6ff9e18cc | |||
3c550c1781 | |||
537693f5cf | |||
5ae0589547 | |||
71fc6fc257 | |||
c0d7b16ee6 | |||
f3f7aa9e1d | |||
43355970db | |||
bfa386acba | |||
e8b432485d | |||
a12a34e3bb | |||
b79855c01d | |||
17fe501a6d | |||
8201b367ec | |||
6c242084ca | |||
aefe7b176a | |||
6059b85e58 | |||
aa46c52eee | |||
d3cbfbdb59 | |||
cc9b77b876 |
29
.github/CONTRIBUTING.md
vendored
29
.github/CONTRIBUTING.md
vendored
@ -1,6 +1,17 @@
|
||||
1. **Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened [issues](https://github.com/inorichi/tachiyomi/issues).**
|
||||
2. If you are unsure, ask here: [](https://discord.gg/WrBkRk4)
|
||||
3. What is your type of issue?
|
||||
* [Catalogue request](#catalogue-requests)
|
||||
* [Bugs](#bugs)
|
||||
* [Feature requests](#feature-requests)
|
||||
* [Translations](https://github.com/inorichi/tachiyomi/wiki/Translation)
|
||||
4. After following 1. and 3. you can [open your issue](https://github.com/inorichi/tachiyomi/issues/new)
|
||||
|
||||
***
|
||||
|
||||
# Catalogue requests
|
||||
|
||||
* Catalogue requests should be created at https://github.com/inorichi/tachiyomi-extensions/issues, not here
|
||||
* Catalogue requests should be created at https://github.com/inorichi/tachiyomi-extensions#readme, not here
|
||||
|
||||
# Bugs
|
||||
* Include version (Setting > About > Version)
|
||||
@ -8,17 +19,9 @@
|
||||
* Dev version is equal to the number of commits as seen in the main page
|
||||
* Include steps to reproduce (if not obvious from description)
|
||||
* Include screenshot (if needed)
|
||||
* If it could be device-dependent, try reproducing on another device (if possible), include results and device names, OS, modifications (root, Xposed)
|
||||
* **Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened [issues](https://github.com/inorichi/tachiyomi/issues).**
|
||||
* If it could be device-dependent, try reproducing on another device (if possible)
|
||||
* For large logs use http://pastebin.com/ (or similar)
|
||||
* For multipart issues **use list** like this:
|
||||
* [x] Done
|
||||
* [ ] Not done
|
||||
```
|
||||
* [x] Done
|
||||
* [ ] Not done
|
||||
```
|
||||
* Don't put together too many unrelated requests into one issue
|
||||
* Don't group unrelated requests into one issue
|
||||
|
||||
DO: https://github.com/inorichi/tachiyomi/issues/24 https://github.com/inorichi/tachiyomi/issues/71
|
||||
|
||||
@ -28,7 +31,3 @@ DON'T: https://github.com/inorichi/tachiyomi/issues/75
|
||||
|
||||
* Write a detailed issue, explaning what it should do or how. Avoid writing just "like X app does"
|
||||
* Include screenshot (if needed)
|
||||
|
||||
# Translations
|
||||
|
||||
[Wiki](https://github.com/inorichi/tachiyomi/wiki/Translation)
|
||||
|
6
.github/ISSUE_TEMPLATE.md
vendored
6
.github/ISSUE_TEMPLATE.md
vendored
@ -1,7 +1 @@
|
||||
**Please read https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md before posting**
|
||||
|
||||
Remove line above and describe your issue here. Fill out version below. Use Preview.
|
||||
|
||||
|
||||
Version: r000 or v0.0.0
|
||||
(other relevant info like OS)
|
||||
|
11
README.md
11
README.md
@ -1,10 +1,11 @@
|
||||
| Build | Download | F-Droid |
|
||||
|-------|----------|-------------|
|
||||
| [](https://teamcity.kanade.eu/project.html?projectId=tachiyomi) [](https://travis-ci.org/inorichi/tachiyomi) | [](https://github.com/inorichi/tachiyomi/releases) [](http://tachiyomi.kanade.eu/latest/app-debug.apk) | [](https://f-droid.org/repository/browse/?fdid=eu.kanade.tachiyomi) [](//github.com/inorichi/tachiyomi/wiki/FDroid-for-dev-versions) |
|
||||
| Build | Download | F-Droid | Contribute | Contact |
|
||||
|-------|----------|---------|------------|---------|
|
||||
| [](https://teamcity.kanade.eu/project.html?projectId=tachiyomi) [](https://travis-ci.org/inorichi/tachiyomi) | [](https://github.com/inorichi/tachiyomi/releases) [](http://tachiyomi.kanade.eu/latest/app-debug.apk) | [](https://f-droid.org/repository/browse/?fdid=eu.kanade.tachiyomi) [](//github.com/inorichi/tachiyomi/wiki/FDroid-for-dev-versions) | [](https://github.com/inorichi/tachiyomi/wiki/Translation) | [](https://discord.gg/WrBkRk4) |
|
||||
|
||||
## [Report an issue](https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md)
|
||||
### **Contact us on [Discord](https://discord.gg/WrBkRk4)**
|
||||
If you want to open an issue, please read [contributing guidelines](https://github.com/inorichi/tachiyomi/blob/master/.github/CONTRIBUTING.md). Your issue may be closed otherwise.
|
||||
|
||||
**Before reporting a new issue, take a look at the [FAQ](https://github.com/inorichi/tachiyomi/wiki/FAQ), the [changelog](https://github.com/inorichi/tachiyomi/releases) and the already opened issues.**
|
||||
***
|
||||
|
||||
Tachiyomi is a free and open source manga reader for Android.
|
||||
|
||||
|
@ -38,8 +38,8 @@ android {
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 25
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
versionCode 24
|
||||
versionName "0.6.1"
|
||||
versionCode 26
|
||||
versionName "0.6.3"
|
||||
|
||||
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
|
||||
buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""
|
||||
@ -98,6 +98,7 @@ dependencies {
|
||||
|
||||
// Modified dependencies
|
||||
compile 'com.github.inorichi:subsampling-scale-image-view:01e5385'
|
||||
compile 'com.github.inorichi:tachimage:68cd311'
|
||||
compile 'com.github.inorichi:junrar-android:634c1f5'
|
||||
|
||||
// Android support library
|
||||
@ -189,7 +190,6 @@ dependencies {
|
||||
compile 'com.github.amulyakhare:TextDrawable:558677e'
|
||||
compile 'com.afollestad.material-dialogs:core:0.9.4.5'
|
||||
compile 'me.zhanghai.android.systemuihelper:library:1.0.0'
|
||||
compile 'de.hdodenhof:circleimageview:2.1.0'
|
||||
compile 'com.nightlynexus.viewstatepageradapter:viewstatepageradapter:1.0.4'
|
||||
|
||||
// Conductor
|
||||
@ -217,7 +217,7 @@ dependencies {
|
||||
}
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.1.3'
|
||||
ext.kotlin_version = '1.1.4'
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
7
app/proguard-rules.pro
vendored
7
app/proguard-rules.pro
vendored
@ -7,6 +7,13 @@
|
||||
-keep class com.hippo.image.** { *; }
|
||||
-keep interface com.hippo.image.** { *; }
|
||||
|
||||
# Extensions may require methods unused in the core app
|
||||
-keep class org.jsoup.** { *; }
|
||||
-keep class kotlin.** { *; }
|
||||
-keep class okhttp3.** { *; }
|
||||
-keep class com.google.gson.** { *; }
|
||||
-keep class com.github.salomonbrys.kotson.** { *; }
|
||||
|
||||
# OkHttp
|
||||
-dontwarn okhttp3.**
|
||||
-dontwarn okio.**
|
||||
|
@ -21,7 +21,7 @@
|
||||
android:theme="@style/Theme.Tachiyomi">
|
||||
<activity
|
||||
android:name=".ui.main.MainActivity"
|
||||
android:launchMode="singleTask">
|
||||
android:launchMode="singleTop">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
@ -45,6 +45,16 @@ object Migrations {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (oldVersion < 26) {
|
||||
// Delete external chapter cache dir.
|
||||
val extCache = context.externalCacheDir
|
||||
if (extCache != null) {
|
||||
val chapterCache = File(extCache, "chapter_disk_cache")
|
||||
if (chapterCache.exists()) {
|
||||
chapterCache.deleteRecursively()
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -45,8 +45,7 @@ class ChapterCache(private val context: Context) {
|
||||
private val gson: Gson by injectLazy()
|
||||
|
||||
/** Cache class used for cache management. */
|
||||
private val diskCache = DiskLruCache.open(
|
||||
File(context.externalCacheDir, PARAMETER_CACHE_DIRECTORY),
|
||||
private val diskCache = DiskLruCache.open(File(context.cacheDir, PARAMETER_CACHE_DIRECTORY),
|
||||
PARAMETER_APP_VERSION,
|
||||
PARAMETER_VALUE_COUNT,
|
||||
PARAMETER_CACHE_SIZE)
|
||||
@ -82,10 +81,10 @@ class ChapterCache(private val context: Context) {
|
||||
|
||||
try {
|
||||
// Remove the extension from the file to get the key of the cache
|
||||
val key = file.substring(0, file.lastIndexOf("."))
|
||||
val key = file.substringBeforeLast(".")
|
||||
// Remove file from cache.
|
||||
return diskCache.remove(key)
|
||||
} catch (e: IOException) {
|
||||
} catch (e: Exception) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ class DbOpenHelper(context: Context)
|
||||
/**
|
||||
* Version of the database.
|
||||
*/
|
||||
const val DATABASE_VERSION = 4
|
||||
const val DATABASE_VERSION = 5
|
||||
}
|
||||
|
||||
override fun onCreate(db: SQLiteDatabase) = with(db) {
|
||||
@ -51,6 +51,9 @@ class DbOpenHelper(context: Context)
|
||||
if (oldVersion < 4) {
|
||||
db.execSQL(ChapterTable.bookmarkUpdateQuery)
|
||||
}
|
||||
if (oldVersion < 5) {
|
||||
db.execSQL(ChapterTable.addScanlator)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onConfigure(db: SQLiteDatabase) {
|
||||
|
@ -20,6 +20,7 @@ import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_LAST_PAGE_READ
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_MANGA_ID
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_NAME
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_READ
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_SCANLATOR
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_SOURCE_ORDER
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_URL
|
||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.TABLE
|
||||
@ -48,6 +49,7 @@ class ChapterPutResolver : DefaultPutResolver<Chapter>() {
|
||||
put(COL_URL, obj.url)
|
||||
put(COL_NAME, obj.name)
|
||||
put(COL_READ, obj.read)
|
||||
put(COL_SCANLATOR, obj.scanlator)
|
||||
put(COL_BOOKMARK, obj.bookmark)
|
||||
put(COL_DATE_FETCH, obj.date_fetch)
|
||||
put(COL_DATE_UPLOAD, obj.date_upload)
|
||||
@ -64,6 +66,7 @@ class ChapterGetResolver : DefaultGetResolver<Chapter>() {
|
||||
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
||||
url = cursor.getString(cursor.getColumnIndex(COL_URL))
|
||||
name = cursor.getString(cursor.getColumnIndex(COL_NAME))
|
||||
scanlator = cursor.getString(cursor.getColumnIndex(COL_SCANLATOR))
|
||||
read = cursor.getInt(cursor.getColumnIndex(COL_READ)) == 1
|
||||
bookmark = cursor.getInt(cursor.getColumnIndex(COL_BOOKMARK)) == 1
|
||||
date_fetch = cursor.getLong(cursor.getColumnIndex(COL_DATE_FETCH))
|
||||
|
@ -10,6 +10,8 @@ class ChapterImpl : Chapter {
|
||||
|
||||
override lateinit var name: String
|
||||
|
||||
override var scanlator: String? = null
|
||||
|
||||
override var read: Boolean = false
|
||||
|
||||
override var bookmark: Boolean = false
|
||||
@ -29,9 +31,7 @@ class ChapterImpl : Chapter {
|
||||
if (other == null || javaClass != other.javaClass) return false
|
||||
|
||||
val chapter = other as Chapter
|
||||
|
||||
return url == chapter.url
|
||||
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
|
@ -14,6 +14,8 @@ object ChapterTable {
|
||||
|
||||
const val COL_READ = "read"
|
||||
|
||||
const val COL_SCANLATOR = "scanlator"
|
||||
|
||||
const val COL_BOOKMARK = "bookmark"
|
||||
|
||||
const val COL_DATE_FETCH = "date_fetch"
|
||||
@ -32,6 +34,7 @@ object ChapterTable {
|
||||
$COL_MANGA_ID INTEGER NOT NULL,
|
||||
$COL_URL TEXT NOT NULL,
|
||||
$COL_NAME TEXT NOT NULL,
|
||||
$COL_SCANLATOR TEXT,
|
||||
$COL_READ BOOLEAN NOT NULL,
|
||||
$COL_BOOKMARK BOOLEAN NOT NULL,
|
||||
$COL_LAST_PAGE_READ INT NOT NULL,
|
||||
@ -52,4 +55,7 @@ object ChapterTable {
|
||||
val bookmarkUpdateQuery: String
|
||||
get() = "ALTER TABLE $TABLE ADD COLUMN $COL_BOOKMARK BOOLEAN DEFAULT FALSE"
|
||||
|
||||
val addScanlator: String
|
||||
get() = "ALTER TABLE $TABLE ADD COLUMN $COL_SCANLATOR TEXT DEFAULT NULL"
|
||||
|
||||
}
|
||||
|
@ -114,6 +114,9 @@ class Downloader(private val context: Context, private val provider: DownloadPro
|
||||
val pending = queue.filter { it.status != Download.DOWNLOADED }
|
||||
pending.forEach { if (it.status != Download.QUEUE) it.status = Download.QUEUE }
|
||||
|
||||
// Show download notification when simultaneous download > 1.
|
||||
notifier.onProgressChange(queue)
|
||||
|
||||
downloadsRelay.call(pending)
|
||||
return !pending.isEmpty()
|
||||
}
|
||||
|
@ -87,6 +87,8 @@ object PreferenceKeys {
|
||||
|
||||
const val filterUnread = "pref_filter_unread_key"
|
||||
|
||||
const val filterCompleted = "pref_filter_completed_key"
|
||||
|
||||
const val librarySortingMode = "library_sorting_mode"
|
||||
|
||||
const val automaticUpdates = "automatic_updates"
|
||||
|
@ -145,6 +145,8 @@ class PreferencesHelper(val context: Context) {
|
||||
|
||||
fun filterUnread() = rxPrefs.getBoolean(Keys.filterUnread, false)
|
||||
|
||||
fun filterCompleted() = rxPrefs.getBoolean(Keys.filterCompleted, false)
|
||||
|
||||
fun librarySortingMode() = rxPrefs.getInteger(Keys.librarySortingMode, 0)
|
||||
|
||||
fun librarySortingAscending() = rxPrefs.getBoolean("library_sorting_ascending", true)
|
||||
|
@ -12,11 +12,14 @@ interface SChapter : Serializable {
|
||||
|
||||
var chapter_number: Float
|
||||
|
||||
var scanlator: String?
|
||||
|
||||
fun copyFrom(other: SChapter) {
|
||||
name = other.name
|
||||
url = other.url
|
||||
date_upload = other.date_upload
|
||||
chapter_number = other.chapter_number
|
||||
scanlator = other.scanlator
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -10,4 +10,6 @@ class SChapterImpl : SChapter {
|
||||
|
||||
override var chapter_number: Float = -1f
|
||||
|
||||
override var scanlator: String? = null
|
||||
|
||||
}
|
@ -13,6 +13,7 @@ import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import rx.Observable
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.lang.Exception
|
||||
import java.net.URI
|
||||
import java.net.URISyntaxException
|
||||
import java.security.MessageDigest
|
||||
@ -51,7 +52,7 @@ abstract class HttpSource : CatalogueSource {
|
||||
override val id by lazy {
|
||||
val key = "${name.toLowerCase()}/$lang/$versionId"
|
||||
val bytes = MessageDigest.getInstance("MD5").digest(key.toByteArray())
|
||||
(0..7).map { bytes[it].toLong() and 0xff shl 8*(7-it) }.reduce(Long::or) and Long.MAX_VALUE
|
||||
(0..7).map { bytes[it].toLong() and 0xff shl 8 * (7 - it) }.reduce(Long::or) and Long.MAX_VALUE
|
||||
}
|
||||
|
||||
/**
|
||||
@ -197,16 +198,20 @@ abstract class HttpSource : CatalogueSource {
|
||||
|
||||
/**
|
||||
* Returns an observable with the updated chapter list for a manga. Normally it's not needed to
|
||||
* override this method.
|
||||
* override this method. If a manga is licensed an empty chapter list observable is returned
|
||||
*
|
||||
* @param manga the manga to look for chapters.
|
||||
*/
|
||||
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
||||
return client.newCall(chapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
chapterListParse(response)
|
||||
}
|
||||
if (manga.status != SManga.LICENSED) {
|
||||
return client.newCall(chapterListRequest(manga))
|
||||
.asObservableSuccess()
|
||||
.map { response ->
|
||||
chapterListParse(response)
|
||||
}
|
||||
} else {
|
||||
return Observable.error(Exception("Licensed - No chapters to show"))
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -69,7 +69,7 @@ class Batoto : ParsedHttpSource(), LoginSource {
|
||||
|
||||
override fun popularMangaFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
element.select("a[href^=$baseUrl]").first().let {
|
||||
element.select("a[href*=bato.to]").first().let {
|
||||
manga.setUrlWithoutDomain(it.attr("href"))
|
||||
manga.title = it.text().trim()
|
||||
}
|
||||
@ -189,7 +189,7 @@ class Batoto : ParsedHttpSource(), LoginSource {
|
||||
override fun chapterListSelector() = "tr.row.lang_English.chapter_row"
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter {
|
||||
val urlElement = element.select("a[href^=$baseUrl/reader").first()
|
||||
val urlElement = element.select("a[href*=bato.to/reader").first()
|
||||
|
||||
val chapter = SChapter.create()
|
||||
chapter.setUrlWithoutDomain(urlElement.attr("href"))
|
||||
@ -197,6 +197,7 @@ class Batoto : ParsedHttpSource(), LoginSource {
|
||||
chapter.date_upload = element.select("td").getOrNull(4)?.let {
|
||||
parseDateFromElement(it)
|
||||
} ?: 0
|
||||
chapter.scanlator = element.select("td").getOrNull(2)?.text()
|
||||
return chapter
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ class Mangafox : ParsedHttpSource() {
|
||||
is Status -> url.addQueryParameter(filter.id, filter.state.toString())
|
||||
is GenreList -> filter.state.forEach { genre -> url.addQueryParameter(genre.id, genre.state.toString()) }
|
||||
is TextField -> url.addQueryParameter(filter.key, filter.state)
|
||||
is Type -> url.addQueryParameter("type", if(filter.state == 0) "" else filter.state.toString())
|
||||
is Type -> url.addQueryParameter("type", if (filter.state == 0) "" else filter.state.toString())
|
||||
is OrderBy -> {
|
||||
url.addQueryParameter("sort", arrayOf("name", "rating", "views", "total_chapters", "last_chapter_time")[filter.state!!.index])
|
||||
url.addQueryParameter("order", if (filter.state?.ascending == true) "az" else "za")
|
||||
@ -113,7 +113,7 @@ class Mangafox : ParsedHttpSource() {
|
||||
|
||||
val chapter = SChapter.create()
|
||||
chapter.setUrlWithoutDomain(urlElement.attr("href"))
|
||||
chapter.name = urlElement.text()
|
||||
chapter.name = element.select("span.title.nowrap").first()?.text()?.let { urlElement.text() + " - " + it } ?: urlElement.text()
|
||||
chapter.date_upload = element.select("span.date").first()?.text()?.let { parseChapterDate(it) } ?: 0
|
||||
return chapter
|
||||
}
|
||||
@ -169,6 +169,7 @@ class Mangafox : ParsedHttpSource() {
|
||||
private class OrderBy : Filter.Sort("Order by",
|
||||
arrayOf("Series name", "Rating", "Views", "Total chapters", "Last chapter"),
|
||||
Filter.Sort.Selection(2, false))
|
||||
|
||||
private class GenreList(genres: List<Genre>) : Filter.Group<Genre>("Genres", genres)
|
||||
|
||||
override fun getFilterList() = FilterList(
|
||||
|
@ -1,8 +1,10 @@
|
||||
package eu.kanade.tachiyomi.ui.base.controller
|
||||
|
||||
import android.os.Bundle
|
||||
import android.support.v4.view.MenuItemCompat
|
||||
import android.support.v7.app.AppCompatActivity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
@ -44,4 +46,23 @@ abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateContr
|
||||
(activity as? AppCompatActivity)?.supportActionBar?.title = getTitle()
|
||||
}
|
||||
|
||||
/**
|
||||
* Workaround for disappearing menu items when collapsing an expandable item like a SearchView.
|
||||
* This method should be removed when fixed upstream.
|
||||
* Issue link: https://issuetracker.google.com/issues/37657375
|
||||
*/
|
||||
fun MenuItem.fixExpand() {
|
||||
val expandListener = object : MenuItemCompat.OnActionExpandListener {
|
||||
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
|
||||
activity?.invalidateOptionsMenu()
|
||||
return true
|
||||
}
|
||||
}
|
||||
MenuItemCompat.setOnActionExpandListener(this, expandListener)
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +1,9 @@
|
||||
package eu.kanade.tachiyomi.ui.base.controller
|
||||
|
||||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||
import android.os.Build
|
||||
import android.support.v4.content.ContextCompat
|
||||
import com.bluelinelabs.conductor.Controller
|
||||
import com.bluelinelabs.conductor.Router
|
||||
|
||||
fun Router.popControllerWithTag(tag: String): Boolean {
|
||||
@ -9,4 +13,15 @@ fun Router.popControllerWithTag(tag: String): Boolean {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
fun Controller.requestPermissionsSafe(permissions: Array<String>, requestCode: Int) {
|
||||
val activity = activity ?: return
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
permissions.forEach { permission ->
|
||||
if (ContextCompat.checkSelfPermission(activity, permission) != PERMISSION_GRANTED) {
|
||||
requestPermissions(arrayOf(permission), requestCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -10,7 +10,6 @@ public class NucleusConductorDelegate<P extends Presenter> {
|
||||
|
||||
@Nullable private P presenter;
|
||||
@Nullable private Bundle bundle;
|
||||
private boolean presenterHasView = false;
|
||||
|
||||
private PresenterFactory<P> factory;
|
||||
|
||||
@ -22,8 +21,8 @@ public class NucleusConductorDelegate<P extends Presenter> {
|
||||
if (presenter == null) {
|
||||
presenter = factory.createPresenter();
|
||||
presenter.create(bundle);
|
||||
bundle = null;
|
||||
}
|
||||
bundle = null;
|
||||
return presenter;
|
||||
}
|
||||
|
||||
@ -37,31 +36,26 @@ public class NucleusConductorDelegate<P extends Presenter> {
|
||||
}
|
||||
|
||||
void onRestoreInstanceState(Bundle presenterState) {
|
||||
if (presenter != null)
|
||||
throw new IllegalArgumentException("onRestoreInstanceState() should be called before onResume()");
|
||||
bundle = presenterState;
|
||||
}
|
||||
|
||||
void onTakeView(Object view) {
|
||||
getPresenter();
|
||||
if (presenter != null && !presenterHasView) {
|
||||
if (presenter != null) {
|
||||
//noinspection unchecked
|
||||
presenter.takeView(view);
|
||||
presenterHasView = true;
|
||||
}
|
||||
}
|
||||
|
||||
void onDropView() {
|
||||
if (presenter != null && presenterHasView) {
|
||||
if (presenter != null) {
|
||||
presenter.dropView();
|
||||
presenterHasView = false;
|
||||
}
|
||||
}
|
||||
|
||||
void onDestroy() {
|
||||
if (presenter != null) {
|
||||
presenter.destroy();
|
||||
presenter = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -187,10 +187,7 @@ open class CatalogueController(bundle: Bundle? = null) :
|
||||
}
|
||||
navView.setFilters(presenter.filterItems)
|
||||
|
||||
navView.post {
|
||||
if (isAttached && !drawer.isDrawerOpen(navView))
|
||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, navView)
|
||||
}
|
||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.END)
|
||||
|
||||
navView.onSearchClicked = {
|
||||
val allDefault = presenter.sourceFilters == presenter.source.getFilterList()
|
||||
@ -228,6 +225,7 @@ open class CatalogueController(bundle: Bundle? = null) :
|
||||
|
||||
val recycler = if (presenter.isListMode) {
|
||||
RecyclerView(view.context).apply {
|
||||
id = R.id.recycler
|
||||
layoutManager = LinearLayoutManager(context)
|
||||
addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
|
||||
}
|
||||
@ -333,6 +331,11 @@ open class CatalogueController(bundle: Bundle? = null) :
|
||||
if (query == newQuery)
|
||||
return
|
||||
|
||||
// FIXME dirty fix to restore the toolbar buttons after closing search mode.
|
||||
if (newQuery == "") {
|
||||
activity?.invalidateOptionsMenu()
|
||||
}
|
||||
|
||||
showProgressBar()
|
||||
adapter?.clear()
|
||||
|
||||
|
@ -6,6 +6,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.util.getResourceColor
|
||||
import jp.wasabeef.glide.transformations.CropCircleTransformation
|
||||
import kotlinx.android.synthetic.main.catalogue_list_item.view.*
|
||||
|
||||
/**
|
||||
@ -42,6 +43,7 @@ class CatalogueListHolder(private val view: View, adapter: FlexibleAdapter<*>) :
|
||||
.load(manga)
|
||||
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
|
||||
.centerCrop()
|
||||
.bitmapTransform(CropCircleTransformation(view.context))
|
||||
.dontAnimate()
|
||||
.skipMemoryCache(true)
|
||||
.placeholder(android.R.color.transparent)
|
||||
|
@ -83,7 +83,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
|
||||
// Disable swipe refresh when view is not at the top
|
||||
val firstPos = (recycler.layoutManager as LinearLayoutManager)
|
||||
.findFirstCompletelyVisibleItemPosition()
|
||||
swipe_refresh.isEnabled = firstPos == 0
|
||||
swipe_refresh.isEnabled = firstPos <= 0
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -36,8 +36,8 @@ import eu.kanade.tachiyomi.ui.manga.MangaController
|
||||
import eu.kanade.tachiyomi.util.inflate
|
||||
import eu.kanade.tachiyomi.util.toast
|
||||
import eu.kanade.tachiyomi.widget.DrawerSwipeCloseListener
|
||||
import kotlinx.android.synthetic.main.main_activity.*
|
||||
import kotlinx.android.synthetic.main.library_controller.view.*
|
||||
import kotlinx.android.synthetic.main.main_activity.*
|
||||
import rx.Subscription
|
||||
import timber.log.Timber
|
||||
import uy.kohesive.injekt.Injekt
|
||||
@ -189,11 +189,7 @@ class LibraryController(
|
||||
drawer.addDrawerListener(it)
|
||||
}
|
||||
navView = view
|
||||
|
||||
navView?.post {
|
||||
if (isAttached && drawer.isDrawerOpen(navView))
|
||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, navView)
|
||||
}
|
||||
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.END)
|
||||
|
||||
navView?.onGroupClicked = { group ->
|
||||
when (group) {
|
||||
@ -346,6 +342,8 @@ class LibraryController(
|
||||
query = it.toString()
|
||||
searchRelay.call(query)
|
||||
}
|
||||
|
||||
searchItem.fixExpand()
|
||||
}
|
||||
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
|
@ -5,6 +5,7 @@ import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import jp.wasabeef.glide.transformations.CropCircleTransformation
|
||||
import kotlinx.android.synthetic.main.catalogue_list_item.view.*
|
||||
|
||||
/**
|
||||
@ -50,6 +51,7 @@ class LibraryListHolder(
|
||||
.load(manga)
|
||||
.diskCacheStrategy(DiskCacheStrategy.RESULT)
|
||||
.centerCrop()
|
||||
.bitmapTransform(CropCircleTransformation(itemView.context))
|
||||
.dontAnimate()
|
||||
.into(itemView.thumbnail)
|
||||
}
|
||||
|
@ -74,7 +74,9 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||
|
||||
private val unread = Item.CheckboxGroup(R.string.action_filter_unread, this)
|
||||
|
||||
override val items = listOf(downloaded, unread)
|
||||
private val completed = Item.CheckboxGroup(R.string.completed, this)
|
||||
|
||||
override val items = listOf(downloaded, unread, completed)
|
||||
|
||||
override val header = Item.Header(R.string.action_filter)
|
||||
|
||||
@ -83,6 +85,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||
override fun initModels() {
|
||||
downloaded.checked = preferences.filterDownloaded().getOrDefault()
|
||||
unread.checked = preferences.filterUnread().getOrDefault()
|
||||
completed.checked = preferences.filterCompleted().getOrDefault()
|
||||
}
|
||||
|
||||
override fun onItemClicked(item: Item) {
|
||||
@ -91,6 +94,7 @@ class LibraryNavigationView @JvmOverloads constructor(context: Context, attrs: A
|
||||
when (item) {
|
||||
downloaded -> preferences.filterDownloaded().set(item.checked)
|
||||
unread -> preferences.filterUnread().set(item.checked)
|
||||
completed -> preferences.filterCompleted().set(item.checked)
|
||||
}
|
||||
|
||||
adapter.notifyItemChanged(item)
|
||||
|
@ -14,6 +14,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.source.LocalSource
|
||||
import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
|
||||
import eu.kanade.tachiyomi.util.combineLatest
|
||||
@ -101,6 +102,8 @@ class LibraryPresenter(
|
||||
|
||||
val filterUnread = preferences.filterUnread().getOrDefault()
|
||||
|
||||
val filterCompleted = preferences.filterCompleted().getOrDefault()
|
||||
|
||||
val filterFn: (Manga) -> Boolean = f@ { manga ->
|
||||
// Filter out manga without source.
|
||||
val source = sourceManager.get(manga.source) ?: return@f false
|
||||
@ -110,6 +113,10 @@ class LibraryPresenter(
|
||||
return@f false
|
||||
}
|
||||
|
||||
if (filterCompleted && manga.status != SManga.COMPLETED) {
|
||||
return@f false
|
||||
}
|
||||
|
||||
// Filter when the download directory doesn't exist or is null.
|
||||
if (filterDownloaded) {
|
||||
// Get the directories for the source of the manga.
|
||||
|
@ -26,6 +26,7 @@ import eu.kanade.tachiyomi.source.SourceManager
|
||||
import eu.kanade.tachiyomi.ui.base.controller.RouterPagerAdapter
|
||||
import eu.kanade.tachiyomi.ui.base.controller.RxController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.TabbedController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||
import eu.kanade.tachiyomi.ui.manga.chapter.ChaptersController
|
||||
import eu.kanade.tachiyomi.ui.manga.info.MangaInfoController
|
||||
import eu.kanade.tachiyomi.ui.manga.track.TrackController
|
||||
@ -85,9 +86,7 @@ class MangaController : RxController, TabbedController {
|
||||
|
||||
if (manga == null || source == null) return
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
requestPermissions(arrayOf(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE), 301)
|
||||
}
|
||||
requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 301)
|
||||
|
||||
with(view) {
|
||||
adapter = MangaDetailAdapter()
|
||||
|
@ -6,6 +6,9 @@ import eu.davidea.viewholders.FlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.util.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.gone
|
||||
import eu.kanade.tachiyomi.util.setVectorCompat
|
||||
import kotlinx.android.synthetic.main.chapters_item.view.*
|
||||
import java.util.*
|
||||
|
||||
@ -32,6 +35,9 @@ class ChapterHolder(
|
||||
else -> chapter.name
|
||||
}
|
||||
|
||||
// Set the correct drawable for dropdown and update the tint to match theme.
|
||||
view.chapter_menu.setVectorCompat(R.drawable.ic_more_horiz_black_24dp, view.context.getResourceColor(R.attr.icon_color))
|
||||
|
||||
// Set correct text color
|
||||
chapter_title.setTextColor(if (chapter.read) adapter.readColor else adapter.unreadColor)
|
||||
if (chapter.bookmark) chapter_title.setTextColor(adapter.bookmarkedColor)
|
||||
@ -43,6 +49,16 @@ class ChapterHolder(
|
||||
chapter_date.text = ""
|
||||
}
|
||||
|
||||
//add scanlator if exists
|
||||
chapter_scanlator.text = chapter.scanlator
|
||||
//allow longer titles if there is no scanlator (most sources)
|
||||
if (chapter_scanlator.text.isNullOrBlank()) {
|
||||
chapter_title.setMaxLines(2)
|
||||
chapter_scanlator.gone()
|
||||
} else {
|
||||
chapter_title.setMaxLines(1)
|
||||
}
|
||||
|
||||
chapter_pages.text = if (!chapter.read && chapter.last_page_read > 0) {
|
||||
context.getString(R.string.chapter_progress, chapter.last_page_read + 1)
|
||||
} else {
|
||||
|
@ -27,10 +27,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.horizontal.LeftToRightReader
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.horizontal.RightToLeftReader
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.vertical.VerticalReader
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonReader
|
||||
import eu.kanade.tachiyomi.util.GLUtil
|
||||
import eu.kanade.tachiyomi.util.SharedData
|
||||
import eu.kanade.tachiyomi.util.plusAssign
|
||||
import eu.kanade.tachiyomi.util.toast
|
||||
import eu.kanade.tachiyomi.util.*
|
||||
import eu.kanade.tachiyomi.widget.SimpleAnimationListener
|
||||
import eu.kanade.tachiyomi.widget.SimpleSeekBarListener
|
||||
import kotlinx.android.synthetic.main.reader_activity.*
|
||||
@ -42,6 +39,7 @@ import rx.android.schedulers.AndroidSchedulers
|
||||
import rx.subscriptions.CompositeSubscription
|
||||
import timber.log.Timber
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import java.io.File
|
||||
import java.text.DecimalFormat
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@ -572,8 +570,12 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
||||
if (page.status != Page.READY)
|
||||
return
|
||||
|
||||
var uri = page.uri ?: return
|
||||
if (uri.toString().startsWith("file://")) {
|
||||
uri = File(uri.toString().substringAfter("file://")).getUriCompat(this)
|
||||
}
|
||||
val intent = Intent(Intent.ACTION_SEND).apply {
|
||||
putExtra(Intent.EXTRA_STREAM, page.uri)
|
||||
putExtra(Intent.EXTRA_STREAM, uri)
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_GRANT_READ_URI_PERMISSION
|
||||
type = "image/*"
|
||||
}
|
||||
|
@ -327,9 +327,10 @@ class ReaderPresenter(
|
||||
fun retryPage(page: Page?) {
|
||||
if (page != null && source is HttpSource) {
|
||||
page.status = Page.QUEUE
|
||||
val uri = page.uri
|
||||
if (uri != null && !page.chapter.isDownloaded) {
|
||||
chapterCache.removeFileFromCache(uri.encodedPath.substringAfterLast('/'))
|
||||
val imageUrl = page.imageUrl
|
||||
if (imageUrl != null && !page.chapter.isDownloaded) {
|
||||
val key = DiskUtil.hashKeyForDisk(page.url)
|
||||
chapterCache.removeFileFromCache(key)
|
||||
}
|
||||
loader.retryPage(page)
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ class WebtoonHolder(private val view: View, private val adapter: WebtoonAdapter)
|
||||
setMinimumTileDpi(180)
|
||||
setRegionDecoderClass(webtoonReader.regionDecoderClass)
|
||||
setBitmapDecoderClass(webtoonReader.bitmapDecoderClass)
|
||||
setCropBorders(webtoonReader.cropBorders)
|
||||
setVerticalScrollingParent(true)
|
||||
setOnTouchListener(adapter.touchListener)
|
||||
setOnLongClickListener { webtoonReader.onLongClick(page) }
|
||||
|
@ -53,6 +53,12 @@ class WebtoonReader : BaseReader() {
|
||||
lateinit var layoutManager: PreCachingLayoutManager
|
||||
private set
|
||||
|
||||
/**
|
||||
* Whether to crop image borders.
|
||||
*/
|
||||
var cropBorders: Boolean = false
|
||||
private set
|
||||
|
||||
/**
|
||||
* Gesture detector for image touch events.
|
||||
*/
|
||||
@ -109,16 +115,24 @@ class WebtoonReader : BaseReader() {
|
||||
.doOnNext { setDecoderClass(it) }
|
||||
.skip(1)
|
||||
.distinctUntilChanged()
|
||||
.subscribe {
|
||||
val activePage = layoutManager.findFirstVisibleItemPosition()
|
||||
recycler.adapter = adapter
|
||||
setActivePage(activePage)
|
||||
})
|
||||
.subscribe { refreshAdapter() })
|
||||
|
||||
subscriptions.add(readerActivity.preferences.cropBorders()
|
||||
.asObservable()
|
||||
.doOnNext { cropBorders = it }
|
||||
.skip(1)
|
||||
.distinctUntilChanged()
|
||||
.subscribe { refreshAdapter() })
|
||||
|
||||
setPagesOnAdapter()
|
||||
return recycler
|
||||
}
|
||||
|
||||
fun refreshAdapter() {
|
||||
val activePage = layoutManager.findFirstVisibleItemPosition()
|
||||
recycler.adapter = adapter
|
||||
setActivePage(activePage)
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses two ways to scroll to the last page read.
|
||||
|
@ -8,6 +8,7 @@ import eu.davidea.viewholders.FlexibleViewHolder
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.download.model.Download
|
||||
import eu.kanade.tachiyomi.util.getResourceColor
|
||||
import eu.kanade.tachiyomi.util.setVectorCompat
|
||||
import jp.wasabeef.glide.transformations.CropCircleTransformation
|
||||
import kotlinx.android.synthetic.main.recent_chapters_item.view.*
|
||||
|
||||
@ -63,6 +64,9 @@ class RecentChapterHolder(private val view: View, private val adapter: RecentCha
|
||||
// Set manga title
|
||||
view.manga_title.text = item.manga.title
|
||||
|
||||
// Set the correct drawable for dropdown and update the tint to match theme.
|
||||
view.chapter_menu_icon.setVectorCompat(R.drawable.ic_more_horiz_black_24dp, view.context.getResourceColor(R.attr.icon_color))
|
||||
|
||||
// Set cover
|
||||
Glide.clear(itemView.manga_cover)
|
||||
if (!item.manga.thumbnail_url.isNullOrEmpty()) {
|
||||
|
@ -81,7 +81,7 @@ class RecentChaptersController : NucleusController<RecentChaptersPresenter>(),
|
||||
recycler.scrollStateChanges().subscribeUntilDestroy {
|
||||
// Disable swipe refresh when view is not at the top
|
||||
val firstPos = layoutManager.findFirstCompletelyVisibleItemPosition()
|
||||
swipe_refresh.isEnabled = firstPos == 0
|
||||
swipe_refresh.isEnabled = firstPos <= 0
|
||||
}
|
||||
|
||||
swipe_refresh.setDistanceToTriggerSync((2 * 64 * resources.displayMetrics.density).toInt())
|
||||
|
@ -22,6 +22,9 @@ import java.text.ParseException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
|
||||
|
||||
class SettingsAboutController : SettingsController() {
|
||||
|
||||
@ -66,6 +69,15 @@ class SettingsAboutController : SettingsController() {
|
||||
isVisible = false
|
||||
}
|
||||
}
|
||||
preference {
|
||||
title = "Discord"
|
||||
val url = "https://discord.gg/WrBkRk4"
|
||||
summary = url
|
||||
onClick {
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
preference {
|
||||
titleRes = R.string.version
|
||||
summary = if (BuildConfig.DEBUG)
|
||||
|
@ -26,6 +26,7 @@ import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
|
||||
import eu.kanade.tachiyomi.ui.base.controller.DialogController
|
||||
import eu.kanade.tachiyomi.ui.base.controller.popControllerWithTag
|
||||
import eu.kanade.tachiyomi.ui.base.controller.requestPermissionsSafe
|
||||
import eu.kanade.tachiyomi.util.getUriCompat
|
||||
import eu.kanade.tachiyomi.util.registerLocalReceiver
|
||||
import eu.kanade.tachiyomi.util.toast
|
||||
@ -52,9 +53,7 @@ class SettingsBackupController : SettingsController() {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
requestPermissions(arrayOf(WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE), 500)
|
||||
}
|
||||
requestPermissionsSafe(arrayOf(WRITE_EXTERNAL_STORAGE), 500)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
@ -29,8 +29,8 @@ class SettingsGeneralController : SettingsController() {
|
||||
listPreference {
|
||||
key = Keys.lang
|
||||
titleRes = R.string.pref_language
|
||||
entryValues = arrayOf("", "bg", "en", "es", "fr", "it", "lv", "nl", "pt", "pt-BR", "ru",
|
||||
"vi")
|
||||
entryValues = arrayOf("", "bg", "de", "en", "es", "fr", "it", "lv", "nl", "pl", "pt",
|
||||
"pt-BR", "ru", "vi")
|
||||
entries = entryValues.map { value ->
|
||||
val locale = LocaleHelper.getLocaleFromString(value.toString())
|
||||
locale?.getDisplayName(locale)?.capitalize() ?:
|
||||
|
@ -29,7 +29,7 @@ object ChapterRecognition {
|
||||
* Regex used to remove unwanted tags
|
||||
* Example Prison School 12 v.1 vol004 version1243 volume64 -R> Prison School 12
|
||||
*/
|
||||
private val unwanted = Regex("""(?:(v|ver|vol|version|volume|season|s).?[0-9]+)""")
|
||||
private val unwanted = Regex("""(?<![a-z])(v|ver|vol|version|volume|season|s).?[0-9]+""")
|
||||
|
||||
/**
|
||||
* Regex used to remove unwanted whitespace
|
||||
|
@ -20,7 +20,7 @@ import java.util.*
|
||||
fun syncChaptersWithSource(db: DatabaseHelper,
|
||||
rawSourceChapters: List<SChapter>,
|
||||
manga: Manga,
|
||||
source: Source) : Pair<List<Chapter>, List<Chapter>> {
|
||||
source: Source): Pair<List<Chapter>, List<Chapter>> {
|
||||
|
||||
if (rawSourceChapters.isEmpty()) {
|
||||
throw Exception("No chapters found")
|
||||
@ -38,7 +38,26 @@ fun syncChaptersWithSource(db: DatabaseHelper,
|
||||
}
|
||||
|
||||
// Chapters from the source not in db.
|
||||
val toAdd = sourceChapters.filterNot { it in dbChapters }
|
||||
val toAdd = mutableListOf<Chapter>()
|
||||
|
||||
// Chapters whose metadata have changed.
|
||||
val toChange = mutableListOf<Chapter>()
|
||||
|
||||
for (sourceChapter in sourceChapters) {
|
||||
val dbChapter = dbChapters.find { it.url == sourceChapter.url }
|
||||
|
||||
// Add the chapter if not in db already, or update if the metadata changed.
|
||||
if (dbChapter == null) {
|
||||
toAdd.add(sourceChapter)
|
||||
} else if (dbChapter.scanlator != sourceChapter.scanlator ||
|
||||
dbChapter.name != sourceChapter.name) {
|
||||
|
||||
dbChapter.scanlator = sourceChapter.scanlator
|
||||
dbChapter.name = sourceChapter.name
|
||||
|
||||
toChange.add(dbChapter)
|
||||
}
|
||||
}
|
||||
|
||||
// Recognize number for new chapters.
|
||||
toAdd.forEach {
|
||||
@ -49,10 +68,14 @@ fun syncChaptersWithSource(db: DatabaseHelper,
|
||||
}
|
||||
|
||||
// Chapters from the db not in the source.
|
||||
val toDelete = dbChapters.filterNot { it in sourceChapters }
|
||||
val toDelete = dbChapters.filterNot { dbChapter ->
|
||||
sourceChapters.any { sourceChapter ->
|
||||
dbChapter.url == sourceChapter.url
|
||||
}
|
||||
}
|
||||
|
||||
// Return if there's nothing to add or delete, avoiding unnecessary db transactions.
|
||||
if (toAdd.isEmpty() && toDelete.isEmpty()) {
|
||||
// Return if there's nothing to add, delete or change, avoiding unnecessary db transactions.
|
||||
if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) {
|
||||
return Pair(emptyList(), emptyList())
|
||||
}
|
||||
|
||||
@ -90,8 +113,13 @@ fun syncChaptersWithSource(db: DatabaseHelper,
|
||||
db.insertChapters(toAdd).executeAsBlocking()
|
||||
}
|
||||
|
||||
if (!toChange.isEmpty()) {
|
||||
db.insertChapters(toChange).executeAsBlocking()
|
||||
}
|
||||
|
||||
// Fix order in source.
|
||||
db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking()
|
||||
}
|
||||
return Pair(toAdd.subtract(readded).toList(), toDelete.subtract(readded).toList())
|
||||
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
android:layout_height="@dimen/material_component_lists_single_line_with_avatar_height"
|
||||
android:background="?attr/selectable_list_drawable">
|
||||
|
||||
<de.hdodenhof.circleimageview.CircleImageView
|
||||
<ImageView
|
||||
android:id="@+id/thumbnail"
|
||||
android:layout_width="@dimen/material_component_lists_single_line_with_avatar_height"
|
||||
android:layout_height="@dimen/material_component_lists_single_line_with_avatar_height"
|
||||
|
@ -1,100 +1,85 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?android:attr/listPreferredItemHeight"
|
||||
android:background="?attr/selectable_list_drawable">
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
|
||||
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
|
||||
android:paddingRight="?android:attr/listPreferredItemPaddingRight"
|
||||
android:paddingStart="?android:attr/listPreferredItemPaddingStart">
|
||||
<android.support.constraint.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="?android:attr/listPreferredItemHeight"
|
||||
android:background="?attr/selectable_list_drawable">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/relativeLayout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="18dp"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentStart="true">
|
||||
<TextView
|
||||
android:id="@+id/chapter_title"
|
||||
style="@style/TextAppearance.Regular.Body1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
tools:text="Title"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintRight_toLeftOf="@+id/chapter_menu"
|
||||
android:layout_marginTop="12dp"
|
||||
android:layout_marginLeft="16dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/chapter_pages"
|
||||
style="@style/TextAppearance.Regular.Caption.Hint"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:ellipsize="marquee"
|
||||
android:singleLine="true"
|
||||
tools:text="Pages: 45"/>
|
||||
<TextView
|
||||
android:id="@+id/chapter_scanlator"
|
||||
style="@style/TextAppearance.Regular.Caption.Hint"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Scanlator"
|
||||
android:maxLines="1"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/chapter_title"
|
||||
app:layout_constraintBottom_toTopOf="@+id/chapter_date"
|
||||
app:layout_constraintRight_toLeftOf="@+id/chapter_menu"
|
||||
android:layout_marginLeft="16dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/chapter_date"
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:ellipsize="marquee"
|
||||
android:singleLine="true"
|
||||
tools:text="22/02/2016"/>
|
||||
<TextView
|
||||
android:id="@+id/chapter_date"
|
||||
style="@style/TextAppearance.Regular.Caption"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="22/02/2016"
|
||||
android:ellipsize="marquee"
|
||||
android:maxLines="1"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginLeft="16dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/download_text"
|
||||
style="@style/TextAppearance.Regular.Caption.Hint"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:textAllCaps="true"/>
|
||||
</RelativeLayout>
|
||||
<TextView
|
||||
android:id="@+id/chapter_pages"
|
||||
style="@style/TextAppearance.Regular.Caption.Hint"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="Pages: 45"
|
||||
android:ellipsize="marquee"
|
||||
android:maxLines="1"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/chapter_title"
|
||||
style="@style/TextAppearance.Regular.Body1"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/relativeLayout"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentStart="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignWithParentIfMissing="true"
|
||||
android:layout_marginRight="30dp"
|
||||
android:ellipsize="middle"
|
||||
android:gravity="center_vertical"
|
||||
android:maxLines="2"
|
||||
tools:text="Title"/>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
<ImageView
|
||||
android:id="@+id/chapter_menu"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:gravity="center|end"
|
||||
android:paddingBottom="18dp"
|
||||
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
|
||||
android:paddingRight="?android:attr/listPreferredItemPaddingRight">
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:srcCompat="@drawable/ic_more_horiz_black_24dp"
|
||||
app:layout_constraintRight_toLeftOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:paddingStart="12dp"
|
||||
android:paddingEnd="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:paddingTop="12dp"
|
||||
android:contentDescription="@string/description_cover"/>
|
||||
|
||||
<android.support.v7.widget.AppCompatImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_alignParentEnd="false"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:tint="?android:attr/textColorPrimary"
|
||||
app:srcCompat="@drawable/ic_more_horiz_black_24dp"/>
|
||||
<TextView
|
||||
android:id="@+id/download_text"
|
||||
style="@style/TextAppearance.Regular.Caption.Hint"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:text="DOWNLOADED"
|
||||
android:textAllCaps="true"
|
||||
app:layout_constraintRight_toLeftOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
android:layout_marginRight="16dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
|
@ -76,12 +76,12 @@
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/chapter_menu_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="center|end"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
app:srcCompat="@drawable/ic_more_horiz_black_24dp" />
|
||||
android:layout_marginRight="16dp" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
@ -1,5 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<changelog bulletedList="true">
|
||||
<changelogversion versionName="v0.6.3" changeDate="">
|
||||
<changelogtext>Fixed a crash when retrying a page.</changelogtext>
|
||||
|
||||
<changelogtext>Fixed a crash when sharing an image.</changelogtext>
|
||||
|
||||
<changelogtext>Fixed disappearing toolbar buttons in the catalog after a search.</changelogtext>
|
||||
</changelogversion>
|
||||
|
||||
<changelogversion versionName="v0.6.2" changeDate="">
|
||||
<changelogtext>Added a new completed manga filter for the library.</changelogtext>
|
||||
|
||||
<changelogtext>Added scanlator to chapters (if supported by source).</changelogtext>
|
||||
|
||||
<changelogtext>Added Discord server link.</changelogtext>
|
||||
|
||||
<changelogtext>Added new translations.</changelogtext>
|
||||
|
||||
<changelogtext>Extensions shouldn't crash the app anymore.</changelogtext>
|
||||
|
||||
<changelogtext>Crop borders is supported in webtoon reader and fixed in Android O.</changelogtext>
|
||||
|
||||
<changelogtext>Fixed a bug where storage permissions were always requested.</changelogtext>
|
||||
|
||||
<changelogtext>Minor UI and crash fixes.</changelogtext>
|
||||
</changelogversion>
|
||||
|
||||
<changelogversion versionName="v0.6.1" changeDate="">
|
||||
<changelogtext>Bugfix release.</changelogtext>
|
||||
|
401
app/src/main/res/values-de/strings.xml
Normal file
401
app/src/main/res/values-de/strings.xml
Normal file
@ -0,0 +1,401 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="name">Name</string>
|
||||
<string name="categories">Kategorien</string>
|
||||
<string name="manga">Manga</string>
|
||||
<string name="chapters">Kapitel</string>
|
||||
<string name="history">Verlauf</string>
|
||||
|
||||
<string name="label_settings">Einstellungen</string>
|
||||
<string name="label_download_queue">Download Warteschlange</string>
|
||||
<string name="label_library">Meine Bibliothek</string>
|
||||
<string name="label_recent_manga">Kürzlich gelesen</string>
|
||||
<string name="label_catalogues">Alle Mangas</string>
|
||||
<string name="label_latest_updates">neuste Updated</string>
|
||||
<string name="label_categories">Kategorie</string>
|
||||
<string name="label_selected">Ausgewählt: %1$d</string>
|
||||
<string name="label_backup">Backup</string>
|
||||
|
||||
<string name="action_settings">Einstellungen</string>
|
||||
<string name="action_filter">Filter</string>
|
||||
<string name="action_filter_downloaded">Heruntergeladen</string>
|
||||
<string name="action_filter_bookmarked">Lesezeichen</string>
|
||||
<string name="action_filter_unread">ungelesen</string>
|
||||
<string name="action_filter_read">gelesen</string>
|
||||
<string name="action_filter_empty">lösche Filter</string>
|
||||
<string name="action_sort_alpha">Alphabetisch</string>
|
||||
<string name="action_sort_total">Kapitel Anzahl</string>
|
||||
<string name="action_sort_last_read">zuletzt gelesen</string>
|
||||
<string name="action_sort_last_updated">letzes Update</string>
|
||||
<string name="action_search">Suche</string>
|
||||
<string name="action_select_all">Alle auswählen</string>
|
||||
<string name="action_mark_as_read">Als gelesen markieren</string>
|
||||
<string name="action_mark_as_unread">Als ungelesen markieren</string>
|
||||
<string name="action_mark_previous_as_read">voherige Kapitel als gelesen markieren</string>
|
||||
<string name="action_download">Herunterladen</string>
|
||||
<string name="action_bookmark">Lessezeichen hinzufügen</string>
|
||||
<string name="action_remove_bookmark">Entferne Lesezeichen</string>
|
||||
<string name="action_delete">Löschen</string>
|
||||
<string name="action_update">Update</string>
|
||||
<string name="action_update_library">Bibliothek updaten</string>
|
||||
<string name="action_edit">Bearbeiten</string>
|
||||
<string name="action_add">Hinzufügen</string>
|
||||
<string name="action_add_category">Füge eine Kategorie hinzu</string>
|
||||
<string name="action_edit_categories">Kategorien bearbeiten</string>
|
||||
<string name="action_rename_category">Kategorie umbenennen</string>
|
||||
<string name="action_move_category">zur Kategorie hinzufügen</string>
|
||||
<string name="action_edit_cover">ändere Cover</string>
|
||||
<string name="action_sort_up">aufsteigend Sortieren</string>
|
||||
<string name="action_sort_down">absteigend Sortieren</string>
|
||||
<string name="action_show_unread">Ungelesen</string>
|
||||
<string name="action_show_downloaded">Heruntergeladen</string>
|
||||
<string name="action_next_unread">nächstes ungelesenes</string>
|
||||
<string name="action_start">Start</string>
|
||||
<string name="action_stop">Stop</string>
|
||||
<string name="action_pause">Pause</string>
|
||||
<string name="action_clear">Löschen</string>
|
||||
<string name="action_close">Schließen</string>
|
||||
<string name="action_previous_chapter">vorheriges Kapitel</string>
|
||||
<string name="action_next_chapter">nächstes Kapitel</string>
|
||||
<string name="action_retry">erneut Versuchen</string>
|
||||
<string name="action_remove">Entfernen</string>
|
||||
<string name="action_resume">Fortfahren</string>
|
||||
<string name="action_move">verschieben</string>
|
||||
<string name="action_open_in_browser">Öffne im Browser</string>
|
||||
<string name="action_add_to_home_screen">zum Startbildschrim hinzufügen</string>
|
||||
<string name="action_display_mode">ändere Anzeigemodus</string>
|
||||
<string name="action_display">Anzeige</string>
|
||||
<string name="action_display_grid">Kacheln</string>
|
||||
<string name="action_display_list">Liste</string>
|
||||
<string name="action_set_filter">setze Filter</string>
|
||||
<string name="action_cancel">Abbrechen</string>
|
||||
<string name="action_sort">Sortierung</string>
|
||||
<string name="action_install">Installiere</string>
|
||||
<string name="action_share">Teilen</string>
|
||||
<string name="action_save">Speichern</string>
|
||||
<string name="action_reset">Zurücksetzen</string>
|
||||
<string name="action_undo">Rückgängig</string>
|
||||
<string name="action_export">Exportieren</string>
|
||||
<string name="action_open_log">Öffne Log</string>
|
||||
<string name="action_create">Erstellen</string>
|
||||
<string name="action_restore">Wiederherstellen</string>
|
||||
|
||||
<string name="deleting">Löschen…</string>
|
||||
<string name="loading">Laden…</string>
|
||||
|
||||
<string name="app_not_available">App nicht verfügbar</string>
|
||||
<string name="short_recent_updates">Updates</string>
|
||||
|
||||
<string name="pref_category_general">Allgemein</string>
|
||||
<string name="pref_category_reader">Leseeinstellungen</string>
|
||||
<string name="pref_category_downloads">Herunterladen</string>
|
||||
<string name="pref_category_sources">Quellen</string>
|
||||
<string name="pref_category_tracking">Synchronisation</string>
|
||||
<string name="pref_category_advanced">Erweitert</string>
|
||||
<string name="pref_category_about">Über</string>
|
||||
|
||||
<string name="pref_library_columns">Mangas per Reihe in Bibliothek</string>
|
||||
<string name="portrait">Hochformat</string>
|
||||
<string name="landscape">Querformat</string>
|
||||
<string name="default_columns">Standard</string>
|
||||
<string name="pref_library_update_interval">Bibliothek Update häufigkeit</string>
|
||||
<string name="update_never">Manuell</string>
|
||||
<string name="update_1hour">stündlich</string>
|
||||
<string name="update_2hour">aller 2 Stunden</string>
|
||||
<string name="update_3hour">aller 3 Stunden</string>
|
||||
<string name="update_6hour">aller 6 Stunden</string>
|
||||
<string name="update_12hour">aller 12 Stunden</string>
|
||||
<string name="update_24hour">täglich</string>
|
||||
<string name="update_48hour">alle 2 Tage</string>
|
||||
<string name="update_weekly">wöchentlich</string>
|
||||
<string name="update_monthly">monatlich</string>
|
||||
<string name="pref_library_update_categories">Kategorien fürs globale Update</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="pref_library_update_restriction">Bibliothek Updates einschränken</string>
|
||||
<string name="pref_library_update_restriction_summary">Update nur wenn folgende Bedingungen eintreffen</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="charging">ist am aufladen</string>
|
||||
<string name="pref_update_only_non_completed">nur laufende Mangas updaten</string>
|
||||
<string name="pref_auto_update_manga_sync">Synchronisiere Kapitel nach dem Lesen</string>
|
||||
<string name="pref_ask_update_manga_sync">Bestätigen vor Update</string>
|
||||
<string name="pref_theme">App Design</string>
|
||||
<string name="light_theme">Hauptdesign</string>
|
||||
<string name="dark_theme">dunkles Design</string>
|
||||
<string name="amoled_theme">AMOLED Design</string>
|
||||
<string name="pref_start_screen">Startbildschirm</string>
|
||||
<string name="pref_language">Sprache</string>
|
||||
<string name="system_default">Systemstandard</string>
|
||||
<string name="default_category">Standard Kategorie</string>
|
||||
<string name="default_category_summary">immer Fragen</string>
|
||||
|
||||
<string name="pref_fullscreen">Vollbild</string>
|
||||
<string name="pref_lock_orientation">Bildschirm nicht drehen</string>
|
||||
<string name="pref_page_transitions">Seitenübergänge</string>
|
||||
<string name="pref_show_page_number">zeige Seitennummer</string>
|
||||
<string name="pref_crop_borders">Ränder abschneiden</string>
|
||||
<string name="pref_custom_brightness">eigene Helligkeit festlegen</string>
|
||||
<string name="pref_custom_color_filter">nutze eigenen Farbfilter</string>
|
||||
<string name="pref_keep_screen_on">Bildschirm anlassen</string>
|
||||
<string name="pref_reader_navigation">Navigation</string>
|
||||
<string name="pref_read_with_volume_keys">Lautstärketasten</string>
|
||||
<string name="pref_read_with_volume_keys_inverted">Lautstärketasten invertieren</string>
|
||||
<string name="pref_read_with_tapping">Tippen</string>
|
||||
<string name="pref_reader_theme">Hintergrundfarbe</string>
|
||||
<string name="white_background">Weiß</string>
|
||||
<string name="black_background">Schwarz</string>
|
||||
<string name="pref_viewer_type">Standard Leserichtung</string>
|
||||
<string name="default_viewer">Standard</string>
|
||||
<string name="left_to_right_viewer">links nach rechts</string>
|
||||
<string name="right_to_left_viewer">rechts nach links</string>
|
||||
<string name="vertical_viewer">Vertikal</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="pref_image_decoder">Bilddecoder</string>
|
||||
<string name="pref_image_scale_type">Skalierung</string>
|
||||
<string name="scale_type_fit_screen">Bild ausfüllen</string>
|
||||
<string name="scale_type_stretch">Strecken</string>
|
||||
<string name="scale_type_fit_width">Horizontal ausfüllen</string>
|
||||
<string name="scale_type_fit_height">Vertical ausfüllen</string>
|
||||
<string name="scale_type_original_size">Orginalgröße</string>
|
||||
<string name="scale_type_smart_fit">Smartes ausfüllen</string>
|
||||
<string name="pref_zoom_start">Zoom Anfangsposition</string>
|
||||
<string name="zoom_start_automatic">Automatisch</string>
|
||||
<string name="zoom_start_left">Links</string>
|
||||
<string name="zoom_start_right">Rechts</string>
|
||||
<string name="zoom_start_center">Mitte</string>
|
||||
<string name="pref_rotation_type">Ausrichtung</string>
|
||||
<string name="rotation_free">Frei</string>
|
||||
<string name="rotation_lock">Gesperrt</string>
|
||||
<string name="rotation_force_portrait">erzwinge Hochformat</string>
|
||||
<string name="rotation_force_landscape">erzwinge Querformat</string>
|
||||
<string name="color_filter_r_value">R</string>
|
||||
<string name="color_filter_g_value">G</string>
|
||||
<string name="color_filter_b_value">B</string>
|
||||
<string name="color_filter_a_value">A</string>
|
||||
|
||||
|
||||
<string name="pref_download_directory">Downloadordner</string>
|
||||
<string name="pref_download_slots">gleichzeitige Downloads</string>
|
||||
<string name="pref_download_only_over_wifi">Nur über Wi-Fi herunterladen</string>
|
||||
<string name="pref_remove_after_marked_as_read">Löschen wenn als gelesen markiert</string>
|
||||
<string name="pref_remove_after_read">nach Lesen löschen</string>
|
||||
<string name="custom_dir">eigenes Verzeichnis</string>
|
||||
<string name="disabled">Deaktiviert</string>
|
||||
<string name="last_read_chapter">zuletzt gelesenes Kapitel</string>
|
||||
<string name="second_to_last">vorletztes Kapitel</string>
|
||||
<string name="third_to_last">vorvorletztes Kapitel</string>
|
||||
<string name="fourth_to_last">die 4 letzten Kapitel</string>
|
||||
<string name="fifth_to_last">die 5 letzten Kapitel</string>
|
||||
<string name="pref_download_new">Lade neue Kapitel herunter</string>
|
||||
<string name="pref_download_new_categories">Kategorien die Heruntergeladen werden sollen</string>
|
||||
|
||||
<string name="services">Anbieter</string>
|
||||
|
||||
<string name="backup">Backup</string>
|
||||
<string name="pref_create_backup">erstelle Backup</string>
|
||||
<string name="pref_create_backup_summ">erstellt ein Backup deiner aktuellen Bibliothek</string>
|
||||
<string name="pref_restore_backup">Backup wiederherstellen</string>
|
||||
<string name="pref_restore_backup_summ">Bibliothek mit Hilfe eines Backups wiederherstellen</string>
|
||||
<string name="pref_backup_directory">Backupordner</string>
|
||||
<string name="pref_backup_service_category">Service</string>
|
||||
<string name="pref_backup_interval">Backuphäufigkeit</string>
|
||||
<string name="pref_backup_slots">maximale Anzahl automatischer Backups</string>
|
||||
<string name="dialog_restoring_backup">Backup wird wiederhergestellt
|
||||
%1$s zur Bibliothek hinzugefügt</string>
|
||||
<string name="source_not_found">Quelle nicht gefunden</string>
|
||||
<string name="dialog_restoring_source_not_found">Backup wird wiederhergestellt
|
||||
%1%s Quelle nicht gefunden</string>
|
||||
<string name="backup_created">Backup erstellt</string>
|
||||
<string name="restore_completed">Wiederherstellen erfolgreich</string>
|
||||
<string name="error_opening_log">Log konnte nicht geöffnet werden</string>
|
||||
<string name="restore_completed_content">Das Wiederherstellen hat %1$s gedauert.
|
||||
%2$s Fehler gefunden.</string>
|
||||
<string name="backup_restore_content">Beim wiederhestellen werden Daten von den Quellen abgerufen, möglicherweiße enstehen dadurch Mobilfunkkosten.
|
||||
Vergewissere dich zudem das du alle benötigen Seitenlogin bereitgestellt hast bevor du mit dem Wiederherstellen beginnst.</string>
|
||||
<string name="file_saved">Datei in %1$s gespeichert</string>
|
||||
<string name="backup_choice">Was willst du sichern?</string>
|
||||
<string name="restoring_backup">Backup wiederherstellen</string>
|
||||
<string name="creating_backup">Backup erstellen</string>
|
||||
|
||||
<string name="pref_clear_chapter_cache">Kapitel Zwischenspeicher leeren</string>
|
||||
<string name="used_cache">belegt: %1$s</string>
|
||||
<string name="cache_deleted">Zwischenspeicher gelerrt. %1%d Datein wurden gelöscht</string>
|
||||
<string name="cache_delete_error">Ein Fehler ist während dem Leeren des Zwischenspeicher aufgetretten</string>
|
||||
<string name="pref_clear_cookies">Lösche Cookies</string>
|
||||
<string name="cookies_cleared">Cookies gelöscht</string>
|
||||
<string name="choices_reset">Standardantworten zurücksetzen</string>
|
||||
<string name="pref_clear_database">Lösche Datenbank</string>
|
||||
<string name="pref_clear_database_summary">Lösche alle nicht herundergeladenen Mangas und Kapitel</string>
|
||||
<string name="clear_database_confirmation">Bist du sicher? Lesestatus aller nicht runtergeladenen Mangas wird gelöscht werden</string>
|
||||
<string name="clear_database_completed">Einträge gelöscht</string>
|
||||
<string name="pref_refresh_library_metadata">Erneure Bibliotheks Metadaten</string>
|
||||
<string name="pref_refresh_library_metadata_summary">Läd neue Cover, Genres, Beschreibungen und andere Manga information herunter</string>
|
||||
<string name="pref_refresh_library_tracking">Erneuere Synchronisation Metadaten</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Synchronisiert den Lesestatus, die Berwertung und das zuletz gelesen Kapitel mit dem angemeldeten Synchronisation Anbietern</string>
|
||||
|
||||
<string name="version">Version</string>
|
||||
<string name="build_time">Erstellt am</string>
|
||||
<string name="pref_enable_automatic_updates">nach Updates suchen</string>
|
||||
<string name="pref_enable_automatic_updates_summary">Automatisch nach App Updates suchen</string>
|
||||
<string name="pref_enable_acra">Sende Fehlerberichte</string>
|
||||
<string name="pref_acra_summary">Hilft Fehler zu beheben. Keine sensiblen Daten werden gesendet</string>
|
||||
|
||||
|
||||
<string name="login_title">Bei %1$s anmelden</string>
|
||||
<string name="username">Nutzername</string>
|
||||
<string name="password">Kennwort</string>
|
||||
<string name="show_password">Zeige Kennwort</string>
|
||||
<string name="login">Anmelden</string>
|
||||
<string name="login_success">Anmelden erfolgreich</string>
|
||||
<string name="invalid_login">Anmeldefehler</string>
|
||||
<string name="unknown_error">unbekannter Fehler</string>
|
||||
|
||||
<string name="library_search_hint">Titel oder Author…</string>
|
||||
<string name="updating_category">Kategorie Updaten</string>
|
||||
<string name="confirm_delete_manga">Bist du sicher das du diesen Manga entfernen willst?</string>
|
||||
<string name="also_delete_chapters">auch die heruntergeladenen Kapitel löschen</string>
|
||||
|
||||
<string name="source_requires_login">Bei dieser Quelle musst du dich Anmelden</string>
|
||||
<string name="select_source">Wähle eine Quelle</string>
|
||||
<string name="no_valid_sources">Bitte wähle zumindest eine gültige Quelle</string>
|
||||
<string name="no_more_results">Keine weiteren Ergebnisse</string>
|
||||
<string name="local_source">Lokale Mangas</string>
|
||||
<string name="invalid_combination">Standard kann nicht zusammen mit anderen Kategorien gewählt werden</string>
|
||||
<string name="added_to_library">Der Manga wurde zu deiner Bibliothek hinzugefügt</string>
|
||||
|
||||
<string name="manga_not_in_db">Dieser Manga wurde von der Datenbank entfernt!</string>
|
||||
|
||||
<string name="manga_detail_tab">Info</string>
|
||||
<string name="description">Beschreibung</string>
|
||||
<string name="ongoing">Fortlaufend</string>
|
||||
<string name="unknown">Unbekannt</string>
|
||||
<string name="licensed">Lizenziert</string>
|
||||
<string name="add_to_library">zur Bibliothek hinzufügen</string>
|
||||
<string name="remove_from_library">aus Bibliothek entfernen</string>
|
||||
<string name="manga_info_author_label">Author</string>
|
||||
<string name="manga_info_artist_label">Artist</string>
|
||||
<string name="manga_info_chapters_label">Kapitel</string>
|
||||
<string name="manga_info_last_chapter_label">Letztes Kapitel</string>
|
||||
<string name="manga_info_status_label">Status</string>
|
||||
<string name="manga_info_source_label">Quelle</string>
|
||||
<string name="manga_info_genres_label">Genres</string>
|
||||
<string name="share_text">Vielleicht gefällt dir auch %1$s! von %2$s</string>
|
||||
<string name="circular_icon">rundes Symbol</string>
|
||||
<string name="rounded_icon">abgerundetes Symbol</string>
|
||||
<string name="square_icon">eckiges Symbol</string>
|
||||
<string name="star_icon">sternförmiges Symbol</string>
|
||||
<string name="shortcut_title">Shortcut Title</string>
|
||||
<string name="icon_shape">Symbolform</string>
|
||||
<string name="icon_creation_fail">konnte kein Shortcut erstellen!</string>
|
||||
<string name="delete_downloads_for_manga">Lösche runtergeladene Kapitel?</string>
|
||||
|
||||
<string name="manga_chapters_tab">Kapitel</string>
|
||||
<string name="manga_chapter_no_title">kein Titel</string>
|
||||
<string name="display_mode_chapter">Kapitel %1$s</string>
|
||||
<string name="chapter_downloaded">Heruntergeladen</string>
|
||||
<string name="chapter_queued">in Warteschlange</string>
|
||||
<string name="chapter_downloading">wird geladen</string>
|
||||
<string name="chapter_downloading_progress">wird heruntergeladen (%1$d/%2$d)</string>
|
||||
<string name="chapter_error">Fehler</string>
|
||||
<string name="chapter_paused">Pausiert</string>
|
||||
<string name="fetch_chapters_error">Fehler beim abrufen der Kapitel</string>
|
||||
<string name="show_title">zeige Titel</string>
|
||||
<string name="show_chapter_number">zeige Kaptielanzahl</string>
|
||||
<string name="sorting_mode">Sortieren nach</string>
|
||||
<string name="sort_by_source">Quelle</string>
|
||||
<string name="sort_by_number">Kapitelanzahl</string>
|
||||
<string name="manga_download">Herunterladen</string>
|
||||
<string name="download_1">lade nächstes Kapitel runter</string>
|
||||
<string name="download_5">lade die nächsten 5 Kapitel runter</string>
|
||||
<string name="download_10">lade die nächsten 10 Kapitel runter</string>
|
||||
<string name="download_all">Lade alle runter</string>
|
||||
<string name="download_unread">lade ungelesene runter</string>
|
||||
<string name="confirm_delete_chapters">Bist du sicher das du die ausgewählten Kapitel löschen willst?</string>
|
||||
|
||||
<string name="manga_tracking_tab">Synchronisation</string>
|
||||
<string name="reading">am Lesen</string>
|
||||
<string name="completed">Fertig</string>
|
||||
<string name="dropped">abgebrochen</string>
|
||||
<string name="on_hold">Pausiert</string>
|
||||
<string name="plan_to_read">will ich lesen</string>
|
||||
<string name="score">Bewertung</string>
|
||||
<string name="title">Titel</string>
|
||||
<string name="status">Status</string>
|
||||
|
||||
<string name="error_category_exists">eine Kategorie mit diesen Namen existiert bereits!</string>
|
||||
<string name="snack_categories_deleted">Kategorie gelöscht</string>
|
||||
|
||||
<string name="dialog_with_checkbox_remove_description">Das Lesedatum dieses Kapitel wird gelöscht. Bist du sicher?</string>
|
||||
<string name="dialog_with_checkbox_reset">Setze alle Kapitel dieses Mangas zurück</string>
|
||||
|
||||
<string name="snack_add_to_library">Manga zur Bibliothek hinzufügen?</string>
|
||||
|
||||
<string name="picture_saved">Bild gespeichert</string>
|
||||
<string name="saving_picture">speichere Bild</string>
|
||||
<string name="options">Einstellungen</string>
|
||||
|
||||
<string name="custom_filter">eigene Filter</string>
|
||||
<string name="set_as_cover">als Cover setzen</string>
|
||||
<string name="cover_updated">Cover geändert</string>
|
||||
<string name="page_downloaded">Seiten zu %1$s kopiert</string>
|
||||
<string name="downloading">wird heruntergeladen…</string>
|
||||
<string name="download_progress">Heruntergeladen %1$d%%</string>
|
||||
<string name="chapter_progress">Seite: %1$d</string>
|
||||
<string name="chapter_subtitle">Kapitel %1$s</string>
|
||||
<string name="no_next_chapter">nächstes Kapitel nicht gefunden</string>
|
||||
<string name="no_previous_chapter">vorheriges Kapitel nicht gefunden</string>
|
||||
<string name="decode_image_error">Bild konnte nicht geladen werden.
|
||||
Versuche entweder den Bilddecoder zu ändern oder Probiere eine der Optionen weiter unten aus</string>
|
||||
<string name="confirm_update_manga_sync">Sende das letzte gelesen Kapitel zu %1$d?</string>
|
||||
<string name="confirm_set_image_as_cover">Willst du dieses Bild als Cover setzen?</string>
|
||||
<string name="viewer_for_this_series">Leser dieser Serie</string>
|
||||
|
||||
<string name="recent_manga_source">%1$s - Kap.%2$s</string>
|
||||
|
||||
<string name="download_queue_error">Beim Kapitel runterladen trat ein Fehler auf. versuche es erneut</string>
|
||||
|
||||
<string name="notification_update_progress">Update fortschritt: %1$d/%2$d</string>
|
||||
<string name="notification_new_chapters">neue Kapitel gefunden</string>
|
||||
<string name="notification_new_chapters_text">Für %1$d Title</string>
|
||||
<string name="notification_cover_update_failed">Konnte Cover nicht ändern</string>
|
||||
<string name="notification_first_add_to_library">Bitte füge den Manga zu deiner Bibliothek hinzu bevor du das tust</string>
|
||||
<string name="notification_not_connected_to_ac_title">Synchronisation abgebrochen</string>
|
||||
<string name="notification_not_connected_to_ac_body">Nicht mit dem Stromnetz verbunden</string>
|
||||
<string name="notification_no_connection_title">Synchronisation abgebrochen</string>
|
||||
<string name="notification_no_connection_body">keine Verbindung möglich</string>
|
||||
|
||||
<string name="file_select_cover">wähle Coverbild</string>
|
||||
<string name="file_select_backup">wähle Backupdatei</string>
|
||||
<string name="file_select_icon">wähle Shortcutsymbol</string>
|
||||
|
||||
<string name="update_check_title">neues Update verfügbar!</string>
|
||||
<string name="update_check_confirm">Herunterladen</string>
|
||||
<string name="update_check_ignore">Ignorieren</string>
|
||||
<string name="update_check_no_new_updates">kein neues Update verfügbar</string>
|
||||
<string name="update_check_download_started">Runterladen gestartet</string>
|
||||
<string name="update_check_look_for_updates">suche nach Updates</string>
|
||||
|
||||
<string name="update_check_notification_file_download">lade Update runter</string>
|
||||
<string name="update_check_notification_download_in_progress">am Herunterladen</string>
|
||||
<string name="update_check_notification_download_complete">Herunterladen erfolgreich</string>
|
||||
<string name="update_check_notification_download_error">Fehler beim Herunterladen</string>
|
||||
<string name="update_check_notification_update_available">Update verfügbar</string>
|
||||
|
||||
<string name="description_backdrop">Hintergrundbild vom Manga</string>
|
||||
<string name="description_cover">Mangacover</string>
|
||||
|
||||
<string name="information_no_downloads">keine Downloads</string>
|
||||
<string name="information_no_recent">keine neuen Kapitel</string>
|
||||
<string name="information_no_recent_manga">keine kürzlich gelesene Manga</string>
|
||||
<string name="information_empty_library">leere Bibliothek</string>
|
||||
|
||||
<string name="download_notifier_downloader_title">Downloader</string>
|
||||
<string name="download_notifier_title_error">Fehler</string>
|
||||
<string name="download_notifier_unkown_error">während dem Herunterladen ist ein unerwarteter Fehler aufgetretten</string>
|
||||
<string name="download_notifier_page_error">im Ordner fehlt eine Seite</string>
|
||||
<string name="download_notifier_page_ready_error">eine Seite ist nicht geladen</string>
|
||||
<string name="download_notifier_text_only_wifi">keine Wifi verbindung verfügbar</string>
|
||||
<string name="download_notifier_no_network">kein Netzwerk verfügbar</string>
|
||||
<string name="download_notifier_download_paused">Runterladen pausiert</string>
|
||||
|
||||
<string name="track">Synchronisation</string>
|
||||
<string name="label_recent_updates">Bibliothek Updates</string>
|
||||
</resources>
|
@ -51,4 +51,48 @@
|
||||
<string name="action_install">설치</string>
|
||||
<string name="label_settings">세팅</string>
|
||||
<string name="action_display">디스플레이</string>
|
||||
<string name="history">기록</string>
|
||||
|
||||
<string name="label_download_queue">다운로드 큐</string>
|
||||
<string name="label_library">내 서재</string>
|
||||
<string name="label_recent_manga">최근 읽음</string>
|
||||
<string name="label_catalogues">카탈로그</string>
|
||||
<string name="label_recent_updates">서재 업데이트</string>
|
||||
<string name="action_sort_total">모든 챕터</string>
|
||||
<string name="action_sort_up">위로 정렬</string>
|
||||
<string name="action_sort_down">아래로 정렬</string>
|
||||
<string name="action_next_unread">다음 안 읽은 챕터로</string>
|
||||
<string name="action_start">읽기 시작</string>
|
||||
<string name="action_clear">기록 지우기</string>
|
||||
<string name="action_close">닫기</string>
|
||||
<string name="action_previous_chapter">이전 챕터</string>
|
||||
<string name="action_next_chapter">다음 챕터</string>
|
||||
<string name="action_retry">재시도</string>
|
||||
<string name="action_move">이동</string>
|
||||
<string name="action_add_to_home_screen">홈스크린에 추가</string>
|
||||
<string name="action_set_filter">필터 설정</string>
|
||||
<string name="action_share">공유</string>
|
||||
<string name="action_save">저장</string>
|
||||
<string name="action_reset">리셋</string>
|
||||
<string name="action_undo">되돌리기</string>
|
||||
<string name="action_export">내보내기</string>
|
||||
<string name="action_open_log">로그 열기</string>
|
||||
<string name="action_create">만들기</string>
|
||||
<string name="action_restore">복구하기</string>
|
||||
|
||||
<string name="deleting">삭제 중…</string>
|
||||
<string name="loading">로딩 중.…</string>
|
||||
|
||||
<string name="app_not_available">어플리케이션 이용 불가</string>
|
||||
<string name="short_recent_updates">업데이트</string>
|
||||
|
||||
<string name="pref_category_general">일반</string>
|
||||
<string name="pref_category_reader">리더</string>
|
||||
<string name="pref_category_downloads">다운로드</string>
|
||||
<string name="pref_category_sources">소스</string>
|
||||
<string name="pref_category_tracking">트래킹</string>
|
||||
<string name="pref_category_advanced">고급 설정</string>
|
||||
<string name="pref_category_about">정보</string>
|
||||
|
||||
<string name="pref_library_columns">가로로 서재 정렬</string>
|
||||
</resources>
|
||||
|
401
app/src/main/res/values-pl/strings.xml
Normal file
401
app/src/main/res/values-pl/strings.xml
Normal file
@ -0,0 +1,401 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources><string name="categories">Kategorie</string>
|
||||
<string name="chapters">Rozdziały</string>
|
||||
<string name="name">Nazwa</string>
|
||||
<string name="history">Historia</string>
|
||||
|
||||
<string name="label_settings">Ustawienia</string>
|
||||
<string name="label_download_queue">Kolejka pobierania</string>
|
||||
<string name="label_catalogues">Katalogi</string>
|
||||
<string name="label_recent_manga">Ostatnio czytane</string>
|
||||
<string name="action_settings">Ustawienia</string>
|
||||
<string name="action_filter">Filtruj</string>
|
||||
<string name="action_filter_downloaded">Pobrane</string>
|
||||
<string name="action_filter_unread">Nieprzeczytane</string>
|
||||
<string name="action_filter_read">Przeczytane</string>
|
||||
<string name="action_search">Szukaj</string>
|
||||
<string name="action_select_all">Zaznacz wszystko</string>
|
||||
<string name="label_library">Moja biblioteka</string>
|
||||
<string name="label_recent_updates">Aktualizacje biblioteki</string>
|
||||
<string name="label_categories">Kategorie</string>
|
||||
<string name="label_backup">Kopia zapasowa</string>
|
||||
|
||||
<string name="action_filter_bookmarked">Zakładki</string>
|
||||
<string name="action_filter_empty">Usuń filtry</string>
|
||||
<string name="action_sort_last_read">Ostatnio czytane</string>
|
||||
<string name="action_sort_last_updated">Ostatnio zaktualizowane</string>
|
||||
<string name="action_mark_as_read">Oznacz jako przeczytane</string>
|
||||
<string name="action_mark_as_unread">Oznacz jako nieprzeczytane</string>
|
||||
<string name="action_mark_previous_as_read">Oznacz poprzednie jako przeczytane</string>
|
||||
<string name="action_download">Pobierz</string>
|
||||
<string name="action_bookmark">Dodaj do zakładek</string>
|
||||
<string name="action_remove_bookmark">Usuń z zakładek</string>
|
||||
<string name="action_delete">Usuń</string>
|
||||
<string name="action_update">Aktualizuj</string>
|
||||
<string name="action_update_library">Aktualizuj bibliotekę</string>
|
||||
<string name="action_edit">Edytuj</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
<string name="action_add_category">Dodaj kategorię</string>
|
||||
<string name="action_edit_categories">Edytuj kategorie</string>
|
||||
<string name="action_rename_category">Zmień nazwę kategorii</string>
|
||||
<string name="action_move_category">Przenieś do kategorii</string>
|
||||
<string name="action_edit_cover">Edytuj okładkę</string>
|
||||
<string name="action_sort_total">Wszystkich rozdziałów</string>
|
||||
<string name="action_sort_up">Sortuj rosnąco</string>
|
||||
<string name="action_sort_down">Sortuj malejąco</string>
|
||||
<string name="action_show_unread">Nieprzeczytane</string>
|
||||
<string name="action_show_downloaded">Pobrane</string>
|
||||
<string name="action_next_unread">Następne nieprzeczytane</string>
|
||||
<string name="action_start">Start</string>
|
||||
<string name="action_stop">Stop</string>
|
||||
<string name="action_pause">Wstrzymaj</string>
|
||||
<string name="action_clear">Wyczyść</string>
|
||||
<string name="action_close">Zamknij</string>
|
||||
<string name="action_previous_chapter">Poprzedni rozdział</string>
|
||||
<string name="action_next_chapter">Następny rozdział</string>
|
||||
<string name="action_retry">Spróbuj ponownie</string>
|
||||
<string name="action_remove">Usuń</string>
|
||||
<string name="action_resume">Wznów</string>
|
||||
<string name="action_move">Przenieś</string>
|
||||
<string name="action_open_in_browser">Otwórz w przeglądarce</string>
|
||||
<string name="action_add_to_home_screen">Dodaj do ekranu głównego</string>
|
||||
<string name="action_display_mode">Zmień tryb wyświetlania</string>
|
||||
<string name="action_display">Widok</string>
|
||||
<string name="action_display_grid">Siatka</string>
|
||||
<string name="action_display_list">Lista</string>
|
||||
<string name="action_set_filter">Ustaw filtry</string>
|
||||
<string name="action_cancel">Anuluj</string>
|
||||
<string name="action_sort">Sortuj</string>
|
||||
<string name="action_install">Zainstaluj</string>
|
||||
<string name="action_share">Udostępnij</string>
|
||||
<string name="action_save">Zapisz</string>
|
||||
<string name="action_undo">Cofnij</string>
|
||||
<string name="action_export">Eksportuj</string>
|
||||
<string name="action_create">Utwórz</string>
|
||||
<string name="action_restore">Przywróć</string>
|
||||
|
||||
<string name="deleting">Usuwanie…</string>
|
||||
<string name="loading">Ładowanie…</string>
|
||||
|
||||
<string name="app_not_available">Aplikacja niedostępna</string>
|
||||
<string name="short_recent_updates">Aktualizacje</string>
|
||||
|
||||
<string name="pref_category_general">Ogólne</string>
|
||||
<string name="pref_category_reader">Czytnik</string>
|
||||
<string name="pref_category_downloads">Pobieranie</string>
|
||||
<string name="pref_category_sources">Źródła</string>
|
||||
<string name="pref_category_advanced">Zaawansowane</string>
|
||||
<string name="pref_category_about">O aplikacji</string>
|
||||
|
||||
<string name="pref_library_columns">Mang na rząd biblioteki</string>
|
||||
<string name="pref_refresh_library_metadata_summary">Aktualizuje okładki, gatunki, opisy i informacje o statusie mang</string>
|
||||
<string name="add_to_library">Dodaj do biblioteki</string>
|
||||
<string name="remove_from_library">Usuń z biblioteki</string>
|
||||
<string name="manga_info_author_label">Autor</string>
|
||||
<string name="manga_info_artist_label">Rysownik</string>
|
||||
<string name="manga_info_source_label">Źródło</string>
|
||||
<string name="manga_info_genres_label">Gatunki</string>
|
||||
<string name="manga_chapter_no_title">Brak tytułu</string>
|
||||
<string name="display_mode_chapter">Rozdział %1$s</string>
|
||||
<string name="chapter_error">Błąd</string>
|
||||
<string name="chapter_paused">Wstrzymano</string>
|
||||
<string name="manga_download">Pobierz</string>
|
||||
<string name="download_1">Pobierz kolejny rozdział</string>
|
||||
<string name="download_5">Pobierz kolejne 5 rozdziałów</string>
|
||||
<string name="download_10">Pobierz kolejne 10 rozdziałów</string>
|
||||
<string name="download_all">Pobierz wszystko</string>
|
||||
<string name="download_unread">Pobierz nieprzeczytane</string>
|
||||
<string name="confirm_delete_chapters">Czy na pewno chcesz usunąć wybrane rozdziały?</string>
|
||||
|
||||
<string name="reading">Czytane</string>
|
||||
<string name="completed">Ukończone</string>
|
||||
<string name="dropped">Porzucone</string>
|
||||
<string name="on_hold">Wstrzymane</string>
|
||||
<string name="plan_to_read">Planowane</string>
|
||||
<string name="score">Ocena</string>
|
||||
<string name="title">Tytuł</string>
|
||||
<string name="error_category_exists">Kategoria o takiej nazwie już istnieje!</string>
|
||||
<string name="picture_saved">Obrazek zapisany</string>
|
||||
<string name="saving_picture">Zapisywanie obrazka</string>
|
||||
<string name="options">Opcje</string>
|
||||
|
||||
<string name="set_as_cover">Ustaw jako okładkę</string>
|
||||
<string name="cover_updated">Okładka zaktualizowana</string>
|
||||
<string name="downloading">Pobieranie…</string>
|
||||
<string name="download_progress">Pobrano %1$d%%</string>
|
||||
<string name="chapter_progress">Strona: %1$d</string>
|
||||
<string name="chapter_subtitle">Rozdział %1$s</string>
|
||||
<string name="no_next_chapter">Nie znaleziono następnego rozdziału</string>
|
||||
<string name="no_previous_chapter">Nie znaleziono poprzedniego rozdziału</string>
|
||||
<string name="recent_manga_source">%1$s - Rozdz. %2$s</string>
|
||||
|
||||
<string name="notification_new_chapters">Znaleziono nowe rozdziały</string>
|
||||
<string name="notification_not_connected_to_ac_title">Synchronizacja anulowana</string>
|
||||
<string name="notification_not_connected_to_ac_body">Nie podłączono ładowarki</string>
|
||||
<string name="notification_no_connection_title">Synchronizacja anulowana</string>
|
||||
<string name="notification_no_connection_body">Brak połączenia</string>
|
||||
|
||||
<string name="file_select_cover">Wybierz okładkę</string>
|
||||
<string name="update_check_title">Dostępna nowa aktualizacja!</string>
|
||||
<string name="update_check_confirm">Pobierz</string>
|
||||
<string name="update_check_ignore">Ignoruj</string>
|
||||
<string name="update_check_no_new_updates">Brak nowych aktualizacji</string>
|
||||
<string name="update_check_download_started">Rozpoczęto pobieranie</string>
|
||||
<string name="update_check_look_for_updates">Szukanie aktualizacji</string>
|
||||
|
||||
<string name="update_check_notification_file_download">Pobierz aktualizację</string>
|
||||
<string name="update_check_notification_download_in_progress">Trwa pobieranie</string>
|
||||
<string name="update_check_notification_download_complete">Pobieranie ukończone</string>
|
||||
<string name="update_check_notification_download_error">Błąd pobierania</string>
|
||||
<string name="update_check_notification_update_available">Dostępna aktualizacja</string>
|
||||
|
||||
<string name="information_empty_library">Biblioteka pusta</string>
|
||||
|
||||
<string name="download_notifier_title_error">Błąd</string>
|
||||
<string name="download_notifier_unkown_error">Podczas pobierania rozdziału wystąpił nieoczekiwany błąd</string>
|
||||
<string name="download_notifier_download_paused">Pobieranie wstrzymane</string>
|
||||
|
||||
<string name="label_latest_updates">Ostatnio aktualizowane</string>
|
||||
<string name="label_selected">Zaznaczono: %1$d</string>
|
||||
<string name="action_sort_alpha">Alfabetycznie</string>
|
||||
<string name="track">Śledzenie</string>
|
||||
<string name="action_reset">Reset</string>
|
||||
<string name="services">Usługi</string>
|
||||
|
||||
<string name="version">Wersja</string>
|
||||
<string name="pref_enable_automatic_updates">Sprawdź aktualizacje</string>
|
||||
<string name="pref_enable_automatic_updates_summary">Automatycznie sprawdzaj aktualizacje aplikacji</string>
|
||||
<string name="login_title">Logowanie do %1$s</string>
|
||||
<string name="username">Nazwa użytkownika</string>
|
||||
<string name="password">Hasło</string>
|
||||
<string name="show_password">Pokaż hasło</string>
|
||||
<string name="login">Zaloguj się</string>
|
||||
<string name="invalid_login">Błąd logowania</string>
|
||||
<string name="unknown_error">Nieznany błąd</string>
|
||||
|
||||
<string name="library_search_hint">Tytuł lub autor…</string>
|
||||
<string name="source_requires_login">To źródło wymaga zalogowania</string>
|
||||
<string name="select_source">Wybierz źródło</string>
|
||||
<string name="confirm_delete_manga">Czy na pewno chcesz usunąć wybrane mangi?</string>
|
||||
<string name="also_delete_chapters">Usuń też pobrane rozdziały</string>
|
||||
|
||||
<string name="updating_category">Aktualizowanie kategorii</string>
|
||||
<string name="no_valid_sources">Włącz co najmniej jedno poprawne źródło</string>
|
||||
<string name="invalid_combination">Domyślna kategoria nie może być wybrana razem z innymi</string>
|
||||
<string name="manga_detail_tab">Informacje</string>
|
||||
<string name="description">Opis</string>
|
||||
<string name="manga_not_in_db">Ta manga została usunięta z bazy danych!</string>
|
||||
|
||||
<string name="no_more_results">Nie ma więcej wyników</string>
|
||||
<string name="added_to_library">Manga została dodana do twojej biblioteki</string>
|
||||
|
||||
<string name="action_open_log">Otwórz log</string>
|
||||
<string name="show_title">Pokaż tytuł</string>
|
||||
<string name="show_chapter_number">Pokaż numer rozdziału</string>
|
||||
<string name="portrait">Pionowo</string>
|
||||
<string name="landscape">Poziomo</string>
|
||||
<string name="default_columns">Domyślnie</string>
|
||||
<string name="pref_library_update_interval">Częstotliwość aktualizacji biblioteki</string>
|
||||
<string name="update_never">Ręcznie</string>
|
||||
<string name="update_1hour">Co godzinę</string>
|
||||
<string name="update_2hour">Co 2 godziny</string>
|
||||
<string name="update_3hour">Co 3 godziny</string>
|
||||
<string name="update_6hour">Co 6 godzin</string>
|
||||
<string name="update_12hour">Co 12 godzin</string>
|
||||
<string name="update_24hour">Co 1 dzień</string>
|
||||
<string name="update_48hour">Co 2 dni</string>
|
||||
<string name="update_weekly">Co tydzień</string>
|
||||
<string name="update_monthly">Co miesiąc</string>
|
||||
<string name="pref_library_update_categories">Kategorie do zawarcia w aktualizacji globalnej</string>
|
||||
<string name="all">Wszystko</string>
|
||||
<string name="pref_library_update_restriction">Warunki aktualizacji biblioteki</string>
|
||||
<string name="pref_library_update_restriction_summary">Aktualizuje tylko, kiedy spełnione są te warunki</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="charging">Ładowanie</string>
|
||||
<string name="pref_update_only_non_completed">Aktualizuj tylko wychodzące mangi</string>
|
||||
<string name="pref_auto_update_manga_sync">Synchronizuj rozdziały po przeczytaniu</string>
|
||||
<string name="pref_ask_update_manga_sync">Potwierdź przed aktualizacją</string>
|
||||
<string name="pref_theme">Motyw aplikacji</string>
|
||||
<string name="light_theme">Główny motyw</string>
|
||||
<string name="dark_theme">Ciemny motyw</string>
|
||||
<string name="amoled_theme">Motyw AMOLED</string>
|
||||
<string name="pref_start_screen">Ekran startowy</string>
|
||||
<string name="pref_language">Język</string>
|
||||
<string name="system_default">Systemowy</string>
|
||||
<string name="default_category">Domyślna kategoria</string>
|
||||
<string name="default_category_summary">Zawsze pytaj</string>
|
||||
|
||||
<string name="pref_fullscreen">Pełny ekran</string>
|
||||
<string name="pref_lock_orientation">Zablokuj orientację</string>
|
||||
<string name="pref_page_transitions">Przejścia stron</string>
|
||||
<string name="pref_show_page_number">Pokazuj numer strony</string>
|
||||
<string name="pref_crop_borders">Przycinaj krawędzie</string>
|
||||
<string name="pref_custom_brightness">Używaj własnej jasności</string>
|
||||
<string name="pref_keep_screen_on">Nie wyłączaj ekranu</string>
|
||||
<string name="pref_custom_color_filter">Używaj własnych filtrów kolorów</string>
|
||||
<string name="pref_read_with_volume_keys">Przyciski głośności</string>
|
||||
<string name="pref_read_with_volume_keys_inverted">Odwróć przyciski głośności</string>
|
||||
<string name="pref_read_with_tapping">Stukanie</string>
|
||||
<string name="pref_reader_theme">Kolor tła</string>
|
||||
<string name="white_background">Biały</string>
|
||||
<string name="black_background">Czarny</string>
|
||||
<string name="default_viewer">Domyślnie</string>
|
||||
<string name="left_to_right_viewer">Od lewej do prawej</string>
|
||||
<string name="right_to_left_viewer">Od prawej do lewej</string>
|
||||
<string name="vertical_viewer">Pionowo</string>
|
||||
<string name="webtoon_viewer">Do webtoons</string>
|
||||
<string name="pref_viewer_type">Domyślny styl czytania</string>
|
||||
<string name="pref_image_decoder">Dekoder obrazków</string>
|
||||
<string name="scale_type_fit_screen">Dopasuj do ekranu</string>
|
||||
<string name="scale_type_stretch">Rozciągnij</string>
|
||||
<string name="scale_type_fit_width">Dopasuj do szerokości</string>
|
||||
<string name="scale_type_fit_height">Dopasuj do wysokości</string>
|
||||
<string name="pref_image_scale_type">Rodzaj powiększenia</string>
|
||||
<string name="scale_type_original_size">Oryginalny rozmiar</string>
|
||||
<string name="scale_type_smart_fit">Inteligentnie</string>
|
||||
<string name="pref_zoom_start">Początkowa pozycja przybliżenia</string>
|
||||
<string name="zoom_start_automatic">Automatycznie</string>
|
||||
<string name="zoom_start_left">Po lewej</string>
|
||||
<string name="zoom_start_right">Po prawej</string>
|
||||
<string name="zoom_start_center">Wyśrodkuj</string>
|
||||
<string name="pref_rotation_type">Obrót ekranu</string>
|
||||
<string name="rotation_free">Dowolnie</string>
|
||||
<string name="rotation_lock">Zablokuj</string>
|
||||
<string name="rotation_force_portrait">Wymuś pionowo</string>
|
||||
<string name="rotation_force_landscape">Wymuś poziomo</string>
|
||||
<string name="color_filter_r_value">R</string>
|
||||
<string name="color_filter_g_value">G</string>
|
||||
<string name="color_filter_b_value">B</string>
|
||||
<string name="color_filter_a_value">A</string>
|
||||
|
||||
|
||||
<string name="pref_download_directory">Katalog pobierania</string>
|
||||
<string name="pref_download_slots">Jednoczesne pobieranie</string>
|
||||
<string name="pref_download_only_over_wifi">Pobieraj tylko przez Wi-Fi</string>
|
||||
<string name="pref_remove_after_marked_as_read">Usuwaj po oznaczeniu jako przeczytane</string>
|
||||
<string name="pref_remove_after_read">Usuwaj rozdziały po przeczytaniu</string>
|
||||
<string name="custom_dir">Własny katalog</string>
|
||||
<string name="disabled">Wyłączone</string>
|
||||
<string name="last_read_chapter">Ostatnio czytany rozdział</string>
|
||||
<string name="second_to_last">Przedostatnio czytany rozdział</string>
|
||||
<string name="third_to_last">3 rozdziały do tyłu</string>
|
||||
<string name="fourth_to_last">4 rozdziały do tyłu</string>
|
||||
<string name="fifth_to_last">5 rozdziałów do tyłu</string>
|
||||
<string name="pref_download_new">Pobieraj nowe rozdziały</string>
|
||||
<string name="backup">Kopia zapasowa</string>
|
||||
<string name="manga">Mangi</string>
|
||||
<string name="pref_category_tracking">Śledzenie</string>
|
||||
<string name="pref_reader_navigation">Obsługa</string>
|
||||
<string name="pref_download_new_categories">Kategorie do pobierania</string>
|
||||
|
||||
<string name="pref_create_backup">Utwórz kopię zapasową</string>
|
||||
<string name="pref_create_backup_summ">Może być użyta do przywrócenia aktualnej biblioteki</string>
|
||||
<string name="pref_restore_backup">Przywróć kopię zapasową</string>
|
||||
<string name="pref_restore_backup_summ">Przywraca bibliotekę z pliku kopii zapasowej</string>
|
||||
<string name="pref_backup_directory">Katalog kopii zapasowych</string>
|
||||
<string name="pref_backup_interval">Częstotliwość tworzenia kopii</string>
|
||||
<string name="pref_backup_slots">Maks. automatycznych kopii</string>
|
||||
<string name="pref_backup_service_category">Serwisowe</string>
|
||||
<string name="dialog_restoring_backup">Przywracanie kopii zapasowej
|
||||
%1$s dodano do biblioteki</string>
|
||||
<string name="source_not_found">Nie znaleziono źródła</string>
|
||||
<string name="dialog_restoring_source_not_found">Przywracanie kopii zapasowej
|
||||
Nie znaleziono źródła %1$s</string>
|
||||
<string name="restore_completed_content">Przywracanie trwało %1$s.
|
||||
Znalezionych błędów: %2$s.</string>
|
||||
<string name="backup_choice">Czego kopię chcesz zrobić?</string>
|
||||
<string name="restoring_backup">Przywracanie kopii zapasowej</string>
|
||||
<string name="creating_backup">Tworzenie kopii zapasowej</string>
|
||||
|
||||
<string name="pref_clear_chapter_cache">Wyczyść cache rozdziałów</string>
|
||||
<string name="used_cache">W użyciu: %1$s</string>
|
||||
<string name="cache_deleted">Wyczyszczono cache. Usunięto plików: %1$d</string>
|
||||
<string name="cache_delete_error">Podczas czyszczenie cache wystąpił błąd</string>
|
||||
<string name="pref_clear_cookies">Usuń ciasteczka</string>
|
||||
<string name="cookies_cleared">Ciasteczka usunięte</string>
|
||||
<string name="pref_clear_database_summary">Usuń mangi i rozdziały, których nie ma w twojej bibliotece</string>
|
||||
<string name="pref_clear_database">Wyczyść bazę danych</string>
|
||||
<string name="pref_enable_acra">Wysyłaj raporty o awariach</string>
|
||||
<string name="pref_acra_summary">Pomaga naprawiać błędy. Żadne wrażliwe dane nie będą wysyłane</string>
|
||||
|
||||
|
||||
<string name="backup_created">Utworzono kopię zapasową</string>
|
||||
<string name="restore_completed">Ukończono przywracanie</string>
|
||||
<string name="error_opening_log">Nie udało się otworzyć logu</string>
|
||||
<string name="backup_restore_content">Przywracanie używa źródeł do pobierania danych, operator może naliczać opłaty.
|
||||
Przed przywróceniem upewnij się też, że jesteś poprawnie zalogowany do źródeł.</string>
|
||||
<string name="file_saved">Plik zapisano do %1$s</string>
|
||||
<string name="choices_reset">Resetuj wybory okien dialogowych</string>
|
||||
<string name="clear_database_confirmation">Na pewno? Przeczytane rozdziały i postęp w mangach spoza biblioteki zostaną utracone</string>
|
||||
<string name="clear_database_completed">Pozycje usunięte</string>
|
||||
<string name="pref_refresh_library_metadata">Odśwież metadane biblioteki</string>
|
||||
<string name="pref_refresh_library_tracking">Odśwież metadane śledzenia</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Aktualizuje status, ocenę i ostatnio czytany rozdział na podst. usług sychronizacji</string>
|
||||
|
||||
<string name="build_time">Build utworzony</string>
|
||||
<string name="login_success">Logowanie udane</string>
|
||||
<string name="local_source">Lokalne mangi</string>
|
||||
<string name="ongoing">Wychodzące</string>
|
||||
<string name="unknown">Nieznane</string>
|
||||
<string name="licensed">Licencjonowane</string>
|
||||
<string name="manga_info_chapters_label">Rozdziały</string>
|
||||
<string name="manga_info_last_chapter_label">Ostatni rozdział</string>
|
||||
<string name="manga_info_status_label">Status</string>
|
||||
<string name="share_text">Zobacz %1$s! na %2$s</string>
|
||||
<string name="circular_icon">Okrągła ikonka</string>
|
||||
<string name="rounded_icon">Zaokrąglona ikonka</string>
|
||||
<string name="square_icon">Kwadratowa ikonka</string>
|
||||
<string name="star_icon">Ikonka-gwiazdka</string>
|
||||
<string name="shortcut_title">Tytuł skrótu</string>
|
||||
<string name="icon_shape">Kształt ikony</string>
|
||||
<string name="icon_creation_fail">Nie udało się utworzyć skrótu!</string>
|
||||
<string name="delete_downloads_for_manga">Usunąć pobrane rozdziały?</string>
|
||||
|
||||
<string name="manga_chapters_tab">Rozdziały</string>
|
||||
<string name="chapter_downloaded">Pobrany</string>
|
||||
<string name="chapter_queued">W kolejce</string>
|
||||
<string name="chapter_downloading">Pobieranie</string>
|
||||
<string name="chapter_downloading_progress">Pobieranie (%1$d/%2$d)</string>
|
||||
<string name="fetch_chapters_error">Błąd przy pobieraniu listy rozdziałów</string>
|
||||
<string name="sorting_mode">Tryb sortowania</string>
|
||||
<string name="sort_by_source">Według źródła</string>
|
||||
<string name="sort_by_number">Według numeru rozdziału</string>
|
||||
<string name="manga_tracking_tab">Śledzenie</string>
|
||||
<string name="status">Status</string>
|
||||
|
||||
<string name="snack_categories_deleted">Kategorie usunięte</string>
|
||||
|
||||
<string name="dialog_with_checkbox_remove_description">To usunie datę przeczytania tego rozdziały. Na pewno?</string>
|
||||
<string name="dialog_with_checkbox_reset">Resetuj wszystkie rozdziały tej mangi</string>
|
||||
|
||||
<string name="snack_add_to_library">Dodać mangę do biblioteki?</string>
|
||||
|
||||
<string name="custom_filter">Własny filtr</string>
|
||||
<string name="page_downloaded">Strona skopiowana do %1$s</string>
|
||||
<string name="decode_image_error">Nie można załadować obrazka.
|
||||
Spróbuj zmienić dekoder lub skorzystaj z jednej z opcji poniżej</string>
|
||||
<string name="confirm_update_manga_sync">Zaktualizować ostatni przeczytany rozdział na %1$d we włączonych usługach?</string>
|
||||
<string name="confirm_set_image_as_cover">Czy chcesz ustawić ten obrazek jako okładkę?</string>
|
||||
<string name="viewer_for_this_series">Widok dla tej serii</string>
|
||||
|
||||
<string name="download_queue_error">Wystąpił błąd podczas pobierania rozdziałów. Możesz spróbować ponownie w sekcji pobierania</string>
|
||||
|
||||
<string name="notification_update_progress">Stan aktualizacji: %1$d/%2$d</string>
|
||||
<string name="notification_new_chapters_text">Dla %1$d tytułów</string>
|
||||
<string name="notification_cover_update_failed">Nie udało się zaktualizować okładki</string>
|
||||
<string name="notification_first_add_to_library">Dodaj tę mangę do biblioteki, zanim to zrobisz</string>
|
||||
<string name="file_select_backup">Wybierz plik kopii zapasowej</string>
|
||||
<string name="file_select_icon">Wybierz ikonę skrótu</string>
|
||||
|
||||
<string name="description_backdrop">Obrazek tła mangi</string>
|
||||
<string name="description_cover">Okładka mangi</string>
|
||||
|
||||
<string name="information_no_downloads">Brak pobieranych plików</string>
|
||||
<string name="information_no_recent">Brak ostatnich rozdziałów</string>
|
||||
<string name="information_no_recent_manga">Brak ostatnio czytanych mang</string>
|
||||
<string name="download_notifier_downloader_title">Pobieranie</string>
|
||||
<string name="download_notifier_page_error">Brakuje strony w katalogu</string>
|
||||
<string name="download_notifier_page_ready_error">Strona nie jest załadowana</string>
|
||||
<string name="download_notifier_text_only_wifi">Brak połączenia Wi-Fi</string>
|
||||
<string name="download_notifier_no_network">Brak połączenia sieciowego</string>
|
||||
</resources>
|
@ -9,7 +9,7 @@
|
||||
<string name="label_settings">Configurações</string>
|
||||
<string name="label_download_queue">Fila de download</string>
|
||||
<string name="label_library">Minha biblioteca</string>
|
||||
<string name="label_recent_manga">Lido recentemente</string>
|
||||
<string name="label_recent_manga">Lidos recentemente</string>
|
||||
<string name="label_catalogues">Catálogos</string>
|
||||
<string name="label_recent_updates">Atualizações da biblioteca</string>
|
||||
<string name="label_latest_updates">Últimas atualizações</string>
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
<string name="action_settings">Configurações</string>
|
||||
<string name="action_filter">Filtrar</string>
|
||||
<string name="action_filter_downloaded">Download concluído</string>
|
||||
<string name="action_filter_downloaded">Disponível offline</string>
|
||||
<string name="action_filter_bookmarked">Favoritos</string>
|
||||
<string name="action_filter_unread">Não lidos</string>
|
||||
<string name="action_filter_read">Lidos</string>
|
||||
@ -49,7 +49,7 @@
|
||||
<string name="action_sort_up">Ordem ascendente</string>
|
||||
<string name="action_sort_down">Ordem decrescente</string>
|
||||
<string name="action_show_unread">Não lido</string>
|
||||
<string name="action_show_downloaded">Download concluído</string>
|
||||
<string name="action_show_downloaded">Disponível offline</string>
|
||||
<string name="action_next_unread">Próximo não lido</string>
|
||||
<string name="action_start">Iniciar</string>
|
||||
<string name="action_stop">Parar</string>
|
||||
@ -149,7 +149,7 @@
|
||||
<string name="left_to_right_viewer">Esquerda para direita</string>
|
||||
<string name="right_to_left_viewer">Direita para esquerda</string>
|
||||
<string name="vertical_viewer">Vertical</string>
|
||||
<string name="webtoon_viewer">Vertical continuo</string>
|
||||
<string name="webtoon_viewer">Vertical contínuo</string>
|
||||
<string name="pref_image_decoder">Decodificador de imagem</string>
|
||||
<string name="pref_image_scale_type">Tipo de escala</string>
|
||||
<string name="scale_type_fit_screen">Ajustar à tela</string>
|
||||
@ -210,10 +210,10 @@
|
||||
<string name="error_opening_log">Não foi possível abrir o registro de eventos</string>
|
||||
<string name="restore_completed_content">A restauração levou %1$s.
|
||||
%2$s erros encontrados.</string>
|
||||
<string name="backup_restore_content">A restauração usa as fontes para recuperar os dados, cobranças poderão ser feitas pela sua operadora.
|
||||
Além disso, certifique-se de ter configurado as fontes que requerem uma conta antes de iniciar a restauração.</string>
|
||||
<string name="backup_restore_content">A restauração usa as fontes para obter os dados, logo cobranças poderão ser efetuadas pela sua operadora devido ao uso de dados móveis.
|
||||
Além disso, verifique se as fontes que requerem uma conta foram configuradas corretamente antes de iniciar a restauração.</string>
|
||||
<string name="file_saved">Arquivo salvo em %1$s</string>
|
||||
<string name="backup_choice">Do que você fazer backup?</string>
|
||||
<string name="backup_choice">Do que você deseja fazer backup?</string>
|
||||
<string name="restoring_backup">Restaurando backup</string>
|
||||
<string name="creating_backup">Fazendo backup</string>
|
||||
|
||||
@ -229,9 +229,9 @@ Além disso, certifique-se de ter configurado as fontes que requerem uma conta a
|
||||
<string name="clear_database_confirmation">Tem certeza? Os capítulos lidos e o progresso em mangás que não estão na sua biblioteca serão perdidos</string>
|
||||
<string name="clear_database_completed">Entradas excluídas</string>
|
||||
<string name="pref_refresh_library_metadata">Atualizar metadados da biblioteca</string>
|
||||
<string name="pref_refresh_library_metadata_summary">Atualiza informações como as capas, gêneros, descrições e estado dos mangás</string>
|
||||
<string name="pref_refresh_library_metadata_summary">Atualiza informações como as capas, gêneros, descrições e situação dos mangás</string>
|
||||
<string name="pref_refresh_library_tracking">Atualizar metadados do monitoramento</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Atualiza informações como estado, avaliações e últimos capítulos lidos dos serviços de monitoramento</string>
|
||||
<string name="pref_refresh_library_tracking_summary">Atualiza informações como situação, avaliações e últimos capítulos lidos dos serviços de monitoramento</string>
|
||||
|
||||
<string name="version">Versão</string>
|
||||
<string name="build_time">Data de compilação</string>
|
||||
@ -252,8 +252,8 @@ Além disso, certifique-se de ter configurado as fontes que requerem uma conta a
|
||||
|
||||
<string name="library_search_hint">Título ou autor…</string>
|
||||
<string name="updating_category">Atualizando categoria</string>
|
||||
<string name="confirm_delete_manga">Tem certeza de que deseja remover o mangá selecionado?</string>
|
||||
<string name="also_delete_chapters">Também excluir os downloads</string>
|
||||
<string name="confirm_delete_manga">Tem certeza de que deseja remover os mangás selecionados?</string>
|
||||
<string name="also_delete_chapters">Também excluir os capítulos disponíveis offline</string>
|
||||
|
||||
<string name="source_requires_login">Esta fonte requer uma conta</string>
|
||||
<string name="select_source">Selecione uma fonte</string>
|
||||
@ -274,8 +274,8 @@ Além disso, certifique-se de ter configurado as fontes que requerem uma conta a
|
||||
<string name="manga_info_author_label">Autor</string>
|
||||
<string name="manga_info_artist_label">Artista</string>
|
||||
<string name="manga_info_chapters_label">Capítulos</string>
|
||||
<string name="manga_info_last_chapter_label">Último capítulo</string>
|
||||
<string name="manga_info_status_label">Estado</string>
|
||||
<string name="manga_info_last_chapter_label">Capítulo mais recente</string>
|
||||
<string name="manga_info_status_label">Situação</string>
|
||||
<string name="manga_info_source_label">Fonte</string>
|
||||
<string name="manga_info_genres_label">Gêneros</string>
|
||||
<string name="share_text">Confira %1$s! em %2$s</string>
|
||||
@ -285,13 +285,13 @@ Além disso, certifique-se de ter configurado as fontes que requerem uma conta a
|
||||
<string name="star_icon">Ícone de estrela</string>
|
||||
<string name="shortcut_title">Título do atalho</string>
|
||||
<string name="icon_shape">Formato do ícone</string>
|
||||
<string name="icon_creation_fail">"Erro ao criar o atalho!"</string>
|
||||
<string name="delete_downloads_for_manga">Excluir os downloads dos capítulos?</string>
|
||||
<string name="icon_creation_fail">Erro ao criar o atalho!</string>
|
||||
<string name="delete_downloads_for_manga">Excluir os capítulos disponíveis offline?</string>
|
||||
|
||||
<string name="manga_chapters_tab">Capítulos</string>
|
||||
<string name="manga_chapter_no_title">Sem título</string>
|
||||
<string name="display_mode_chapter">Capítulo %1$s</string>
|
||||
<string name="chapter_downloaded">Download concluído</string>
|
||||
<string name="chapter_downloaded">Disponível offline</string>
|
||||
<string name="chapter_queued">Na fila</string>
|
||||
<string name="chapter_downloading">Fazendo download</string>
|
||||
<string name="chapter_downloading_progress">Fazendo download (%1$d/%2$d)</string>
|
||||
@ -319,7 +319,7 @@ Além disso, certifique-se de ter configurado as fontes que requerem uma conta a
|
||||
<string name="plan_to_read">Ler depois</string>
|
||||
<string name="score">Avaliação</string>
|
||||
<string name="title">Título</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="status">Situação</string>
|
||||
|
||||
<string name="error_category_exists">Já existe uma categoria com este nome!</string>
|
||||
<string name="snack_categories_deleted">Categorias excluídas</string>
|
||||
|
@ -92,7 +92,7 @@
|
||||
<string name="decode_image_error">Изображение не может быть загружено. Попробуйте изменить декодер опциями ниже</string>
|
||||
<string name="default_columns">По умолчанию</string>
|
||||
<string name="default_viewer">По умолчанию</string>
|
||||
<string name="deleting">Удаление...</string>
|
||||
<string name="deleting">Удаление…</string>
|
||||
<string name="description">Описание</string>
|
||||
<string name="description_backdrop">Фоновое изображение манги</string>
|
||||
<string name="description_cover">Обложка манги</string>
|
||||
@ -114,7 +114,7 @@
|
||||
<string name="download_progress">Загружено %1$d%%</string>
|
||||
<string name="download_queue_error">Произошла ошибка при загрузке глав. Попробуйте еще раз в разделе загрузки</string>
|
||||
<string name="download_unread">Загрузить непрочитанные</string>
|
||||
<string name="downloading">Загрузка...</string>
|
||||
<string name="downloading">Загрузка…</string>
|
||||
<string name="dropped">Брошенный</string>
|
||||
<string name="error_category_exists">Категория с таким именем уже существует!</string>
|
||||
<string name="fetch_chapters_error">Ошибка при извлечении глав</string>
|
||||
@ -143,10 +143,10 @@
|
||||
<string name="landscape">Горизонтальная</string>
|
||||
<string name="last_read_chapter">Последняя прочитанная глава</string>
|
||||
<string name="left_to_right_viewer">Слева направо</string>
|
||||
<string name="library_search_hint">Название или автор...</string>
|
||||
<string name="library_search_hint">Название или автор…</string>
|
||||
<string name="licensed">Лицензировано</string>
|
||||
<string name="light_theme">Основная тема</string>
|
||||
<string name="loading">Загрузка...</string>
|
||||
<string name="loading">Загрузка…</string>
|
||||
<string name="login">Авторизация</string>
|
||||
<string name="login_success">Успешная авторизация</string>
|
||||
<string name="login_title">Авторизация для %1$s</string>
|
||||
@ -168,7 +168,7 @@
|
||||
<string name="no_valid_sources">Пожалуйста включите хотя бы один источник</string>
|
||||
<string name="notification_cover_update_failed">Не удалось обновить обложку</string>
|
||||
<string name="notification_first_add_to_library">Пожалуйста добавьте мангу в свою библиотеку, перед тем как делать это</string>
|
||||
<string name="notification_new_chapters">Новые главы найдены для:</string>
|
||||
<string name="notification_new_chapters">Новые главы найдены</string>
|
||||
<string name="notification_no_connection_body">Соединение не доступно</string>
|
||||
<string name="notification_no_connection_title">Синхронизация отменена</string>
|
||||
<string name="notification_not_connected_to_ac_body">Не заряжается</string>
|
||||
@ -296,7 +296,7 @@
|
||||
<string name="version">Версия</string>
|
||||
<string name="vertical_viewer">Вертикальный</string>
|
||||
<string name="viewer_for_this_series">Отображение для этой серии</string>
|
||||
<string name="webtoon_viewer">Webtoon</string>
|
||||
<string name="webtoon_viewer">Комикс</string>
|
||||
<string name="white_background">Белый</string>
|
||||
<string name="wifi">Wi-Fi</string>
|
||||
<string name="zoom_start_automatic">Автоматическая</string>
|
||||
@ -355,4 +355,7 @@
|
||||
<string name="update_monthly">Ежемесячно</string>
|
||||
<string name="update_weekly">Еженедельно</string>
|
||||
<string name="action_sort_total">По количеству глав</string>
|
||||
<string name="action_open_log">Открыть лог</string>
|
||||
<string name="app_not_available">Приложение не доступно</string>
|
||||
<string name="pref_read_with_volume_keys_inverted">Инвертировать клавиши громкости</string>
|
||||
</resources>
|
||||
|
@ -25,4 +25,5 @@
|
||||
<attr name="selectable_library_drawable" format="reference|integer"/>
|
||||
<attr name="text_color_primary" format="reference|integer"/>
|
||||
<attr name="background_card" format="reference|integer"/>
|
||||
<attr name="icon_color" format="reference|integer"/>
|
||||
</resources>
|
||||
|
@ -20,6 +20,7 @@
|
||||
<color name="dialogLight">@color/md_white_1000</color>
|
||||
|
||||
<color name="selectorColorLight">@color/md_blue_A400_38</color>
|
||||
<color name="iconColorLight">@color/md_black_1000</color>
|
||||
|
||||
<!-- Dark Theme -->
|
||||
<color name="colorAccentDark">#3399ff</color>
|
||||
@ -35,6 +36,7 @@
|
||||
<color name="dialogDark">@color/md_grey_800</color>
|
||||
|
||||
<color name="selectorColorDark">@color/md_blue_A200_50</color>
|
||||
<color name="iconColorDark">@color/md_white_1000_54</color>
|
||||
|
||||
<!-- Reader Theme -->
|
||||
<color name="pageNumberBackgroundLight">@color/md_grey_50_75</color>
|
||||
@ -48,6 +50,7 @@
|
||||
|
||||
<color name="md_white_1000">#FFFFFFFF</color>
|
||||
<color name="md_white_1000_70">#B3FFFFFF</color>
|
||||
<color name="md_white_1000_54">#8AFFFFFF</color>
|
||||
<color name="md_white_1000_50">#80FFFFFF</color>
|
||||
<color name="md_white_1000_20">#33FFFFFF</color>
|
||||
<color name="md_white_1000_12">#1FFFFFFF</color>
|
||||
|
@ -36,6 +36,7 @@
|
||||
<item name="selectable_library_drawable">@drawable/library_item_selector_light</item>
|
||||
<item name="text_color_primary">@color/textColorPrimaryLight</item>
|
||||
<item name="background_card">@color/dialogLight</item>
|
||||
<item name="icon_color">@color/iconColorLight</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Tachiyomi" parent="Theme.Base">
|
||||
@ -74,6 +75,7 @@
|
||||
<item name="selectable_library_drawable">@drawable/library_item_selector_dark</item>
|
||||
<item name="text_color_primary">@color/textColorPrimaryDark</item>
|
||||
<item name="background_card">@color/dialogDark</item>
|
||||
<item name="icon_color">@color/iconColorDark</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.Tachiyomi.Dark" parent="Theme.Base.Dark">
|
||||
|
@ -5,4 +5,8 @@ open class TestApp : App() {
|
||||
override fun setupAcra() {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
override fun setupJobManager() {
|
||||
// Do nothing
|
||||
}
|
||||
}
|
||||
|
@ -440,4 +440,15 @@ class ChapterRecognitionTest {
|
||||
ChapterRecognition.parseChapterNumber(chapter, manga)
|
||||
assertThat(chapter.chapter_number).isEqualTo(20f)
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for chapters ending with s
|
||||
*/
|
||||
@Test fun chaptersEndingWithS() {
|
||||
createManga("One Outs")
|
||||
|
||||
createChapter("One Outs 001")
|
||||
ChapterRecognition.parseChapterNumber(chapter, manga)
|
||||
assertThat(chapter.chapter_number).isEqualTo(1f)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user