From f335bbddf5f06baa8ebaff1fadb5dfd20b97a492 Mon Sep 17 00:00:00 2001
From: deniscerri <64997243+deniscerri@users.noreply.github.com>
Date: Sun, 29 Oct 2023 00:45:42 +0200
Subject: [PATCH] changes
- added extractor args lang when searching in yt-dlp
- removed webarchive search engine since its not supported anymore
- fixed terminal prematurely closing
- made format auto-update on by default for new users
- fixed main activity getting removed from recents when using the app with rvx
- added ability to have the last used command template for the next download
- fixed app crashing in landscape logs
- fixed app constantly going back to home in landscape or config change. now it keeps state
- add subtitle language suggestions in the subtitle dialog
- made command template scroll state hold even if fragment is destroyed
- added slovak sk language
- fixed terminal icon being blank in white mode, and now its red
- fixed share files from notification showing 2 files even though its 1
- fixed history item not being deleted from the bottom sheet
- cleared outdated player urls for stale result items
- added export cookies as file
- added export command templates for selected templates
- added icons for history details sheet chips
- added markdown in the update dialog
---
README-az.md | 2 +-
README-id.MD => README-id.md | 2 +-
README-pt.md | 2 +-
README-sq.md | 2 +-
README.MD => README.md | 4 +-
app/build.gradle | 5 +-
.../11.json | 558 ++++++++++++++++++
app/src/main/AndroidManifest.xml | 11 +-
.../com/deniscerri/ytdlnis/MainActivity.kt | 48 +-
.../deniscerri/ytdlnis/database/Converters.kt | 5 -
.../deniscerri/ytdlnis/database/DBManager.kt | 5 -
.../database/dao/CommandTemplateDao.kt | 8 +-
.../deniscerri/ytdlnis/database/dao/LogDao.kt | 1 -
.../ytdlnis/database/dao/TerminalDao.kt | 15 +-
.../database/models/DownloadItemSimple.kt | 1 -
.../ytdlnis/database/models/GithubRelease.kt | 2 +
.../ytdlnis/database/models/LogItem.kt | 1 -
.../ytdlnis/database/models/TerminalItem.kt | 1 -
.../repository/CommandTemplateRepository.kt | 4 +-
.../database/repository/CookieRepository.kt | 1 -
.../database/repository/LogRepository.kt | 19 +-
.../database/repository/ResultRepository.kt | 1 -
.../viewmodel/CommandTemplateViewModel.kt | 5 +-
.../database/viewmodel/CookieViewModel.kt | 16 +
.../database/viewmodel/DownloadViewModel.kt | 21 +-
.../database/viewmodel/HistoryViewModel.kt | 2 +-
.../database/viewmodel/LogViewModel.kt | 2 -
.../database/viewmodel/ResultViewModel.kt | 3 -
.../database/viewmodel/TerminalViewModel.kt | 41 --
.../ytdlnis/receiver/AlarmStopReceiver.kt | 3 -
.../CancelDownloadNotificationReceiver.kt | 2 -
.../ytdlnis/receiver/CancelWorkReceiver.kt | 9 -
.../PauseDownloadNotificationReceiver.kt | 1 -
.../ytdlnis/receiver/ShareFileActivity.kt | 7 +-
.../com/deniscerri/ytdlnis/ui/HomeFragment.kt | 7 +-
.../{ => ui}/adapter/ActiveDownloadAdapter.kt | 10 +-
.../adapter/ActiveDownloadMinifiedAdapter.kt | 16 +-
.../ConfigureMultipleDownloadsAdapter.kt | 15 +-
.../ytdlnis/{ => ui}/adapter/CookieAdapter.kt | 7 +-
.../{ => ui}/adapter/DownloadLogsAdapter.kt | 10 +-
.../adapter/GenericDownloadAdapter.kt | 8 +-
.../{ => ui}/adapter/HistoryAdapter.kt | 15 +-
.../ytdlnis/{ => ui}/adapter/HomeAdapter.kt | 8 +-
.../{ => ui}/adapter/PlaylistAdapter.kt | 7 +-
.../{ => ui}/adapter/TemplatesAdapter.kt | 72 ++-
.../adapter/TerminalDownloadsAdapter.kt | 6 +-
.../ui/downloadcard/AddExtraCommandsDialog.kt | 8 -
.../ConfigureDownloadBottomSheetDialog.kt | 5 +-
.../downloadcard/CutVideoBottomSheetDialog.kt | 1 -
.../ui/downloadcard/DownloadAudioFragment.kt | 40 +-
.../downloadcard/DownloadBottomSheetDialog.kt | 79 ++-
.../downloadcard/DownloadCommandFragment.kt | 31 +-
.../DownloadMultipleBottomSheetDialog.kt | 31 +-
.../ui/downloadcard/DownloadVideoFragment.kt | 35 +-
.../FormatSelectionBottomSheetDialog.kt | 8 +-
.../downloadcard/ResultCardDetailsDialog.kt | 19 +-
.../downloadcard/SelectPlaylistItemsDialog.kt | 10 +-
.../ui/downloads/ActiveDownloadsFragment.kt | 6 +-
.../downloads/CancelledDownloadsFragment.kt | 8 +-
.../ui/downloads/DownloadQueueMainFragment.kt | 2 -
.../ui/downloads/ErroredDownloadsFragment.kt | 8 +-
.../ytdlnis/ui/downloads/HistoryFragment.kt | 21 +-
.../ui/downloads/QueuedDownloadsFragment.kt | 6 +-
.../ui/downloads/SavedDownloadsFragment.kt | 8 +-
.../ui/more/CommandTemplatesFragment.kt | 130 +++-
.../ytdlnis/ui/more/CookiesFragment.kt | 24 +-
.../ytdlnis/ui/more/MoreFragment.kt | 1 -
.../more/downloadLogs/DownloadLogFragment.kt | 64 +-
.../downloadLogs/DownloadLogListFragment.kt | 2 +-
.../more/settings/FolderSettingsFragment.kt | 30 +-
.../more/settings/GeneralSettingsFragment.kt | 22 +-
.../ui/more/settings/SettingsActivity.kt | 2 +-
.../ui/more/terminal/TerminalActivity.kt | 7 -
.../terminal/TerminalDownloadsListFragment.kt | 13 +-
.../ui/more/terminal/TerminalFragment.kt | 75 ++-
.../com/deniscerri/ytdlnis/util/FileUtil.kt | 16 +-
.../com/deniscerri/ytdlnis/util/InfoUtil.kt | 28 +-
.../ytdlnis/util/NotificationUtil.kt | 42 +-
.../com/deniscerri/ytdlnis/util/UiUtil.kt | 176 ++++--
.../com/deniscerri/ytdlnis/util/UpdateUtil.kt | 46 +-
.../deniscerri/ytdlnis/work/DownloadWorker.kt | 38 +-
.../ytdlnis/work/MoveCacheFilesWorker.kt | 19 -
.../ytdlnis/work/TerminalDownloadWorker.kt | 15 +-
.../res/drawable/terminal_icon_foreground.xml | 2 +-
.../res/layout-land/result_card_details.xml | 2 +-
.../configure_download_bottom_sheet.xml | 1 +
.../main/res/layout/download_bottom_sheet.xml | 1 +
app/src/main/res/layout/fragment_active.xml | 61 +-
.../res/layout/fragment_command_templates.xml | 28 +-
app/src/main/res/layout/fragment_cookies.xml | 2 +-
.../res/layout/fragment_download_audio.xml | 2 -
.../res/layout/fragment_download_command.xml | 2 +-
.../main/res/layout/fragment_download_log.xml | 2 +-
.../res/layout/fragment_download_log_list.xml | 2 +-
.../fragment_download_queue_main_screen.xml | 7 +-
app/src/main/res/layout/fragment_history.xml | 2 +-
app/src/main/res/layout/fragment_inqueue.xml | 58 +-
.../fragment_terminal_download_list.xml | 2 +-
app/src/main/res/layout/generic_list.xml | 19 +
.../main/res/layout/generic_recyclerview.xml | 10 -
app/src/main/res/layout/history_card.xml | 22 +-
.../history_item_details_bottom_sheet.xml | 2 +
...{history_no_results.xml => no_results.xml} | 0
app/src/main/res/layout/subtitle_dialog.xml | 61 ++
app/src/main/res/menu/cookies_menu.xml | 5 +
app/src/main/res/menu/log_detail_menu.xml | 7 +
.../main/res/menu/templates_menu_context.xml | 27 +
app/src/main/res/values/arrays.xml | 91 ++-
app/src/main/res/values/strings.xml | 5 +-
app/src/main/res/xml/locales_config.xml | 1 +
app/src/main/res/xml/updating_preferences.xml | 2 +-
111 files changed, 1811 insertions(+), 682 deletions(-)
rename README-id.MD => README-id.md (99%)
rename README.MD => README.md (98%)
create mode 100644 app/schemas/com.deniscerri.ytdlnis.data.DBManager/11.json
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/ActiveDownloadAdapter.kt (96%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/ActiveDownloadMinifiedAdapter.kt (93%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/ConfigureMultipleDownloadsAdapter.kt (94%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/CookieAdapter.kt (94%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/DownloadLogsAdapter.kt (95%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/GenericDownloadAdapter.kt (97%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/HistoryAdapter.kt (92%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/HomeAdapter.kt (98%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/PlaylistAdapter.kt (97%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/TemplatesAdapter.kt (57%)
rename app/src/main/java/com/deniscerri/ytdlnis/{ => ui}/adapter/TerminalDownloadsAdapter.kt (96%)
create mode 100644 app/src/main/res/layout/generic_list.xml
delete mode 100644 app/src/main/res/layout/generic_recyclerview.xml
rename app/src/main/res/layout/{history_no_results.xml => no_results.xml} (100%)
create mode 100644 app/src/main/res/layout/subtitle_dialog.xml
create mode 100644 app/src/main/res/menu/templates_menu_context.xml
diff --git a/README-az.md b/README-az.md
index 3c3ba691..79f8bd60 100644
--- a/README-az.md
+++ b/README-az.md
@@ -4,7 +4,7 @@
diff --git a/README-id.MD b/README-id.md
similarity index 99%
rename from README-id.MD
rename to README-id.md
index 362e6246..67ee9e1a 100644
--- a/README-id.MD
+++ b/README-id.md
@@ -4,7 +4,7 @@
diff --git a/README-pt.md b/README-pt.md
index 9ed9fe5c..8250ce12 100644
--- a/README-pt.md
+++ b/README-pt.md
@@ -4,7 +4,7 @@
diff --git a/README-sq.md b/README-sq.md
index a680986a..7235afc7 100644
--- a/README-sq.md
+++ b/README-sq.md
@@ -4,7 +4,7 @@
diff --git a/README.MD b/README.md
similarity index 98%
rename from README.MD
rename to README.md
index 7e637433..a5196bb3 100644
--- a/README.MD
+++ b/README.md
@@ -10,7 +10,7 @@
|
Azərbaycanca
|
- Indonesia
+ Indonesia
|
Português
@@ -34,7 +34,7 @@
[](https://t.me/ytdlnisupdates)
-
+### The links above are the only trusted sources of YTDLnis. Everything else is not related to me.
diff --git a/app/build.gradle b/app/build.gradle
index c10a2840..ec5a7518 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,7 +10,7 @@ def properties = new Properties()
def versionMajor = 1
def versionMinor = 6
def versionPatch = 8
-def versionBuild = 3 // bump for dogfood builds, public betas, etc.
+def versionBuild = 4 // bump for dogfood builds, public betas, etc.
def versionExt = ""
if (versionBuild > 0){
@@ -188,5 +188,6 @@ dependencies {
implementation "com.anggrayudi:storage:1.5.5"
implementation 'me.zhanghai.android.fastscroll:library:1.3.0'
implementation 'com.google.accompanist:accompanist-webview:0.30.1'
- implementation 'androidx.compose.material3:material3-android:1.2.0-alpha09'
+ implementation 'androidx.compose.material3:material3-android:1.2.0-alpha10'
+ implementation "io.noties.markwon:core:4.6.2"
}
diff --git a/app/schemas/com.deniscerri.ytdlnis.data.DBManager/11.json b/app/schemas/com.deniscerri.ytdlnis.data.DBManager/11.json
new file mode 100644
index 00000000..ea52b871
--- /dev/null
+++ b/app/schemas/com.deniscerri.ytdlnis.data.DBManager/11.json
@@ -0,0 +1,558 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 11,
+ "identityHash": "09798517d2b7ce96999c879bcd381c7f",
+ "entities": [
+ {
+ "tableName": "results",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `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, `formats` TEXT NOT NULL, `urls` TEXT NOT NULL DEFAULT '', `chapters` TEXT, `creationTime` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "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": "formats",
+ "columnName": "formats",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "urls",
+ "columnName": "urls",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "''"
+ },
+ {
+ "fieldPath": "chapters",
+ "columnName": "chapters",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "creationTime",
+ "columnName": "creationTime",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "history",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `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, `format` TEXT NOT NULL, `downloadId` INTEGER NOT NULL DEFAULT 0, `command` TEXT NOT NULL DEFAULT '')",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "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": "format",
+ "columnName": "format",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "downloadId",
+ "columnName": "downloadId",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ },
+ {
+ "fieldPath": "command",
+ "columnName": "command",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "''"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "downloads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `author` TEXT NOT NULL, `thumb` TEXT NOT NULL, `duration` TEXT NOT NULL, `type` TEXT NOT NULL, `format` TEXT NOT NULL, `container` TEXT NOT NULL DEFAULT 'Default', `downloadSections` TEXT NOT NULL DEFAULT '', `allFormats` TEXT NOT NULL, `downloadPath` TEXT NOT NULL, `website` TEXT NOT NULL, `downloadSize` TEXT NOT NULL, `playlistTitle` TEXT NOT NULL, `audioPreferences` TEXT NOT NULL, `videoPreferences` TEXT NOT NULL, `extraCommands` TEXT NOT NULL DEFAULT '', `customFileNameTemplate` TEXT NOT NULL, `SaveThumb` INTEGER NOT NULL, `status` TEXT NOT NULL DEFAULT 'Queued', `downloadStartTime` INTEGER NOT NULL DEFAULT 0, `logID` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "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": "format",
+ "columnName": "format",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "container",
+ "columnName": "container",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "'Default'"
+ },
+ {
+ "fieldPath": "downloadSections",
+ "columnName": "downloadSections",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "''"
+ },
+ {
+ "fieldPath": "allFormats",
+ "columnName": "allFormats",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "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": "audioPreferences",
+ "columnName": "audioPreferences",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "videoPreferences",
+ "columnName": "videoPreferences",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "extraCommands",
+ "columnName": "extraCommands",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "''"
+ },
+ {
+ "fieldPath": "customFileNameTemplate",
+ "columnName": "customFileNameTemplate",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "SaveThumb",
+ "columnName": "SaveThumb",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "status",
+ "columnName": "status",
+ "affinity": "TEXT",
+ "notNull": true,
+ "defaultValue": "'Queued'"
+ },
+ {
+ "fieldPath": "downloadStartTime",
+ "columnName": "downloadStartTime",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ },
+ {
+ "fieldPath": "logID",
+ "columnName": "logID",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "commandTemplates",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT NOT NULL, `content` TEXT NOT NULL, `useAsExtraCommand` INTEGER NOT NULL DEFAULT 0)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "content",
+ "columnName": "content",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "useAsExtraCommand",
+ "columnName": "useAsExtraCommand",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "searchHistory",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `query` TEXT NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "query",
+ "columnName": "query",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "templateShortcuts",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `content` TEXT NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "content",
+ "columnName": "content",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "cookies",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` TEXT NOT NULL, `content` TEXT NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "content",
+ "columnName": "content",
+ "affinity": "TEXT",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "logs",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT NOT NULL, `content` TEXT NOT NULL, `format` TEXT NOT NULL, `downloadType` TEXT NOT NULL, `downloadTime` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "content",
+ "columnName": "content",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "format",
+ "columnName": "format",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "downloadType",
+ "columnName": "downloadType",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "downloadTime",
+ "columnName": "downloadTime",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "terminalDownloads",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `command` TEXT NOT NULL, `log` TEXT DEFAULT '')",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "command",
+ "columnName": "command",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "log",
+ "columnName": "log",
+ "affinity": "TEXT",
+ "notNull": false,
+ "defaultValue": "''"
+ }
+ ],
+ "primaryKey": {
+ "autoGenerate": true,
+ "columnNames": [
+ "id"
+ ]
+ },
+ "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, '09798517d2b7ce96999c879bcd381c7f')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 45d2930c..51a85cf4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,7 +43,7 @@
@@ -53,7 +53,6 @@
android:configChanges="smallestScreenSize|layoutDirection|locale|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="true"
- android:launchMode="singleInstance"
android:theme="@style/Theme.BottomSheet">
@@ -125,7 +124,7 @@
android:enabled="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
- android:configChanges="smallestScreenSize|layoutDirection|locale|orientation|screenSize"
+ android:configChanges="locale"
android:targetActivity=".MainActivity"
android:windowSoftInputMode="adjustPan"
android:exported="true">
@@ -147,7 +146,7 @@
android:exported="true"
android:icon="@mipmap/ic_launcher_dark"
android:roundIcon="@mipmap/ic_launcher_round_dark"
- android:configChanges="smallestScreenSize|layoutDirection|locale|orientation|screenSize"
+ android:configChanges="locale"
android:targetActivity=".MainActivity"
android:windowSoftInputMode="adjustPan">
@@ -167,7 +166,7 @@
android:exported="true"
android:icon="@mipmap/ic_launcher_light"
android:roundIcon="@mipmap/ic_launcher_round_light"
- android:configChanges="smallestScreenSize|layoutDirection|locale|orientation|screenSize"
+ android:configChanges="locale"
android:targetActivity=".MainActivity"
android:windowSoftInputMode="adjustPan">
@@ -183,7 +182,7 @@
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
index 1eddb639..6b9b3627 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
@@ -45,11 +45,9 @@ import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog
import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity
import com.deniscerri.ytdlnis.util.FileUtil
import com.deniscerri.ytdlnis.util.ThemeUtil
-import com.deniscerri.ytdlnis.util.UiUtil
import com.deniscerri.ytdlnis.util.UpdateUtil
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
-import com.google.android.material.elevation.SurfaceColors
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.navigation.NavigationView
import com.google.android.material.navigationrail.NavigationRailView
@@ -65,7 +63,6 @@ import java.io.BufferedReader
import java.io.File
import java.io.InputStreamReader
import java.io.Reader
-import java.net.URI
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import kotlin.system.exitProcess
@@ -81,7 +78,6 @@ class MainActivity : BaseActivity() {
private lateinit var navigationView: View
private lateinit var navHostFragment : NavHostFragment
private lateinit var navController : NavController
- private lateinit var sharedPreferences: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -93,9 +89,7 @@ class MainActivity : BaseActivity() {
downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java]
preferences = PreferenceManager.getDefaultSharedPreferences(context)
- if (preferences.getBoolean("incognito", false)){
- resultViewModel.deleteAll()
- }
+ if (preferences.getBoolean("incognito", false)) resultViewModel.deleteAll()
askPermissions()
checkUpdate()
@@ -120,17 +114,17 @@ class MainActivity : BaseActivity() {
}
}
- sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
+ if (savedInstanceState == null){
+ val graph = navController.navInflater.inflate(R.navigation.nav_graph)
+ graph.setStartDestination(R.id.homeFragment)
+ when(preferences.getString("start_destination", "")) {
+ "History" -> graph.setStartDestination(R.id.historyFragment)
+ "More" -> if (navigationView is NavigationBarView) graph.setStartDestination(R.id.moreFragment)
+ }
- val graph = navController.navInflater.inflate(R.navigation.nav_graph)
- graph.setStartDestination(R.id.homeFragment)
- when(sharedPreferences.getString("start_destination", "")) {
- "History" -> graph.setStartDestination(R.id.historyFragment)
- "More" -> if (navigationView is NavigationBarView) graph.setStartDestination(R.id.moreFragment)
+ navController.graph = graph
}
- navController.graph = graph
-
if (navigationView is NavigationBarView){
(navigationView as NavigationBarView).setupWithNavController(navController)
(navigationView as NavigationBarView).setOnItemReselectedListener {
@@ -164,7 +158,7 @@ class MainActivity : BaseActivity() {
(navigationView as NavigationView).setupWithNavController(navController)
//terminate button
(navigationView as NavigationView).menu.getItem(7).setOnMenuItemClickListener {
- if (sharedPreferences.getBoolean("ask_terminate_app", true)){
+ if (preferences.getBoolean("ask_terminate_app", true)){
var doNotShowAgain = false
val terminateDialog = MaterialAlertDialogBuilder(this)
terminateDialog.setTitle(getString(R.string.confirm_delete_history))
@@ -188,7 +182,7 @@ class MainActivity : BaseActivity() {
runBlocking {
job.join()
if (doNotShowAgain){
- sharedPreferences.edit().putBoolean("ask_terminate_app", false).apply()
+ preferences.edit().putBoolean("ask_terminate_app", false).apply()
}
finishAndRemoveTask()
finishAffinity()
@@ -212,9 +206,6 @@ class MainActivity : BaseActivity() {
(navigationView as NavigationView).getHeaderView(0).findViewById(R.id.title).text = ThemeUtil.getStyledAppName(this)
}
- cookieViewModel.updateCookiesFile()
- val intent = intent
- handleIntents(intent)
navController.addOnDestinationChangedListener { _, destination, _ ->
if (navigationView is NavigationBarView){
@@ -233,12 +224,15 @@ class MainActivity : BaseActivity() {
}
}
-
- when(sharedPreferences.getString("start_destination", "")) {
- "Queue" -> navController.navigate(R.id.downloadQueueMainFragment)
+ when(preferences.getString("start_destination", "")) {
+ "Queue" -> if (savedInstanceState == null) navController.navigate(R.id.downloadQueueMainFragment)
}
- if (sharedPreferences.getBoolean("auto_update_ytdlp", false)){
+ cookieViewModel.updateCookiesFile()
+ val intent = intent
+ handleIntents(intent)
+
+ if (preferences.getBoolean("auto_update_ytdlp", false)){
CoroutineScope(SupervisorJob()).launch(Dispatchers.IO) {
if(DBManager.getInstance(this@MainActivity).downloadDao.getDownloadsCountByStatus(listOf("Active", "Queued")) == 0){
if (UpdateUtil(this@MainActivity).updateYoutubeDL() == YoutubeDL.UpdateStatus.DONE) {
@@ -251,8 +245,8 @@ class MainActivity : BaseActivity() {
}
}
- }
+ }
override fun onSaveInstanceState(savedInstanceState: Bundle) {
super.onSaveInstanceState(savedInstanceState)
savedInstanceState.putBundle("nav_state", navController.saveState())
@@ -489,10 +483,6 @@ class MainActivity : BaseActivity() {
}
dialog.show()
}
- override fun onConfigurationChanged(newConfig: Configuration) {
- startActivity(Intent(this, MainActivity::class.java))
- super.onConfigurationChanged(newConfig)
- }
companion object {
private const val TAG = "MainActivity"
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
index e68de198..14711a5f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/Converters.kt
@@ -7,11 +7,6 @@ import com.deniscerri.ytdlnis.database.models.Format
import com.deniscerri.ytdlnis.database.models.VideoPreferences
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
-import java.lang.reflect.Type
-import java.text.SimpleDateFormat
-import java.util.Calendar
-import java.util.Locale
class Converters {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/DBManager.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/DBManager.kt
index 2224aa4a..101a84e0 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/DBManager.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/DBManager.kt
@@ -1,14 +1,9 @@
package com.deniscerri.ytdlnis.database
import android.content.Context
-import androidx.paging.Pager
-import androidx.paging.PagingConfig
-import androidx.paging.PagingData
-import androidx.paging.PagingSource
import androidx.room.*
import com.deniscerri.ytdlnis.database.dao.*
import com.deniscerri.ytdlnis.database.models.*
-import kotlinx.coroutines.flow.Flow
@TypeConverters(Converters::class)
@Database(
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
index f2393157..b3b1b8b3 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/CommandTemplateDao.kt
@@ -2,7 +2,6 @@ package com.deniscerri.ytdlnis.database.dao
import androidx.room.*
import com.deniscerri.ytdlnis.database.models.CommandTemplate
-import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.models.TemplateShortcut
import kotlinx.coroutines.flow.Flow
@@ -48,10 +47,13 @@ interface CommandTemplateDao {
fun getTotalShortcutNumber() : Int
@Query("SELECT * FROM commandTemplates WHERE id=:id LIMIT 1")
- fun getTemplate(id: Long) : CommandTemplate
+ fun getTemplate(id: Long) : CommandTemplate?
+
+ @Query("SELECT * FROM commandTemplates WHERE content=:content LIMIT 1")
+ fun getTemplateByContent(content: String) : CommandTemplate?
@Query("SELECT * FROM commandTemplates ORDER BY id DESC LIMIT 1")
- fun getFirst() : CommandTemplate
+ fun getFirst() : CommandTemplate?
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(item: CommandTemplate)
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/LogDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/LogDao.kt
index 60b43857..be21f5e6 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/LogDao.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/LogDao.kt
@@ -1,7 +1,6 @@
package com.deniscerri.ytdlnis.database.dao
import androidx.room.*
-import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.models.LogItem
import kotlinx.coroutines.flow.Flow
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/TerminalDao.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/TerminalDao.kt
index 548771ff..707e87fa 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/dao/TerminalDao.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/dao/TerminalDao.kt
@@ -1,10 +1,6 @@
package com.deniscerri.ytdlnis.database.dao
-import androidx.paging.PagingSource
import androidx.room.*
-import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.DownloadItemSimple
-import com.deniscerri.ytdlnis.database.models.Format
import com.deniscerri.ytdlnis.database.models.TerminalItem
import kotlinx.coroutines.flow.Flow
@@ -34,11 +30,12 @@ interface TerminalDao {
val log = t.log ?: ""
val lines = log.split("\n")
//clean dublicate progress + add newline
- val l = if (listOf(line, lines.last()).all { it.contains("[download")}){
- lines.dropLast(1).joinToString("\n")
- }else{
- log
- } + "\n${line}"
+ var newLine = line
+ if (newLine.contains("[download")){
+ newLine = "[download]" + line.split("[download]").last()
+ }
+
+ val l = lines.dropLastWhile { it.contains("[download") }.joinToString("\n") + "\n${newLine}"
updateTerminalLog(l, id)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItemSimple.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItemSimple.kt
index 638b3d4f..f8555724 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItemSimple.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItemSimple.kt
@@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.database.models
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
@Entity(tableName = "downloads")
data class DownloadItemSimple(
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/GithubRelease.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/GithubRelease.kt
index 5b132242..47e579b8 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/GithubRelease.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/GithubRelease.kt
@@ -3,6 +3,8 @@ package com.deniscerri.ytdlnis.database.models
import com.google.gson.annotations.SerializedName
data class GithubRelease(
+ @SerializedName(value = "html_url")
+ val html_url: String,
@SerializedName(value = "tag_name")
var tag_name: String,
@SerializedName(value = "body")
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/LogItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/LogItem.kt
index 5672dcbc..a8e9748f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/LogItem.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/LogItem.kt
@@ -1,6 +1,5 @@
package com.deniscerri.ytdlnis.database.models
-import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/TerminalItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/TerminalItem.kt
index 4744d312..55fc0dd7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/TerminalItem.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/TerminalItem.kt
@@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.database.models
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
@Entity(tableName = "terminalDownloads")
data class TerminalItem(
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
index f79b2f98..e189d202 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CommandTemplateRepository.kt
@@ -1,10 +1,8 @@
package com.deniscerri.ytdlnis.database.repository
-import androidx.lifecycle.LiveData
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.dao.CommandTemplateDao
import com.deniscerri.ytdlnis.database.models.CommandTemplate
-import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.models.TemplateShortcut
import kotlinx.coroutines.flow.Flow
@@ -37,7 +35,7 @@ class CommandTemplateRepository(private val commandDao: CommandTemplateDao) {
}
fun getItem(id: Long) : CommandTemplate {
- return commandDao.getTemplate(id)
+ return commandDao.getTemplate(id)!!
}
suspend fun insert(item: CommandTemplate){
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CookieRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CookieRepository.kt
index 2c042fd4..f14b9558 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CookieRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/CookieRepository.kt
@@ -1,6 +1,5 @@
package com.deniscerri.ytdlnis.database.repository
-import androidx.lifecycle.LiveData
import com.deniscerri.ytdlnis.database.dao.CookieDao
import com.deniscerri.ytdlnis.database.models.CookieItem
import kotlinx.coroutines.flow.Flow
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/LogRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/LogRepository.kt
index 3a476f36..3c3b6ab8 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/LogRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/LogRepository.kt
@@ -1,7 +1,6 @@
package com.deniscerri.ytdlnis.database.repository
import com.deniscerri.ytdlnis.database.dao.LogDao
-import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.models.LogItem
import kotlinx.coroutines.flow.Flow
@@ -16,6 +15,10 @@ class LogRepository(private val logDao: LogDao) {
return logDao.getLogFlowByID(id)
}
+ fun getLogByID(id: Long) : LogItem? {
+ return logDao.getByID(id)
+ }
+
suspend fun insert(item: LogItem) : Long{
return logDao.insert(item)
@@ -31,13 +34,17 @@ class LogRepository(private val logDao: LogDao) {
}
fun getItem(id: Long) : LogItem{
- return logDao.getByID(id);
+ return logDao.getByID(id)
}
- suspend fun update(newLine: String, id: Long){
- val item = getItem(id)
- item.content += "${newLine}\n"
- logDao.update(item)
+ suspend fun update(line: String, id: Long){
+ runCatching {
+ val item = getItem(id)
+ val log = item.content
+ //clean duplicate progress + add newline
+ //item.content = log.replace("(?s:.*\\n)?\\K\\[download\\]( *?)(\\d)(.*?)\\n(?!.*\\[download\\]( *?)(\\d)(.*?)\\n)".toRegex()).replac { it.contains("[download") }.joinToString("\n") + "\n${line}"
+ logDao.update(item)
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
index 7abe1f8c..5f147926 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/ResultRepository.kt
@@ -1,7 +1,6 @@
package com.deniscerri.ytdlnis.database.repository
import android.content.Context
-import android.util.Log
import com.deniscerri.ytdlnis.database.dao.ResultDao
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.util.InfoUtil
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
index 69421429..74c6546e 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CommandTemplateViewModel.kt
@@ -12,10 +12,8 @@ import androidx.lifecycle.viewModelScope
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.models.CommandTemplate
import com.deniscerri.ytdlnis.database.models.CommandTemplateExport
-import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.models.TemplateShortcut
import com.deniscerri.ytdlnis.database.repository.CommandTemplateRepository
-import com.deniscerri.ytdlnis.database.repository.HistoryRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -28,8 +26,9 @@ class CommandTemplateViewModel(private val application: Application) : AndroidVi
val sortOrder = MutableLiveData(DBManager.SORTING.DESC)
val sortType = MutableLiveData(CommandTemplateRepository.CommandTemplateSortType.DATE)
private val queryFilter = MutableLiveData("")
- private var _items = MediatorLiveData>()
+
val allItems: LiveData>
+ private var _items = MediatorLiveData>()
val shortcuts : LiveData>
private val jsonFormat = Json { prettyPrint = true }
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CookieViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CookieViewModel.kt
index 7e4b7cc8..b10a588a 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CookieViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/CookieViewModel.kt
@@ -6,6 +6,7 @@ import android.content.ClipboardManager
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteDatabase.OPEN_READONLY
+import android.os.Environment
import android.util.Log
import android.webkit.CookieManager
import androidx.lifecycle.AndroidViewModel
@@ -17,6 +18,7 @@ import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.models.CookieItem
import com.deniscerri.ytdlnis.database.repository.CookieRepository
import com.deniscerri.ytdlnis.ui.more.WebViewActivity
+import com.deniscerri.ytdlnis.util.FileUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
@@ -169,4 +171,18 @@ class CookieViewModel(private val application: Application) : AndroidViewModel(a
}
}
+ fun exportToFile(exported: (File?) -> Unit) {
+ try{
+ val cookieFile = File(application.cacheDir, "cookies.txt")
+ if (!cookieFile.exists()) updateCookiesFile()
+
+ val downloads = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + File.separator + "YTDLnis_Cookies.txt")
+ val file = cookieFile.copyTo(downloads, true)
+ exported(file)
+ }catch (e: Exception){
+ e.printStackTrace()
+ exported(null)
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
index 47d716c3..df91c15e 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt
@@ -6,13 +6,11 @@ import android.content.SharedPreferences
import android.content.res.Configuration
import android.content.res.Resources
import android.net.ConnectivityManager
-import android.os.Bundle
import android.os.Looper
import android.util.DisplayMetrics
import android.widget.Toast
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.paging.PagingData
@@ -29,7 +27,6 @@ import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.dao.CommandTemplateDao
import com.deniscerri.ytdlnis.database.dao.DownloadDao
-import com.deniscerri.ytdlnis.database.dao.HistoryDao
import com.deniscerri.ytdlnis.database.dao.ResultDao
import com.deniscerri.ytdlnis.database.models.AudioPreferences
import com.deniscerri.ytdlnis.database.models.CommandTemplate
@@ -272,7 +269,10 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
}
if (preferredAudioFormats.isEmpty()){
- preferredAudioFormats.add(getFormat(resultItem.formats, Type.audio).format_id)
+ val audioF = getFormat(resultItem.formats, Type.audio)
+ if (!infoUtil.getGenericAudioFormats(resources).contains(audioF)){
+ preferredAudioFormats.add(audioF.format_id)
+ }
}
val videoPreferences = VideoPreferences(
@@ -465,7 +465,12 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
)
}
else -> {
- val c = commandTemplateDao.getFirst()
+ val lastUsedCommandTemplate = sharedPreferences.getString("lastCommandTemplateUsed", "")!!
+ val c = if (lastUsedCommandTemplate.isBlank()){
+ commandTemplateDao.getFirst() ?: CommandTemplate(0,"","", false)
+ }else{
+ commandTemplateDao.getTemplateByContent(lastUsedCommandTemplate) ?: CommandTemplate(0, "", lastUsedCommandTemplate, false)
+ }
return generateCommandFormat(c)
}
}
@@ -474,7 +479,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
fun generateCommandFormat(c: CommandTemplate) : Format {
return Format(
c.title,
- "",
+ c.id.toString(),
"",
"",
"",
@@ -486,7 +491,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
fun getLatestCommandTemplateAsFormat() : Format {
- val t = commandTemplateDao.getFirst()
+ val t = commandTemplateDao.getFirst()!!
return Format(t.title, "", "", "", "", 0, t.content)
}
@@ -591,7 +596,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
startDownloadWorker(emptyList())
}
- suspend fun queueDownloads(items: List, ignoreDuplicate : Boolean = false) {
+ suspend fun queueDownloads(items: List, ignoreDuplicate : Boolean = false) = CoroutineScope(Dispatchers.IO).launch {
val context = App.instance
val alarmScheduler = AlarmScheduler(context)
val activeAndQueuedDownloads = withContext(Dispatchers.IO){
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt
index 9a1e6db5..91be95f5 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt
@@ -12,7 +12,6 @@ import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.repository.HistoryRepository
import com.deniscerri.ytdlnis.database.DBManager.SORTING
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySortType
-import com.deniscerri.ytdlnis.util.FileUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -23,6 +22,7 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application)
val websiteFilter = MutableLiveData("")
private val queryFilter = MutableLiveData("")
private val formatFilter = MutableLiveData("")
+
val allItems : LiveData>
private var _items = MediatorLiveData>()
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/LogViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/LogViewModel.kt
index 40880889..02c840c7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/LogViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/LogViewModel.kt
@@ -1,7 +1,6 @@
package com.deniscerri.ytdlnis.database.viewmodel
import android.app.Application
-import android.util.Log
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.asLiveData
@@ -11,7 +10,6 @@ import com.deniscerri.ytdlnis.database.models.LogItem
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.database.repository.LogRepository
import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
class LogViewModel(private val application: Application) : AndroidViewModel(application) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt
index d3f9918a..e993ae0f 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt
@@ -6,7 +6,6 @@ import android.util.Log
import android.util.Patterns
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.preference.PreferenceManager
@@ -17,10 +16,8 @@ import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.database.models.SearchHistoryItem
import com.deniscerri.ytdlnis.database.repository.ResultRepository
import com.deniscerri.ytdlnis.database.repository.SearchHistoryRepository
-import com.deniscerri.ytdlnis.util.UiUtil
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
-import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/TerminalViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/TerminalViewModel.kt
index 35aae7c6..e2084bee 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/TerminalViewModel.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/TerminalViewModel.kt
@@ -1,62 +1,21 @@
package com.deniscerri.ytdlnis.database.viewmodel
import android.app.Application
-import android.content.Context
-import android.content.SharedPreferences
-import android.content.res.Configuration
-import android.content.res.Resources
-import android.net.ConnectivityManager
-import android.os.Looper
-import android.util.DisplayMetrics
-import android.util.Log
-import android.widget.Toast
import androidx.lifecycle.AndroidViewModel
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.asLiveData
-import androidx.lifecycle.viewModelScope
-import androidx.paging.PagingData
-import androidx.preference.PreferenceManager
-import androidx.work.Constraints
import androidx.work.Data
import androidx.work.ExistingWorkPolicy
-import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequestBuilder
-import androidx.work.WorkInfo
import androidx.work.WorkManager
-import androidx.work.await
-import com.deniscerri.ytdlnis.App
-import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.DBManager
-import com.deniscerri.ytdlnis.database.dao.CommandTemplateDao
-import com.deniscerri.ytdlnis.database.dao.DownloadDao
-import com.deniscerri.ytdlnis.database.dao.ResultDao
import com.deniscerri.ytdlnis.database.dao.TerminalDao
-import com.deniscerri.ytdlnis.database.models.AudioPreferences
-import com.deniscerri.ytdlnis.database.models.CommandTemplate
-import com.deniscerri.ytdlnis.database.models.DownloadItem
-import com.deniscerri.ytdlnis.database.models.DownloadItemSimple
-import com.deniscerri.ytdlnis.database.models.Format
-import com.deniscerri.ytdlnis.database.models.HistoryItem
-import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.database.models.TerminalItem
-import com.deniscerri.ytdlnis.database.models.VideoPreferences
-import com.deniscerri.ytdlnis.database.repository.DownloadRepository
-import com.deniscerri.ytdlnis.util.FileUtil
-import com.deniscerri.ytdlnis.util.InfoUtil
import com.deniscerri.ytdlnis.util.NotificationUtil
-import com.deniscerri.ytdlnis.work.AlarmScheduler
-import com.deniscerri.ytdlnis.work.DownloadWorker
import com.deniscerri.ytdlnis.work.TerminalDownloadWorker
-import com.google.gson.Gson
import com.yausername.youtubedl_android.YoutubeDL
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
-import java.io.File
-import java.util.Locale
-import java.util.concurrent.TimeUnit
class TerminalViewModel(private val application: Application) : AndroidViewModel(application) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/AlarmStopReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/AlarmStopReceiver.kt
index fcdbe3ec..b8f8d7f7 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/AlarmStopReceiver.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/AlarmStopReceiver.kt
@@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import android.util.Log
import androidx.preference.PreferenceManager
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
@@ -13,9 +12,7 @@ import com.yausername.youtubedl_android.YoutubeDL
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import java.text.SimpleDateFormat
import java.util.Calendar
-import java.util.Locale
class AlarmStopReceiver : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelDownloadNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelDownloadNotificationReceiver.kt
index a242c19e..b1917c28 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelDownloadNotificationReceiver.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelDownloadNotificationReceiver.kt
@@ -4,7 +4,6 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
-import androidx.work.WorkManager
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.util.NotificationUtil
@@ -12,7 +11,6 @@ import com.yausername.youtubedl_android.YoutubeDL
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
class CancelDownloadNotificationReceiver : BroadcastReceiver() {
override fun onReceive(c: Context, intent: Intent) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelWorkReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelWorkReceiver.kt
index ae2c415b..bfc49ae4 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelWorkReceiver.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/CancelWorkReceiver.kt
@@ -3,16 +3,7 @@ package com.deniscerri.ytdlnis.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import android.util.Log
import androidx.work.WorkManager
-import com.deniscerri.ytdlnis.database.DBManager
-import com.deniscerri.ytdlnis.database.repository.DownloadRepository
-import com.deniscerri.ytdlnis.util.NotificationUtil
-import com.yausername.youtubedl_android.YoutubeDL
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.runBlocking
class CancelWorkReceiver : BroadcastReceiver() {
override fun onReceive(c: Context, intent: Intent) {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt
index 54a21825..756de36e 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/PauseDownloadNotificationReceiver.kt
@@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import android.util.Log
import com.deniscerri.ytdlnis.database.DBManager
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.util.NotificationUtil
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileActivity.kt
index 4d34229b..b4d1a238 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/ShareFileActivity.kt
@@ -4,9 +4,11 @@ import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.os.Build
import android.os.Bundle
+import android.util.Log
import android.view.WindowManager
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
+import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.ui.BaseActivity
import com.deniscerri.ytdlnis.util.NotificationUtil
import com.deniscerri.ytdlnis.util.ThemeUtil
@@ -36,10 +38,13 @@ class ShareFileActivity : BaseActivity() {
}
}
+ setContentView(R.layout.activity_share)
+
val paths = intent.getStringArrayExtra("path")
val notificationId = intent.getIntExtra("notificationID", 0)
NotificationUtil(this).cancelDownloadNotification(notificationId)
- UiUtil.shareFileIntent(this, paths!!.toList())
+ Log.e("SHAREE", paths.toString())
+ UiUtil.shareFileIntent(this, paths!!.toList().filter { it.isNotBlank() }.distinct())
finishAffinity()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
index f6574240..654a185b 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt
@@ -11,6 +11,7 @@ import android.os.Handler
import android.os.Looper
import android.text.Editable
import android.util.Log
+import android.util.Patterns
import android.view.*
import android.view.View.*
import android.widget.*
@@ -30,7 +31,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.MainActivity
import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.adapter.HomeAdapter
+import com.deniscerri.ytdlnis.ui.adapter.HomeAdapter
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
@@ -227,7 +228,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, OnClickListene
launch{
resultViewModel.uiState.collectLatest { res ->
if (res.errorMessage != null){
- kotlin.runCatching { UiUtil.handleResultResponse(requireActivity(), res) }
+ kotlin.runCatching { UiUtil.handleResultResponse(requireActivity(), res, closed ={}) }
resultViewModel.uiState.update {it.copy(errorMessage = null, actions = null) }
}
@@ -557,7 +558,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, OnClickListene
lifecycleScope.launch(Dispatchers.IO){
Thread.sleep(300)
if(sharedPreferences!!.getBoolean("quick_download", false) || sharedPreferences!!.getString("preferred_download_type", "video") == "command"){
- if (queryList.size == 1 && queryList.first().matches("(https?://(?:www\\.|(?!www))[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|www\\.[a-zA-Z\\d][a-zA-Z\\d-]+[a-zA-Z\\d]\\.\\S{2,}|https?://(?:www\\.|(?!www))[a-zA-Z\\d]+\\.\\S{2,}|www\\.[a-zA-Z\\d]+\\.\\S{2,})".toRegex())){
+ if (queryList.size == 1 && Patterns.WEB_URL.matcher(queryList.first()).matches()){
if (sharedPreferences!!.getBoolean("download_card", true)) {
showSingleDownloadSheet(
resultItem = downloadViewModel.createEmptyResultItem(queryList.first()),
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadAdapter.kt
similarity index 96%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadAdapter.kt
index 8dc50782..f528c307 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadAdapter.kt
@@ -1,11 +1,10 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.content.SharedPreferences
import android.graphics.Color
import android.os.Handler
import android.os.Looper
-import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -26,12 +25,11 @@ import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.google.android.material.chip.Chip
import com.google.android.material.progressindicator.LinearProgressIndicator
-import com.google.android.material.shape.CornerFamily
-import com.google.android.material.shape.ShapeAppearanceModel
import com.squareup.picasso.Picasso
-import java.lang.StringBuilder
-class ActiveDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class ActiveDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val sharedPreferences: SharedPreferences
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadMinifiedAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadMinifiedAdapter.kt
similarity index 93%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadMinifiedAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadMinifiedAdapter.kt
index bac3a682..c3c22e37 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ActiveDownloadMinifiedAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ActiveDownloadMinifiedAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.content.SharedPreferences
@@ -19,18 +19,16 @@ import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
-import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.util.FileUtil
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
-import com.google.android.material.chip.Chip
import com.google.android.material.progressindicator.LinearProgressIndicator
-import com.google.android.material.shape.CornerFamily
-import com.google.android.material.shape.ShapeAppearanceModel
import com.squareup.picasso.Picasso
import java.lang.StringBuilder
-class ActiveDownloadMinifiedAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class ActiveDownloadMinifiedAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val sharedPreferences: SharedPreferences
@@ -132,13 +130,15 @@ class ActiveDownloadMinifiedAdapter(onItemClickListener: OnItemClickListener, ac
pauseButton.setOnClickListener {
if (pauseButton.tag == ActiveDownloadAdapter.ActiveDownloadAction.Pause){
- onItemClickListener.onPauseClick(item.id, ActiveDownloadAdapter.ActiveDownloadAction.Pause, position)
+ onItemClickListener.onPauseClick(item.id,
+ ActiveDownloadAdapter.ActiveDownloadAction.Pause, position)
pauseButton.icon = ContextCompat.getDrawable(activity, R.drawable.exomedia_ic_play_arrow_white)
if (progressBar.progress == 0) progressBar.isIndeterminate = false
cancelButton.visibility = View.VISIBLE
pauseButton.tag = ActiveDownloadAdapter.ActiveDownloadAction.Resume
}else{
- onItemClickListener.onPauseClick(item.id, ActiveDownloadAdapter.ActiveDownloadAction.Resume, position)
+ onItemClickListener.onPauseClick(item.id,
+ ActiveDownloadAdapter.ActiveDownloadAction.Resume, position)
pauseButton.icon = ContextCompat.getDrawable(activity, R.drawable.exomedia_ic_pause_white)
progressBar.isIndeterminate = true
cancelButton.visibility = View.GONE
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ConfigureMultipleDownloadsAdapter.kt
similarity index 94%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ConfigureMultipleDownloadsAdapter.kt
index 326bda3c..9d57788c 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/ConfigureMultipleDownloadsAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/ConfigureMultipleDownloadsAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.content.SharedPreferences
@@ -24,7 +24,9 @@ import com.google.android.material.button.MaterialButton
import com.squareup.picasso.Picasso
import java.util.Locale
-class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val sharedPreferences : SharedPreferences
@@ -35,7 +37,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
}
- class ViewHolder(itemView: View, onItemClickListener: OnItemClickListener?) : RecyclerView.ViewHolder(itemView) {
+ class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val cardView: FrameLayout
init {
@@ -46,7 +48,7 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val cardView = LayoutInflater.from(parent.context)
.inflate(R.layout.download_card, parent, false)
- return ViewHolder(cardView, onItemClickListener)
+ return ViewHolder(cardView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
@@ -136,11 +138,16 @@ class ConfigureMultipleDownloadsAdapter(onItemClickListener: OnItemClickListener
card.setOnClickListener {
onItemClickListener.onCardClick(item.url)
}
+
+ card.setOnLongClickListener {
+ onItemClickListener.onDelete(item.url); true
+ }
}
interface OnItemClickListener {
fun onButtonClick(itemURL: String)
fun onCardClick(itemURL: String)
+ fun onDelete(itemURL: String)
}
companion object {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/CookieAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/CookieAdapter.kt
similarity index 94%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/CookieAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/CookieAdapter.kt
index c7ec1570..17da083d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/CookieAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/CookieAdapter.kt
@@ -1,11 +1,10 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
@@ -14,7 +13,9 @@ import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.CookieItem
import com.google.android.material.card.MaterialCardView
-class CookieAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class CookieAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/DownloadLogsAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/DownloadLogsAdapter.kt
similarity index 95%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/DownloadLogsAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/DownloadLogsAdapter.kt
index 6f5c972e..8c2469a3 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/DownloadLogsAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/DownloadLogsAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.annotation.SuppressLint
import android.app.Activity
@@ -6,25 +6,23 @@ import android.text.format.DateFormat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.Button
import android.widget.TextView
-import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.models.LogItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.deniscerri.ytdlnis.util.FileUtil
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
-import java.io.File
import java.text.SimpleDateFormat
import java.util.Locale
-class DownloadLogsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class DownloadLogsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val checkedItems: ArrayList
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/GenericDownloadAdapter.kt
similarity index 97%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/GenericDownloadAdapter.kt
index 16518b30..042ed384 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/GenericDownloadAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/GenericDownloadAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.annotation.SuppressLint
import android.app.Activity
@@ -10,13 +10,11 @@ import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
-import androidx.core.view.isVisible
import androidx.paging.PagingDataAdapter
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
-import com.deniscerri.ytdlnis.database.models.DownloadItem
import com.deniscerri.ytdlnis.database.models.DownloadItemSimple
import com.deniscerri.ytdlnis.database.repository.DownloadRepository
import com.deniscerri.ytdlnis.util.FileUtil
@@ -24,7 +22,9 @@ import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.squareup.picasso.Picasso
-class GenericDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : PagingDataAdapter(DIFF_CALLBACK) {
+class GenericDownloadAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : PagingDataAdapter(
+ DIFF_CALLBACK
+) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
val checkedItems: ArrayList
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HistoryAdapter.kt
similarity index 92%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HistoryAdapter.kt
index 2e375b10..06973fb4 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HistoryAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.annotation.SuppressLint
import android.app.Activity
@@ -24,13 +24,16 @@ import com.deniscerri.ytdlnis.database.models.HistoryItem
import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel
import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
+import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.squareup.picasso.Picasso
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
-class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val checkedItems: ArrayList
private val onItemClickListener: OnItemClickListener
private val activity: Activity
@@ -105,7 +108,7 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit
datetime.text = SimpleDateFormat(android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "ddMMMyyyy - HHmm"), Locale.getDefault()).format(item.time * 1000L)
// BUTTON ----------------------------------
- val btn = card.findViewById(R.id.downloads_download_button_type)
+ val btn = card.findViewById(R.id.downloads_download_button_type)
var filePresent = true
//IS IN THE FILE SYSTEM?
@@ -121,11 +124,11 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit
thumbnail.alpha = 0.7f
}
if (item.type == DownloadViewModel.Type.audio) {
- if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_music)
+ if (filePresent) btn.setImageResource(R.drawable.ic_music_downloaded) else btn.setImageResource(R.drawable.ic_music)
} else if (item.type == DownloadViewModel.Type.video) {
- if (filePresent) btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video_downloaded) else btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_video)
+ if (filePresent) btn.setImageResource(R.drawable.ic_video_downloaded) else btn.setImageResource(R.drawable.ic_video)
}else{
- btn.icon = ContextCompat.getDrawable(activity, R.drawable.ic_terminal)
+ btn.setImageResource(R.drawable.ic_terminal)
}
if (btn.hasOnClickListeners()) btn.setOnClickListener(null)
btn.isClickable = filePresent
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HomeAdapter.kt
similarity index 98%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HomeAdapter.kt
index 02378614..aa1c9e88 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HomeAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/HomeAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.content.SharedPreferences
@@ -9,9 +9,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
-import android.widget.LinearLayout
import android.widget.TextView
-import androidx.preference.Preference
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
@@ -25,7 +23,9 @@ import com.google.android.material.card.MaterialCardView
import com.google.android.material.progressindicator.LinearProgressIndicator
import com.squareup.picasso.Picasso
-class HomeAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class HomeAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val checkedVideos: ArrayList
private val onItemClickListener: OnItemClickListener
private val activity: Activity
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/PlaylistAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/PlaylistAdapter.kt
similarity index 97%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/PlaylistAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/PlaylistAdapter.kt
index 76719fce..91343170 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/PlaylistAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/PlaylistAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.annotation.SuppressLint
import android.app.Activity
@@ -21,11 +21,12 @@ import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.ResultItem
import com.squareup.picasso.Picasso
-import org.w3c.dom.Text
import java.util.*
-class PlaylistAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class PlaylistAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val checkedItems: ArrayList
private val onItemClickListener: OnItemClickListener
private val activity: Activity
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TemplatesAdapter.kt
similarity index 57%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TemplatesAdapter.kt
index 2d99590d..170a0b94 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TemplatesAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TemplatesAdapter.kt
@@ -1,23 +1,26 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
+import android.annotation.SuppressLint
import android.app.Activity
-import android.opengl.Visibility
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
-import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.deniscerri.ytdlnis.R
import com.deniscerri.ytdlnis.database.models.CommandTemplate
+import com.deniscerri.ytdlnis.database.models.LogItem
import com.google.android.material.card.MaterialCardView
-class TemplatesAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class TemplatesAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
+ private val checkedItems: ArrayList = ArrayList()
init {
this.onItemClickListener = onItemClickListener
@@ -52,19 +55,74 @@ class TemplatesAdapter(onItemClickListener: OnItemClickListener, activity: Activ
if (item!!.useAsExtraCommand) useInExtraCommands.visibility = View.VISIBLE
else useInExtraCommands.visibility = View.GONE
+ if (checkedItems.contains(item.id)) {
+ card.isChecked = true
+ card.strokeWidth = 5
+ } else {
+ card.isChecked = false
+ card.strokeWidth = 0
+ }
card.setOnClickListener {
- onItemClickListener.onItemClick(item, position)
+ if (checkedItems.size > 0) {
+ checkCard(card, item.id)
+ } else {
+ onItemClickListener.onItemClick(item, position)
+ }
}
card.setOnLongClickListener {
- onItemClickListener.onDelete(item); true
+ checkCard(card, item.id)
+ true
}
}
+ @SuppressLint("NotifyDataSetChanged")
+ fun clearCheckeditems() {
+ for (i in 0 until itemCount){
+ val item = getItem(i)
+ if (checkedItems.find { it == item?.id } != null){
+ checkedItems.remove(item?.id)
+ notifyItemChanged(i)
+ }
+ }
+
+ checkedItems.clear()
+ }
+
+ @SuppressLint("NotifyDataSetChanged")
+ fun checkAll(items: List?){
+ checkedItems.clear()
+ checkedItems.addAll(items!!.map { it!!.id })
+ notifyDataSetChanged()
+ }
+
+ @SuppressLint("NotifyDataSetChanged")
+ fun invertSelected(items: List?){
+ val invertedList = mutableListOf()
+ items?.forEach {
+ if (!checkedItems.contains(it!!.id)) invertedList.add(it.id)
+ }
+ checkedItems.clear()
+ checkedItems.addAll(invertedList)
+ notifyDataSetChanged()
+ }
+
+ private fun checkCard(card: MaterialCardView, itemID: Long) {
+ if (card.isChecked) {
+ card.strokeWidth = 0
+ checkedItems.remove(itemID)
+ } else {
+ card.strokeWidth = 5
+ checkedItems.add(itemID)
+ }
+ card.isChecked = !card.isChecked
+ onItemClickListener.onCardSelect(itemID, card.isChecked)
+ }
+
interface OnItemClickListener {
fun onItemClick(commandTemplate: CommandTemplate, index: Int)
fun onSelected(commandTemplate: CommandTemplate)
- fun onDelete(commandTemplate: CommandTemplate)
+ fun onCardSelect(itemID: Long, isChecked: Boolean)
}
companion object {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TerminalDownloadsAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TerminalDownloadsAdapter.kt
similarity index 96%
rename from app/src/main/java/com/deniscerri/ytdlnis/adapter/TerminalDownloadsAdapter.kt
rename to app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TerminalDownloadsAdapter.kt
index 46ce9e83..6de8872b 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/TerminalDownloadsAdapter.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/adapter/TerminalDownloadsAdapter.kt
@@ -1,4 +1,4 @@
-package com.deniscerri.ytdlnis.adapter
+package com.deniscerri.ytdlnis.ui.adapter
import android.app.Activity
import android.content.SharedPreferences
@@ -17,7 +17,9 @@ import com.google.android.material.button.MaterialButton
import com.google.android.material.card.MaterialCardView
import com.google.android.material.progressindicator.LinearProgressIndicator
-class TerminalDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(DIFF_CALLBACK).build()) {
+class TerminalDownloadsAdapter(onItemClickListener: OnItemClickListener, activity: Activity) : ListAdapter(AsyncDifferConfig.Builder(
+ DIFF_CALLBACK
+).build()) {
private val onItemClickListener: OnItemClickListener
private val activity: Activity
private val sharedPreferences: SharedPreferences
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/AddExtraCommandsDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/AddExtraCommandsDialog.kt
index 060a69ab..00936e27 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/AddExtraCommandsDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/AddExtraCommandsDialog.kt
@@ -4,11 +4,8 @@ import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
-import android.content.Intent
import android.content.SharedPreferences
-import android.graphics.Color
import android.os.Bundle
-import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -25,17 +22,12 @@ import com.deniscerri.ytdlnis.database.viewmodel.CommandTemplateViewModel
import com.deniscerri.ytdlnis.util.InfoUtil
import com.deniscerri.ytdlnis.util.UiUtil
import com.deniscerri.ytdlnis.util.UiUtil.enableTextHighlight
-import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
-import com.neo.highlight.core.Highlight
-import com.neo.highlight.util.listener.HighlightTextWatcher
-import com.neo.highlight.util.scheme.ColorScheme
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.util.*
-import java.util.regex.Pattern
class AddExtraCommandsDialog(private val item: DownloadItem?, private val callback: ExtraCommandsListener) : BottomSheetDialogFragment() {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt
index 9164d506..aa6d3ce5 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/ConfigureDownloadBottomSheetDialog.kt
@@ -12,7 +12,6 @@ import android.view.ViewGroup
import android.widget.Button
import android.widget.Toast
import androidx.core.content.edit
-import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
@@ -179,10 +178,10 @@ class ConfigureDownloadBottomSheetDialog(private var result: ResultItem, private
val link = view.findViewById