mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Add download action to New Chapters Notification (#6336)
This commit is contained in:
		| @@ -514,10 +514,9 @@ class Downloader( | ||||
|  | ||||
|     companion object { | ||||
|         const val TMP_DIR_SUFFIX = "_tmp" | ||||
|         const val CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 15 | ||||
|     } | ||||
| } | ||||
|  | ||||
| private const val CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD = 15 | ||||
|  | ||||
| // Arbitrary minimum required space to start a download: 50 MB | ||||
| private const val MIN_DISK_SPACE = 50 * 1024 * 1024 | ||||
|   | ||||
| @@ -16,6 +16,7 @@ import coil.transform.CircleCropTransformation | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.database.models.Chapter | ||||
| import eu.kanade.tachiyomi.data.database.models.Manga | ||||
| import eu.kanade.tachiyomi.data.download.Downloader | ||||
| import eu.kanade.tachiyomi.data.notification.NotificationReceiver | ||||
| import eu.kanade.tachiyomi.data.notification.Notifications | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| @@ -212,6 +213,20 @@ class LibraryUpdateNotifier(private val context: Context) { | ||||
|                     Notifications.ID_NEW_CHAPTERS | ||||
|                 ) | ||||
|             ) | ||||
|             // Download chapters action | ||||
|             // Only add the action when chapters is within threshold | ||||
|             if (chapters.size <= Downloader.CHAPTERS_PER_SOURCE_QUEUE_WARNING_THRESHOLD) { | ||||
|                 addAction( | ||||
|                     R.drawable.ic_download_24dp, | ||||
|                     context.getString(R.string.action_download), | ||||
|                     NotificationReceiver.downloadChaptersPendingBroadcast( | ||||
|                         context, | ||||
|                         manga, | ||||
|                         chapters, | ||||
|                         Notifications.ID_NEW_CHAPTERS | ||||
|                     ) | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -102,6 +102,18 @@ class NotificationReceiver : BroadcastReceiver() { | ||||
|                     markAsRead(urls, mangaId) | ||||
|                 } | ||||
|             } | ||||
|             // Download manga chapters | ||||
|             ACTION_DOWNLOAD_CHAPTER -> { | ||||
|                 val notificationId = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1) | ||||
|                 if (notificationId > -1) { | ||||
|                     dismissNotification(context, notificationId, intent.getIntExtra(EXTRA_GROUP_ID, 0)) | ||||
|                 } | ||||
|                 val urls = intent.getStringArrayExtra(EXTRA_CHAPTER_URL) ?: return | ||||
|                 val mangaId = intent.getLongExtra(EXTRA_MANGA_ID, -1) | ||||
|                 if (mangaId > -1) { | ||||
|                     downloadChapters(urls, mangaId) | ||||
|                 } | ||||
|             } | ||||
|             // Share crash dump file | ||||
|             ACTION_SHARE_CRASH_LOG -> | ||||
|                 shareFile( | ||||
| @@ -235,6 +247,24 @@ class NotificationReceiver : BroadcastReceiver() { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Method called when user wants to download chapters | ||||
|      * | ||||
|      * @param chapterUrls URLs of chapter to download | ||||
|      * @param mangaId id of manga | ||||
|      */ | ||||
|     private fun downloadChapters(chapterUrls: Array<String>, mangaId: Long) { | ||||
|         val db: DatabaseHelper = Injekt.get() | ||||
|  | ||||
|         launchIO { | ||||
|             val chapters = chapterUrls.mapNotNull { db.getChapter(it, mangaId).executeAsBlocking() } | ||||
|             val manga = db.getManga(mangaId).executeAsBlocking() | ||||
|             if (chapters.isNotEmpty() && manga != null) { | ||||
|                 downloadManager.downloadChapters(manga, chapters) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     companion object { | ||||
|         private const val NAME = "NotificationReceiver" | ||||
|  | ||||
| @@ -251,6 +281,7 @@ class NotificationReceiver : BroadcastReceiver() { | ||||
|  | ||||
|         private const val ACTION_MARK_AS_READ = "$ID.$NAME.MARK_AS_READ" | ||||
|         private const val ACTION_OPEN_CHAPTER = "$ID.$NAME.ACTION_OPEN_CHAPTER" | ||||
|         private const val ACTION_DOWNLOAD_CHAPTER = "$ID.$NAME.ACTION_DOWNLOAD_CHAPTER" | ||||
|  | ||||
|         private const val ACTION_RESUME_DOWNLOADS = "$ID.$NAME.ACTION_RESUME_DOWNLOADS" | ||||
|         private const val ACTION_PAUSE_DOWNLOADS = "$ID.$NAME.ACTION_PAUSE_DOWNLOADS" | ||||
| @@ -442,6 +473,28 @@ class NotificationReceiver : BroadcastReceiver() { | ||||
|             return PendingIntent.getBroadcast(context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT) | ||||
|         } | ||||
|  | ||||
|         /** | ||||
|          * Returns [PendingIntent] that downloads chapters | ||||
|          * | ||||
|          * @param context context of application | ||||
|          * @param manga manga of chapter | ||||
|          */ | ||||
|         internal fun downloadChaptersPendingBroadcast( | ||||
|             context: Context, | ||||
|             manga: Manga, | ||||
|             chapters: Array<Chapter>, | ||||
|             groupId: Int | ||||
|         ): PendingIntent { | ||||
|             val newIntent = Intent(context, NotificationReceiver::class.java).apply { | ||||
|                 action = ACTION_DOWNLOAD_CHAPTER | ||||
|                 putExtra(EXTRA_CHAPTER_URL, chapters.map { it.url }.toTypedArray()) | ||||
|                 putExtra(EXTRA_MANGA_ID, manga.id) | ||||
|                 putExtra(EXTRA_NOTIFICATION_ID, manga.id.hashCode()) | ||||
|                 putExtra(EXTRA_GROUP_ID, groupId) | ||||
|             } | ||||
|             return PendingIntent.getBroadcast(context, manga.id.hashCode(), newIntent, PendingIntent.FLAG_UPDATE_CURRENT) | ||||
|         } | ||||
|  | ||||
|         /** | ||||
|          * Returns [PendingIntent] that starts a service which stops the library update | ||||
|          * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user