mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-14 05:15:10 +01:00
Merge pull request #158 from CarlosEsco/MD2-dateadded
Add ability to sort by date
This commit is contained in:
commit
0154653a2f
@ -20,7 +20,7 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) {
|
|||||||
/**
|
/**
|
||||||
* Version of the database.
|
* Version of the database.
|
||||||
*/
|
*/
|
||||||
const val DATABASE_VERSION = 11
|
const val DATABASE_VERSION = 12
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(db: SupportSQLiteDatabase) = with(db) {
|
override fun onCreate(db: SupportSQLiteDatabase) = with(db) {
|
||||||
@ -78,6 +78,9 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) {
|
|||||||
if (oldVersion < 11) {
|
if (oldVersion < 11) {
|
||||||
db.execSQL(ChapterTable.pagesLeftQuery)
|
db.execSQL(ChapterTable.pagesLeftQuery)
|
||||||
}
|
}
|
||||||
|
if (oldVersion < 12) {
|
||||||
|
db.execSQL(MangaTable.addDateAddedCol)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onConfigure(db: SupportSQLiteDatabase) {
|
override fun onConfigure(db: SupportSQLiteDatabase) {
|
||||||
|
@ -11,6 +11,7 @@ import com.pushtorefresh.storio.sqlite.queries.InsertQuery
|
|||||||
import com.pushtorefresh.storio.sqlite.queries.UpdateQuery
|
import com.pushtorefresh.storio.sqlite.queries.UpdateQuery
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
import eu.kanade.tachiyomi.data.database.models.MangaImpl
|
||||||
|
import eu.kanade.tachiyomi.data.database.tables.MangaTable
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_ARTIST
|
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_ARTIST
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_AUTHOR
|
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_AUTHOR
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_CHAPTER_FLAGS
|
import eu.kanade.tachiyomi.data.database.tables.MangaTable.COL_CHAPTER_FLAGS
|
||||||
@ -64,6 +65,7 @@ class MangaPutResolver : DefaultPutResolver<Manga>() {
|
|||||||
put(COL_VIEWER, obj.viewer)
|
put(COL_VIEWER, obj.viewer)
|
||||||
put(COL_HIDE_TITLE, obj.hide_title)
|
put(COL_HIDE_TITLE, obj.hide_title)
|
||||||
put(COL_CHAPTER_FLAGS, obj.chapter_flags)
|
put(COL_CHAPTER_FLAGS, obj.chapter_flags)
|
||||||
|
put(MangaTable.COL_DATE_ADDED, obj.date_added)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,6 +87,7 @@ interface BaseMangaGetResolver {
|
|||||||
viewer = cursor.getInt(cursor.getColumnIndex(COL_VIEWER))
|
viewer = cursor.getInt(cursor.getColumnIndex(COL_VIEWER))
|
||||||
chapter_flags = cursor.getInt(cursor.getColumnIndex(COL_CHAPTER_FLAGS))
|
chapter_flags = cursor.getInt(cursor.getColumnIndex(COL_CHAPTER_FLAGS))
|
||||||
hide_title = cursor.getInt(cursor.getColumnIndex(COL_HIDE_TITLE)) == 1
|
hide_title = cursor.getInt(cursor.getColumnIndex(COL_HIDE_TITLE)) == 1
|
||||||
|
date_added = cursor.getLong(cursor.getColumnIndex(MangaTable.COL_DATE_ADDED))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ interface Category : Serializable {
|
|||||||
LAST_READ_ASC, LAST_READ_DSC -> LibrarySort.LAST_READ
|
LAST_READ_ASC, LAST_READ_DSC -> LibrarySort.LAST_READ
|
||||||
TOTAL_ASC, TOTAL_DSC -> LibrarySort.TOTAL
|
TOTAL_ASC, TOTAL_DSC -> LibrarySort.TOTAL
|
||||||
DRAG_AND_DROP -> LibrarySort.DRAG_AND_DROP
|
DRAG_AND_DROP -> LibrarySort.DRAG_AND_DROP
|
||||||
|
DATE_ADDED_ASC, DATE_ADDED_DSC -> LibrarySort.DATE_ADDED
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ interface Category : Serializable {
|
|||||||
UNREAD_ASC, UNREAD_DSC -> R.string.action_filter_unread
|
UNREAD_ASC, UNREAD_DSC -> R.string.action_filter_unread
|
||||||
LAST_READ_ASC, LAST_READ_DSC -> R.string.action_sort_last_read
|
LAST_READ_ASC, LAST_READ_DSC -> R.string.action_sort_last_read
|
||||||
TOTAL_ASC, TOTAL_DSC -> R.string.action_sort_total
|
TOTAL_ASC, TOTAL_DSC -> R.string.action_sort_total
|
||||||
|
DATE_ADDED_ASC, DATE_ADDED_DSC -> R.string.action_date_added
|
||||||
else -> R.string.action_sort_drag_and_drop
|
else -> R.string.action_sort_drag_and_drop
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,6 +56,7 @@ interface Category : Serializable {
|
|||||||
UNREAD_ASC, UNREAD_DSC -> 2
|
UNREAD_ASC, UNREAD_DSC -> 2
|
||||||
LAST_READ_ASC, LAST_READ_DSC -> 3
|
LAST_READ_ASC, LAST_READ_DSC -> 3
|
||||||
TOTAL_ASC, TOTAL_DSC -> 4
|
TOTAL_ASC, TOTAL_DSC -> 4
|
||||||
|
DATE_ADDED_ASC, DATE_ADDED_DSC -> 5
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +67,7 @@ interface Category : Serializable {
|
|||||||
LibrarySort.UNREAD -> UNREAD_ASC
|
LibrarySort.UNREAD -> UNREAD_ASC
|
||||||
LibrarySort.LAST_READ -> LAST_READ_ASC
|
LibrarySort.LAST_READ -> LAST_READ_ASC
|
||||||
LibrarySort.TOTAL -> ALPHA_ASC
|
LibrarySort.TOTAL -> ALPHA_ASC
|
||||||
|
LibrarySort.DATE_ADDED -> DATE_ADDED_ASC
|
||||||
else -> ALPHA_ASC
|
else -> ALPHA_ASC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,6 +84,8 @@ interface Category : Serializable {
|
|||||||
private const val LAST_READ_DSC = 'h'
|
private const val LAST_READ_DSC = 'h'
|
||||||
private const val TOTAL_ASC = 'i'
|
private const val TOTAL_ASC = 'i'
|
||||||
private const val TOTAL_DSC = 'j'
|
private const val TOTAL_DSC = 'j'
|
||||||
|
private const val DATE_ADDED_ASC = 'k'
|
||||||
|
private const val DATE_ADDED_DSC = 'l'
|
||||||
|
|
||||||
fun create(name: String): Category = CategoryImpl().apply {
|
fun create(name: String): Category = CategoryImpl().apply {
|
||||||
this.name = name
|
this.name = name
|
||||||
@ -100,6 +106,7 @@ interface Category : Serializable {
|
|||||||
LibrarySort.UNREAD -> UNREAD_ASC
|
LibrarySort.UNREAD -> UNREAD_ASC
|
||||||
LibrarySort.LAST_READ -> LAST_READ_ASC
|
LibrarySort.LAST_READ -> LAST_READ_ASC
|
||||||
LibrarySort.TOTAL -> TOTAL_ASC
|
LibrarySort.TOTAL -> TOTAL_ASC
|
||||||
|
LibrarySort.DATE_ADDED -> DATE_ADDED_ASC
|
||||||
LibrarySort.DRAG_AND_DROP -> DRAG_AND_DROP
|
LibrarySort.DRAG_AND_DROP -> DRAG_AND_DROP
|
||||||
else -> DRAG_AND_DROP
|
else -> DRAG_AND_DROP
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@ interface Manga : SManga {
|
|||||||
|
|
||||||
var last_update: Long
|
var last_update: Long
|
||||||
|
|
||||||
|
var date_added: Long
|
||||||
|
|
||||||
var viewer: Int
|
var viewer: Int
|
||||||
|
|
||||||
var chapter_flags: Int
|
var chapter_flags: Int
|
||||||
|
@ -40,6 +40,8 @@ open class MangaImpl : Manga {
|
|||||||
|
|
||||||
override var hide_title: Boolean = false
|
override var hide_title: Boolean = false
|
||||||
|
|
||||||
|
override var date_added: Long = 0
|
||||||
|
|
||||||
override fun copyFrom(other: SManga) {
|
override fun copyFrom(other: SManga) {
|
||||||
if (other is MangaImpl && (other as MangaImpl)::title.isInitialized &&
|
if (other is MangaImpl && (other as MangaImpl)::title.isInitialized &&
|
||||||
!other.title.isBlank() && other.title != title) {
|
!other.title.isBlank() && other.title != title) {
|
||||||
|
@ -40,6 +40,8 @@ object MangaTable {
|
|||||||
|
|
||||||
const val COL_HIDE_TITLE = "hideTitle"
|
const val COL_HIDE_TITLE = "hideTitle"
|
||||||
|
|
||||||
|
const val COL_DATE_ADDED = "date_added"
|
||||||
|
|
||||||
val createTableQuery: String
|
val createTableQuery: String
|
||||||
get() = """CREATE TABLE $TABLE(
|
get() = """CREATE TABLE $TABLE(
|
||||||
$COL_ID INTEGER NOT NULL PRIMARY KEY,
|
$COL_ID INTEGER NOT NULL PRIMARY KEY,
|
||||||
@ -57,7 +59,9 @@ object MangaTable {
|
|||||||
$COL_INITIALIZED BOOLEAN NOT NULL,
|
$COL_INITIALIZED BOOLEAN NOT NULL,
|
||||||
$COL_VIEWER INTEGER NOT NULL,
|
$COL_VIEWER INTEGER NOT NULL,
|
||||||
$COL_HIDE_TITLE INTEGER NOT NULL,
|
$COL_HIDE_TITLE INTEGER NOT NULL,
|
||||||
$COL_CHAPTER_FLAGS INTEGER NOT NULL
|
$COL_CHAPTER_FLAGS INTEGER NOT NULL,
|
||||||
|
$COL_DATE_ADDED LONG
|
||||||
|
|
||||||
)"""
|
)"""
|
||||||
|
|
||||||
val createUrlIndexQuery: String
|
val createUrlIndexQuery: String
|
||||||
@ -69,4 +73,7 @@ object MangaTable {
|
|||||||
|
|
||||||
val addHideTitle: String
|
val addHideTitle: String
|
||||||
get() = "ALTER TABLE $TABLE ADD COLUMN $COL_HIDE_TITLE INTEGER DEFAULT 0"
|
get() = "ALTER TABLE $TABLE ADD COLUMN $COL_HIDE_TITLE INTEGER DEFAULT 0"
|
||||||
|
|
||||||
|
val addDateAddedCol: String
|
||||||
|
get() = "ALTER TABLE ${MangaTable.TABLE} ADD COLUMN ${MangaTable.COL_DATE_ADDED} LONG DEFAULT 0"
|
||||||
}
|
}
|
||||||
|
@ -37,6 +37,7 @@ import rx.subjects.PublishSubject
|
|||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Presenter of [BrowseCatalogueController].
|
* Presenter of [BrowseCatalogueController].
|
||||||
@ -272,6 +273,12 @@ open class BrowseCataloguePresenter(
|
|||||||
*/
|
*/
|
||||||
fun changeMangaFavorite(manga: Manga) {
|
fun changeMangaFavorite(manga: Manga) {
|
||||||
manga.favorite = !manga.favorite
|
manga.favorite = !manga.favorite
|
||||||
|
|
||||||
|
when (manga.favorite) {
|
||||||
|
true -> manga.date_added = Date().time
|
||||||
|
false -> manga.date_added = 0
|
||||||
|
}
|
||||||
|
|
||||||
db.insertManga(manga).executeAsBlocking()
|
db.insertManga(manga).executeAsBlocking()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@ class LibraryHeaderItem(private val categoryF: (Int) -> Category, val catId: Int
|
|||||||
LibrarySort.UNREAD -> R.string.action_filter_unread
|
LibrarySort.UNREAD -> R.string.action_filter_unread
|
||||||
LibrarySort.LAST_READ -> R.string.action_sort_last_read
|
LibrarySort.LAST_READ -> R.string.action_sort_last_read
|
||||||
LibrarySort.ALPHA -> R.string.title
|
LibrarySort.ALPHA -> R.string.title
|
||||||
|
LibrarySort.DATE_ADDED -> R.string.action_date_added
|
||||||
else -> R.string.action_sort_drag_and_drop
|
else -> R.string.action_sort_drag_and_drop
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
@ -165,6 +166,7 @@ class LibraryHeaderItem(private val categoryF: (Int) -> Category, val catId: Int
|
|||||||
LibrarySort.LAST_READ -> R.id.action_last_read
|
LibrarySort.LAST_READ -> R.id.action_last_read
|
||||||
LibrarySort.UNREAD -> R.id.action_unread
|
LibrarySort.UNREAD -> R.id.action_unread
|
||||||
LibrarySort.LATEST_CHAPTER -> R.id.action_update
|
LibrarySort.LATEST_CHAPTER -> R.id.action_update
|
||||||
|
LibrarySort.DATE_ADDED -> R.id.action_date_added
|
||||||
else -> R.id.action_alpha
|
else -> R.id.action_alpha
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -208,6 +210,7 @@ class LibraryHeaderItem(private val categoryF: (Int) -> Category, val catId: Int
|
|||||||
adapter.libraryListener.sortCategory(category.id!!, 'D' - 'a' + 1)
|
adapter.libraryListener.sortCategory(category.id!!, 'D' - 'a' + 1)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
R.id.action_date_added -> 5
|
||||||
R.id.action_total_chaps -> 4
|
R.id.action_total_chaps -> 4
|
||||||
R.id.action_last_read -> 3
|
R.id.action_last_read -> 3
|
||||||
R.id.action_unread -> 2
|
R.id.action_unread -> 2
|
||||||
|
@ -345,6 +345,9 @@ class LibraryPresenter(
|
|||||||
i2.chapterCount = totalChapters!![i2.manga.id!!] ?: 0
|
i2.chapterCount = totalChapters!![i2.manga.id!!] ?: 0
|
||||||
manga1TotalChapter.compareTo(mange2TotalChapter)
|
manga1TotalChapter.compareTo(mange2TotalChapter)
|
||||||
}
|
}
|
||||||
|
sortingMode == LibrarySort.DATE_ADDED -> {
|
||||||
|
i1.manga.date_added.compareTo(i2.manga.date_added)
|
||||||
|
}
|
||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
if (compare == 0) {
|
if (compare == 0) {
|
||||||
@ -418,6 +421,7 @@ class LibraryPresenter(
|
|||||||
i2.chapterCount = totalChapters!![i2.manga.id!!] ?: 0
|
i2.chapterCount = totalChapters!![i2.manga.id!!] ?: 0
|
||||||
manga1TotalChapter.compareTo(mange2TotalChapter)
|
manga1TotalChapter.compareTo(mange2TotalChapter)
|
||||||
}
|
}
|
||||||
|
LibrarySort.DATE_ADDED -> i1.manga.date_added.compareTo(i2.manga.date_added)
|
||||||
else -> sortAlphabetical(i1, i2)
|
else -> sortAlphabetical(i1, i2)
|
||||||
}
|
}
|
||||||
if (!category.isAscending()) sort *= -1
|
if (!category.isAscending()) sort *= -1
|
||||||
|
@ -8,4 +8,5 @@ object LibrarySort {
|
|||||||
const val UNREAD = 3
|
const val UNREAD = 3
|
||||||
const val TOTAL = 4
|
const val TOTAL = 4
|
||||||
const val DRAG_AND_DROP = 6
|
const val DRAG_AND_DROP = 6
|
||||||
|
const val DATE_ADDED = 7
|
||||||
}
|
}
|
||||||
|
@ -488,6 +488,12 @@ class MangaDetailsPresenter(
|
|||||||
|
|
||||||
fun toggleFavorite(): Boolean {
|
fun toggleFavorite(): Boolean {
|
||||||
manga.favorite = !manga.favorite
|
manga.favorite = !manga.favorite
|
||||||
|
|
||||||
|
when (manga.favorite) {
|
||||||
|
true -> manga.date_added = Date().time
|
||||||
|
false -> manga.date_added = 0
|
||||||
|
}
|
||||||
|
|
||||||
db.insertManga(manga).executeAsBlocking()
|
db.insertManga(manga).executeAsBlocking()
|
||||||
controller.updateHeader()
|
controller.updateHeader()
|
||||||
return manga.favorite
|
return manga.favorite
|
||||||
|
@ -26,4 +26,9 @@
|
|||||||
android:id="@+id/action_total_chaps"
|
android:id="@+id/action_total_chaps"
|
||||||
android:title="@string/action_sort_total"
|
android:title="@string/action_sort_total"
|
||||||
android:icon="@drawable/ic_blank_24dp"/>
|
android:icon="@drawable/ic_blank_24dp"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_date_added"
|
||||||
|
android:title="@string/action_date_added"
|
||||||
|
android:icon="@drawable/ic_blank_24dp"/>
|
||||||
</menu>
|
</menu>
|
@ -31,4 +31,9 @@
|
|||||||
android:title="@string/action_sort_drag_and_drop"
|
android:title="@string/action_sort_drag_and_drop"
|
||||||
android:icon="@drawable/ic_blank_24dp"/>
|
android:icon="@drawable/ic_blank_24dp"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_date_added"
|
||||||
|
android:title="@string/action_date_added"
|
||||||
|
android:icon="@drawable/ic_blank_24dp"/>
|
||||||
|
|
||||||
</menu>
|
</menu>
|
@ -70,6 +70,7 @@
|
|||||||
<string name="action_sort_alpha">Alphabetically</string>
|
<string name="action_sort_alpha">Alphabetically</string>
|
||||||
<string name="action_sort_enabled">Enabled</string>
|
<string name="action_sort_enabled">Enabled</string>
|
||||||
<string name="action_sort_total">Total chapters</string>
|
<string name="action_sort_total">Total chapters</string>
|
||||||
|
<string name="action_date_added">Date added</string>
|
||||||
<string name="action_sort_last_read">Last read</string>
|
<string name="action_sort_last_read">Last read</string>
|
||||||
<string name="action_sort_drag_and_drop">Drag & Drop</string>
|
<string name="action_sort_drag_and_drop">Drag & Drop</string>
|
||||||
<string name="action_search">Search</string>
|
<string name="action_search">Search</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user