From 09bddccb61a8f8d980700809fde0f25aabdeacf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20=C3=87erri?= <64997243+deniscerri@users.noreply.github.com> Date: Wed, 18 Jan 2023 22:51:58 +0100 Subject: [PATCH] added livedata to results --- app/build.gradle | 1 + .../1.json | 312 +++++ .../ytdlnis/ExampleInstrumentedTest.java | 26 - .../ytdlnis/ExampleInstrumentedTest.kt | 22 + app/src/main/AndroidManifest.xml | 3 +- .../deniscerri/ytdlnis/DownloaderService.kt | 577 +++++----- .../com/deniscerri/ytdlnis/MainActivity.kt | 60 +- .../ytdlnis/adapter/HistoryAdapter.java | 1 - .../ytdlnis/adapter/HomeAdapter.java | 137 ++- .../ytdlnis/database/DatabaseManager.java | 290 ++--- .../deniscerri/ytdlnis/database/Video.java | 338 ------ .../ytdlnis/database/dao/DownloadDao.kt | 2 +- .../database/models/CommandTemplate.kt | 9 +- .../ytdlnis/database/models/DownloadItem.kt | 7 +- .../ytdlnis/database/models/ResultItem.kt | 9 +- .../database/repository/DownloadRepository.kt | 3 +- .../database/repository/HistoryRepository.kt | 4 +- .../database/repository/ResultRepository.kt | 15 +- .../database/viewmodel/ResultViewModel.kt | 22 +- .../ytdlnis/service/DownloadInfo.java | 14 +- .../ytdlnis/service/IDownloaderListener.java | 2 - .../ytdlnis/service/IDownloaderService.java | 8 +- .../deniscerri/ytdlnis/ui/HomeFragment.java | 1008 ----------------- .../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 921 +++++++++++++++ .../com/deniscerri/ytdlnis/util/FileUtil.kt | 10 +- .../com/deniscerri/ytdlnis/util/InfoUtil.kt | 106 +- .../deniscerri/ytdlnis/work/DownloadWorker.kt | 2 +- app/src/main/res/layout/fragment_home.xml | 2 +- build.gradle | 4 +- 29 files changed, 1901 insertions(+), 2014 deletions(-) create mode 100644 app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json delete mode 100644 app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.java create mode 100644 app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.kt delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/database/Video.java delete mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.java create mode 100644 app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt diff --git a/app/build.gradle b/app/build.gradle index f3d4dc1f..00d48d76 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,6 +82,7 @@ android { composeOptions { kotlinCompilerExtensionVersion composeVer } + namespace 'com.deniscerri.ytdlnis' } diff --git a/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json new file mode 100644 index 00000000..1283c17f --- /dev/null +++ b/app/schemas/com.deniscerri.ytdlnis.database.DBManager/1.json @@ -0,0 +1,312 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "1391e7ec82bbacc310cf6f23e3d1f85a", + "entities": [ + { + "tableName": "results", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `duration` TEXT NOT NULL, `thumb` TEXT NOT NULL, `website` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT)", + "fields": [ + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "author", + "columnName": "author", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "duration", + "columnName": "duration", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumb", + "columnName": "thumb", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "website", + "columnName": "website", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistTitle", + "columnName": "playlistTitle", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "history", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `duration` TEXT NOT NULL, `thumb` TEXT NOT NULL, `type` TEXT NOT NULL, `time` INTEGER NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT)", + "fields": [ + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "author", + "columnName": "author", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "duration", + "columnName": "duration", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumb", + "columnName": "thumb", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "time", + "columnName": "time", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "downloadPath", + "columnName": "downloadPath", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "website", + "columnName": "website", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "downloads", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `audioQualityId` TEXT NOT NULL, `videoQualityId` TEXT NOT NULL, `customTemplateId` INTEGER NOT NULL, `audioFormat` TEXT NOT NULL, `videoFormat` TEXT NOT NULL, `formatDesc` TEXT NOT NULL, `removeAudio` INTEGER NOT NULL DEFAULT 0, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `id` INTEGER PRIMARY KEY AUTOINCREMENT)", + "fields": [ + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "author", + "columnName": "author", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "thumb", + "columnName": "thumb", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "duration", + "columnName": "duration", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "audioQualityId", + "columnName": "audioQualityId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "videoQualityId", + "columnName": "videoQualityId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "customTemplateId", + "columnName": "customTemplateId", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "audioFormat", + "columnName": "audioFormat", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "videoFormat", + "columnName": "videoFormat", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "formatDesc", + "columnName": "formatDesc", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "removeAudio", + "columnName": "removeAudio", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "downloadPath", + "columnName": "downloadPath", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "website", + "columnName": "website", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "downloadSize", + "columnName": "downloadSize", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "playlistTitle", + "columnName": "playlistTitle", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "status", + "columnName": "status", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'Queued'" + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "commandTemplates", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`title` TEXT NOT NULL, `content` TEXT NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT)", + "fields": [ + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1391e7ec82bbacc310cf6f23e3d1f85a')" + ] + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.java deleted file mode 100644 index bf95e48d..00000000 --- a/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.deniscerri.ytdlnis; - -import android.content.Context; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("com.deniscerri.ytdl", appContext.getPackageName()); - } -} diff --git a/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..b73ac878 --- /dev/null +++ b/app/src/androidTest/java/com/deniscerri/ytdlnis/ExampleInstrumentedTest.kt @@ -0,0 +1,22 @@ +package com.deniscerri.ytdlnis + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented test, which will execute on an Android device. + * + * @see [Testing documentation](http://d.android.com/tools/testing) + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + Assert.assertEquals("com.deniscerri.ytdl", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7ed8199e..997d8281 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.kt b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.kt index edc6d6f5..b2966c92 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/DownloaderService.kt @@ -15,7 +15,7 @@ import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import androidx.work.workDataOf -import com.deniscerri.ytdlnis.database.Video +import com.deniscerri.ytdlnis.database.models.ResultItem import com.deniscerri.ytdlnis.service.DownloadInfo import com.deniscerri.ytdlnis.service.IDownloaderListener import com.deniscerri.ytdlnis.service.IDownloaderService @@ -46,7 +46,7 @@ class DownloaderService : Service() { ConcurrentHashMap() private val fileUtil = FileUtil() private val downloadInfo = DownloadInfo() - private var downloadQueue = LinkedList