mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Better Upload Date to not have a single blank upload date. (#6358)
This commit is contained in:
		| @@ -20,7 +20,7 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) { | ||||
|         /** | ||||
|          * Version of the database. | ||||
|          */ | ||||
|         const val DATABASE_VERSION = 13 | ||||
|         const val DATABASE_VERSION = 14 | ||||
|     } | ||||
|  | ||||
|     override fun onCreate(db: SupportSQLiteDatabase) = with(db) { | ||||
| @@ -91,6 +91,9 @@ class DbOpenCallback : SupportSQLiteOpenHelper.Callback(DATABASE_VERSION) { | ||||
|             db.execSQL(TrackTable.insertFromTempTable) | ||||
|             db.execSQL(TrackTable.dropTempTable) | ||||
|         } | ||||
|         if (oldVersion < 14) { | ||||
|             db.execSQL(ChapterTable.fixDateUploadIfNeeded) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     override fun onConfigure(db: SupportSQLiteDatabase) { | ||||
|   | ||||
| @@ -62,4 +62,7 @@ object ChapterTable { | ||||
|  | ||||
|     val addScanlator: String | ||||
|         get() = "ALTER TABLE $TABLE ADD COLUMN $COL_SCANLATOR TEXT DEFAULT NULL" | ||||
|  | ||||
|     val fixDateUploadIfNeeded: String | ||||
|         get() = "UPDATE $TABLE SET $COL_DATE_UPLOAD = $COL_DATE_FETCH WHERE $COL_DATE_UPLOAD = 0" | ||||
| } | ||||
|   | ||||
| @@ -52,49 +52,46 @@ fun syncChaptersWithSource( | ||||
|     // Chapters whose metadata have changed. | ||||
|     val toChange = mutableListOf<Chapter>() | ||||
|  | ||||
|     // Chapters from the db not in source. | ||||
|     val toDelete = dbChapters.filterNot { dbChapter -> | ||||
|         sourceChapters.any { sourceChapter -> | ||||
|             dbChapter.url == sourceChapter.url | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     for (sourceChapter in sourceChapters) { | ||||
|         // This forces metadata update for the main viewable things in the chapter list. | ||||
|         if (source is HttpSource) { | ||||
|             source.prepareNewChapter(sourceChapter, manga) | ||||
|         } | ||||
|         // Recognize chapter number for the chapter. | ||||
|         ChapterRecognition.parseChapterNumber(sourceChapter, manga) | ||||
|  | ||||
|         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) { | ||||
|             if (sourceChapter.date_upload == 0L) { | ||||
|                 sourceChapter.date_upload = Date().time | ||||
|             } | ||||
|             toAdd.add(sourceChapter) | ||||
|         } else { | ||||
|             // this forces metadata update for the main viewable things in the chapter list | ||||
|             if (source is HttpSource) { | ||||
|                 source.prepareNewChapter(sourceChapter, manga) | ||||
|             } | ||||
|  | ||||
|             ChapterRecognition.parseChapterNumber(sourceChapter, manga) | ||||
|  | ||||
|             if (shouldUpdateDbChapter(dbChapter, sourceChapter)) { | ||||
|                 if (dbChapter.name != sourceChapter.name && downloadManager.isChapterDownloaded(dbChapter, manga)) { | ||||
|                     downloadManager.renameChapter(source, manga, dbChapter, sourceChapter) | ||||
|                 } | ||||
|                 dbChapter.scanlator = sourceChapter.scanlator | ||||
|                 dbChapter.name = sourceChapter.name | ||||
|                 dbChapter.date_upload = sourceChapter.date_upload | ||||
|                 dbChapter.chapter_number = sourceChapter.chapter_number | ||||
|                 dbChapter.source_order = sourceChapter.source_order | ||||
|                 if (sourceChapter.date_upload != 0L) { | ||||
|                     dbChapter.date_upload = sourceChapter.date_upload | ||||
|                 } | ||||
|                 toChange.add(dbChapter) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // Recognize number for new chapters. | ||||
|     toAdd.forEach { | ||||
|         if (source is HttpSource) { | ||||
|             source.prepareNewChapter(it, manga) | ||||
|         } | ||||
|         ChapterRecognition.parseChapterNumber(it, manga) | ||||
|     } | ||||
|  | ||||
|     // Chapters from the db not in the source. | ||||
|     val toDelete = dbChapters.filterNot { dbChapter -> | ||||
|         sourceChapters.any { sourceChapter -> | ||||
|             dbChapter.url == sourceChapter.url | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // 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()) | ||||
| @@ -105,12 +102,13 @@ fun syncChaptersWithSource( | ||||
|     db.inTransaction { | ||||
|         val deletedChapterNumbers = TreeSet<Float>() | ||||
|         val deletedReadChapterNumbers = TreeSet<Float>() | ||||
|  | ||||
|         if (toDelete.isNotEmpty()) { | ||||
|             for (c in toDelete) { | ||||
|                 if (c.read) { | ||||
|                     deletedReadChapterNumbers.add(c.chapter_number) | ||||
|             for (chapter in toDelete) { | ||||
|                 if (chapter.read) { | ||||
|                     deletedReadChapterNumbers.add(chapter.chapter_number) | ||||
|                 } | ||||
|                 deletedChapterNumbers.add(c.chapter_number) | ||||
|                 deletedChapterNumbers.add(chapter.chapter_number) | ||||
|             } | ||||
|             db.deleteChapters(toDelete).executeAsBlocking() | ||||
|         } | ||||
| @@ -121,14 +119,14 @@ fun syncChaptersWithSource( | ||||
|             var now = Date().time | ||||
|  | ||||
|             for (i in toAdd.indices.reversed()) { | ||||
|                 val c = toAdd[i] | ||||
|                 c.date_fetch = now++ | ||||
|                 val chapter = toAdd[i] | ||||
|                 chapter.date_fetch = now++ | ||||
|                 // Try to mark already read chapters as read when the source deletes them | ||||
|                 if (c.isRecognizedNumber && c.chapter_number in deletedReadChapterNumbers) { | ||||
|                     c.read = true | ||||
|                 if (chapter.isRecognizedNumber && chapter.chapter_number in deletedReadChapterNumbers) { | ||||
|                     chapter.read = true | ||||
|                 } | ||||
|                 if (c.isRecognizedNumber && c.chapter_number in deletedChapterNumbers) { | ||||
|                     readded.add(c) | ||||
|                 if (chapter.isRecognizedNumber && chapter.chapter_number in deletedChapterNumbers) { | ||||
|                     readded.add(chapter) | ||||
|                 } | ||||
|             } | ||||
|             val chapters = db.insertChapters(toAdd).executeAsBlocking() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user