mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-20 03:39:19 +01:00
Rewrite database models in Kotlin
This commit is contained in:
parent
4de8b6e9a8
commit
589160242e
@ -10,6 +10,7 @@ import com.pushtorefresh.storio.sqlite.queries.DeleteQuery
|
|||||||
import com.pushtorefresh.storio.sqlite.queries.InsertQuery
|
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.Category
|
import eu.kanade.tachiyomi.data.database.models.Category
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.CategoryImpl
|
||||||
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_FLAGS
|
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_FLAGS
|
||||||
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_ID
|
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_ID
|
||||||
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_NAME
|
import eu.kanade.tachiyomi.data.database.tables.CategoryTable.COL_NAME
|
||||||
@ -44,7 +45,7 @@ class CategoryPutResolver : DefaultPutResolver<Category>() {
|
|||||||
|
|
||||||
class CategoryGetResolver : DefaultGetResolver<Category>() {
|
class CategoryGetResolver : DefaultGetResolver<Category>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = Category().apply {
|
override fun mapFromCursor(cursor: Cursor): Category = CategoryImpl().apply {
|
||||||
id = cursor.getInt(cursor.getColumnIndex(COL_ID))
|
id = cursor.getInt(cursor.getColumnIndex(COL_ID))
|
||||||
name = cursor.getString(cursor.getColumnIndex(COL_NAME))
|
name = cursor.getString(cursor.getColumnIndex(COL_NAME))
|
||||||
order = cursor.getInt(cursor.getColumnIndex(COL_ORDER))
|
order = cursor.getInt(cursor.getColumnIndex(COL_ORDER))
|
||||||
|
@ -10,6 +10,7 @@ import com.pushtorefresh.storio.sqlite.queries.DeleteQuery
|
|||||||
import com.pushtorefresh.storio.sqlite.queries.InsertQuery
|
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.Chapter
|
import eu.kanade.tachiyomi.data.database.models.Chapter
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.ChapterImpl
|
||||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_CHAPTER_NUMBER
|
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_CHAPTER_NUMBER
|
||||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_DATE_FETCH
|
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_DATE_FETCH
|
||||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_DATE_UPLOAD
|
import eu.kanade.tachiyomi.data.database.tables.ChapterTable.COL_DATE_UPLOAD
|
||||||
@ -56,7 +57,7 @@ class ChapterPutResolver : DefaultPutResolver<Chapter>() {
|
|||||||
|
|
||||||
class ChapterGetResolver : DefaultGetResolver<Chapter>() {
|
class ChapterGetResolver : DefaultGetResolver<Chapter>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = Chapter().apply {
|
override fun mapFromCursor(cursor: Cursor): Chapter = ChapterImpl().apply {
|
||||||
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
||||||
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
||||||
url = cursor.getString(cursor.getColumnIndex(COL_URL))
|
url = cursor.getString(cursor.getColumnIndex(COL_URL))
|
||||||
|
@ -44,7 +44,7 @@ class HistoryPutResolver : DefaultPutResolver<History>() {
|
|||||||
|
|
||||||
class HistoryGetResolver : DefaultGetResolver<History>() {
|
class HistoryGetResolver : DefaultGetResolver<History>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = History().apply {
|
override fun mapFromCursor(cursor: Cursor): History = History().apply {
|
||||||
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
||||||
chapter_id = cursor.getLong(cursor.getColumnIndex(COL_CHAPTER_ID))
|
chapter_id = cursor.getLong(cursor.getColumnIndex(COL_CHAPTER_ID))
|
||||||
last_read = cursor.getLong(cursor.getColumnIndex(COL_LAST_READ))
|
last_read = cursor.getLong(cursor.getColumnIndex(COL_LAST_READ))
|
||||||
|
@ -42,7 +42,7 @@ class MangaCategoryPutResolver : DefaultPutResolver<MangaCategory>() {
|
|||||||
|
|
||||||
class MangaCategoryGetResolver : DefaultGetResolver<MangaCategory>() {
|
class MangaCategoryGetResolver : DefaultGetResolver<MangaCategory>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = MangaCategory().apply {
|
override fun mapFromCursor(cursor: Cursor): MangaCategory = MangaCategory().apply {
|
||||||
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
||||||
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
||||||
category_id = cursor.getInt(cursor.getColumnIndex(COL_CATEGORY_ID))
|
category_id = cursor.getInt(cursor.getColumnIndex(COL_CATEGORY_ID))
|
||||||
|
@ -10,6 +10,7 @@ import com.pushtorefresh.storio.sqlite.queries.DeleteQuery
|
|||||||
import com.pushtorefresh.storio.sqlite.queries.InsertQuery
|
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.MangaSync
|
import eu.kanade.tachiyomi.data.database.models.MangaSync
|
||||||
|
import eu.kanade.tachiyomi.data.database.models.MangaSyncImpl
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_ID
|
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_ID
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_LAST_CHAPTER_READ
|
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_LAST_CHAPTER_READ
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_MANGA_ID
|
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable.COL_MANGA_ID
|
||||||
@ -54,7 +55,7 @@ class MangaSyncPutResolver : DefaultPutResolver<MangaSync>() {
|
|||||||
|
|
||||||
class MangaSyncGetResolver : DefaultGetResolver<MangaSync>() {
|
class MangaSyncGetResolver : DefaultGetResolver<MangaSync>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = MangaSync().apply {
|
override fun mapFromCursor(cursor: Cursor): MangaSync = MangaSyncImpl().apply {
|
||||||
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
||||||
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
manga_id = cursor.getLong(cursor.getColumnIndex(COL_MANGA_ID))
|
||||||
sync_id = cursor.getInt(cursor.getColumnIndex(COL_SYNC_ID))
|
sync_id = cursor.getInt(cursor.getColumnIndex(COL_SYNC_ID))
|
||||||
|
@ -10,6 +10,7 @@ import com.pushtorefresh.storio.sqlite.queries.DeleteQuery
|
|||||||
import com.pushtorefresh.storio.sqlite.queries.InsertQuery
|
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.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
|
||||||
@ -66,7 +67,7 @@ class MangaPutResolver : DefaultPutResolver<Manga>() {
|
|||||||
|
|
||||||
open class MangaGetResolver : DefaultGetResolver<Manga>() {
|
open class MangaGetResolver : DefaultGetResolver<Manga>() {
|
||||||
|
|
||||||
override fun mapFromCursor(cursor: Cursor) = Manga().apply {
|
override fun mapFromCursor(cursor: Cursor): Manga = MangaImpl().apply {
|
||||||
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
id = cursor.getLong(cursor.getColumnIndex(COL_ID))
|
||||||
source = cursor.getInt(cursor.getColumnIndex(COL_SOURCE))
|
source = cursor.getInt(cursor.getColumnIndex(COL_SOURCE))
|
||||||
url = cursor.getString(cursor.getColumnIndex(COL_URL))
|
url = cursor.getString(cursor.getColumnIndex(COL_URL))
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.CategoryTable;
|
|
||||||
|
|
||||||
@StorIOSQLiteType(table = CategoryTable.TABLE)
|
|
||||||
public class Category implements Serializable {
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = CategoryTable.COL_ID, key = true)
|
|
||||||
public Integer id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = CategoryTable.COL_NAME)
|
|
||||||
public String name;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = CategoryTable.COL_ORDER)
|
|
||||||
public int order;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = CategoryTable.COL_FLAGS)
|
|
||||||
public int flags;
|
|
||||||
|
|
||||||
public Category() {}
|
|
||||||
|
|
||||||
public static Category create(String name) {
|
|
||||||
Category c = new Category();
|
|
||||||
c.name = name;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Category createDefault() {
|
|
||||||
Category c = create("Default");
|
|
||||||
c.id = 0;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getNameLower() {
|
|
||||||
return name.toLowerCase();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
Category category = (Category) o;
|
|
||||||
|
|
||||||
return name.equals(category.name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return name.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,27 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
interface Category : Serializable {
|
||||||
|
|
||||||
|
var id: Int?
|
||||||
|
|
||||||
|
var name: String
|
||||||
|
|
||||||
|
var order: Int
|
||||||
|
|
||||||
|
var flags: Int
|
||||||
|
|
||||||
|
val nameLower: String
|
||||||
|
get() = name.toLowerCase()
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun create(name: String): Category = CategoryImpl().apply {
|
||||||
|
this.name = name
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createDefault(): Category = create("Default").apply { id = 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class CategoryImpl : Category {
|
||||||
|
|
||||||
|
override var id: Int? = null
|
||||||
|
|
||||||
|
override lateinit var name: String
|
||||||
|
|
||||||
|
override var order: Int = 0
|
||||||
|
|
||||||
|
override var flags: Int = 0
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other == null || javaClass != other.javaClass) return false
|
||||||
|
|
||||||
|
val category = other as Category
|
||||||
|
|
||||||
|
return name == category.name
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
return name.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,94 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.ChapterTable;
|
|
||||||
import eu.kanade.tachiyomi.data.download.model.Download;
|
|
||||||
import eu.kanade.tachiyomi.data.source.model.Page;
|
|
||||||
import eu.kanade.tachiyomi.util.UrlUtil;
|
|
||||||
|
|
||||||
@StorIOSQLiteType(table = ChapterTable.TABLE)
|
|
||||||
public class Chapter implements Serializable {
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_ID, key = true)
|
|
||||||
public Long id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_MANGA_ID)
|
|
||||||
public Long manga_id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_URL)
|
|
||||||
public String url;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_NAME)
|
|
||||||
public String name;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_READ)
|
|
||||||
public boolean read;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_LAST_PAGE_READ)
|
|
||||||
public int last_page_read;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_DATE_FETCH)
|
|
||||||
public long date_fetch;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_DATE_UPLOAD)
|
|
||||||
public long date_upload;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_CHAPTER_NUMBER)
|
|
||||||
public float chapter_number;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = ChapterTable.COL_SOURCE_ORDER)
|
|
||||||
public int source_order;
|
|
||||||
|
|
||||||
public int status;
|
|
||||||
|
|
||||||
private transient List<Page> pages;
|
|
||||||
|
|
||||||
public Chapter() {}
|
|
||||||
|
|
||||||
public void setUrl(String url) {
|
|
||||||
this.url = UrlUtil.getPath(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
Chapter chapter = (Chapter) o;
|
|
||||||
|
|
||||||
return url.equals(chapter.url);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return url.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Chapter create() {
|
|
||||||
Chapter chapter = new Chapter();
|
|
||||||
chapter.chapter_number = -1;
|
|
||||||
return chapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Page> getPages() {
|
|
||||||
return pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPages(List<Page> pages) {
|
|
||||||
this.pages = pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDownloaded() {
|
|
||||||
return status == Download.DOWNLOADED;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRecognizedNumber() {
|
|
||||||
return chapter_number >= 0f;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,36 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
interface Chapter : Serializable {
|
||||||
|
|
||||||
|
var id: Long?
|
||||||
|
|
||||||
|
var manga_id: Long?
|
||||||
|
|
||||||
|
var url: String
|
||||||
|
|
||||||
|
var name: String
|
||||||
|
|
||||||
|
var read: Boolean
|
||||||
|
|
||||||
|
var last_page_read: Int
|
||||||
|
|
||||||
|
var date_fetch: Long
|
||||||
|
|
||||||
|
var date_upload: Long
|
||||||
|
|
||||||
|
var chapter_number: Float
|
||||||
|
|
||||||
|
var source_order: Int
|
||||||
|
|
||||||
|
val isRecognizedNumber: Boolean
|
||||||
|
get() = chapter_number >= 0f
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun create(): Chapter = ChapterImpl().apply {
|
||||||
|
chapter_number = -1f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class ChapterImpl : Chapter {
|
||||||
|
|
||||||
|
override var id: Long? = null
|
||||||
|
|
||||||
|
override var manga_id: Long? = null
|
||||||
|
|
||||||
|
override lateinit var url: String
|
||||||
|
|
||||||
|
override lateinit var name: String
|
||||||
|
|
||||||
|
override var read: Boolean = false
|
||||||
|
|
||||||
|
override var last_page_read: Int = 0
|
||||||
|
|
||||||
|
override var date_fetch: Long = 0
|
||||||
|
|
||||||
|
override var date_upload: Long = 0
|
||||||
|
|
||||||
|
override var chapter_number: Float = 0f
|
||||||
|
|
||||||
|
override var source_order: Int = 0
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other == null || javaClass != other.javaClass) return false
|
||||||
|
|
||||||
|
val chapter = other as Chapter
|
||||||
|
|
||||||
|
return url == chapter.url
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
return url.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,58 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.HistoryTable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object containing the history statistics of a chapter
|
|
||||||
*/
|
|
||||||
@StorIOSQLiteType(table = HistoryTable.TABLE)
|
|
||||||
public class History implements Serializable {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Id of history object.
|
|
||||||
*/
|
|
||||||
@StorIOSQLiteColumn(name = HistoryTable.COL_ID, key = true)
|
|
||||||
public Long id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chapter id of history object.
|
|
||||||
*/
|
|
||||||
@StorIOSQLiteColumn(name = HistoryTable.COL_CHAPTER_ID)
|
|
||||||
public long chapter_id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Last time chapter was read in time long format
|
|
||||||
*/
|
|
||||||
@StorIOSQLiteColumn(name = HistoryTable.COL_LAST_READ)
|
|
||||||
public long last_read;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Total time chapter was read - todo not yet implemented
|
|
||||||
*/
|
|
||||||
@StorIOSQLiteColumn(name = HistoryTable.COL_TIME_READ)
|
|
||||||
public long time_read;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Empty history constructor
|
|
||||||
*/
|
|
||||||
public History() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* History constructor
|
|
||||||
*
|
|
||||||
* @param chapter chapter object
|
|
||||||
* @return history object
|
|
||||||
*/
|
|
||||||
public static History create(Chapter chapter) {
|
|
||||||
History history = new History();
|
|
||||||
history.chapter_id = chapter.id;
|
|
||||||
return history;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object containing the history statistics of a chapter
|
||||||
|
*/
|
||||||
|
class History : Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Id of history object.
|
||||||
|
*/
|
||||||
|
var id: Long? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chapter id of history object.
|
||||||
|
*/
|
||||||
|
var chapter_id: Long = 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last time chapter was read in time long format
|
||||||
|
*/
|
||||||
|
var last_read: Long = 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Total time chapter was read - todo not yet implemented
|
||||||
|
*/
|
||||||
|
var time_read: Long = 0
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* History constructor
|
||||||
|
*
|
||||||
|
* @param chapter chapter object
|
||||||
|
* @return history object
|
||||||
|
*/
|
||||||
|
fun create(chapter: Chapter): History {
|
||||||
|
val history = History()
|
||||||
|
history.chapter_id = chapter.id!!
|
||||||
|
return history
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,213 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.R;
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaTable;
|
|
||||||
import eu.kanade.tachiyomi.util.UrlUtil;
|
|
||||||
|
|
||||||
@StorIOSQLiteType(table = MangaTable.TABLE)
|
|
||||||
public class Manga implements Serializable {
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_ID, key = true)
|
|
||||||
public Long id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_SOURCE)
|
|
||||||
public int source;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_URL)
|
|
||||||
public String url;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_ARTIST)
|
|
||||||
public String artist;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_AUTHOR)
|
|
||||||
public String author;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_DESCRIPTION)
|
|
||||||
public String description;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_GENRE)
|
|
||||||
public String genre;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_TITLE)
|
|
||||||
public String title;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_STATUS)
|
|
||||||
public int status;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_THUMBNAIL_URL)
|
|
||||||
public String thumbnail_url;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_FAVORITE)
|
|
||||||
public boolean favorite;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_LAST_UPDATE)
|
|
||||||
public long last_update;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_INITIALIZED)
|
|
||||||
public boolean initialized;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_VIEWER)
|
|
||||||
public int viewer;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaTable.COL_CHAPTER_FLAGS)
|
|
||||||
public int chapter_flags;
|
|
||||||
|
|
||||||
public transient int unread;
|
|
||||||
|
|
||||||
public transient int category;
|
|
||||||
|
|
||||||
public static final int UNKNOWN = 0;
|
|
||||||
public static final int ONGOING = 1;
|
|
||||||
public static final int COMPLETED = 2;
|
|
||||||
public static final int LICENSED = 3;
|
|
||||||
|
|
||||||
public static final int SORT_DESC = 0x00000000;
|
|
||||||
public static final int SORT_ASC = 0x00000001;
|
|
||||||
public static final int SORT_MASK = 0x00000001;
|
|
||||||
|
|
||||||
// Generic filter that does not filter anything
|
|
||||||
public static final int SHOW_ALL = 0x00000000;
|
|
||||||
|
|
||||||
public static final int SHOW_UNREAD = 0x00000002;
|
|
||||||
public static final int SHOW_READ = 0x00000004;
|
|
||||||
public static final int READ_MASK = 0x00000006;
|
|
||||||
|
|
||||||
public static final int SHOW_DOWNLOADED = 0x00000008;
|
|
||||||
public static final int SHOW_NOT_DOWNLOADED = 0x00000010;
|
|
||||||
public static final int DOWNLOADED_MASK = 0x00000018;
|
|
||||||
|
|
||||||
public static final int SORTING_SOURCE = 0x00000000;
|
|
||||||
public static final int SORTING_NUMBER = 0x00000100;
|
|
||||||
public static final int SORTING_MASK = 0x00000100;
|
|
||||||
|
|
||||||
public static final int DISPLAY_NAME = 0x00000000;
|
|
||||||
public static final int DISPLAY_NUMBER = 0x00100000;
|
|
||||||
public static final int DISPLAY_MASK = 0x00100000;
|
|
||||||
|
|
||||||
public Manga() {}
|
|
||||||
|
|
||||||
public static Manga create(String pathUrl) {
|
|
||||||
Manga m = new Manga();
|
|
||||||
m.url = pathUrl;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Manga create(String pathUrl, int source) {
|
|
||||||
Manga m = new Manga();
|
|
||||||
m.url = pathUrl;
|
|
||||||
m.source = source;
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUrl(String url) {
|
|
||||||
this.url = UrlUtil.getPath(url);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void copyFrom(Manga other) {
|
|
||||||
if (other.title != null)
|
|
||||||
title = other.title;
|
|
||||||
|
|
||||||
if (other.author != null)
|
|
||||||
author = other.author;
|
|
||||||
|
|
||||||
if (other.artist != null)
|
|
||||||
artist = other.artist;
|
|
||||||
|
|
||||||
if (other.url != null)
|
|
||||||
url = other.url;
|
|
||||||
|
|
||||||
if (other.description != null)
|
|
||||||
description = other.description;
|
|
||||||
|
|
||||||
if (other.genre != null)
|
|
||||||
genre = other.genre;
|
|
||||||
|
|
||||||
if (other.thumbnail_url != null)
|
|
||||||
thumbnail_url = other.thumbnail_url;
|
|
||||||
|
|
||||||
status = other.status;
|
|
||||||
|
|
||||||
initialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getStatus(Context context) {
|
|
||||||
switch (status) {
|
|
||||||
case ONGOING:
|
|
||||||
return context.getString(R.string.ongoing);
|
|
||||||
case COMPLETED:
|
|
||||||
return context.getString(R.string.completed);
|
|
||||||
case LICENSED:
|
|
||||||
return context.getString(R.string.licensed);
|
|
||||||
default:
|
|
||||||
return context.getString(R.string.unknown);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setChapterOrder(int order) {
|
|
||||||
setFlags(order, SORT_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDisplayMode(int mode) {
|
|
||||||
setFlags(mode, DISPLAY_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setReadFilter(int filter) {
|
|
||||||
setFlags(filter, READ_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDownloadedFilter(int filter) {
|
|
||||||
setFlags(filter, DOWNLOADED_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSorting(int sort) {
|
|
||||||
setFlags(sort, SORTING_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setFlags(int flag, int mask) {
|
|
||||||
chapter_flags = (chapter_flags & ~mask) | (flag & mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean sortDescending() {
|
|
||||||
return (chapter_flags & SORT_MASK) == SORT_DESC;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Used to display the chapter's title one way or another
|
|
||||||
public int getDisplayMode() {
|
|
||||||
return chapter_flags & DISPLAY_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getReadFilter() {
|
|
||||||
return chapter_flags & READ_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getDownloadedFilter() {
|
|
||||||
return chapter_flags & DOWNLOADED_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSorting() {
|
|
||||||
return chapter_flags & SORTING_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
Manga manga = (Manga) o;
|
|
||||||
|
|
||||||
return url.equals(manga.url);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return url.hashCode();
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,131 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
interface Manga : Serializable {
|
||||||
|
|
||||||
|
var id: Long?
|
||||||
|
|
||||||
|
var source: Int
|
||||||
|
|
||||||
|
var url: String
|
||||||
|
|
||||||
|
var title: String
|
||||||
|
|
||||||
|
var artist: String?
|
||||||
|
|
||||||
|
var author: String?
|
||||||
|
|
||||||
|
var description: String?
|
||||||
|
|
||||||
|
var genre: String?
|
||||||
|
|
||||||
|
var status: Int
|
||||||
|
|
||||||
|
var thumbnail_url: String?
|
||||||
|
|
||||||
|
var favorite: Boolean
|
||||||
|
|
||||||
|
var last_update: Long
|
||||||
|
|
||||||
|
var initialized: Boolean
|
||||||
|
|
||||||
|
var viewer: Int
|
||||||
|
|
||||||
|
var chapter_flags: Int
|
||||||
|
|
||||||
|
var unread: Int
|
||||||
|
|
||||||
|
var category: Int
|
||||||
|
|
||||||
|
fun copyFrom(other: Manga) {
|
||||||
|
if (other.author != null)
|
||||||
|
author = other.author
|
||||||
|
|
||||||
|
if (other.artist != null)
|
||||||
|
artist = other.artist
|
||||||
|
|
||||||
|
if (other.description != null)
|
||||||
|
description = other.description
|
||||||
|
|
||||||
|
if (other.genre != null)
|
||||||
|
genre = other.genre
|
||||||
|
|
||||||
|
if (other.thumbnail_url != null)
|
||||||
|
thumbnail_url = other.thumbnail_url
|
||||||
|
|
||||||
|
status = other.status
|
||||||
|
|
||||||
|
initialized = true
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setChapterOrder(order: Int) {
|
||||||
|
setFlags(order, SORT_MASK)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setFlags(flag: Int, mask: Int) {
|
||||||
|
chapter_flags = chapter_flags and mask.inv() or (flag and mask)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sortDescending(): Boolean {
|
||||||
|
return chapter_flags and SORT_MASK == SORT_DESC
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to display the chapter's title one way or another
|
||||||
|
var displayMode: Int
|
||||||
|
get() = chapter_flags and DISPLAY_MASK
|
||||||
|
set(mode) = setFlags(mode, DISPLAY_MASK)
|
||||||
|
|
||||||
|
var readFilter: Int
|
||||||
|
get() = chapter_flags and READ_MASK
|
||||||
|
set(filter) = setFlags(filter, READ_MASK)
|
||||||
|
|
||||||
|
var downloadedFilter: Int
|
||||||
|
get() = chapter_flags and DOWNLOADED_MASK
|
||||||
|
set(filter) = setFlags(filter, DOWNLOADED_MASK)
|
||||||
|
|
||||||
|
var sorting: Int
|
||||||
|
get() = chapter_flags and SORTING_MASK
|
||||||
|
set(sort) = setFlags(sort, SORTING_MASK)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
const val UNKNOWN = 0
|
||||||
|
const val ONGOING = 1
|
||||||
|
const val COMPLETED = 2
|
||||||
|
const val LICENSED = 3
|
||||||
|
|
||||||
|
const val SORT_DESC = 0x00000000
|
||||||
|
const val SORT_ASC = 0x00000001
|
||||||
|
const val SORT_MASK = 0x00000001
|
||||||
|
|
||||||
|
// Generic filter that does not filter anything
|
||||||
|
const val SHOW_ALL = 0x00000000
|
||||||
|
|
||||||
|
const val SHOW_UNREAD = 0x00000002
|
||||||
|
const val SHOW_READ = 0x00000004
|
||||||
|
const val READ_MASK = 0x00000006
|
||||||
|
|
||||||
|
const val SHOW_DOWNLOADED = 0x00000008
|
||||||
|
const val SHOW_NOT_DOWNLOADED = 0x00000010
|
||||||
|
const val DOWNLOADED_MASK = 0x00000018
|
||||||
|
|
||||||
|
const val SORTING_SOURCE = 0x00000000
|
||||||
|
const val SORTING_NUMBER = 0x00000100
|
||||||
|
const val SORTING_MASK = 0x00000100
|
||||||
|
|
||||||
|
const val DISPLAY_NAME = 0x00000000
|
||||||
|
const val DISPLAY_NUMBER = 0x00100000
|
||||||
|
const val DISPLAY_MASK = 0x00100000
|
||||||
|
|
||||||
|
fun create(source: Int): Manga = MangaImpl().apply {
|
||||||
|
this.source = source
|
||||||
|
}
|
||||||
|
|
||||||
|
fun create(pathUrl: String, source: Int = 0): Manga = MangaImpl().apply {
|
||||||
|
url = pathUrl
|
||||||
|
this.source = source
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,29 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable;
|
|
||||||
|
|
||||||
@StorIOSQLiteType(table = MangaCategoryTable.TABLE)
|
|
||||||
public class MangaCategory {
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaCategoryTable.COL_ID, key = true)
|
|
||||||
public Long id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaCategoryTable.COL_MANGA_ID)
|
|
||||||
public long manga_id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaCategoryTable.COL_CATEGORY_ID)
|
|
||||||
public int category_id;
|
|
||||||
|
|
||||||
public MangaCategory() {}
|
|
||||||
|
|
||||||
public static MangaCategory create(Manga manga, Category category) {
|
|
||||||
MangaCategory mc = new MangaCategory();
|
|
||||||
mc.manga_id = manga.id;
|
|
||||||
mc.category_id = category.id;
|
|
||||||
return mc;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,21 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class MangaCategory {
|
||||||
|
|
||||||
|
var id: Long? = null
|
||||||
|
|
||||||
|
var manga_id: Long = 0
|
||||||
|
|
||||||
|
var category_id: Int = 0
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun create(manga: Manga, category: Category): MangaCategory {
|
||||||
|
val mc = MangaCategory()
|
||||||
|
mc.manga_id = manga.id!!
|
||||||
|
mc.category_id = category.id!!
|
||||||
|
return mc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,12 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
public class MangaChapter {
|
|
||||||
|
|
||||||
public Manga manga;
|
|
||||||
public Chapter chapter;
|
|
||||||
|
|
||||||
public MangaChapter(Manga manga, Chapter chapter) {
|
|
||||||
this.manga = manga;
|
|
||||||
this.chapter = chapter;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,3 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class MangaChapter(val manga: Manga, val chapter: Chapter)
|
@ -1,27 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object containing manga, chapter and history
|
|
||||||
*/
|
|
||||||
public class MangaChapterHistory {
|
|
||||||
/**
|
|
||||||
* Object containing manga and chapter
|
|
||||||
*/
|
|
||||||
public MangaChapter mangaChapter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Object containing history
|
|
||||||
*/
|
|
||||||
public History history;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MangaChapterHistory constructor
|
|
||||||
*
|
|
||||||
* @param mangaChapter object containing manga and chapter
|
|
||||||
* @param history object containing history
|
|
||||||
*/
|
|
||||||
public MangaChapterHistory(MangaChapter mangaChapter, History history) {
|
|
||||||
this.mangaChapter = mangaChapter;
|
|
||||||
this.history = history;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,10 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object containing manga, chapter and history
|
||||||
|
*
|
||||||
|
* @param manga object containing manga
|
||||||
|
* @param chapter object containing chater
|
||||||
|
* @param history object containing history
|
||||||
|
*/
|
||||||
|
class MangaChapterHistory(val manga: Manga, val chapter: Chapter, val history: History)
|
@ -0,0 +1,53 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class MangaImpl : Manga {
|
||||||
|
|
||||||
|
override var id: Long? = null
|
||||||
|
|
||||||
|
override var source: Int = 0
|
||||||
|
|
||||||
|
override lateinit var url: String
|
||||||
|
|
||||||
|
override lateinit var title: String
|
||||||
|
|
||||||
|
override var artist: String? = null
|
||||||
|
|
||||||
|
override var author: String? = null
|
||||||
|
|
||||||
|
override var description: String? = null
|
||||||
|
|
||||||
|
override var genre: String? = null
|
||||||
|
|
||||||
|
override var status: Int = 0
|
||||||
|
|
||||||
|
override var thumbnail_url: String? = null
|
||||||
|
|
||||||
|
override var favorite: Boolean = false
|
||||||
|
|
||||||
|
override var last_update: Long = 0
|
||||||
|
|
||||||
|
override var initialized: Boolean = false
|
||||||
|
|
||||||
|
override var viewer: Int = 0
|
||||||
|
|
||||||
|
override var chapter_flags: Int = 0
|
||||||
|
|
||||||
|
@Transient override var unread: Int = 0
|
||||||
|
|
||||||
|
@Transient override var category: Int = 0
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other == null || javaClass != other.javaClass) return false
|
||||||
|
|
||||||
|
val manga = other as Manga
|
||||||
|
|
||||||
|
return url == manga.url
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
return url.hashCode()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,78 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.models;
|
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn;
|
|
||||||
import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.data.database.tables.MangaSyncTable;
|
|
||||||
import eu.kanade.tachiyomi.data.mangasync.MangaSyncService;
|
|
||||||
|
|
||||||
@StorIOSQLiteType(table = MangaSyncTable.TABLE)
|
|
||||||
public class MangaSync implements Serializable {
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_ID, key = true)
|
|
||||||
public Long id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_MANGA_ID)
|
|
||||||
public long manga_id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_SYNC_ID)
|
|
||||||
public int sync_id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_REMOTE_ID)
|
|
||||||
public int remote_id;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_TITLE)
|
|
||||||
public String title;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_LAST_CHAPTER_READ)
|
|
||||||
public int last_chapter_read;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_TOTAL_CHAPTERS)
|
|
||||||
public int total_chapters;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_SCORE)
|
|
||||||
public float score;
|
|
||||||
|
|
||||||
@StorIOSQLiteColumn(name = MangaSyncTable.COL_STATUS)
|
|
||||||
public int status;
|
|
||||||
|
|
||||||
public boolean update;
|
|
||||||
|
|
||||||
public static MangaSync create() {
|
|
||||||
return new MangaSync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MangaSync create(MangaSyncService service) {
|
|
||||||
MangaSync mangasync = new MangaSync();
|
|
||||||
mangasync.sync_id = service.getId();
|
|
||||||
return mangasync;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void copyPersonalFrom(MangaSync other) {
|
|
||||||
last_chapter_read = other.last_chapter_read;
|
|
||||||
score = other.score;
|
|
||||||
status = other.status;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) return true;
|
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
|
||||||
|
|
||||||
MangaSync mangaSync = (MangaSync) o;
|
|
||||||
|
|
||||||
if (manga_id != mangaSync.manga_id) return false;
|
|
||||||
if (sync_id != mangaSync.sync_id) return false;
|
|
||||||
return remote_id == mangaSync.remote_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = (int) (manga_id ^ (manga_id >>> 32));
|
|
||||||
result = 31 * result + sync_id;
|
|
||||||
result = 31 * result + remote_id;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,40 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
|
interface MangaSync : Serializable {
|
||||||
|
|
||||||
|
var id: Long?
|
||||||
|
|
||||||
|
var manga_id: Long
|
||||||
|
|
||||||
|
var sync_id: Int
|
||||||
|
|
||||||
|
var remote_id: Int
|
||||||
|
|
||||||
|
var title: String
|
||||||
|
|
||||||
|
var last_chapter_read: Int
|
||||||
|
|
||||||
|
var total_chapters: Int
|
||||||
|
|
||||||
|
var score: Float
|
||||||
|
|
||||||
|
var status: Int
|
||||||
|
|
||||||
|
var update: Boolean
|
||||||
|
|
||||||
|
fun copyPersonalFrom(other: MangaSync) {
|
||||||
|
last_chapter_read = other.last_chapter_read
|
||||||
|
score = other.score
|
||||||
|
status = other.status
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun create(serviceId: Int): MangaSync = MangaSyncImpl().apply {
|
||||||
|
sync_id = serviceId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package eu.kanade.tachiyomi.data.database.models
|
||||||
|
|
||||||
|
class MangaSyncImpl : MangaSync {
|
||||||
|
|
||||||
|
override var id: Long? = null
|
||||||
|
|
||||||
|
override var manga_id: Long = 0
|
||||||
|
|
||||||
|
override var sync_id: Int = 0
|
||||||
|
|
||||||
|
override var remote_id: Int = 0
|
||||||
|
|
||||||
|
override lateinit var title: String
|
||||||
|
|
||||||
|
override var last_chapter_read: Int = 0
|
||||||
|
|
||||||
|
override var total_chapters: Int = 0
|
||||||
|
|
||||||
|
override var score: Float = 0f
|
||||||
|
|
||||||
|
override var status: Int = 0
|
||||||
|
|
||||||
|
override var update: Boolean = false
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other == null || javaClass != other.javaClass) return false
|
||||||
|
|
||||||
|
val mangaSync = other as MangaSync
|
||||||
|
|
||||||
|
if (manga_id != mangaSync.manga_id) return false
|
||||||
|
if (sync_id != mangaSync.sync_id) return false
|
||||||
|
return remote_id == mangaSync.remote_id
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = (manga_id xor manga_id.ushr(32)).toInt()
|
||||||
|
result = 31 * result + sync_id
|
||||||
|
result = 31 * result + remote_id
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package eu.kanade.tachiyomi.data.database.queries
|
package eu.kanade.tachiyomi.data.database.queries
|
||||||
|
|
||||||
import com.pushtorefresh.storio.sqlite.operations.get.PreparedGetObject
|
|
||||||
import com.pushtorefresh.storio.sqlite.queries.Query
|
import com.pushtorefresh.storio.sqlite.queries.Query
|
||||||
import com.pushtorefresh.storio.sqlite.queries.RawQuery
|
import com.pushtorefresh.storio.sqlite.queries.RawQuery
|
||||||
import eu.kanade.tachiyomi.data.database.DbProvider
|
import eu.kanade.tachiyomi.data.database.DbProvider
|
||||||
@ -34,80 +33,6 @@ interface ChapterQueries : DbProvider {
|
|||||||
.withGetResolver(MangaChapterGetResolver.INSTANCE)
|
.withGetResolver(MangaChapterGetResolver.INSTANCE)
|
||||||
.prepare()
|
.prepare()
|
||||||
|
|
||||||
fun getNextChapter(chapter: Chapter): PreparedGetObject<Chapter> {
|
|
||||||
// Add a delta to the chapter number, because binary decimal representation
|
|
||||||
// can retrieve the same chapter again
|
|
||||||
val chapterNumber = chapter.chapter_number + 0.00001
|
|
||||||
|
|
||||||
return db.get()
|
|
||||||
.`object`(Chapter::class.java)
|
|
||||||
.withQuery(Query.builder()
|
|
||||||
.table(ChapterTable.TABLE)
|
|
||||||
.where("${ChapterTable.COL_MANGA_ID} = ? AND " +
|
|
||||||
"${ChapterTable.COL_CHAPTER_NUMBER} > ? AND " +
|
|
||||||
"${ChapterTable.COL_CHAPTER_NUMBER} <= ?")
|
|
||||||
.whereArgs(chapter.manga_id, chapterNumber, chapterNumber + 1)
|
|
||||||
.orderBy(ChapterTable.COL_CHAPTER_NUMBER)
|
|
||||||
.limit(1)
|
|
||||||
.build())
|
|
||||||
.prepare()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getNextChapterBySource(chapter: Chapter) = db.get()
|
|
||||||
.`object`(Chapter::class.java)
|
|
||||||
.withQuery(Query.builder()
|
|
||||||
.table(ChapterTable.TABLE)
|
|
||||||
.where("""${ChapterTable.COL_MANGA_ID} = ? AND
|
|
||||||
${ChapterTable.COL_SOURCE_ORDER} < ?""")
|
|
||||||
.whereArgs(chapter.manga_id, chapter.source_order)
|
|
||||||
.orderBy("${ChapterTable.COL_SOURCE_ORDER} DESC")
|
|
||||||
.limit(1)
|
|
||||||
.build())
|
|
||||||
.prepare()
|
|
||||||
|
|
||||||
fun getPreviousChapter(chapter: Chapter): PreparedGetObject<Chapter> {
|
|
||||||
// Add a delta to the chapter number, because binary decimal representation
|
|
||||||
// can retrieve the same chapter again
|
|
||||||
val chapterNumber = chapter.chapter_number - 0.00001
|
|
||||||
|
|
||||||
return db.get()
|
|
||||||
.`object`(Chapter::class.java)
|
|
||||||
.withQuery(Query.builder().table(ChapterTable.TABLE)
|
|
||||||
.where("${ChapterTable.COL_MANGA_ID} = ? AND " +
|
|
||||||
"${ChapterTable.COL_CHAPTER_NUMBER} < ? AND " +
|
|
||||||
"${ChapterTable.COL_CHAPTER_NUMBER} >= ?")
|
|
||||||
.whereArgs(chapter.manga_id, chapterNumber, chapterNumber - 1)
|
|
||||||
.orderBy("${ChapterTable.COL_CHAPTER_NUMBER} DESC")
|
|
||||||
.limit(1)
|
|
||||||
.build())
|
|
||||||
.prepare()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getPreviousChapterBySource(chapter: Chapter) = db.get()
|
|
||||||
.`object`(Chapter::class.java)
|
|
||||||
.withQuery(Query.builder()
|
|
||||||
.table(ChapterTable.TABLE)
|
|
||||||
.where("""${ChapterTable.COL_MANGA_ID} = ? AND
|
|
||||||
${ChapterTable.COL_SOURCE_ORDER} > ?""")
|
|
||||||
.whereArgs(chapter.manga_id, chapter.source_order)
|
|
||||||
.orderBy(ChapterTable.COL_SOURCE_ORDER)
|
|
||||||
.limit(1)
|
|
||||||
.build())
|
|
||||||
.prepare()
|
|
||||||
|
|
||||||
fun getNextUnreadChapter(manga: Manga) = db.get()
|
|
||||||
.`object`(Chapter::class.java)
|
|
||||||
.withQuery(Query.builder()
|
|
||||||
.table(ChapterTable.TABLE)
|
|
||||||
.where("${ChapterTable.COL_MANGA_ID} = ? AND " +
|
|
||||||
"${ChapterTable.COL_READ} = ? AND " +
|
|
||||||
"${ChapterTable.COL_CHAPTER_NUMBER} >= ?")
|
|
||||||
.whereArgs(manga.id, 0, 0)
|
|
||||||
.orderBy(ChapterTable.COL_CHAPTER_NUMBER)
|
|
||||||
.limit(1)
|
|
||||||
.build())
|
|
||||||
.prepare()
|
|
||||||
|
|
||||||
fun insertChapter(chapter: Chapter) = db.put().`object`(chapter).prepare()
|
fun insertChapter(chapter: Chapter) = db.put().`object`(chapter).prepare()
|
||||||
|
|
||||||
fun insertChapters(chapters: List<Chapter>) = db.put().objects(chapters).prepare()
|
fun insertChapters(chapters: List<Chapter>) = db.put().objects(chapters).prepare()
|
||||||
|
@ -5,7 +5,6 @@ import com.pushtorefresh.storio.sqlite.operations.get.DefaultGetResolver
|
|||||||
import eu.kanade.tachiyomi.data.database.mappers.ChapterGetResolver
|
import eu.kanade.tachiyomi.data.database.mappers.ChapterGetResolver
|
||||||
import eu.kanade.tachiyomi.data.database.mappers.HistoryGetResolver
|
import eu.kanade.tachiyomi.data.database.mappers.HistoryGetResolver
|
||||||
import eu.kanade.tachiyomi.data.database.mappers.MangaGetResolver
|
import eu.kanade.tachiyomi.data.database.mappers.MangaGetResolver
|
||||||
import eu.kanade.tachiyomi.data.database.models.MangaChapter
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory
|
import eu.kanade.tachiyomi.data.database.models.MangaChapterHistory
|
||||||
|
|
||||||
class MangaChapterHistoryGetResolver : DefaultGetResolver<MangaChapterHistory>() {
|
class MangaChapterHistoryGetResolver : DefaultGetResolver<MangaChapterHistory>() {
|
||||||
@ -46,10 +45,7 @@ class MangaChapterHistoryGetResolver : DefaultGetResolver<MangaChapterHistory>()
|
|||||||
manga.url = cursor.getString(cursor.getColumnIndex("mangaUrl"))
|
manga.url = cursor.getString(cursor.getColumnIndex("mangaUrl"))
|
||||||
chapter.id = history.chapter_id
|
chapter.id = history.chapter_id
|
||||||
|
|
||||||
// Create mangaChapter object
|
|
||||||
val mangaChapter = MangaChapter(manga, chapter)
|
|
||||||
|
|
||||||
// Return result
|
// Return result
|
||||||
return MangaChapterHistory(mangaChapter, history)
|
return MangaChapterHistory(manga, chapter, history)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user