diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d9342e72a..5d12c5a7c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,4 +126,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: ./gradlew build sonarqube --info + run: ./gradlew build sonar --info diff --git a/.github/workflows/image-minimizer.js b/.github/workflows/image-minimizer.js index 80cc5294c..df1a30f9b 100644 --- a/.github/workflows/image-minimizer.js +++ b/.github/workflows/image-minimizer.js @@ -55,6 +55,7 @@ module.exports = async ({github, context}) => { return match; } + let probeAspectRatio = 0; let shouldModify = false; try { console.log(`Probing ${g2}`); @@ -76,7 +77,8 @@ module.exports = async ({github, context}) => { } console.log(`Probing resulted in ${probeResult.width}x${probeResult.height}px`); - shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && (probeResult.width / probeResult.height) < MIN_ASPECT_RATIO; + probeAspectRatio = probeResult.width / probeResult.height; + shouldModify = probeResult.height > IMG_MAX_HEIGHT_PX && probeAspectRatio < MIN_ASPECT_RATIO; } catch(e) { console.log('Probing failed:', e); // Immediately abort @@ -86,7 +88,7 @@ module.exports = async ({github, context}) => { if (shouldModify) { wasMatchModified = true; console.log(`Modifying match '${match}'`); - return `${g1}`; + return `${g1}`; } console.log(`Match '${match}' is ok/will not be modified`); diff --git a/app/build.gradle b/app/build.gradle index 206c830e7..0afdc3ce8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,23 +1,27 @@ +import com.android.tools.profgen.ArtProfileKt +import com.android.tools.profgen.ArtProfileSerializer +import com.android.tools.profgen.DexFile + plugins { id "com.android.application" id "kotlin-android" id "kotlin-kapt" id "kotlin-parcelize" id "checkstyle" - id "org.sonarqube" version "3.3" + id "org.sonarqube" version "3.5.0.2730" } android { - compileSdk 32 + compileSdk 33 namespace 'org.schabi.newpipe' defaultConfig { applicationId "org.schabi.newpipe" resValue "string", "app_name", "NewPipe" minSdk 21 - targetSdk 29 - versionCode 991 - versionName "0.24.1" + targetSdk 33 + versionCode 992 + versionName "0.25.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -107,7 +111,7 @@ ext { groupieVersion = '2.10.1' markwonVersion = '4.6.2' - leakCanaryVersion = '2.5' + leakCanaryVersion = '2.9.1' stethoVersion = '1.6.0' mockitoVersion = '4.0.0' assertJVersion = '3.23.1' @@ -169,7 +173,7 @@ afterEvaluate { preDebugBuild.dependsOn runCheckstyle, runKtlint } -sonarqube { +sonar { properties { property "sonar.projectKey", "TeamNewPipe_NewPipe" property "sonar.organization", "teamnewpipe" @@ -179,7 +183,7 @@ sonarqube { dependencies { /** Desugaring **/ - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.2' /** NewPipe libraries **/ // You can use a local version by uncommenting a few lines in settings.gradle @@ -187,7 +191,7 @@ dependencies { // name and the commit hash with the commit hash of the (pushed) commit you want to test // This works thanks to JitPack: https://jitpack.io/ implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751' - implementation 'com.github.TeamNewPipe:NewPipeExtractor:eb07d70a2ce03bee3cc74fc33b2e4173e1c21436' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:7e793c11aec46358ccbfd8bcfcf521105f4f093a' implementation 'com.github.TeamNewPipe:NoNonsense-FilePicker:5.0.0' /** Checkstyle **/ @@ -259,14 +263,14 @@ dependencies { implementation "io.noties.markwon:linkify:${markwonVersion}" // Crash reporting - implementation "ch.acra:acra-core:5.9.3" + implementation "ch.acra:acra-core:5.9.7" // Properly restarting implementation 'com.jakewharton:process-phoenix:2.1.2' // Reactive extensions for Java VM - implementation "io.reactivex.rxjava3:rxjava:3.0.13" - implementation "io.reactivex.rxjava3:rxandroid:3.0.0" + implementation "io.reactivex.rxjava3:rxjava:3.1.5" + implementation "io.reactivex.rxjava3:rxandroid:3.0.2" // RxJava binding APIs for Android UI widgets implementation "com.jakewharton.rxbinding4:rxbinding:4.0.0" @@ -308,3 +312,24 @@ static String getGitWorkingBranch() { return "" } } + +project.afterEvaluate { + tasks.compileReleaseArtProfile.doLast { + outputs.files.each { file -> + if (file.toString().endsWith(".profm")) { + println("Sorting ${file} ...") + def version = ArtProfileSerializer.valueOf("METADATA_0_0_2") + def profile = ArtProfileKt.ArtProfile(file) + def keys = new ArrayList(profile.profileData.keySet()) + def sortedData = new LinkedHashMap() + Collections.sort keys, new DexFile.Companion() + keys.each { key -> sortedData[key] = profile.profileData[key] } + new FileOutputStream(file).with { + write(version.magicBytes$profgen) + write(version.versionBytes$profgen) + version.write$profgen(it, sortedData, "") + } + } + } + } +} diff --git a/app/schemas/org.schabi.newpipe.database.AppDatabase/6.json b/app/schemas/org.schabi.newpipe.database.AppDatabase/6.json new file mode 100644 index 000000000..ee69363cc --- /dev/null +++ b/app/schemas/org.schabi.newpipe.database.AppDatabase/6.json @@ -0,0 +1,737 @@ +{ + "formatVersion": 1, + "database": { + "version": 6, + "identityHash": "4084aa342aef315dc7b558770a7755a9", + "entities": [ + { + "tableName": "subscriptions", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT, `name` TEXT, `avatar_url` TEXT, `subscriber_count` INTEGER, `description` TEXT, `notification_mode` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serviceId", + "columnName": "service_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "avatarUrl", + "columnName": "avatar_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "subscriberCount", + "columnName": "subscriber_count", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "description", + "columnName": "description", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "notificationMode", + "columnName": "notification_mode", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_subscriptions_service_id_url", + "unique": true, + "columnNames": [ + "service_id", + "url" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_subscriptions_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "search_history", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`creation_date` INTEGER, `service_id` INTEGER NOT NULL, `search` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)", + "fields": [ + { + "fieldPath": "creationDate", + "columnName": "creation_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serviceId", + "columnName": "service_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "search", + "columnName": "search", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_search_history_search", + "unique": false, + "columnNames": [ + "search" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_search_history_search` ON `${TABLE_NAME}` (`search`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "streams", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `url` TEXT NOT NULL, `title` TEXT NOT NULL, `stream_type` TEXT NOT NULL, `duration` INTEGER NOT NULL, `uploader` TEXT NOT NULL, `uploader_url` TEXT, `thumbnail_url` TEXT, `view_count` INTEGER, `textual_upload_date` TEXT, `upload_date` INTEGER, `is_upload_date_approximation` INTEGER)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serviceId", + "columnName": "service_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "streamType", + "columnName": "stream_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "duration", + "columnName": "duration", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "uploader", + "columnName": "uploader", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "uploaderUrl", + "columnName": "uploader_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnail_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "viewCount", + "columnName": "view_count", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "textualUploadDate", + "columnName": "textual_upload_date", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uploadDate", + "columnName": "upload_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "isUploadDateApproximation", + "columnName": "is_upload_date_approximation", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_streams_service_id_url", + "unique": true, + "columnNames": [ + "service_id", + "url" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_streams_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "stream_history", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `access_date` INTEGER NOT NULL, `repeat_count` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `access_date`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "streamUid", + "columnName": "stream_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "accessDate", + "columnName": "access_date", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "repeatCount", + "columnName": "repeat_count", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "stream_id", + "access_date" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_stream_history_stream_id", + "unique": false, + "columnNames": [ + "stream_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_stream_history_stream_id` ON `${TABLE_NAME}` (`stream_id`)" + } + ], + "foreignKeys": [ + { + "table": "streams", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "stream_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + }, + { + "tableName": "stream_state", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `progress_time` INTEGER NOT NULL, PRIMARY KEY(`stream_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "streamUid", + "columnName": "stream_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "progressMillis", + "columnName": "progress_time", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "stream_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "streams", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "stream_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + }, + { + "tableName": "playlists", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT, `thumbnail_url` TEXT, `is_thumbnail_permanent` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnail_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isThumbnailPermanent", + "columnName": "is_thumbnail_permanent", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_playlists_name", + "unique": false, + "columnNames": [ + "name" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_playlists_name` ON `${TABLE_NAME}` (`name`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "playlist_stream_join", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`playlist_id` INTEGER NOT NULL, `stream_id` INTEGER NOT NULL, `join_index` INTEGER NOT NULL, PRIMARY KEY(`playlist_id`, `join_index`), FOREIGN KEY(`playlist_id`) REFERENCES `playlists`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "playlistUid", + "columnName": "playlist_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "streamUid", + "columnName": "stream_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "index", + "columnName": "join_index", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "playlist_id", + "join_index" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_playlist_stream_join_playlist_id_join_index", + "unique": true, + "columnNames": [ + "playlist_id", + "join_index" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_playlist_stream_join_playlist_id_join_index` ON `${TABLE_NAME}` (`playlist_id`, `join_index`)" + }, + { + "name": "index_playlist_stream_join_stream_id", + "unique": false, + "columnNames": [ + "stream_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_playlist_stream_join_stream_id` ON `${TABLE_NAME}` (`stream_id`)" + } + ], + "foreignKeys": [ + { + "table": "playlists", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "playlist_id" + ], + "referencedColumns": [ + "uid" + ] + }, + { + "table": "streams", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "stream_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + }, + { + "tableName": "remote_playlists", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `service_id` INTEGER NOT NULL, `name` TEXT, `url` TEXT, `thumbnail_url` TEXT, `uploader` TEXT, `stream_count` INTEGER)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serviceId", + "columnName": "service_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "thumbnailUrl", + "columnName": "thumbnail_url", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "uploader", + "columnName": "uploader", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "streamCount", + "columnName": "stream_count", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_remote_playlists_name", + "unique": false, + "columnNames": [ + "name" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_remote_playlists_name` ON `${TABLE_NAME}` (`name`)" + }, + { + "name": "index_remote_playlists_service_id_url", + "unique": true, + "columnNames": [ + "service_id", + "url" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_remote_playlists_service_id_url` ON `${TABLE_NAME}` (`service_id`, `url`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "feed", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`stream_id` INTEGER NOT NULL, `subscription_id` INTEGER NOT NULL, PRIMARY KEY(`stream_id`, `subscription_id`), FOREIGN KEY(`stream_id`) REFERENCES `streams`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`subscription_id`) REFERENCES `subscriptions`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "streamId", + "columnName": "stream_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subscriptionId", + "columnName": "subscription_id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "stream_id", + "subscription_id" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_feed_subscription_id", + "unique": false, + "columnNames": [ + "subscription_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_feed_subscription_id` ON `${TABLE_NAME}` (`subscription_id`)" + } + ], + "foreignKeys": [ + { + "table": "streams", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "stream_id" + ], + "referencedColumns": [ + "uid" + ] + }, + { + "table": "subscriptions", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "subscription_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + }, + { + "tableName": "feed_group", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL, `icon_id` INTEGER NOT NULL, `sort_order` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "icon", + "columnName": "icon_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "sortOrder", + "columnName": "sort_order", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_feed_group_sort_order", + "unique": false, + "columnNames": [ + "sort_order" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_feed_group_sort_order` ON `${TABLE_NAME}` (`sort_order`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "feed_group_subscription_join", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`group_id` INTEGER NOT NULL, `subscription_id` INTEGER NOT NULL, PRIMARY KEY(`group_id`, `subscription_id`), FOREIGN KEY(`group_id`) REFERENCES `feed_group`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, FOREIGN KEY(`subscription_id`) REFERENCES `subscriptions`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "feedGroupId", + "columnName": "group_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "subscriptionId", + "columnName": "subscription_id", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "group_id", + "subscription_id" + ], + "autoGenerate": false + }, + "indices": [ + { + "name": "index_feed_group_subscription_join_subscription_id", + "unique": false, + "columnNames": [ + "subscription_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_feed_group_subscription_join_subscription_id` ON `${TABLE_NAME}` (`subscription_id`)" + } + ], + "foreignKeys": [ + { + "table": "feed_group", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "group_id" + ], + "referencedColumns": [ + "uid" + ] + }, + { + "table": "subscriptions", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "subscription_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + }, + { + "tableName": "feed_last_updated", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`subscription_id` INTEGER NOT NULL, `last_updated` INTEGER, PRIMARY KEY(`subscription_id`), FOREIGN KEY(`subscription_id`) REFERENCES `subscriptions`(`uid`) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED)", + "fields": [ + { + "fieldPath": "subscriptionId", + "columnName": "subscription_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "lastUpdated", + "columnName": "last_updated", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "subscription_id" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "subscriptions", + "onDelete": "CASCADE", + "onUpdate": "CASCADE", + "columns": [ + "subscription_id" + ], + "referencedColumns": [ + "uid" + ] + } + ] + } + ], + "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, '4084aa342aef315dc7b558770a7755a9')" + ] + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt b/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt index 28dea13e9..be95c8e27 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt @@ -33,7 +33,8 @@ class DatabaseMigrationTest { @get:Rule val testHelper = MigrationTestHelper( InstrumentationRegistry.getInstrumentation(), - AppDatabase::class.java.canonicalName, FrameworkSQLiteOpenHelperFactory() + AppDatabase::class.java.canonicalName, + FrameworkSQLiteOpenHelperFactory() ) @Test @@ -42,7 +43,8 @@ class DatabaseMigrationTest { databaseInV2.run { insert( - "streams", SQLiteDatabase.CONFLICT_FAIL, + "streams", + SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply { put("service_id", DEFAULT_SERVICE_ID) put("url", DEFAULT_URL) @@ -54,14 +56,16 @@ class DatabaseMigrationTest { } ) insert( - "streams", SQLiteDatabase.CONFLICT_FAIL, + "streams", + SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply { put("service_id", DEFAULT_SECOND_SERVICE_ID) put("url", DEFAULT_SECOND_URL) } ) insert( - "streams", SQLiteDatabase.CONFLICT_FAIL, + "streams", + SQLiteDatabase.CONFLICT_FAIL, ContentValues().apply { put("service_id", DEFAULT_SERVICE_ID) } @@ -70,18 +74,31 @@ class DatabaseMigrationTest { } testHelper.runMigrationsAndValidate( - AppDatabase.DATABASE_NAME, Migrations.DB_VER_3, - true, Migrations.MIGRATION_2_3 + AppDatabase.DATABASE_NAME, + Migrations.DB_VER_3, + true, + Migrations.MIGRATION_2_3 ) testHelper.runMigrationsAndValidate( - AppDatabase.DATABASE_NAME, Migrations.DB_VER_4, - true, Migrations.MIGRATION_3_4 + AppDatabase.DATABASE_NAME, + Migrations.DB_VER_4, + true, + Migrations.MIGRATION_3_4 ) testHelper.runMigrationsAndValidate( - AppDatabase.DATABASE_NAME, Migrations.DB_VER_5, - true, Migrations.MIGRATION_4_5 + AppDatabase.DATABASE_NAME, + Migrations.DB_VER_5, + true, + Migrations.MIGRATION_4_5 + ) + + testHelper.runMigrationsAndValidate( + AppDatabase.DATABASE_NAME, + Migrations.DB_VER_6, + true, + Migrations.MIGRATION_5_6 ) val migratedDatabaseV3 = getMigratedDatabase() @@ -121,7 +138,8 @@ class DatabaseMigrationTest { private fun getMigratedDatabase(): AppDatabase { val database: AppDatabase = Room.databaseBuilder( ApplicationProvider.getApplicationContext(), - AppDatabase::class.java, AppDatabase.DATABASE_NAME + AppDatabase::class.java, + AppDatabase.DATABASE_NAME ) .build() testHelper.closeWhenFinished(database) diff --git a/app/src/androidTest/java/org/schabi/newpipe/util/StreamItemAdapterTest.kt b/app/src/androidTest/java/org/schabi/newpipe/util/StreamItemAdapterTest.kt index 016feb576..0fe251c16 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/util/StreamItemAdapterTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/util/StreamItemAdapterTest.kt @@ -1,12 +1,12 @@ package org.schabi.newpipe.util import android.content.Context -import android.util.SparseArray import android.view.View import android.view.View.GONE import android.view.View.INVISIBLE import android.view.View.VISIBLE import android.widget.Spinner +import androidx.collection.SparseArrayCompat import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.MediumTest @@ -39,9 +39,7 @@ class StreamItemAdapterTest { @Test fun videoStreams_noSecondaryStream() { val adapter = StreamItemAdapter( - context, - getVideoStreams(true, true, true, true), - null + getVideoStreams(true, true, true, true) ) spinner.adapter = adapter @@ -54,7 +52,6 @@ class StreamItemAdapterTest { @Test fun videoStreams_hasSecondaryStream() { val adapter = StreamItemAdapter( - context, getVideoStreams(false, true, false, true), getAudioStreams(false, true, false, true) ) @@ -69,7 +66,6 @@ class StreamItemAdapterTest { @Test fun videoStreams_Mixed() { val adapter = StreamItemAdapter( - context, getVideoStreams(true, true, true, true, true, false, true, true), getAudioStreams(false, true, false, false, false, true, true, true) ) @@ -88,7 +84,6 @@ class StreamItemAdapterTest { @Test fun subtitleStreams_noIcon() { val adapter = StreamItemAdapter( - context, StreamItemAdapter.StreamSizeWrapper( (0 until 5).map { SubtitlesStream.Builder() @@ -99,8 +94,7 @@ class StreamItemAdapterTest { .build() }, context - ), - null + ) ) spinner.adapter = adapter for (i in 0 until spinner.count) { @@ -111,7 +105,6 @@ class StreamItemAdapterTest { @Test fun audioStreams_noIcon() { val adapter = StreamItemAdapter( - context, StreamItemAdapter.StreamSizeWrapper( (0 until 5).map { AudioStream.Builder() @@ -122,8 +115,7 @@ class StreamItemAdapterTest { .build() }, context - ), - null + ) ) spinner.adapter = adapter for (i in 0 until spinner.count) { @@ -200,7 +192,7 @@ class StreamItemAdapterTest { * Helper function that builds a secondary stream list. */ private fun getSecondaryStreamsFromList(streams: List) = - SparseArray?>(streams.size).apply { + SparseArrayCompat?>(streams.size).apply { streams.forEachIndexed { index, stream -> val secondaryStreamHelper: SecondaryStreamHelper? = stream?.let { SecondaryStreamHelper( diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be14274aa..1fb20ef0e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,6 +9,15 @@ + + + + + + + + + @@ -39,7 +49,9 @@ - + @@ -47,7 +59,7 @@ @@ -56,15 +68,18 @@ @@ -73,6 +88,7 @@ @@ -85,13 +101,18 @@ - + + @@ -99,6 +120,7 @@ @@ -109,6 +131,7 @@ @@ -149,6 +173,7 @@ + @@ -337,7 +362,6 @@ - @@ -354,30 +378,30 @@ - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + @@ -386,11 +410,17 @@ android:exported="false" /> - + - + - + diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index d4b2305c7..ee2bb3f05 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -157,9 +157,12 @@ public class MainActivity extends AppCompatActivity { } openMiniPlayerUponPlayerStarted(); - // Schedule worker for checking for new streams and creating corresponding notifications - // if this is enabled by the user. - NotificationWorker.initialize(this); + if (PermissionHelper.checkPostNotificationsPermission(this, + PermissionHelper.POST_NOTIFICATIONS_REQUEST_CODE)) { + // Schedule worker for checking for new streams and creating corresponding notifications + // if this is enabled by the user. + NotificationWorker.initialize(this); + } } @Override @@ -172,7 +175,7 @@ public class MainActivity extends AppCompatActivity { if (prefs.getBoolean(app.getString(R.string.update_app_key), true)) { // Start the worker which is checking all conditions // and eventually searching for a new version. - NewVersionWorker.enqueueNewVersionCheckingWork(app); + NewVersionWorker.enqueueNewVersionCheckingWork(app, false); } } @@ -232,7 +235,7 @@ public class MainActivity extends AppCompatActivity { .setIcon(R.drawable.ic_tv); drawerLayoutBinding.navigation.getMenu() .add(R.id.menu_tabs_group, ITEM_ID_FEED, ORDER, R.string.fragment_feed_title) - .setIcon(R.drawable.ic_rss_feed); + .setIcon(R.drawable.ic_subscriptions); drawerLayoutBinding.navigation.getMenu() .add(R.id.menu_tabs_group, ITEM_ID_BOOKMARKS, ORDER, R.string.tab_bookmarks) .setIcon(R.drawable.ic_bookmark); @@ -599,6 +602,9 @@ public class MainActivity extends AppCompatActivity { ((VideoDetailFragment) fragment).openDownloadDialog(); } break; + case PermissionHelper.POST_NOTIFICATIONS_REQUEST_CODE: + NotificationWorker.initialize(this); + break; } } diff --git a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java index 402d4648d..fc3423994 100644 --- a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java +++ b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java @@ -5,6 +5,7 @@ import static org.schabi.newpipe.database.Migrations.MIGRATION_1_2; import static org.schabi.newpipe.database.Migrations.MIGRATION_2_3; import static org.schabi.newpipe.database.Migrations.MIGRATION_3_4; import static org.schabi.newpipe.database.Migrations.MIGRATION_4_5; +import static org.schabi.newpipe.database.Migrations.MIGRATION_5_6; import android.content.Context; import android.database.Cursor; @@ -24,7 +25,8 @@ public final class NewPipeDatabase { private static AppDatabase getDatabase(final Context context) { return Room .databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME) - .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5) + .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, + MIGRATION_5_6) .build(); } diff --git a/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt index 060114974..dac831fe4 100644 --- a/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt +++ b/app/src/main/java/org/schabi/newpipe/NewVersionWorker.kt @@ -1,23 +1,25 @@ package org.schabi.newpipe -import android.app.PendingIntent import android.content.Context import android.content.Intent import android.util.Log +import android.widget.Toast import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat import androidx.core.content.edit import androidx.core.net.toUri import androidx.preference.PreferenceManager -import androidx.work.OneTimeWorkRequest +import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager -import androidx.work.WorkRequest import androidx.work.Worker import androidx.work.WorkerParameters +import androidx.work.workDataOf import com.grack.nanojson.JsonParser import com.grack.nanojson.JsonParserException import org.schabi.newpipe.extractor.downloader.Response import org.schabi.newpipe.extractor.exceptions.ReCaptchaException +import org.schabi.newpipe.util.PendingIntentCompat import org.schabi.newpipe.util.ReleaseVersionUtil.coerceUpdateCheckExpiry import org.schabi.newpipe.util.ReleaseVersionUtil.isLastUpdateCheckExpired import org.schabi.newpipe.util.ReleaseVersionUtil.isReleaseApk @@ -42,26 +44,40 @@ class NewVersionWorker( versionCode: Int ) { if (BuildConfig.VERSION_CODE >= versionCode) { + if (inputData.getBoolean(IS_MANUAL, false)) { + // Show toast stating that the app is up-to-date if the update check was manual. + ContextCompat.getMainExecutor(applicationContext).execute { + Toast.makeText( + applicationContext, R.string.app_update_unavailable_toast, + Toast.LENGTH_SHORT + ).show() + } + } return } - val app = App.getApp() // A pending intent to open the apk location url in the browser. val intent = Intent(Intent.ACTION_VIEW, apkLocationUrl?.toUri()) intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - val pendingIntent = PendingIntent.getActivity(app, 0, intent, 0) - val channelId = app.getString(R.string.app_update_notification_channel_id) - val notificationBuilder = NotificationCompat.Builder(app, channelId) + val pendingIntent = PendingIntentCompat.getActivity( + applicationContext, 0, intent, 0 + ) + val channelId = applicationContext.getString(R.string.app_update_notification_channel_id) + val notificationBuilder = NotificationCompat.Builder(applicationContext, channelId) .setSmallIcon(R.drawable.ic_newpipe_update) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - .setContentIntent(pendingIntent) .setAutoCancel(true) - .setContentTitle(app.getString(R.string.app_update_notification_content_title)) - .setContentText( - app.getString(R.string.app_update_notification_content_text) + - " " + versionName + .setContentIntent(pendingIntent) + .setContentTitle( + applicationContext.getString(R.string.app_update_available_notification_title) ) - val notificationManager = NotificationManagerCompat.from(app) + .setContentText( + applicationContext.getString( + R.string.app_update_available_notification_text, versionName + ) + ) + + val notificationManager = NotificationManagerCompat.from(applicationContext) notificationManager.notify(2000, notificationBuilder.build()) } @@ -72,12 +88,14 @@ class NewVersionWorker( return } - val prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext) - // Check if the last request has happened a certain time ago - // to reduce the number of API requests. - val expiry = prefs.getLong(applicationContext.getString(R.string.update_expiry_key), 0) - if (!isLastUpdateCheckExpired(expiry)) { - return + if (!inputData.getBoolean(IS_MANUAL, false)) { + val prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext) + // Check if the last request has happened a certain time ago + // to reduce the number of API requests. + val expiry = prefs.getLong(applicationContext.getString(R.string.update_expiry_key), 0) + if (!isLastUpdateCheckExpired(expiry)) { + return + } } // Make a network request to get latest NewPipe data. @@ -120,43 +138,42 @@ class NewVersionWorker( } override fun doWork(): Result { - try { + return try { checkNewVersion() + Result.success() } catch (e: IOException) { Log.w(TAG, "Could not fetch NewPipe API: probably network problem", e) - return Result.failure() + Result.failure() } catch (e: ReCaptchaException) { Log.e(TAG, "ReCaptchaException should never happen here.", e) - return Result.failure() + Result.failure() } - return Result.success() } companion object { private val DEBUG = MainActivity.DEBUG private val TAG = NewVersionWorker::class.java.simpleName private const val NEWPIPE_API_URL = "https://newpipe.net/api/data.json" + private const val IS_MANUAL = "isManual" /** - * Start a new worker which - * checks if all conditions for performing a version check are met, - * fetches the API endpoint [.NEWPIPE_API_URL] containing info - * about the latest NewPipe version - * and displays a notification about ana available update. + * Start a new worker which checks if all conditions for performing a version check are met, + * fetches the API endpoint [.NEWPIPE_API_URL] containing info about the latest NewPipe + * version and displays a notification about an available update if one is available. *

- * Following conditions need to be met, before data is request from the server: + * Following conditions need to be met, before data is requested from the server: * * * The app is signed with the correct signing key (by TeamNewPipe / schabi). * If the signing key differs from the one used upstream, the update cannot be installed. * * The user enabled searching for and notifying about updates in the settings. * * The app did not recently check for updates. * We do not want to make unnecessary connections and DOS our servers. - * */ @JvmStatic - fun enqueueNewVersionCheckingWork(context: Context) { - val workRequest: WorkRequest = - OneTimeWorkRequest.Builder(NewVersionWorker::class.java).build() + fun enqueueNewVersionCheckingWork(context: Context, isManual: Boolean) { + val workRequest = OneTimeWorkRequestBuilder() + .setInputData(workDataOf(IS_MANUAL to isManual)) + .build() WorkManager.getInstance(context).enqueue(workRequest) } } diff --git a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java index 7c646d0e4..3255489b0 100644 --- a/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java +++ b/app/src/main/java/org/schabi/newpipe/QueueItemMenuUtil.java @@ -1,5 +1,6 @@ package org.schabi.newpipe; +import static org.schabi.newpipe.util.SparseItemUtil.fetchStreamInfoAndSaveToDatabase; import static org.schabi.newpipe.util.external_communication.ShareUtils.shareText; import android.content.Context; @@ -10,6 +11,7 @@ import android.widget.PopupMenu; import androidx.fragment.app.FragmentManager; import org.schabi.newpipe.database.stream.model.StreamEntity; +import org.schabi.newpipe.download.DownloadDialog; import org.schabi.newpipe.local.dialog.PlaylistDialog; import org.schabi.newpipe.player.playqueue.PlayQueue; import org.schabi.newpipe.player.playqueue.PlayQueueItem; @@ -75,6 +77,14 @@ public final class QueueItemMenuUtil { shareText(context, item.getTitle(), item.getUrl(), item.getThumbnailUrl()); return true; + case R.id.menu_item_download: + fetchStreamInfoAndSaveToDatabase(context, item.getServiceId(), item.getUrl(), + info -> { + final DownloadDialog downloadDialog = new DownloadDialog(context, + info); + downloadDialog.show(fragmentManager, "downloadDialog"); + }); + return true; } return false; }); diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index 936beecff..e9c19a22d 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -10,12 +10,14 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.Button; import android.widget.RadioButton; import android.widget.RadioGroup; @@ -31,7 +33,12 @@ import androidx.appcompat.content.res.AppCompatResources; import androidx.core.app.NotificationCompat; import androidx.core.app.ServiceCompat; import androidx.core.math.MathUtils; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import androidx.lifecycle.DefaultLifecycleObserver; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleOwner; import androidx.preference.PreferenceManager; import org.schabi.newpipe.database.stream.model.StreamEntity; @@ -80,9 +87,13 @@ import org.schabi.newpipe.util.urlfinder.UrlFinder; import org.schabi.newpipe.views.FocusOverlayView; import java.io.Serializable; +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; +import java.util.function.Consumer; import icepick.Icepick; import icepick.State; @@ -91,7 +102,6 @@ import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; -import io.reactivex.rxjava3.functions.Consumer; import io.reactivex.rxjava3.schedulers.Schedulers; /** @@ -111,12 +121,57 @@ public class RouterActivity extends AppCompatActivity { private boolean selectionIsDownload = false; private boolean selectionIsAddToPlaylist = false; private AlertDialog alertDialogChoice = null; + private FragmentManager.FragmentLifecycleCallbacks dismissListener = null; @Override protected void onCreate(final Bundle savedInstanceState) { + ThemeHelper.setDayNightMode(this); + setTheme(ThemeHelper.isLightThemeSelected(this) + ? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark); + Localization.assureCorrectAppLanguage(this); + + // Pass-through touch events to background activities + // so that our transparent window won't lock UI in the mean time + // network request is underway before showing PlaylistDialog or DownloadDialog + // (ref: https://stackoverflow.com/a/10606141) + getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); + + // Android never fails to impress us with a list of new restrictions per API. + // Starting with S (Android 12) one of the prerequisite conditions has to be met + // before the FLAG_NOT_TOUCHABLE flag is allowed to kick in: + // @see WindowManager.LayoutParams#FLAG_NOT_TOUCHABLE + // For our present purpose it seems we can just set LayoutParams.alpha to 0 + // on the strength of "4. Fully transparent windows" without affecting the scrim of dialogs + final WindowManager.LayoutParams params = getWindow().getAttributes(); + params.alpha = 0f; + getWindow().setAttributes(params); + super.onCreate(savedInstanceState); Icepick.restoreInstanceState(this, savedInstanceState); + // FragmentManager will take care to recreate (Playlist|Download)Dialog when screen rotates + // We used to .setOnDismissListener(dialog -> finish()); when creating these DialogFragments + // but those callbacks won't survive a config change + // Try an alternate approach to hook into FragmentManager instead, to that effect + // (ref: https://stackoverflow.com/a/44028453) + final FragmentManager fm = getSupportFragmentManager(); + if (dismissListener == null) { + dismissListener = new FragmentManager.FragmentLifecycleCallbacks() { + @Override + public void onFragmentDestroyed(@NonNull final FragmentManager fm, + @NonNull final Fragment f) { + super.onFragmentDestroyed(fm, f); + if (f instanceof DialogFragment && fm.getFragments().isEmpty()) { + // No more DialogFragments, we're done + finish(); + } + } + }; + } + fm.registerFragmentLifecycleCallbacks(dismissListener, false); + if (TextUtils.isEmpty(currentUrl)) { currentUrl = getUrl(getIntent()); @@ -125,11 +180,6 @@ public class RouterActivity extends AppCompatActivity { finish(); } } - - ThemeHelper.setDayNightMode(this); - setTheme(ThemeHelper.isLightThemeSelected(this) - ? R.style.RouterActivityThemeLight : R.style.RouterActivityThemeDark); - Localization.assureCorrectAppLanguage(this); } @Override @@ -151,16 +201,34 @@ public class RouterActivity extends AppCompatActivity { protected void onStart() { super.onStart(); - handleUrl(currentUrl); + // Don't overlap the DialogFragment after rotating the screen + // If there's no DialogFragment, we're either starting afresh + // or we didn't make it to PlaylistDialog or DownloadDialog before the orientation change + if (getSupportFragmentManager().getFragments().isEmpty()) { + // Start over from scratch + handleUrl(currentUrl); + } } @Override protected void onDestroy() { super.onDestroy(); + if (dismissListener != null) { + getSupportFragmentManager().unregisterFragmentLifecycleCallbacks(dismissListener); + } + disposables.clear(); } + @Override + public void finish() { + // allow the activity to recreate in case orientation changes + if (!isChangingConfigurations()) { + super.finish(); + } + } + private void handleUrl(final String url) { disposables.add(Observable .fromCallable(() -> { @@ -240,7 +308,7 @@ public class RouterActivity extends AppCompatActivity { } } - private void showUnsupportedUrlDialog(final String url) { + protected void showUnsupportedUrlDialog(final String url) { final Context context = getThemeWrapperContext(); new AlertDialog.Builder(context) .setTitle(R.string.unsupported_url) @@ -527,7 +595,7 @@ public class RouterActivity extends AppCompatActivity { return returnedItems; } - private Context getThemeWrapperContext() { + protected Context getThemeWrapperContext() { return new ContextThemeWrapper(this, ThemeHelper.isLightThemeSelected(this) ? R.style.LightTheme : R.style.DarkTheme); } @@ -563,8 +631,7 @@ public class RouterActivity extends AppCompatActivity { } if (selectedChoiceKey.equals(getString(R.string.popup_player_key)) - && !PermissionHelper.isPopupEnabled(this)) { - PermissionHelper.showPopupEnablementToast(this); + && !PermissionHelper.isPopupEnabledElseAsk(this)) { finish(); return; } @@ -634,54 +701,179 @@ public class RouterActivity extends AppCompatActivity { return playerType == null || playerType == PlayerType.MAIN; } - private void openAddToPlaylistDialog() { - // Getting the stream info usually takes a moment - // Notifying the user here to ensure that no confusion arises - Toast.makeText( - getApplicationContext(), - getString(R.string.processing_may_take_a_moment), - Toast.LENGTH_SHORT) - .show(); + public static class PersistentFragment extends Fragment { + private WeakReference weakContext; + private final CompositeDisposable disposables = new CompositeDisposable(); + private int running = 0; - disposables.add(ExtractorHelper.getStreamInfo(currentServiceId, currentUrl, false) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - info -> PlaylistDialog.createCorrespondingDialog( - getThemeWrapperContext(), - List.of(new StreamEntity(info)), - playlistDialog -> { - playlistDialog.setOnDismissListener(dialog -> finish()); + private synchronized void inFlight(final boolean started) { + if (started) { + running++; + } else { + running--; + if (running <= 0) { + getActivityContext().ifPresent(context -> context.getSupportFragmentManager() + .beginTransaction().remove(this).commit()); + } + } + } - playlistDialog.show( - this.getSupportFragmentManager(), - "addToPlaylistDialog" - ); - } - ), - throwable -> handleError(this, new ErrorInfo( - throwable, - UserAction.REQUESTED_STREAM, - "Tried to add " + currentUrl + " to a playlist", - currentService.getServiceId()) - ) - ) - ); + @Override + public void onAttach(@NonNull final Context activityContext) { + super.onAttach(activityContext); + weakContext = new WeakReference<>((AppCompatActivity) activityContext); + } + + @Override + public void onDetach() { + super.onDetach(); + weakContext = null; + } + + @SuppressWarnings("deprecation") + @Override + public void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setRetainInstance(true); + } + + @Override + public void onDestroy() { + super.onDestroy(); + disposables.clear(); + } + + /** + * @return the activity context, if there is one and the activity is not finishing + */ + private Optional getActivityContext() { + return Optional.ofNullable(weakContext) + .map(Reference::get) + .filter(context -> !context.isFinishing()); + } + + // guard against IllegalStateException in calling DialogFragment.show() whilst in background + // (which could happen, say, when the user pressed the home button while waiting for + // the network request to return) when it internally calls FragmentTransaction.commit() + // after the FragmentManager has saved its states (isStateSaved() == true) + // (ref: https://stackoverflow.com/a/39813506) + private void runOnVisible(final Consumer runnable) { + getActivityContext().ifPresentOrElse(context -> { + if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + context.runOnUiThread(() -> { + runnable.accept(context); + inFlight(false); + }); + } else { + getLifecycle().addObserver(new DefaultLifecycleObserver() { + @Override + public void onResume(@NonNull final LifecycleOwner owner) { + getLifecycle().removeObserver(this); + getActivityContext().ifPresentOrElse(context -> + context.runOnUiThread(() -> { + runnable.accept(context); + inFlight(false); + }), + () -> inFlight(false) + ); + } + }); + // this trick doesn't seem to work on Android 10+ (API 29) + // which places restrictions on starting activities from the background + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q + && !context.isChangingConfigurations()) { + // try to bring the activity back to front if minimised + final Intent i = new Intent(context, RouterActivity.class); + i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + startActivity(i); + } + } + + }, () -> { + // this branch is executed if there is no activity context + inFlight(false); + }); + } + + Single pleaseWait(final Single single) { + // 'abuse' ambWith() here to cancel the toast for us when the wait is over + return single.ambWith(Single.create(emitter -> getActivityContext().ifPresent(context -> + context.runOnUiThread(() -> { + // Getting the stream info usually takes a moment + // Notifying the user here to ensure that no confusion arises + final Toast toast = Toast.makeText(context, + getString(R.string.processing_may_take_a_moment), + Toast.LENGTH_LONG); + toast.show(); + emitter.setCancellable(toast::cancel); + })))); + } + + @SuppressLint("CheckResult") + private void openDownloadDialog(final int currentServiceId, final String currentUrl) { + inFlight(true); + disposables.add(ExtractorHelper.getStreamInfo(currentServiceId, currentUrl, true) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(this::pleaseWait) + .subscribe(result -> + runOnVisible(ctx -> { + final FragmentManager fm = ctx.getSupportFragmentManager(); + final DownloadDialog downloadDialog = new DownloadDialog(ctx, result); + // dismiss listener to be handled by FragmentManager + downloadDialog.show(fm, "downloadDialog"); + } + ), throwable -> runOnVisible(ctx -> + ((RouterActivity) ctx).showUnsupportedUrlDialog(currentUrl)))); + } + + private void openAddToPlaylistDialog(final int currentServiceId, final String currentUrl) { + inFlight(true); + disposables.add(ExtractorHelper.getStreamInfo(currentServiceId, currentUrl, false) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(this::pleaseWait) + .subscribe( + info -> getActivityContext().ifPresent(context -> + PlaylistDialog.createCorrespondingDialog(context, + List.of(new StreamEntity(info)), + playlistDialog -> runOnVisible(ctx -> { + // dismiss listener to be handled by FragmentManager + final FragmentManager fm = + ctx.getSupportFragmentManager(); + playlistDialog.show(fm, "addToPlaylistDialog"); + }) + )), + throwable -> runOnVisible(ctx -> handleError(ctx, new ErrorInfo( + throwable, + UserAction.REQUESTED_STREAM, + "Tried to add " + currentUrl + " to a playlist", + ((RouterActivity) ctx).currentService.getServiceId()) + )) + ) + ); + } } - @SuppressLint("CheckResult") - private void openDownloadDialog() { - disposables.add(ExtractorHelper.getStreamInfo(currentServiceId, currentUrl, true) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(result -> { - final DownloadDialog downloadDialog = new DownloadDialog(this, result); - downloadDialog.setOnDismissListener(dialog -> finish()); + private void openAddToPlaylistDialog() { + getPersistFragment().openAddToPlaylistDialog(currentServiceId, currentUrl); + } - final FragmentManager fm = getSupportFragmentManager(); - downloadDialog.show(fm, "downloadDialog"); - fm.executePendingTransactions(); - }, throwable -> showUnsupportedUrlDialog(currentUrl))); + private void openDownloadDialog() { + getPersistFragment().openDownloadDialog(currentServiceId, currentUrl); + } + + private PersistentFragment getPersistFragment() { + final FragmentManager fm = getSupportFragmentManager(); + PersistentFragment persistFragment = + (PersistentFragment) fm.findFragmentByTag("PERSIST_FRAGMENT"); + if (persistFragment == null) { + persistFragment = new PersistentFragment(); + fm.beginTransaction() + .add(persistFragment, "PERSIST_FRAGMENT") + .commitNow(); + } + return persistFragment; } @Override diff --git a/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java b/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java index 28ddc8184..563e80b17 100644 --- a/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java +++ b/app/src/main/java/org/schabi/newpipe/database/AppDatabase.java @@ -1,6 +1,6 @@ package org.schabi.newpipe.database; -import static org.schabi.newpipe.database.Migrations.DB_VER_5; +import static org.schabi.newpipe.database.Migrations.DB_VER_6; import androidx.room.Database; import androidx.room.RoomDatabase; @@ -38,7 +38,7 @@ import org.schabi.newpipe.database.subscription.SubscriptionEntity; FeedEntity.class, FeedGroupEntity.class, FeedGroupSubscriptionEntity.class, FeedLastUpdatedEntity.class }, - version = DB_VER_5 + version = DB_VER_6 ) public abstract class AppDatabase extends RoomDatabase { public static final String DATABASE_NAME = "newpipe.db"; diff --git a/app/src/main/java/org/schabi/newpipe/database/Migrations.java b/app/src/main/java/org/schabi/newpipe/database/Migrations.java index 7de08442c..e301e3f1f 100644 --- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java +++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java @@ -23,6 +23,7 @@ public final class Migrations { public static final int DB_VER_3 = 3; public static final int DB_VER_4 = 4; public static final int DB_VER_5 = 5; + public static final int DB_VER_6 = 6; private static final String TAG = Migrations.class.getName(); public static final boolean DEBUG = MainActivity.DEBUG; @@ -188,6 +189,14 @@ public final class Migrations { } }; + public static final Migration MIGRATION_5_6 = new Migration(DB_VER_5, DB_VER_6) { + @Override + public void migrate(@NonNull final SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE `playlists` ADD COLUMN `is_thumbnail_permanent` " + + "INTEGER NOT NULL DEFAULT 0"); + } + }; + private Migrations() { } } diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java index 4941d9395..2036dc205 100644 --- a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java @@ -25,6 +25,7 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.JO import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PLAYLIST_STREAM_JOIN_TABLE; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_ID; import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE; +import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_THUMBNAIL_URL; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.JOIN_STREAM_ID_ALIAS; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_PROGRESS_MILLIS; import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_STATE_TABLE; @@ -53,6 +54,15 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") Flowable getMaximumIndexOf(long playlistId); + @Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_THUMBNAIL_URL + " ELSE :defaultUrl END" + + " FROM " + STREAM_TABLE + + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID + + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId " + + " LIMIT 1" + ) + Flowable getAutomaticThumbnailUrl(long playlistId, String defaultUrl); + @RewriteQueriesToDropUnusedColumns @Transaction @Query("SELECT * FROM " + STREAM_TABLE + " INNER JOIN " @@ -80,7 +90,7 @@ public interface PlaylistStreamDAO extends BasicDAO { + " FROM " + PLAYLIST_TABLE + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + " ON " + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID - + " GROUP BY " + JOIN_PLAYLIST_ID + + " GROUP BY " + PLAYLIST_ID + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") Flowable> getPlaylistMetadata(); } diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java index 71abf2732..086362da2 100644 --- a/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/model/PlaylistEntity.java @@ -15,6 +15,7 @@ public class PlaylistEntity { public static final String PLAYLIST_ID = "uid"; public static final String PLAYLIST_NAME = "name"; public static final String PLAYLIST_THUMBNAIL_URL = "thumbnail_url"; + public static final String PLAYLIST_THUMBNAIL_PERMANENT = "is_thumbnail_permanent"; @PrimaryKey(autoGenerate = true) @ColumnInfo(name = PLAYLIST_ID) @@ -26,9 +27,14 @@ public class PlaylistEntity { @ColumnInfo(name = PLAYLIST_THUMBNAIL_URL) private String thumbnailUrl; - public PlaylistEntity(final String name, final String thumbnailUrl) { + @ColumnInfo(name = PLAYLIST_THUMBNAIL_PERMANENT) + private boolean isThumbnailPermanent; + + public PlaylistEntity(final String name, final String thumbnailUrl, + final boolean isThumbnailPermanent) { this.name = name; this.thumbnailUrl = thumbnailUrl; + this.isThumbnailPermanent = isThumbnailPermanent; } public long getUid() { @@ -54,4 +60,13 @@ public class PlaylistEntity { public void setThumbnailUrl(final String thumbnailUrl) { this.thumbnailUrl = thumbnailUrl; } + + public boolean getIsThumbnailPermanent() { + return isThumbnailPermanent; + } + + public void setIsThumbnailPermanent(final boolean isThumbnailSet) { + this.isThumbnailPermanent = isThumbnailSet; + } + } diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 2975fe43a..d1ee0ee88 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -17,7 +17,6 @@ import android.os.Bundle; import android.os.Environment; import android.os.IBinder; import android.util.Log; -import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -36,6 +35,7 @@ import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.view.menu.ActionMenuItemView; import androidx.appcompat.widget.Toolbar; +import androidx.collection.SparseArrayCompat; import androidx.documentfile.provider.DocumentFile; import androidx.fragment.app.DialogFragment; import androidx.preference.PreferenceManager; @@ -75,6 +75,7 @@ import java.io.IOException; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import icepick.Icepick; import icepick.State; @@ -211,8 +212,7 @@ public class DownloadDialog extends DialogFragment setStyle(STYLE_NO_TITLE, ThemeHelper.getDialogTheme(context)); Icepick.restoreInstanceState(this, savedInstanceState); - final SparseArray> secondaryStreams = - new SparseArray<>(4); + final var secondaryStreams = new SparseArrayCompat>(4); final List videoStreams = wrappedVideoStreams.getStreamsList(); for (int i = 0; i < videoStreams.size(); i++) { @@ -236,10 +236,9 @@ public class DownloadDialog extends DialogFragment } } - this.videoStreamsAdapter = new StreamItemAdapter<>(context, wrappedVideoStreams, - secondaryStreams); - this.audioStreamsAdapter = new StreamItemAdapter<>(context, wrappedAudioStreams); - this.subtitleStreamsAdapter = new StreamItemAdapter<>(context, wrappedSubtitleStreams); + this.videoStreamsAdapter = new StreamItemAdapter<>(wrappedVideoStreams, secondaryStreams); + this.audioStreamsAdapter = new StreamItemAdapter<>(wrappedAudioStreams); + this.subtitleStreamsAdapter = new StreamItemAdapter<>(wrappedSubtitleStreams); final Intent intent = new Intent(context, DownloadManagerService.class); context.startService(intent); @@ -562,6 +561,39 @@ public class DownloadDialog extends DialogFragment selectedSubtitleIndex = position; break; } + onItemSelectedSetFileName(); + } + + private void onItemSelectedSetFileName() { + final String fileName = FilenameUtils.createFilename(getContext(), currentInfo.getName()); + final String prevFileName = Optional.ofNullable(dialogBinding.fileName.getText()) + .map(Object::toString) + .orElse(""); + + if (prevFileName.isEmpty() + || prevFileName.equals(fileName) + || prevFileName.startsWith(getString(R.string.caption_file_name, fileName, ""))) { + // only update the file name field if it was not edited by the user + + switch (dialogBinding.videoAudioGroup.getCheckedRadioButtonId()) { + case R.id.audio_button: + case R.id.video_button: + if (!prevFileName.equals(fileName)) { + // since the user might have switched between audio and video, the correct + // text might already be in place, so avoid resetting the cursor position + dialogBinding.fileName.setText(fileName); + } + break; + + case R.id.subtitle_button: + final String setSubtitleLanguageCode = subtitleStreamsAdapter + .getItem(selectedSubtitleIndex).getLanguageTag(); + // this will reset the cursor position, which is bad UX, but it can't be avoided + dialogBinding.fileName.setText(getString( + R.string.caption_file_name, fileName, setSubtitleLanguageCode)); + break; + } + } } @Override diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt index 86e2e1028..c7b9beeed 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorUtil.kt @@ -5,7 +5,6 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Color -import android.os.Build import android.view.View import android.widget.Toast import androidx.core.app.NotificationCompat @@ -13,6 +12,7 @@ import androidx.core.app.NotificationManagerCompat import androidx.fragment.app.Fragment import com.google.android.material.snackbar.Snackbar import org.schabi.newpipe.R +import org.schabi.newpipe.util.PendingIntentCompat /** * This class contains all of the methods that should be used to let the user know that an error has @@ -104,11 +104,6 @@ class ErrorUtil { */ @JvmStatic fun createNotification(context: Context, errorInfo: ErrorInfo) { - var pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - pendingIntentFlags = pendingIntentFlags or PendingIntent.FLAG_IMMUTABLE - } - val notificationBuilder: NotificationCompat.Builder = NotificationCompat.Builder( context, @@ -119,11 +114,11 @@ class ErrorUtil { .setContentText(context.getString(errorInfo.messageStringId)) .setAutoCancel(true) .setContentIntent( - PendingIntent.getActivity( + PendingIntentCompat.getActivity( context, 0, getErrorActivityIntent(context, errorInfo), - pendingIntentFlags + PendingIntent.FLAG_UPDATE_CURRENT ) ) diff --git a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java index e2780d215..3c14cfe4c 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ReCaptchaActivity.java @@ -20,14 +20,14 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.NavUtils; import androidx.preference.PreferenceManager; -import org.schabi.newpipe.databinding.ActivityRecaptchaBinding; import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.MainActivity; import org.schabi.newpipe.R; +import org.schabi.newpipe.databinding.ActivityRecaptchaBinding; +import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.util.ThemeHelper; import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; /* * Created by beneth on 06.12.16. @@ -188,7 +188,7 @@ public class ReCaptchaActivity extends AppCompatActivity { try { String abuseCookie = url.substring(abuseStart + 13, abuseEnd); - abuseCookie = URLDecoder.decode(abuseCookie, "UTF-8"); + abuseCookie = Utils.decodeUrlUtf8(abuseCookie); handleCookies(abuseCookie); } catch (UnsupportedEncodingException | StringIndexOutOfBoundsException e) { if (MainActivity.DEBUG) { diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java index bf7f8fa5d..d364c0c0f 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/DescriptionFragment.java @@ -3,6 +3,8 @@ package org.schabi.newpipe.fragments.detail; import static android.text.TextUtils.isEmpty; import static org.schabi.newpipe.extractor.stream.StreamExtractor.NO_AGE_LIMIT; import static org.schabi.newpipe.extractor.utils.Utils.isBlank; +import static org.schabi.newpipe.util.Localization.getAppLocale; +import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD; import android.os.Bundle; import android.view.LayoutInflater; @@ -28,7 +30,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.util.external_communication.TextLinkifier; +import org.schabi.newpipe.util.text.TextLinkifier; import icepick.State; import io.reactivex.rxjava3.disposables.CompositeDisposable; @@ -111,7 +113,10 @@ public class DescriptionFragment extends BaseFragment { private void disableDescriptionSelection() { // show description content again, otherwise some links are not clickable - loadDescriptionContent(); + TextLinkifier.fromDescription(binding.detailDescriptionView, + streamInfo.getDescription(), HtmlCompat.FROM_HTML_MODE_LEGACY, + streamInfo.getService(), streamInfo.getUrl(), + descriptionDisposables, SET_LINK_MOVEMENT_METHOD); binding.detailDescriptionNoteView.setVisibility(View.GONE); binding.detailDescriptionView.setTextIsSelectable(false); @@ -122,52 +127,32 @@ public class DescriptionFragment extends BaseFragment { binding.detailSelectDescriptionButton.setImageResource(R.drawable.ic_select_all); } - private void loadDescriptionContent() { - final Description description = streamInfo.getDescription(); - switch (description.getType()) { - case Description.HTML: - TextLinkifier.createLinksFromHtmlBlock(binding.detailDescriptionView, - description.getContent(), HtmlCompat.FROM_HTML_MODE_LEGACY, streamInfo, - descriptionDisposables); - break; - case Description.MARKDOWN: - TextLinkifier.createLinksFromMarkdownText(binding.detailDescriptionView, - description.getContent(), streamInfo, descriptionDisposables); - break; - case Description.PLAIN_TEXT: default: - TextLinkifier.createLinksFromPlainText(binding.detailDescriptionView, - description.getContent(), streamInfo, descriptionDisposables); - break; - } - } - - private void setupMetadata(final LayoutInflater inflater, final LinearLayout layout) { - addMetadataItem(inflater, layout, false, - R.string.metadata_category, streamInfo.getCategory()); + addMetadataItem(inflater, layout, false, R.string.metadata_category, + streamInfo.getCategory()); - addMetadataItem(inflater, layout, false, - R.string.metadata_licence, streamInfo.getLicence()); + addMetadataItem(inflater, layout, false, R.string.metadata_licence, + streamInfo.getLicence()); addPrivacyMetadataItem(inflater, layout); if (streamInfo.getAgeLimit() != NO_AGE_LIMIT) { - addMetadataItem(inflater, layout, false, - R.string.metadata_age_limit, String.valueOf(streamInfo.getAgeLimit())); + addMetadataItem(inflater, layout, false, R.string.metadata_age_limit, + String.valueOf(streamInfo.getAgeLimit())); } if (streamInfo.getLanguageInfo() != null) { - addMetadataItem(inflater, layout, false, - R.string.metadata_language, streamInfo.getLanguageInfo().getDisplayLanguage()); + addMetadataItem(inflater, layout, false, R.string.metadata_language, + streamInfo.getLanguageInfo().getDisplayLanguage(getAppLocale(getContext()))); } - addMetadataItem(inflater, layout, true, - R.string.metadata_support, streamInfo.getSupportInfo()); - addMetadataItem(inflater, layout, true, - R.string.metadata_host, streamInfo.getHost()); - addMetadataItem(inflater, layout, true, - R.string.metadata_thumbnail_url, streamInfo.getThumbnailUrl()); + addMetadataItem(inflater, layout, true, R.string.metadata_support, + streamInfo.getSupportInfo()); + addMetadataItem(inflater, layout, true, R.string.metadata_host, + streamInfo.getHost()); + addMetadataItem(inflater, layout, true, R.string.metadata_thumbnail_url, + streamInfo.getThumbnailUrl()); addTagsMetadataItem(inflater, layout); } @@ -191,12 +176,14 @@ public class DescriptionFragment extends BaseFragment { }); if (linkifyContent) { - TextLinkifier.createLinksFromPlainText(itemBinding.metadataContentView, content, null, - descriptionDisposables); + TextLinkifier.fromPlainText(itemBinding.metadataContentView, content, null, null, + descriptionDisposables, SET_LINK_MOVEMENT_METHOD); } else { itemBinding.metadataContentView.setText(content); } + itemBinding.metadataContentView.setClickable(true); + layout.addView(itemBinding.getRoot()); } @@ -245,14 +232,15 @@ public class DescriptionFragment extends BaseFragment { case INTERNAL: contentRes = R.string.metadata_privacy_internal; break; - case OTHER: default: + case OTHER: + default: contentRes = 0; break; } if (contentRes != 0) { - addMetadataItem(inflater, layout, false, - R.string.metadata_privacy, getString(contentRes)); + addMetadataItem(inflater, layout, false, R.string.metadata_privacy, + getString(contentRes)); } } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 580585d4e..0fb137528 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -10,8 +10,11 @@ import static org.schabi.newpipe.player.helper.PlayerHelper.isClearingQueueConfi import static org.schabi.newpipe.player.playqueue.PlayQueueItem.RECOVERY_UNSET; import static org.schabi.newpipe.util.ExtractorHelper.showMetaInfoInTextView; import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; +import static org.schabi.newpipe.util.NavigationHelper.openPlayQueue; +import static org.schabi.newpipe.util.NavigationHelper.playWithKore; import android.animation.ValueAnimator; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; @@ -24,7 +27,6 @@ import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -52,6 +54,9 @@ import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.Toolbar; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.content.ContextCompat; +import androidx.core.view.WindowCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.core.view.WindowInsetsControllerCompat; import androidx.preference.PreferenceManager; import com.google.android.exoplayer2.PlaybackException; @@ -119,6 +124,7 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; import icepick.State; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; @@ -129,9 +135,6 @@ import io.reactivex.rxjava3.schedulers.Schedulers; public final class VideoDetailFragment extends BaseStateFragment implements BackPressable, - SharedPreferences.OnSharedPreferenceChangeListener, - View.OnClickListener, - View.OnLongClickListener, PlayerServiceExtendedEventListener, OnKeyDownListener { public static final String KEY_SWITCHING_PLAYERS = "switching_players"; @@ -167,6 +170,20 @@ public final class VideoDetailFragment private boolean tabSettingsChanged = false; private int lastAppBarVerticalOffset = Integer.MAX_VALUE; // prevents useless updates + private final SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener = + (sharedPreferences, key) -> { + if (getString(R.string.show_comments_key).equals(key)) { + showComments = sharedPreferences.getBoolean(key, true); + tabSettingsChanged = true; + } else if (getString(R.string.show_next_video_key).equals(key)) { + showRelatedItems = sharedPreferences.getBoolean(key, true); + tabSettingsChanged = true; + } else if (getString(R.string.show_description_key).equals(key)) { + showDescription = sharedPreferences.getBoolean(key, true); + tabSettingsChanged = true; + } + }; + @State protected int serviceId = Constants.NO_SERVICE_ID; @State @@ -240,11 +257,10 @@ public final class VideoDetailFragment playerUi.ifPresent(MainPlayerUi::toggleFullscreen); } - //noinspection SimplifyOptionalCallChains if (playAfterConnect || (currentInfo != null && isAutoplayEnabled() - && !playerUi.isPresent())) { + && playerUi.isEmpty())) { autoPlayEnabled = true; // forcefully start playing openVideoPlayerAutoFullscreen(); } @@ -291,7 +307,7 @@ public final class VideoDetailFragment showDescription = prefs.getBoolean(getString(R.string.show_description_key), true); selectedTabTag = prefs.getString( getString(R.string.stream_info_selected_tab_key), COMMENTS_TAB_TAG); - prefs.registerOnSharedPreferenceChangeListener(this); + prefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener); setupBroadcastReceiver(); @@ -378,7 +394,7 @@ public final class VideoDetailFragment } PreferenceManager.getDefaultSharedPreferences(activity) - .unregisterOnSharedPreferenceChangeListener(this); + .unregisterOnSharedPreferenceChangeListener(preferenceChangeListener); activity.unregisterReceiver(broadcastReceiver); activity.getContentResolver().unregisterContentObserver(settingsContentObserver); @@ -424,130 +440,129 @@ public final class VideoDetailFragment } } - @Override - public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, - final String key) { - if (key.equals(getString(R.string.show_comments_key))) { - showComments = sharedPreferences.getBoolean(key, true); - tabSettingsChanged = true; - } else if (key.equals(getString(R.string.show_next_video_key))) { - showRelatedItems = sharedPreferences.getBoolean(key, true); - tabSettingsChanged = true; - } else if (key.equals(getString(R.string.show_description_key))) { - showDescription = sharedPreferences.getBoolean(key, true); - tabSettingsChanged = true; - } - } - /*////////////////////////////////////////////////////////////////////////// // OnClick //////////////////////////////////////////////////////////////////////////*/ - @Override - public void onClick(final View v) { - switch (v.getId()) { - case R.id.detail_controls_background: - openBackgroundPlayer(false); - break; - case R.id.detail_controls_popup: - openPopupPlayer(false); - break; - case R.id.detail_controls_playlist_append: - if (getFM() != null && currentInfo != null) { - disposables.add( - PlaylistDialog.createCorrespondingDialog( - getContext(), - List.of(new StreamEntity(currentInfo)), - dialog -> dialog.show(getFM(), TAG) - ) - ); - } - break; - case R.id.detail_controls_download: - if (PermissionHelper.checkStoragePermissions(activity, - PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { - this.openDownloadDialog(); - } - break; - case R.id.detail_controls_share: - if (currentInfo != null) { - ShareUtils.shareText(requireContext(), currentInfo.getName(), - currentInfo.getUrl(), currentInfo.getThumbnailUrl()); - } - break; - case R.id.detail_controls_open_in_browser: - if (currentInfo != null) { - ShareUtils.openUrlInBrowser(requireContext(), currentInfo.getUrl()); - } - break; - case R.id.detail_controls_play_with_kodi: - if (currentInfo != null) { - try { - NavigationHelper.playWithKore( - requireContext(), Uri.parse(currentInfo.getUrl())); - } catch (final Exception e) { - if (DEBUG) { - Log.i(TAG, "Failed to start kore", e); - } - KoreUtils.showInstallKoreDialog(requireContext()); - } - } - break; - case R.id.detail_uploader_root_layout: - if (isEmpty(currentInfo.getSubChannelUrl())) { - if (!isEmpty(currentInfo.getUploaderUrl())) { - openChannel(currentInfo.getUploaderUrl(), currentInfo.getUploaderName()); - } - - if (DEBUG) { - Log.i(TAG, "Can't open sub-channel because we got no channel URL"); - } - } else { - openChannel(currentInfo.getSubChannelUrl(), - currentInfo.getSubChannelName()); - } - break; - case R.id.detail_thumbnail_root_layout: - // make sure not to open any player if there is nothing currently loaded! - // FIXME removing this `if` causes the player service to start correctly, then stop, - // then restart badly without calling `startForeground()`, causing a crash when - // later closing the detail fragment - if (currentInfo != null) { - autoPlayEnabled = true; // forcefully start playing - // FIXME Workaround #7427 - if (isPlayerAvailable()) { - player.setRecovery(); - } - openVideoPlayerAutoFullscreen(); - } - break; - case R.id.detail_title_root_layout: - toggleTitleAndSecondaryControls(); - break; - case R.id.overlay_thumbnail: - case R.id.overlay_metadata_layout: - case R.id.overlay_buttons_layout: - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); - break; - case R.id.overlay_play_queue_button: - NavigationHelper.openPlayQueue(getContext()); - break; - case R.id.overlay_play_pause_button: - if (playerIsNotStopped()) { - player.playPause(); - player.UIs().get(VideoPlayerUi.class).ifPresent(ui -> ui.hideControls(0, 0)); - showSystemUi(); - } else { - autoPlayEnabled = true; // forcefully start playing - openVideoPlayer(false); + private void setOnClickListeners() { + binding.detailTitleRootLayout.setOnClickListener(v -> toggleTitleAndSecondaryControls()); + binding.detailUploaderRootLayout.setOnClickListener(makeOnClickListener(info -> { + if (isEmpty(info.getSubChannelUrl())) { + if (!isEmpty(info.getUploaderUrl())) { + openChannel(info.getUploaderUrl(), info.getUploaderName()); } - setOverlayPlayPauseImage(isPlayerAvailable() && player.isPlaying()); - break; - case R.id.overlay_close_button: - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); - break; + if (DEBUG) { + Log.i(TAG, "Can't open sub-channel because we got no channel URL"); + } + } else { + openChannel(info.getSubChannelUrl(), info.getSubChannelName()); + } + })); + binding.detailThumbnailRootLayout.setOnClickListener(v -> { + autoPlayEnabled = true; // forcefully start playing + // FIXME Workaround #7427 + if (isPlayerAvailable()) { + player.setRecovery(); + } + openVideoPlayerAutoFullscreen(); + }); + + binding.detailControlsBackground.setOnClickListener(v -> openBackgroundPlayer(false)); + binding.detailControlsPopup.setOnClickListener(v -> openPopupPlayer(false)); + binding.detailControlsPlaylistAppend.setOnClickListener(makeOnClickListener(info -> + disposables.add(PlaylistDialog.createCorrespondingDialog(requireContext(), + List.of(new StreamEntity(info)), + dialog -> dialog.show(getParentFragmentManager(), TAG))))); + binding.detailControlsDownload.setOnClickListener(v -> { + if (PermissionHelper.checkStoragePermissions(activity, + PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { + openDownloadDialog(); + } + }); + binding.detailControlsShare.setOnClickListener(makeOnClickListener(info -> + ShareUtils.shareText(requireContext(), info.getName(), info.getUrl(), + info.getThumbnailUrl()))); + binding.detailControlsOpenInBrowser.setOnClickListener(makeOnClickListener(info -> + ShareUtils.openUrlInBrowser(requireContext(), info.getUrl()))); + binding.detailControlsPlayWithKodi.setOnClickListener(makeOnClickListener(info -> { + try { + playWithKore(requireContext(), Uri.parse(info.getUrl())); + } catch (final Exception e) { + if (DEBUG) { + Log.i(TAG, "Failed to start kore", e); + } + KoreUtils.showInstallKoreDialog(requireContext()); + } + })); + if (DEBUG) { + binding.detailControlsCrashThePlayer.setOnClickListener(v -> + VideoDetailPlayerCrasher.onCrashThePlayer(requireContext(), player)); } + + final View.OnClickListener overlayListener = v -> bottomSheetBehavior + .setState(BottomSheetBehavior.STATE_EXPANDED); + binding.overlayThumbnail.setOnClickListener(overlayListener); + binding.overlayMetadataLayout.setOnClickListener(overlayListener); + binding.overlayButtonsLayout.setOnClickListener(overlayListener); + binding.overlayCloseButton.setOnClickListener(v -> bottomSheetBehavior + .setState(BottomSheetBehavior.STATE_HIDDEN)); + binding.overlayPlayQueueButton.setOnClickListener(v -> openPlayQueue(requireContext())); + binding.overlayPlayPauseButton.setOnClickListener(v -> { + if (playerIsNotStopped()) { + player.playPause(); + player.UIs().get(VideoPlayerUi.class).ifPresent(ui -> ui.hideControls(0, 0)); + showSystemUi(); + } else { + autoPlayEnabled = true; // forcefully start playing + openVideoPlayer(false); + } + + setOverlayPlayPauseImage(isPlayerAvailable() && player.isPlaying()); + }); + } + + private View.OnClickListener makeOnClickListener(final Consumer consumer) { + return v -> { + if (!isLoading.get() && currentInfo != null) { + consumer.accept(currentInfo); + } + }; + } + + private void setOnLongClickListeners() { + binding.detailTitleRootLayout.setOnLongClickListener(makeOnLongClickListener(info -> + ShareUtils.copyToClipboard(requireContext(), + binding.detailVideoTitleView.getText().toString()))); + binding.detailUploaderRootLayout.setOnLongClickListener(makeOnLongClickListener(info -> { + if (isEmpty(info.getSubChannelUrl())) { + Log.w(TAG, "Can't open parent channel because we got no parent channel URL"); + } else { + openChannel(info.getUploaderUrl(), info.getUploaderName()); + } + })); + + binding.detailControlsBackground.setOnLongClickListener(makeOnLongClickListener(info -> + openBackgroundPlayer(true))); + binding.detailControlsPopup.setOnLongClickListener(makeOnLongClickListener(info -> + openPopupPlayer(true))); + binding.detailControlsDownload.setOnLongClickListener(makeOnLongClickListener(info -> + NavigationHelper.openDownloads(activity))); + + final View.OnLongClickListener overlayListener = makeOnLongClickListener(info -> + openChannel(info.getUploaderUrl(), info.getUploaderName())); + binding.overlayThumbnail.setOnLongClickListener(overlayListener); + binding.overlayMetadataLayout.setOnLongClickListener(overlayListener); + } + + private View.OnLongClickListener makeOnLongClickListener(final Consumer consumer) { + return v -> { + if (isLoading.get() || currentInfo == null) { + return false; + } + consumer.accept(currentInfo); + return true; + }; } private void openChannel(final String subChannelUrl, final String subChannelName) { @@ -559,43 +574,6 @@ public final class VideoDetailFragment } } - @Override - public boolean onLongClick(final View v) { - if (isLoading.get() || currentInfo == null) { - return false; - } - - switch (v.getId()) { - case R.id.detail_controls_background: - openBackgroundPlayer(true); - break; - case R.id.detail_controls_popup: - openPopupPlayer(true); - break; - case R.id.detail_controls_download: - NavigationHelper.openDownloads(activity); - break; - case R.id.overlay_thumbnail: - case R.id.overlay_metadata_layout: - openChannel(currentInfo.getUploaderUrl(), currentInfo.getUploaderName()); - break; - case R.id.detail_uploader_root_layout: - if (isEmpty(currentInfo.getSubChannelUrl())) { - Log.w(TAG, - "Can't open parent channel because we got no parent channel URL"); - } else { - openChannel(currentInfo.getUploaderUrl(), currentInfo.getUploaderName()); - } - break; - case R.id.detail_title_root_layout: - ShareUtils.copyToClipboard(requireContext(), - binding.detailVideoTitleView.getText().toString()); - break; - } - - return true; - } - private void toggleTitleAndSecondaryControls() { if (binding.detailSecondaryControlPanel.getVisibility() == View.GONE) { binding.detailVideoTitleView.setMaxLines(10); @@ -616,11 +594,6 @@ public final class VideoDetailFragment // Init //////////////////////////////////////////////////////////////////////////*/ - @Override - public void onViewCreated(@NonNull final View rootView, final Bundle savedInstanceState) { - super.onViewCreated(rootView, savedInstanceState); - } - @Override // called from onViewCreated in {@link BaseFragment#onViewCreated} protected void initViews(final View rootView, final Bundle savedInstanceState) { super.initViews(rootView, savedInstanceState); @@ -642,60 +615,29 @@ public final class VideoDetailFragment ? View.VISIBLE : View.GONE ); - - if (DeviceUtils.isTv(getContext())) { - // remove ripple effects from detail controls - final int transparent = ContextCompat.getColor(requireContext(), - R.color.transparent_background_color); - binding.detailControlsPlaylistAppend.setBackgroundColor(transparent); - binding.detailControlsBackground.setBackgroundColor(transparent); - binding.detailControlsPopup.setBackgroundColor(transparent); - binding.detailControlsDownload.setBackgroundColor(transparent); - binding.detailControlsShare.setBackgroundColor(transparent); - binding.detailControlsOpenInBrowser.setBackgroundColor(transparent); - binding.detailControlsPlayWithKodi.setBackgroundColor(transparent); - } + accommodateForTvAndDesktopMode(); } @Override + @SuppressLint("ClickableViewAccessibility") protected void initListeners() { super.initListeners(); - binding.detailTitleRootLayout.setOnClickListener(this); - binding.detailTitleRootLayout.setOnLongClickListener(this); - binding.detailUploaderRootLayout.setOnClickListener(this); - binding.detailUploaderRootLayout.setOnLongClickListener(this); - binding.detailThumbnailRootLayout.setOnClickListener(this); + setOnClickListeners(); + setOnLongClickListeners(); - binding.detailControlsBackground.setOnClickListener(this); - binding.detailControlsBackground.setOnLongClickListener(this); - binding.detailControlsPopup.setOnClickListener(this); - binding.detailControlsPopup.setOnLongClickListener(this); - binding.detailControlsPlaylistAppend.setOnClickListener(this); - binding.detailControlsDownload.setOnClickListener(this); - binding.detailControlsDownload.setOnLongClickListener(this); - binding.detailControlsShare.setOnClickListener(this); - binding.detailControlsOpenInBrowser.setOnClickListener(this); - binding.detailControlsPlayWithKodi.setOnClickListener(this); - if (DEBUG) { - binding.detailControlsCrashThePlayer.setOnClickListener( - v -> VideoDetailPlayerCrasher.onCrashThePlayer( - this.getContext(), - this.player) - ); - } + final View.OnTouchListener controlsTouchListener = (view, motionEvent) -> { + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN + && PreferenceManager.getDefaultSharedPreferences(activity) + .getBoolean(getString(R.string.show_hold_to_append_key), true)) { - binding.overlayThumbnail.setOnClickListener(this); - binding.overlayThumbnail.setOnLongClickListener(this); - binding.overlayMetadataLayout.setOnClickListener(this); - binding.overlayMetadataLayout.setOnLongClickListener(this); - binding.overlayButtonsLayout.setOnClickListener(this); - binding.overlayPlayQueueButton.setOnClickListener(this); - binding.overlayCloseButton.setOnClickListener(this); - binding.overlayPlayPauseButton.setOnClickListener(this); - - binding.detailControlsBackground.setOnTouchListener(getOnControlsTouchListener()); - binding.detailControlsPopup.setOnTouchListener(getOnControlsTouchListener()); + animate(binding.touchAppendDetail, true, 250, AnimationType.ALPHA, 0, () -> + animate(binding.touchAppendDetail, false, 1500, AnimationType.ALPHA, 1000)); + } + return false; + }; + binding.detailControlsBackground.setOnTouchListener(controlsTouchListener); + binding.detailControlsPopup.setOnTouchListener(controlsTouchListener); binding.appBarLayout.addOnOffsetChangedListener((layout, verticalOffset) -> { // prevent useless updates to tab layout visibility if nothing changed @@ -714,23 +656,6 @@ public final class VideoDetailFragment } } - private View.OnTouchListener getOnControlsTouchListener() { - return (view, motionEvent) -> { - if (!PreferenceManager.getDefaultSharedPreferences(activity) - .getBoolean(getString(R.string.show_hold_to_append_key), true)) { - return false; - } - - if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { - animate(binding.touchAppendDetail, true, 250, AnimationType.ALPHA, - 0, () -> - animate(binding.touchAppendDetail, false, 1500, - AnimationType.ALPHA, 1000)); - } - return false; - }; - } - private void initThumbnailViews(@NonNull final StreamInfo info) { PicassoHelper.loadDetailsThumbnail(info.getThumbnailUrl()).tag(PICASSO_VIDEO_DETAILS_TAG) .into(binding.detailThumbnailImageView, new Callback() { @@ -940,7 +865,8 @@ public final class VideoDetailFragment if (playQueue == null) { playQueue = new SinglePlayQueue(result); } - if (stack.isEmpty() || !stack.peek().getPlayQueue().equals(playQueue)) { + if (stack.isEmpty() || !stack.peek().getPlayQueue() + .equalStreams(playQueue)) { stack.push(new StackItem(serviceId, url, title, playQueue)); } } @@ -1143,8 +1069,7 @@ public final class VideoDetailFragment } private void openPopupPlayer(final boolean append) { - if (!PermissionHelper.isPopupEnabled(activity)) { - PermissionHelper.showPopupEnablementToast(activity); + if (!PermissionHelper.isPopupEnabledElseAsk(activity)) { return; } @@ -1250,16 +1175,15 @@ public final class VideoDetailFragment * be reused in a few milliseconds and the flickering would be annoying. */ private void hideMainPlayerOnLoadingNewStream() { - //noinspection SimplifyOptionalCallChains - if (!isPlayerServiceAvailable() || !getRoot().isPresent() - || !player.videoPlayerSelected()) { + final var root = getRoot(); + if (!isPlayerServiceAvailable() || root.isEmpty() || !player.videoPlayerSelected()) { return; } removeVideoPlayerView(); if (isAutoplayEnabled()) { playerService.stopForImmediateReusing(); - getRoot().ifPresent(view -> view.setVisibility(View.GONE)); + root.ifPresent(view -> view.setVisibility(View.GONE)); } else { playerHolder.stopService(); } @@ -1573,9 +1497,9 @@ public final class VideoDetailFragment binding.detailSubChannelThumbnailView.setVisibility(View.GONE); if (!isEmpty(info.getSubChannelName())) { - displayBothUploaderAndSubChannel(info); + displayBothUploaderAndSubChannel(info, activity); } else if (!isEmpty(info.getUploaderName())) { - displayUploaderAsSubChannel(info); + displayUploaderAsSubChannel(info, activity); } else { binding.detailUploaderTextView.setVisibility(View.GONE); binding.detailUploaderThumbnailView.setVisibility(View.GONE); @@ -1678,8 +1602,9 @@ public final class VideoDetailFragment binding.detailControlsDownload.setVisibility( StreamTypeUtil.isLiveStream(info.getStreamType()) ? View.GONE : View.VISIBLE); - binding.detailControlsBackground.setVisibility(info.getAudioStreams().isEmpty() - ? View.GONE : View.VISIBLE); + binding.detailControlsBackground.setVisibility( + info.getAudioStreams().isEmpty() && info.getVideoStreams().isEmpty() + ? View.GONE : View.VISIBLE); final boolean noVideoStreams = info.getVideoStreams().isEmpty() && info.getVideoOnlyStreams().isEmpty(); @@ -1688,23 +1613,42 @@ public final class VideoDetailFragment noVideoStreams ? R.drawable.ic_headset_shadow : R.drawable.ic_play_arrow_shadow); } - private void displayUploaderAsSubChannel(final StreamInfo info) { + private void displayUploaderAsSubChannel(final StreamInfo info, final Context context) { binding.detailSubChannelTextView.setText(info.getUploaderName()); binding.detailSubChannelTextView.setVisibility(View.VISIBLE); binding.detailSubChannelTextView.setSelected(true); - binding.detailUploaderTextView.setVisibility(View.GONE); + + if (info.getUploaderSubscriberCount() > -1) { + binding.detailUploaderTextView.setText( + Localization.shortSubscriberCount(context, info.getUploaderSubscriberCount())); + binding.detailUploaderTextView.setVisibility(View.VISIBLE); + } else { + binding.detailUploaderTextView.setVisibility(View.GONE); + } } - private void displayBothUploaderAndSubChannel(final StreamInfo info) { + private void displayBothUploaderAndSubChannel(final StreamInfo info, final Context context) { binding.detailSubChannelTextView.setText(info.getSubChannelName()); binding.detailSubChannelTextView.setVisibility(View.VISIBLE); binding.detailSubChannelTextView.setSelected(true); binding.detailSubChannelThumbnailView.setVisibility(View.VISIBLE); + final StringBuilder subText = new StringBuilder(); if (!isEmpty(info.getUploaderName())) { - binding.detailUploaderTextView.setText( + subText.append( String.format(getString(R.string.video_detail_by), info.getUploaderName())); + } + if (info.getUploaderSubscriberCount() > -1) { + if (subText.length() > 0) { + subText.append(Localization.DOT_SEPARATOR); + } + subText.append( + Localization.shortSubscriberCount(context, info.getUploaderSubscriberCount())); + } + + if (subText.length() > 0) { + binding.detailUploaderTextView.setText(subText); binding.detailUploaderTextView.setVisibility(View.VISIBLE); binding.detailUploaderTextView.setSelected(true); } else { @@ -1836,7 +1780,7 @@ public final class VideoDetailFragment // deleted/added items inside Channel/Playlist queue and makes possible to have // a history of played items @Nullable final StackItem stackPeek = stack.peek(); - if (stackPeek != null && !stackPeek.getPlayQueue().equals(queue)) { + if (stackPeek != null && !stackPeek.getPlayQueue().equalStreams(queue)) { @Nullable final PlayQueueItem playQueueItem = queue.getItem(); if (playQueueItem != null) { stack.push(new StackItem(playQueueItem.getServiceId(), playQueueItem.getUrl(), @@ -1902,7 +1846,7 @@ public final class VideoDetailFragment // They are not equal when user watches something in popup while browsing in fragment and // then changes screen orientation. In that case the fragment will set itself as // a service listener and will receive initial call to onMetadataUpdate() - if (!queue.equals(playQueue)) { + if (!queue.equalStreams(playQueue)) { return; } @@ -1943,10 +1887,9 @@ public final class VideoDetailFragment @Override public void onFullscreenStateChanged(final boolean fullscreen) { setupBrightness(); - //noinspection SimplifyOptionalCallChains if (!isPlayerAndPlayerServiceAvailable() - || !player.UIs().get(MainPlayerUi.class).isPresent() - || getRoot().map(View::getParent).orElse(null) == null) { + || player.UIs().get(MainPlayerUi.class).isEmpty() + || getRoot().map(View::getParent).isEmpty()) { return; } @@ -2018,15 +1961,17 @@ public final class VideoDetailFragment return; } - // Prevent jumping of the player on devices with cutout - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - activity.getWindow().getAttributes().layoutInDisplayCutoutMode = - WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; - } - activity.getWindow().getDecorView().setSystemUiVisibility(0); - activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); - activity.getWindow().setStatusBarColor(ThemeHelper.resolveColorFromAttr( - requireContext(), android.R.attr.colorPrimary)); + final var window = activity.getWindow(); + final var windowInsetsController = WindowCompat.getInsetsController(window, + window.getDecorView()); + + WindowCompat.setDecorFitsSystemWindows(window, true); + windowInsetsController.setSystemBarsBehavior(WindowInsetsControllerCompat + .BEHAVIOR_SHOW_BARS_BY_TOUCH); + windowInsetsController.show(WindowInsetsCompat.Type.systemBars()); + + window.setStatusBarColor(ThemeHelper.resolveColorFromAttr(requireContext(), + android.R.attr.colorPrimary)); } private void hideSystemUi() { @@ -2038,30 +1983,19 @@ public final class VideoDetailFragment return; } - // Prevent jumping of the player on devices with cutout - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - activity.getWindow().getAttributes().layoutInDisplayCutoutMode = - WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; - } - int visibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + final var window = activity.getWindow(); + final var windowInsetsController = WindowCompat.getInsetsController(window, + window.getDecorView()); - // In multiWindow mode status bar is not transparent for devices with cutout - // if I include this flag. So without it is better in this case - final boolean isInMultiWindow = DeviceUtils.isInMultiWindow(activity); - if (!isInMultiWindow) { - visibility |= View.SYSTEM_UI_FLAG_FULLSCREEN; - } - activity.getWindow().getDecorView().setSystemUiVisibility(visibility); + WindowCompat.setDecorFitsSystemWindows(window, false); + windowInsetsController.setSystemBarsBehavior(WindowInsetsControllerCompat + .BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); + windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()); - if (isInMultiWindow || isFullscreen()) { - activity.getWindow().setStatusBarColor(Color.TRANSPARENT); - activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); + if (DeviceUtils.isInMultiWindow(activity) || isFullscreen()) { + window.setStatusBarColor(Color.TRANSPARENT); + window.setNavigationBarColor(Color.TRANSPARENT); } - activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } // Listener implementation @@ -2118,6 +2052,30 @@ public final class VideoDetailFragment } } + /** + * Make changes to the UI to accommodate for better usability on bigger screens such as TVs + * or in Android's desktop mode (DeX etc). + */ + private void accommodateForTvAndDesktopMode() { + if (DeviceUtils.isTv(getContext())) { + // remove ripple effects from detail controls + final int transparent = ContextCompat.getColor(requireContext(), + R.color.transparent_background_color); + binding.detailControlsPlaylistAppend.setBackgroundColor(transparent); + binding.detailControlsBackground.setBackgroundColor(transparent); + binding.detailControlsPopup.setBackgroundColor(transparent); + binding.detailControlsDownload.setBackgroundColor(transparent); + binding.detailControlsShare.setBackgroundColor(transparent); + binding.detailControlsOpenInBrowser.setBackgroundColor(transparent); + binding.detailControlsPlayWithKodi.setBackgroundColor(transparent); + } + if (DeviceUtils.isDesktopMode(getContext())) { + // Remove the "hover" overlay (since it is visible on all mouse events and interferes + // with the video content being played) + binding.detailThumbnailRootLayout.setForeground(null); + } + } + private void checkLandscape() { if ((!player.isPlaying() && player.getPlayQueue() != playQueue) || player.getPlayQueue() == null) { @@ -2145,7 +2103,7 @@ public final class VideoDetailFragment final Iterator iterator = stack.descendingIterator(); while (iterator.hasNext()) { final StackItem next = iterator.next(); - if (next.getPlayQueue().equals(queue)) { + if (next.getPlayQueue().equalStreams(queue)) { item = next; break; } @@ -2160,7 +2118,7 @@ public final class VideoDetailFragment if (isClearingQueueConfirmationRequired(activity) && playerIsNotStopped() && activeQueue != null - && !activeQueue.equals(playQueue)) { + && !activeQueue.equalStreams(playQueue)) { showClearingQueueConfirmation(onAllow); } else { onAllow.run(); @@ -2461,23 +2419,20 @@ public final class VideoDetailFragment // helpers to check the state of player and playerService boolean isPlayerAvailable() { - return (player != null); + return player != null; } boolean isPlayerServiceAvailable() { - return (playerService != null); + return playerService != null; } boolean isPlayerAndPlayerServiceAvailable() { - return (player != null && playerService != null); + return player != null && playerService != null; } public Optional getRoot() { - if (player == null) { - return Optional.empty(); - } - - return player.UIs().get(VideoPlayerUi.class) + return Optional.ofNullable(player) + .flatMap(player1 -> player1.UIs().get(VideoPlayerUi.class)) .map(playerUi -> playerUi.getBinding().getRoot()); } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java index 633ba5d78..8a117a47a 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java @@ -26,6 +26,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.fragments.BaseStateFragment; import org.schabi.newpipe.fragments.OnScrollBelowItemsListener; import org.schabi.newpipe.info_list.InfoListAdapter; +import org.schabi.newpipe.info_list.ItemViewMode; import org.schabi.newpipe.info_list.dialog.InfoItemDialog; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.OnClickGesture; @@ -91,11 +92,7 @@ public abstract class BaseListFragment extends BaseStateFragment if (updateFlags != 0) { if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) { - final boolean useGrid = isGridLayout(); - itemsList.setLayoutManager(useGrid - ? getGridLayoutManager() : getListLayoutManager()); - infoListAdapter.setUseGridVariant(useGrid); - infoListAdapter.notifyDataSetChanged(); + refreshItemViewMode(); } updateFlags = 0; } @@ -215,22 +212,29 @@ public abstract class BaseListFragment extends BaseStateFragment final Resources resources = activity.getResources(); int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width); width += (24 * resources.getDisplayMetrics().density); - final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels - / (double) width); + final int spanCount = Math.floorDiv(resources.getDisplayMetrics().widthPixels, width); final GridLayoutManager lm = new GridLayoutManager(activity, spanCount); lm.setSpanSizeLookup(infoListAdapter.getSpanSizeLookup(spanCount)); return lm; } + /** + * Updates the item view mode based on user preference. + */ + private void refreshItemViewMode() { + final ItemViewMode itemViewMode = getItemViewMode(); + itemsList.setLayoutManager((itemViewMode == ItemViewMode.GRID) + ? getGridLayoutManager() : getListLayoutManager()); + infoListAdapter.setItemViewMode(itemViewMode); + infoListAdapter.notifyDataSetChanged(); + } + @Override protected void initViews(final View rootView, final Bundle savedInstanceState) { super.initViews(rootView, savedInstanceState); - final boolean useGrid = isGridLayout(); itemsList = rootView.findViewById(R.id.items_list); - itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager()); - - infoListAdapter.setUseGridVariant(useGrid); + refreshItemViewMode(); final Supplier listHeaderSupplier = getListHeaderSupplier(); if (listHeaderSupplier != null) { @@ -470,12 +474,16 @@ public abstract class BaseListFragment extends BaseStateFragment @Override public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - if (key.equals(getString(R.string.list_view_mode_key))) { + if (getString(R.string.list_view_mode_key).equals(key)) { updateFlags |= LIST_MODE_UPDATE_FLAG; } } - protected boolean isGridLayout() { - return ThemeHelper.shouldUseGridLayout(activity); + /** + * Returns preferred item view mode. + * @return ItemViewMode + */ + protected ItemViewMode getItemViewMode() { + return ThemeHelper.getItemViewMode(requireContext()); } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java index 3b092cc28..5a5f84968 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/comments/CommentsFragment.java @@ -17,6 +17,7 @@ import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.comments.CommentsInfo; import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.fragments.list.BaseListInfoFragment; +import org.schabi.newpipe.info_list.ItemViewMode; import org.schabi.newpipe.ktx.ViewUtils; import org.schabi.newpipe.util.ExtractorHelper; @@ -106,7 +107,7 @@ public class CommentsFragment extends BaseListInfoFragment dialog.show(getFM(), TAG) - )); + if (currentInfo != null) { + disposables.add(PlaylistDialog.createCorrespondingDialog( + getContext(), + getPlayQueue() + .getStreams() + .stream() + .map(StreamEntity::new) + .collect(Collectors.toList()), + dialog -> dialog.show(getFM(), TAG) + )); + } break; default: return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 5175e0096..26a283229 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -33,6 +33,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.TooltipCompat; +import androidx.collection.SparseArrayCompat; import androidx.core.text.HtmlCompat; import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.ItemTouchHelper; @@ -70,9 +71,7 @@ import org.schabi.newpipe.util.ServiceHelper; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Queue; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -141,7 +140,7 @@ public class SearchFragment extends BaseListFragment menuItemToFilterName = null; + private final SparseArrayCompat menuItemToFilterName = new SparseArrayCompat<>(); private StreamingService service; private Page nextPage; private boolean showLocalSuggestions = true; @@ -426,8 +425,6 @@ public class SearchFragment extends BaseListFragment(); - int itemId = 0; boolean isFirstItem = true; final Context c = getContext(); @@ -468,11 +465,8 @@ public class SearchFragment extends BaseListFragment cf = new ArrayList<>(1); - cf.add(menuItemToFilterName.get(item.getItemId())); - changeContentFilter(item, cf); - } + final var filter = Collections.singletonList(menuItemToFilterName.get(item.getItemId())); + changeContentFilter(item, filter); return true; } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/videos/RelatedItemsFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/videos/RelatedItemsFragment.java index f0ece69f3..65664e0e3 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/videos/RelatedItemsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/videos/RelatedItemsFragment.java @@ -19,6 +19,7 @@ import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.ListExtractor; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.fragments.list.BaseListInfoFragment; +import org.schabi.newpipe.info_list.ItemViewMode; import org.schabi.newpipe.ktx.ViewUtils; import org.schabi.newpipe.util.RelatedItemInfo; @@ -158,16 +159,19 @@ public class RelatedItemsFragment extends BaseListInfoFragment headerSupplier = null; public InfoListAdapter(final Context context) { @@ -114,8 +119,8 @@ public class InfoListAdapter extends RecyclerView.Adapter data) { @@ -234,14 +239,33 @@ public class InfoListAdapter extends RecyclerView.Adapter 1) { + if (holder.getQueuePosition() < holder.getQueueSize() - 1) { addEntry(StreamDialogDefaultEntry.ENQUEUE_NEXT); } } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java index cf1ed255b..f8133d3de 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelInfoItemHolder.java @@ -1,14 +1,9 @@ package org.schabi.newpipe.info_list.holder; import android.view.ViewGroup; -import android.widget.TextView; import org.schabi.newpipe.R; -import org.schabi.newpipe.extractor.InfoItem; -import org.schabi.newpipe.extractor.channel.ChannelInfoItem; import org.schabi.newpipe.info_list.InfoItemBuilder; -import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.Localization; /* * Created by Christian Schabesberger on 12.02.17. @@ -31,40 +26,7 @@ import org.schabi.newpipe.util.Localization; */ public class ChannelInfoItemHolder extends ChannelMiniInfoItemHolder { - private final TextView itemChannelDescriptionView; - public ChannelInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) { super(infoItemBuilder, R.layout.list_channel_item, parent); - itemChannelDescriptionView = itemView.findViewById(R.id.itemChannelDescriptionView); - } - - @Override - public void updateFromItem(final InfoItem infoItem, - final HistoryRecordManager historyRecordManager) { - super.updateFromItem(infoItem, historyRecordManager); - - if (!(infoItem instanceof ChannelInfoItem)) { - return; - } - final ChannelInfoItem item = (ChannelInfoItem) infoItem; - - itemChannelDescriptionView.setText(item.getDescription()); - } - - @Override - protected String getDetailLine(final ChannelInfoItem item) { - String details = super.getDetailLine(item); - - if (item.getStreamCount() >= 0) { - final String formattedVideoAmount = Localization.localizeStreamCount( - itemBuilder.getContext(), item.getStreamCount()); - - if (!details.isEmpty()) { - details += " • " + formattedVideoAmount; - } else { - details = formattedVideoAmount; - } - } - return details; } } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java index 89398a1e5..c625c3c5c 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelMiniInfoItemHolder.java @@ -1,21 +1,26 @@ package org.schabi.newpipe.info_list.holder; +import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.Nullable; + import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; +import org.schabi.newpipe.extractor.utils.Utils; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.Localization; public class ChannelMiniInfoItemHolder extends InfoItemHolder { - public final ImageView itemThumbnailView; - public final TextView itemTitleView; + private final ImageView itemThumbnailView; + private final TextView itemTitleView; private final TextView itemAdditionalDetailView; + private final TextView itemChannelDescriptionView; ChannelMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, final int layoutId, final ViewGroup parent) { @@ -24,6 +29,7 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder { itemThumbnailView = itemView.findViewById(R.id.itemThumbnailView); itemTitleView = itemView.findViewById(R.id.itemTitleView); itemAdditionalDetailView = itemView.findViewById(R.id.itemAdditionalDetails); + itemChannelDescriptionView = itemView.findViewById(R.id.itemChannelDescriptionView); } public ChannelMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, @@ -40,7 +46,14 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder { final ChannelInfoItem item = (ChannelInfoItem) infoItem; itemTitleView.setText(item.getName()); - itemAdditionalDetailView.setText(getDetailLine(item)); + + final String detailLine = getDetailLine(item); + if (detailLine == null) { + itemAdditionalDetailView.setVisibility(View.GONE); + } else { + itemAdditionalDetailView.setVisibility(View.VISIBLE); + itemAdditionalDetailView.setText(getDetailLine(item)); + } PicassoHelper.loadAvatar(item.getThumbnailUrl()).into(itemThumbnailView); @@ -56,14 +69,35 @@ public class ChannelMiniInfoItemHolder extends InfoItemHolder { } return true; }); + + if (itemChannelDescriptionView != null) { + // itemChannelDescriptionView will be null in the mini variant + if (Utils.isBlank(item.getDescription())) { + itemChannelDescriptionView.setVisibility(View.GONE); + } else { + itemChannelDescriptionView.setVisibility(View.VISIBLE); + itemChannelDescriptionView.setText(item.getDescription()); + itemChannelDescriptionView.setMaxLines(detailLine == null ? 3 : 2); + } + } } - protected String getDetailLine(final ChannelInfoItem item) { - String details = ""; - if (item.getSubscriberCount() >= 0) { - details += Localization.shortSubscriberCount(itemBuilder.getContext(), + @Nullable + private String getDetailLine(final ChannelInfoItem item) { + if (item.getStreamCount() >= 0 && item.getSubscriberCount() >= 0) { + return Localization.concatenateStrings( + Localization.shortSubscriberCount(itemBuilder.getContext(), + item.getSubscriberCount()), + Localization.localizeStreamCount(itemBuilder.getContext(), + item.getStreamCount())); + } else if (item.getStreamCount() >= 0) { + return Localization.localizeStreamCount(itemBuilder.getContext(), + item.getStreamCount()); + } else if (item.getSubscriberCount() >= 0) { + return Localization.shortSubscriberCount(itemBuilder.getContext(), item.getSubscriberCount()); + } else { + return null; } - return details; } } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java index 92e37afd8..799aee8ba 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/CommentsMiniInfoItemHolder.java @@ -1,9 +1,10 @@ package org.schabi.newpipe.info_list.holder; +import android.graphics.Paint; +import android.text.Layout; import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; -import android.text.util.Linkify; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -11,27 +12,36 @@ import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; -import androidx.core.text.util.LinkifyCompat; +import androidx.core.text.HtmlCompat; import org.schabi.newpipe.R; import org.schabi.newpipe.error.ErrorUtil; import org.schabi.newpipe.extractor.InfoItem; +import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.ServiceList; +import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.comments.CommentsInfoItem; +import org.schabi.newpipe.extractor.exceptions.ExtractionException; +import org.schabi.newpipe.extractor.stream.Description; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; -import org.schabi.newpipe.util.CommentTextOnTouchListener; import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.util.external_communication.TimestampExtractor; +import org.schabi.newpipe.util.text.CommentTextOnTouchListener; +import org.schabi.newpipe.util.text.TextLinkifier; -import java.util.Objects; +import java.util.function.Consumer; + +import io.reactivex.rxjava3.disposables.CompositeDisposable; public class CommentsMiniInfoItemHolder extends InfoItemHolder { private static final String TAG = "CommentsMiniIIHolder"; + private static final String ELLIPSIS = "…"; private static final int COMMENT_DEFAULT_LINES = 2; private static final int COMMENT_EXPANDED_LINES = 1000; @@ -39,13 +49,18 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { private final int commentHorizontalPadding; private final int commentVerticalPadding; + private final Paint paintAtContentSize; + private final float ellipsisWidthPx; + private final RelativeLayout itemRoot; private final ImageView itemThumbnailView; private final TextView itemContentView; private final TextView itemLikesCountView; private final TextView itemPublishedTime; - private String commentText; + private final CompositeDisposable disposables = new CompositeDisposable(); + private Description commentText; + private StreamingService streamService; private String streamUrl; CommentsMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, final int layoutId, @@ -62,6 +77,10 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { .getResources().getDimension(R.dimen.comments_horizontal_padding); commentVerticalPadding = (int) infoItemBuilder.getContext() .getResources().getDimension(R.dimen.comments_vertical_padding); + + paintAtContentSize = new Paint(); + paintAtContentSize.setTextSize(itemContentView.getTextSize()); + ellipsisWidthPx = paintAtContentSize.measureText(ELLIPSIS); } public CommentsMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, @@ -91,18 +110,20 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { itemThumbnailView.setOnClickListener(view -> openCommentAuthor(item)); - streamUrl = item.getUrl(); - - itemContentView.setLines(COMMENT_DEFAULT_LINES); - commentText = item.getCommentText(); - itemContentView.setText(commentText, TextView.BufferType.SPANNABLE); - itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE); - - if (itemContentView.getLineCount() == 0) { - itemContentView.post(this::ellipsize); - } else { - ellipsize(); + try { + streamService = NewPipe.getService(item.getServiceId()); + } catch (final ExtractionException e) { + // should never happen + ErrorUtil.showUiErrorSnackbar(itemBuilder.getContext(), "Getting StreamingService", e); + Log.w(TAG, "Cannot obtain service from comment service id, defaulting to YouTube", e); + streamService = ServiceList.YouTube; } + streamUrl = item.getUrl(); + commentText = item.getCommentText(); + ellipsize(); + + //noinspection ClickableViewAccessibility + itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE); if (item.getLikeCount() >= 0) { itemLikesCountView.setText( @@ -132,7 +153,8 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { if (DeviceUtils.isTv(itemBuilder.getContext())) { openCommentAuthor(item); } else { - ShareUtils.copyToClipboard(itemBuilder.getContext(), commentText); + ShareUtils.copyToClipboard(itemBuilder.getContext(), + itemContentView.getText().toString()); } return true; }); @@ -172,7 +194,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { return urls != null && urls.length != 0; } - private void determineLinkFocus() { + private void determineMovementMethod() { if (shouldFocusLinks()) { allowLinkFocus(); } else { @@ -181,63 +203,73 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { } private void ellipsize() { - boolean hasEllipsis = false; + itemContentView.setMaxLines(COMMENT_EXPANDED_LINES); + linkifyCommentContentView(v -> { + boolean hasEllipsis = false; - if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { - final int endOfLastLine = itemContentView - .getLayout() - .getLineEnd(COMMENT_DEFAULT_LINES - 1); - int end = itemContentView.getText().toString().lastIndexOf(' ', endOfLastLine - 2); - if (end == -1) { - end = Math.max(endOfLastLine - 2, 0); + if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { + // Note that converting to String removes spans (i.e. links), but that's something + // we actually want since when the text is ellipsized we want all clicks on the + // comment to expand the comment, not to open links. + final String text = itemContentView.getText().toString(); + + final Layout layout = itemContentView.getLayout(); + final float lineWidth = layout.getLineWidth(COMMENT_DEFAULT_LINES - 1); + final float layoutWidth = layout.getWidth(); + final int lineStart = layout.getLineStart(COMMENT_DEFAULT_LINES - 1); + final int lineEnd = layout.getLineEnd(COMMENT_DEFAULT_LINES - 1); + + // remove characters up until there is enough space for the ellipsis + // (also summing 2 more pixels, just to be sure to avoid float rounding errors) + int end = lineEnd; + float removedCharactersWidth = 0.0f; + while (lineWidth - removedCharactersWidth + ellipsisWidthPx + 2.0f > layoutWidth + && end >= lineStart) { + end -= 1; + // recalculate each time to account for ligatures or other similar things + removedCharactersWidth = paintAtContentSize.measureText( + text.substring(end, lineEnd)); + } + + // remove trailing spaces and newlines + while (end > 0 && Character.isWhitespace(text.charAt(end - 1))) { + end -= 1; + } + + final String newVal = text.substring(0, end) + ELLIPSIS; + itemContentView.setText(newVal); + hasEllipsis = true; } - final String newVal = itemContentView.getText().subSequence(0, end) + " …"; - itemContentView.setText(newVal); - hasEllipsis = true; - } - linkify(); - - if (hasEllipsis) { - denyLinkFocus(); - } else { - determineLinkFocus(); - } + itemContentView.setMaxLines(COMMENT_DEFAULT_LINES); + if (hasEllipsis) { + denyLinkFocus(); + } else { + determineMovementMethod(); + } + }); } private void toggleEllipsize() { - if (itemContentView.getText().toString().equals(commentText)) { - if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { - ellipsize(); - } - } else { + final CharSequence text = itemContentView.getText(); + if (text.charAt(text.length() - 1) == ELLIPSIS.charAt(0)) { expand(); + } else if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { + ellipsize(); } } private void expand() { itemContentView.setMaxLines(COMMENT_EXPANDED_LINES); - itemContentView.setText(commentText); - linkify(); - determineLinkFocus(); + linkifyCommentContentView(v -> determineMovementMethod()); } - private void linkify() { - LinkifyCompat.addLinks(itemContentView, Linkify.WEB_URLS); - LinkifyCompat.addLinks(itemContentView, TimestampExtractor.TIMESTAMPS_PATTERN, null, null, - (match, url) -> { - try { - final var timestampMatch = TimestampExtractor - .getTimestampFromMatcher(match, commentText); - if (timestampMatch == null) { - return url; - } - return streamUrl + url.replace(Objects.requireNonNull(match.group(0)), - "#timestamp=" + timestampMatch.seconds()); - } catch (final Exception ex) { - Log.e(TAG, "Unable to process url='" + url + "' as timestampLink", ex); - return url; - } - }); + private void linkifyCommentContentView(@Nullable final Consumer onCompletion) { + disposables.clear(); + if (commentText != null) { + TextLinkifier.fromDescription(itemContentView, commentText, + HtmlCompat.FROM_HTML_MODE_LEGACY, streamService, streamUrl, disposables, + onCompletion); + } } } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistCardInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistCardInfoItemHolder.java new file mode 100644 index 000000000..f1682b4e4 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/PlaylistCardInfoItemHolder.java @@ -0,0 +1,17 @@ +package org.schabi.newpipe.info_list.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.info_list.InfoItemBuilder; + +/** + * Playlist card layout. + */ +public class PlaylistCardInfoItemHolder extends PlaylistMiniInfoItemHolder { + + public PlaylistCardInfoItemHolder(final InfoItemBuilder infoItemBuilder, + final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_playlist_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamCardInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamCardInfoItemHolder.java new file mode 100644 index 000000000..807bad6e0 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamCardInfoItemHolder.java @@ -0,0 +1,16 @@ +package org.schabi.newpipe.info_list.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.info_list.InfoItemBuilder; + +/** + * Card layout for stream. + */ +public class StreamCardInfoItemHolder extends StreamInfoItemHolder { + + public StreamCardInfoItemHolder(final InfoItemBuilder infoItemBuilder, final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_stream_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java index 8790c3059..53fe1677b 100644 --- a/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/BaseLocalListFragment.java @@ -22,10 +22,11 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.databinding.PignateFooterBinding; import org.schabi.newpipe.fragments.BaseStateFragment; import org.schabi.newpipe.fragments.list.ListViewContract; +import org.schabi.newpipe.info_list.ItemViewMode; import static org.schabi.newpipe.ktx.ViewUtils.animate; import static org.schabi.newpipe.ktx.ViewUtils.animateHideRecyclerViewAllowingScrolling; -import static org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout; +import static org.schabi.newpipe.util.ThemeHelper.getItemViewMode; /** * This fragment is design to be used with persistent data such as @@ -77,16 +78,23 @@ public abstract class BaseLocalListFragment extends BaseStateFragment super.onResume(); if (updateFlags != 0) { if ((updateFlags & LIST_MODE_UPDATE_FLAG) != 0) { - final boolean useGrid = shouldUseGridLayout(requireContext()); - itemsList.setLayoutManager( - useGrid ? getGridLayoutManager() : getListLayoutManager()); - itemListAdapter.setUseGridVariant(useGrid); - itemListAdapter.notifyDataSetChanged(); + refreshItemViewMode(); } updateFlags = 0; } } + /** + * Updates the item view mode based on user preference. + */ + private void refreshItemViewMode() { + final ItemViewMode itemViewMode = getItemViewMode(requireContext()); + itemsList.setLayoutManager((itemViewMode == ItemViewMode.GRID) + ? getGridLayoutManager() : getListLayoutManager()); + itemListAdapter.setItemViewMode(itemViewMode); + itemListAdapter.notifyDataSetChanged(); + } + /*////////////////////////////////////////////////////////////////////////// // Lifecycle - View //////////////////////////////////////////////////////////////////////////*/ @@ -104,8 +112,7 @@ public abstract class BaseLocalListFragment extends BaseStateFragment final Resources resources = activity.getResources(); int width = resources.getDimensionPixelSize(R.dimen.video_item_grid_thumbnail_image_width); width += (24 * resources.getDisplayMetrics().density); - final int spanCount = (int) Math.floor(resources.getDisplayMetrics().widthPixels - / (double) width); + final int spanCount = Math.floorDiv(resources.getDisplayMetrics().widthPixels, width); final GridLayoutManager lm = new GridLayoutManager(activity, spanCount); lm.setSpanSizeLookup(itemListAdapter.getSpanSizeLookup(spanCount)); return lm; @@ -121,11 +128,9 @@ public abstract class BaseLocalListFragment extends BaseStateFragment itemListAdapter = new LocalItemListAdapter(activity); - final boolean useGrid = shouldUseGridLayout(requireContext()); itemsList = rootView.findViewById(R.id.items_list); - itemsList.setLayoutManager(useGrid ? getGridLayoutManager() : getListLayoutManager()); + refreshItemViewMode(); - itemListAdapter.setUseGridVariant(useGrid); headerRootBinding = getListHeader(); if (headerRootBinding != null) { itemListAdapter.setHeader(headerRootBinding.getRoot()); @@ -256,7 +261,7 @@ public abstract class BaseLocalListFragment extends BaseStateFragment @Override public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) { - if (key.equals(getString(R.string.list_view_mode_key))) { + if (getString(R.string.list_view_mode_key).equals(key)) { updateFlags |= LIST_MODE_UPDATE_FLAG; } } diff --git a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java index 05e2fdac0..b9409cb9d 100644 --- a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java @@ -12,14 +12,19 @@ import androidx.recyclerview.widget.RecyclerView; import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.stream.model.StreamStateEntity; +import org.schabi.newpipe.info_list.ItemViewMode; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.holder.LocalItemHolder; +import org.schabi.newpipe.local.holder.LocalPlaylistCardItemHolder; import org.schabi.newpipe.local.holder.LocalPlaylistGridItemHolder; import org.schabi.newpipe.local.holder.LocalPlaylistItemHolder; +import org.schabi.newpipe.local.holder.LocalPlaylistStreamCardItemHolder; import org.schabi.newpipe.local.holder.LocalPlaylistStreamGridItemHolder; import org.schabi.newpipe.local.holder.LocalPlaylistStreamItemHolder; +import org.schabi.newpipe.local.holder.LocalStatisticStreamCardItemHolder; import org.schabi.newpipe.local.holder.LocalStatisticStreamGridItemHolder; import org.schabi.newpipe.local.holder.LocalStatisticStreamItemHolder; +import org.schabi.newpipe.local.holder.RemotePlaylistCardItemHolder; import org.schabi.newpipe.local.holder.RemotePlaylistGridItemHolder; import org.schabi.newpipe.local.holder.RemotePlaylistItemHolder; import org.schabi.newpipe.util.FallbackViewHolder; @@ -61,11 +66,17 @@ public class LocalItemListAdapter extends RecyclerView.Adapter localItems; @@ -73,9 +84,9 @@ public class LocalItemListAdapter extends RecyclerView.Adapter items = new ArrayList<>(); + items.add(rename); + items.add(delete); + if (isThumbnailPermanent) { + items.add(unsetThumbnail); + } + + final DialogInterface.OnClickListener action = (d, index) -> { + if (items.get(index).equals(rename)) { + showRenameDialog(selectedItem); + } else if (items.get(index).equals(delete)) { + showDeleteDialog(selectedItem.name, + localPlaylistManager.deletePlaylist(selectedItem.uid)); + } else if (isThumbnailPermanent && items.get(index).equals(unsetThumbnail)) { + final String thumbnailUrl = localPlaylistManager + .getAutomaticPlaylistThumbnail(selectedItem.uid); + localPlaylistManager + .changePlaylistThumbnail(selectedItem.uid, thumbnailUrl, false) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(); + } + }; + + builder.setItems(items.toArray(new String[0]), action).create().show(); + } + + private void showRenameDialog(final PlaylistMetadataEntry selectedItem) { final DialogEditTextBinding dialogBinding = DialogEditTextBinding.inflate(getLayoutInflater()); dialogBinding.dialogEditText.setHint(R.string.name); @@ -269,11 +306,6 @@ public final class BookmarkFragment extends BaseLocalListFragment { - showDeleteDialog(selectedItem.name, - localPlaylistManager.deletePlaylist(selectedItem.uid)); - dialog.dismiss(); - }) .create() .show(); } diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java index 3d5d16c39..88dec3911 100644 --- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java +++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java @@ -134,7 +134,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog { if (playlist.thumbnailUrl .equals("drawable://" + R.drawable.placeholder_thumbnail_playlist)) { playlistDisposables.add(manager - .changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl()) + .changePlaylistThumbnail(playlist.uid, streams.get(0).getThumbnailUrl(), false) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ignored -> successToast.show())); } diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt index b3442d3dc..2bb2f9986 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedFragment.kt @@ -36,7 +36,6 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.Button -import androidx.annotation.Nullable import androidx.appcompat.app.AlertDialog import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.edit @@ -69,6 +68,7 @@ import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty import org.schabi.newpipe.fragments.BaseStateFragment +import org.schabi.newpipe.info_list.ItemViewMode import org.schabi.newpipe.info_list.dialog.InfoItemDialog import org.schabi.newpipe.ktx.animate import org.schabi.newpipe.ktx.animateHideRecyclerViewAllowingScrolling @@ -80,6 +80,7 @@ import org.schabi.newpipe.util.DeviceUtils import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountStreams +import org.schabi.newpipe.util.ThemeHelper.getItemViewMode import org.schabi.newpipe.util.ThemeHelper.resolveDrawable import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout import java.time.OffsetDateTime @@ -120,7 +121,7 @@ class FeedFragment : BaseStateFragment() { groupName = arguments?.getString(KEY_GROUP_NAME) ?: "" onSettingsChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key -> - if (key.equals(getString(R.string.list_view_mode_key))) { + if (getString(R.string.list_view_mode_key).equals(key)) { updateListViewModeOnResume = true } } @@ -416,11 +417,10 @@ class FeedFragment : BaseStateFragment() { @SuppressLint("StringFormatMatches") private fun handleLoadedState(loadedState: FeedState.LoadedState) { - - val itemVersion = if (shouldUseGridLayout(context)) { - StreamItem.ItemVersion.GRID - } else { - StreamItem.ItemVersion.NORMAL + val itemVersion = when (getItemViewMode(requireContext())) { + ItemViewMode.GRID -> StreamItem.ItemVersion.GRID + ItemViewMode.CARD -> StreamItem.ItemVersion.CARD + else -> StreamItem.ItemVersion.NORMAL } loadedState.items.forEach { it.itemVersion = itemVersion } @@ -499,7 +499,7 @@ class FeedFragment : BaseStateFragment() { private fun handleFeedNotAvailable( subscriptionEntity: SubscriptionEntity, - @Nullable cause: Throwable?, + cause: Throwable?, nextItemsErrors: List ) { val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt b/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt index 96d395aa5..d795dcb08 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/item/StreamItem.kt @@ -42,12 +42,13 @@ data class StreamItem( override fun getId(): Long = stream.uid - enum class ItemVersion { NORMAL, MINI, GRID } + enum class ItemVersion { NORMAL, MINI, GRID, CARD } override fun getLayout(): Int = when (itemVersion) { ItemVersion.NORMAL -> R.layout.list_stream_item ItemVersion.MINI -> R.layout.list_stream_mini_item ItemVersion.GRID -> R.layout.list_stream_grid_item + ItemVersion.CARD -> R.layout.list_stream_card_item } override fun initializeViewBinding(view: View) = ListStreamItemBinding.bind(view) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt index 351975486..61a4936c8 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/notifications/NotificationHelper.kt @@ -1,7 +1,6 @@ package org.schabi.newpipe.local.feed.notifications import android.app.NotificationManager -import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap @@ -20,6 +19,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.local.feed.service.FeedUpdateInfo import org.schabi.newpipe.util.Localization import org.schabi.newpipe.util.NavigationHelper +import org.schabi.newpipe.util.PendingIntentCompat import org.schabi.newpipe.util.PicassoHelper /** @@ -70,16 +70,13 @@ class NotificationHelper(val context: Context) { // open the channel page when clicking on the notification builder.setContentIntent( - PendingIntent.getActivity( + PendingIntentCompat.getActivity( context, data.pseudoId, NavigationHelper .getChannelIntent(context, data.listInfo.serviceId, data.listInfo.url) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - PendingIntent.FLAG_IMMUTABLE - else - 0 + 0 ) ) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt index f2ea40416..0850fef8c 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/service/FeedLoadService.kt @@ -19,7 +19,6 @@ package org.schabi.newpipe.local.feed.service -import android.app.PendingIntent import android.app.Service import android.content.BroadcastReceiver import android.content.Context @@ -43,6 +42,7 @@ import org.schabi.newpipe.extractor.ListInfo import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.local.feed.service.FeedEventManager.Event.ErrorResultEvent import org.schabi.newpipe.local.feed.service.FeedEventManager.postEvent +import org.schabi.newpipe.util.PendingIntentCompat import java.util.concurrent.TimeUnit class FeedLoadService : Service() { @@ -152,12 +152,8 @@ class FeedLoadService : Service() { private lateinit var notificationBuilder: NotificationCompat.Builder private fun createNotification(): NotificationCompat.Builder { - val cancelActionIntent = PendingIntent.getBroadcast( - this, - NOTIFICATION_ID, - Intent(ACTION_CANCEL), - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0 - ) + val cancelActionIntent = + PendingIntentCompat.getBroadcast(this, NOTIFICATION_ID, Intent(ACTION_CANCEL), 0) return NotificationCompat.Builder(this, getString(R.string.notification_channel_id)) .setOngoing(true) diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistCardItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistCardItemHolder.java new file mode 100644 index 000000000..33418ec98 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistCardItemHolder.java @@ -0,0 +1,17 @@ +package org.schabi.newpipe.local.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.local.LocalItemBuilder; + +/** + * Playlist card layout. + */ +public class LocalPlaylistCardItemHolder extends LocalPlaylistItemHolder { + + public LocalPlaylistCardItemHolder(final LocalItemBuilder infoItemBuilder, + final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_playlist_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamCardItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamCardItemHolder.java new file mode 100644 index 000000000..7f81a527f --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamCardItemHolder.java @@ -0,0 +1,17 @@ +package org.schabi.newpipe.local.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.local.LocalItemBuilder; + +/** + * Local playlist stream UI. This also includes a handle to rearrange the videos. + */ +public class LocalPlaylistStreamCardItemHolder extends LocalPlaylistStreamItemHolder { + + public LocalPlaylistStreamCardItemHolder(final LocalItemBuilder infoItemBuilder, + final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_stream_playlist_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamCardItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamCardItemHolder.java new file mode 100644 index 000000000..4e03d5fb1 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamCardItemHolder.java @@ -0,0 +1,13 @@ +package org.schabi.newpipe.local.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.local.LocalItemBuilder; + +public class LocalStatisticStreamCardItemHolder extends LocalStatisticStreamItemHolder { + public LocalStatisticStreamCardItemHolder(final LocalItemBuilder infoItemBuilder, + final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_stream_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistCardItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistCardItemHolder.java new file mode 100644 index 000000000..74a67c3db --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/holder/RemotePlaylistCardItemHolder.java @@ -0,0 +1,17 @@ +package org.schabi.newpipe.local.holder; + +import android.view.ViewGroup; + +import org.schabi.newpipe.R; +import org.schabi.newpipe.local.LocalItemBuilder; + +/** + * Playlist card UI for list item. + */ +public class RemotePlaylistCardItemHolder extends RemotePlaylistItemHolder { + + public RemotePlaylistCardItemHolder(final LocalItemBuilder infoItemBuilder, + final ViewGroup parent) { + super(infoItemBuilder, R.layout.list_playlist_card_item, parent); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java index d98ce4121..68a35e72b 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java @@ -404,7 +404,9 @@ public class LocalPlaylistFragment extends BaseLocalListFragment { // Remove Watched, Functionality data - final List notWatchedItems = new ArrayList<>(); + final List itemsToKeep = new ArrayList<>(); + final boolean isThumbnailPermanent = playlistManager + .getIsPlaylistThumbnailPermanent(playlistId); boolean thumbnailVideoRemoved = false; if (removePartiallyWatched) { @@ -413,8 +415,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment(notWatchedItems, thumbnailVideoRemoved); + return new Pair<>(itemsToKeep, thumbnailVideoRemoved); }); disposables.add(streamsMaybe.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(flow -> { - final List notWatchedItems = flow.first; + final List itemsToKeep = flow.first; final boolean thumbnailVideoRemoved = flow.second; itemListAdapter.clearStreamItemList(); - itemListAdapter.addItems(notWatchedItems); + itemListAdapter.addItems(itemsToKeep); saveChanges(); if (thumbnailVideoRemoved) { @@ -585,8 +587,9 @@ public class LocalPlaylistFragment extends BaseLocalListFragment successToast.show(), throwable -> showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK, @@ -609,6 +612,10 @@ public class LocalPlaylistFragment extends BaseLocalListFragment - changeThumbnailUrl(item.getStreamEntity().getThumbnailUrl())) + changeThumbnailUrl(item.getStreamEntity().getThumbnailUrl(), + true)) .setAction( StreamDialogDefaultEntry.DELETE, (f, i) -> deleteItem(item)) diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java index 33296aa84..4007d0e09 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java @@ -2,6 +2,7 @@ package org.schabi.newpipe.local.playlist; import androidx.annotation.Nullable; +import org.schabi.newpipe.R; import org.schabi.newpipe.database.AppDatabase; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; @@ -41,7 +42,7 @@ public class LocalPlaylistManager { } final StreamEntity defaultStream = streams.get(0); final PlaylistEntity newPlaylist = - new PlaylistEntity(name, defaultStream.getThumbnailUrl()); + new PlaylistEntity(name, defaultStream.getThumbnailUrl(), false); return Maybe.fromCallable(() -> database.runInTransaction(() -> upsertStreams(playlistTable.insert(newPlaylist), streams, 0)) @@ -96,21 +97,33 @@ public class LocalPlaylistManager { } public Maybe renamePlaylist(final long playlistId, final String name) { - return modifyPlaylist(playlistId, name, null); + return modifyPlaylist(playlistId, name, null, false); } public Maybe changePlaylistThumbnail(final long playlistId, - final String thumbnailUrl) { - return modifyPlaylist(playlistId, null, thumbnailUrl); + final String thumbnailUrl, + final boolean isPermanent) { + return modifyPlaylist(playlistId, null, thumbnailUrl, isPermanent); } public String getPlaylistThumbnail(final long playlistId) { return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getThumbnailUrl(); } + public boolean getIsPlaylistThumbnailPermanent(final long playlistId) { + return playlistTable.getPlaylist(playlistId).blockingFirst().get(0) + .getIsThumbnailPermanent(); + } + + public String getAutomaticPlaylistThumbnail(final long playlistId) { + final String def = "drawable://" + R.drawable.placeholder_thumbnail_playlist; + return playlistStreamTable.getAutomaticThumbnailUrl(playlistId, def).blockingFirst(); + } + private Maybe modifyPlaylist(final long playlistId, @Nullable final String name, - @Nullable final String thumbnailUrl) { + @Nullable final String thumbnailUrl, + final boolean isPermanent) { return playlistTable.getPlaylist(playlistId) .firstElement() .filter(playlistEntities -> !playlistEntities.isEmpty()) @@ -121,6 +134,7 @@ public class LocalPlaylistManager { } if (thumbnailUrl != null) { playlist.setThumbnailUrl(thumbnailUrl); + playlist.setIsThumbnailPermanent(isPermanent); } return playlistTable.update(playlist); }).subscribeOn(Schedulers.io()); diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/FeedGroupIcon.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/FeedGroupIcon.kt index ac7197b48..1fa70e4d8 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/FeedGroupIcon.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/FeedGroupIcon.kt @@ -51,7 +51,8 @@ enum class FeedGroupIcon( WORLD(34, R.drawable.ic_public), STAR(35, R.drawable.ic_stars), SUN(36, R.drawable.ic_wb_sunny), - RSS(37, R.drawable.ic_rss_feed); + RSS(37, R.drawable.ic_rss_feed), + WHATS_NEW(38, R.drawable.ic_subscriptions); @DrawableRes fun getDrawableRes(): Int { diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt index 72cd3cf7c..7146a18d6 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt @@ -41,7 +41,6 @@ import org.schabi.newpipe.local.subscription.SubscriptionViewModel.SubscriptionS import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialog import org.schabi.newpipe.local.subscription.dialog.FeedGroupReorderDialog import org.schabi.newpipe.local.subscription.item.ChannelItem -import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem import org.schabi.newpipe.local.subscription.item.FeedGroupAddNewGridItem import org.schabi.newpipe.local.subscription.item.FeedGroupAddNewItem import org.schabi.newpipe.local.subscription.item.FeedGroupCardGridItem @@ -49,6 +48,7 @@ import org.schabi.newpipe.local.subscription.item.FeedGroupCardItem import org.schabi.newpipe.local.subscription.item.FeedGroupCarouselItem import org.schabi.newpipe.local.subscription.item.GroupsHeader import org.schabi.newpipe.local.subscription.item.Header +import org.schabi.newpipe.local.subscription.item.ImportSubscriptionsHintPlaceholderItem import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_MODE @@ -312,7 +312,7 @@ class SubscriptionFragment : BaseStateFragment() { groupAdapter.add(this) } - subscriptionsSection.setPlaceholder(EmptyPlaceholderItem()) + subscriptionsSection.setPlaceholder(ImportSubscriptionsHintPlaceholderItem()) subscriptionsSection.setHideWhenEmpty(true) groupAdapter.add( @@ -433,10 +433,10 @@ class SubscriptionFragment : BaseStateFragment() { clear() if (listViewMode) { add(FeedGroupAddNewItem()) - add(FeedGroupCardItem(GROUP_ALL_ID, getString(R.string.all), FeedGroupIcon.RSS)) + add(FeedGroupCardItem(GROUP_ALL_ID, getString(R.string.all), FeedGroupIcon.WHATS_NEW)) } else { add(FeedGroupAddNewGridItem()) - add(FeedGroupCardGridItem(GROUP_ALL_ID, getString(R.string.all), FeedGroupIcon.RSS)) + add(FeedGroupCardGridItem(GROUP_ALL_ID, getString(R.string.all), FeedGroupIcon.WHATS_NEW)) } addAll(groups) } diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt index 4b3c4ccc0..19c581c08 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/dialog/FeedGroupDialog.kt @@ -35,7 +35,7 @@ import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialog.ScreenState. import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialog.ScreenState.SubscriptionsPickerScreen import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.DialogEvent.ProcessingEvent import org.schabi.newpipe.local.subscription.dialog.FeedGroupDialogViewModel.DialogEvent.SuccessEvent -import org.schabi.newpipe.local.subscription.item.EmptyPlaceholderItem +import org.schabi.newpipe.local.subscription.item.ImportSubscriptionsHintPlaceholderItem import org.schabi.newpipe.local.subscription.item.PickerIconItem import org.schabi.newpipe.local.subscription.item.PickerSubscriptionItem import org.schabi.newpipe.util.DeviceUtils @@ -338,7 +338,7 @@ class FeedGroupDialog : DialogFragment(), BackPressable { if (subscriptions.isEmpty()) { subscriptionEmptyFooter.clear() - subscriptionEmptyFooter.add(EmptyPlaceholderItem()) + subscriptionEmptyFooter.add(ImportSubscriptionsHintPlaceholderItem()) } else { subscriptionEmptyFooter.clear() } diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/item/EmptyPlaceholderItem.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/item/ImportSubscriptionsHintPlaceholderItem.kt similarity index 63% rename from app/src/main/java/org/schabi/newpipe/local/subscription/item/EmptyPlaceholderItem.kt rename to app/src/main/java/org/schabi/newpipe/local/subscription/item/ImportSubscriptionsHintPlaceholderItem.kt index 59bef55cf..93b551895 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/item/EmptyPlaceholderItem.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/item/ImportSubscriptionsHintPlaceholderItem.kt @@ -5,8 +5,11 @@ import com.xwray.groupie.viewbinding.BindableItem import org.schabi.newpipe.R import org.schabi.newpipe.databinding.ListEmptyViewBinding -class EmptyPlaceholderItem : BindableItem() { - override fun getLayout(): Int = R.layout.list_empty_view +/** + * When there are no subscriptions, show a hint to the user about how to import subscriptions + */ +class ImportSubscriptionsHintPlaceholderItem : BindableItem() { + override fun getLayout(): Int = R.layout.list_empty_view_subscriptions override fun bind(viewBinding: ListEmptyViewBinding, position: Int) {} override fun getSpanSize(spanCount: Int, position: Int): Int = spanCount override fun initializeViewBinding(view: View) = ListEmptyViewBinding.bind(view) diff --git a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java index 94de7fef3..9ce99c15b 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java +++ b/app/src/main/java/org/schabi/newpipe/player/PlayQueueActivity.java @@ -143,11 +143,9 @@ public final class PlayQueueActivity extends AppCompatActivity NavigationHelper.playOnMainPlayer(this, player.getPlayQueue(), true); return true; case R.id.action_switch_popup: - if (PermissionHelper.isPopupEnabled(this)) { + if (PermissionHelper.isPopupEnabledElseAsk(this)) { this.player.setRecovery(); NavigationHelper.playOnPopupPlayer(this, player.getPlayQueue(), true); - } else { - PermissionHelper.showPopupEnablementToast(this); } return true; case R.id.action_switch_background: diff --git a/app/src/main/java/org/schabi/newpipe/player/Player.java b/app/src/main/java/org/schabi/newpipe/player/Player.java index 99d36f66e..c90f251b8 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -216,7 +216,6 @@ public final class Player implements PlaybackListener, Listener { // minimized to background but will resume automatically to the original player type private boolean isAudioOnly = false; private boolean isPrepared = false; - private boolean wasPlaying = false; /*////////////////////////////////////////////////////////////////////////// // UIs, listeners and disposables @@ -349,7 +348,7 @@ public final class Player implements PlaybackListener, Listener { final boolean playbackSkipSilence = getPrefs().getBoolean(getContext().getString( R.string.playback_skip_silence_key), getPlaybackSkipSilence()); - final boolean samePlayQueue = playQueue != null && playQueue.equals(newQueue); + final boolean samePlayQueue = playQueue != null && playQueue.equalStreamsAndIndex(newQueue); final int repeatMode = intent.getIntExtra(REPEAT_MODE, getRepeatMode()); final boolean playWhenReady = intent.getBooleanExtra(PLAY_WHEN_READY, true); final boolean isMuted = intent.getBooleanExtra(IS_MUTED, isMuted()); @@ -918,13 +917,6 @@ public final class Player implements PlaybackListener, Listener { error -> Log.e(TAG, "Progress update failure: ", error)); } - public void saveWasPlaying() { - this.wasPlaying = getPlayWhenReady(); - } - - public boolean wasPlaying() { - return wasPlaying; - } //endregion @@ -1703,26 +1695,25 @@ public final class Player implements PlaybackListener, Listener { } private void saveStreamProgressState(final long progressMillis) { - //noinspection SimplifyOptionalCallChains - if (!getCurrentStreamInfo().isPresent() - || !prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true)) { - return; - } - if (DEBUG) { - Log.d(TAG, "saveStreamProgressState() called with: progressMillis=" + progressMillis - + ", currentMetadata=[" + getCurrentStreamInfo().get().getName() + "]"); - } + getCurrentStreamInfo().ifPresent(info -> { + if (!prefs.getBoolean(context.getString(R.string.enable_watch_history_key), true)) { + return; + } + if (DEBUG) { + Log.d(TAG, "saveStreamProgressState() called with: progressMillis=" + progressMillis + + ", currentMetadata=[" + info.getName() + "]"); + } - databaseUpdateDisposable - .add(recordManager.saveStreamState(getCurrentStreamInfo().get(), progressMillis) - .observeOn(AndroidSchedulers.mainThread()) - .doOnError(e -> { - if (DEBUG) { - e.printStackTrace(); - } - }) - .onErrorComplete() - .subscribe()); + databaseUpdateDisposable.add(recordManager.saveStreamState(info, progressMillis) + .observeOn(AndroidSchedulers.mainThread()) + .doOnError(e -> { + if (DEBUG) { + e.printStackTrace(); + } + }) + .onErrorComplete() + .subscribe()); + }); } public void saveStreamProgressState() { @@ -1884,23 +1875,16 @@ public final class Player implements PlaybackListener, Listener { loadController.disablePreloadingOfCurrentTrack(); } - @Nullable - public VideoStream getSelectedVideoStream() { - @Nullable final MediaItemTag.Quality quality = Optional.ofNullable(currentMetadata) + public Optional getSelectedVideoStream() { + return Optional.ofNullable(currentMetadata) .flatMap(MediaItemTag::getMaybeQuality) - .orElse(null); - if (quality == null) { - return null; - } - - final List availableStreams = quality.getSortedVideoStreams(); - final int selectedStreamIndex = quality.getSelectedVideoStreamIndex(); - - if (selectedStreamIndex >= 0 && availableStreams.size() > selectedStreamIndex) { - return availableStreams.get(selectedStreamIndex); - } else { - return null; - } + .filter(quality -> { + final int selectedStreamIndex = quality.getSelectedVideoStreamIndex(); + return selectedStreamIndex >= 0 + && selectedStreamIndex < quality.getSortedVideoStreams().size(); + }) + .map(quality -> quality.getSortedVideoStreams() + .get(quality.getSelectedVideoStreamIndex())); } //endregion @@ -2044,40 +2028,36 @@ public final class Player implements PlaybackListener, Listener { // in livestreams) so we will be not able to execute the block below. // Reload the play queue manager in this case, which is the behavior when we don't know the // index of the video renderer or playQueueManagerReloadingNeeded returns true. - final Optional optCurrentStreamInfo = getCurrentStreamInfo(); - if (!optCurrentStreamInfo.isPresent()) { - reloadPlayQueueManager(); - setRecovery(); - return; - } + getCurrentStreamInfo().ifPresentOrElse(info -> { + // In the case we don't know the source type, fallback to the one with video with audio + // or audio-only source. + final SourceType sourceType = videoResolver.getStreamSourceType() + .orElse(SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); - final StreamInfo info = optCurrentStreamInfo.get(); + if (playQueueManagerReloadingNeeded(sourceType, info, getVideoRendererIndex())) { + reloadPlayQueueManager(); + } else { + if (StreamTypeUtil.isAudio(info.getStreamType())) { + // Nothing to do more than setting the recovery position + setRecovery(); + return; + } - // In the case we don't know the source type, fallback to the one with video with audio or - // audio-only source. - final SourceType sourceType = videoResolver.getStreamSourceType().orElse( - SourceType.VIDEO_WITH_AUDIO_OR_AUDIO_ONLY); + final var parametersBuilder = trackSelector.buildUponParameters(); - if (playQueueManagerReloadingNeeded(sourceType, info, getVideoRendererIndex())) { - reloadPlayQueueManager(); - } else { - if (StreamTypeUtil.isAudio(info.getStreamType())) { - // Nothing to do more than setting the recovery position - setRecovery(); - return; + // Enable/disable the video track and the ability to select subtitles + parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled); + parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, !videoEnabled); + + trackSelector.setParameters(parametersBuilder); } - final DefaultTrackSelector.Parameters.Builder parametersBuilder = - trackSelector.buildUponParameters(); - - // Enable/disable the video track and the ability to select subtitles - parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_TEXT, !videoEnabled); - parametersBuilder.setTrackTypeDisabled(C.TRACK_TYPE_VIDEO, !videoEnabled); - - trackSelector.setParameters(parametersBuilder); - } - - setRecovery(); + setRecovery(); + }, () -> { + // This is executed when the current stream info is not available. + reloadPlayQueueManager(); + setRecovery(); + }); } /** diff --git a/app/src/main/java/org/schabi/newpipe/player/PlayerService.java b/app/src/main/java/org/schabi/newpipe/player/PlayerService.java index 33b024e3d..d81301205 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PlayerService.java +++ b/app/src/main/java/org/schabi/newpipe/player/PlayerService.java @@ -86,8 +86,6 @@ public final class PlayerService extends Service { } if (!player.exoPlayerIsNull()) { - player.saveWasPlaying(); - // Releases wifi & cpu, disables keepScreenOn, etc. // We can't just pause the player here because it will make transition // from one stream to a new stream not smooth diff --git a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt index 555c34f96..0453f297a 100644 --- a/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt +++ b/app/src/main/java/org/schabi/newpipe/player/gesture/BasePlayerGestureListener.kt @@ -6,6 +6,7 @@ import android.util.Log import android.view.GestureDetector import android.view.MotionEvent import android.view.View +import androidx.core.os.postDelayed import org.schabi.newpipe.databinding.PlayerBinding import org.schabi.newpipe.player.Player import org.schabi.newpipe.player.ui.VideoPlayerUi @@ -132,13 +133,6 @@ abstract class BasePlayerGestureListener( private var doubleTapDelay = DOUBLE_TAP_DELAY private val doubleTapHandler: Handler = Handler(Looper.getMainLooper()) - private val doubleTapRunnable = Runnable { - if (DEBUG) - Log.d(TAG, "doubleTapRunnable called") - - isDoubleTapping = false - doubleTapControls?.onDoubleTapFinished() - } private fun startMultiDoubleTap(e: MotionEvent) { if (!isDoubleTapping) { @@ -155,8 +149,15 @@ abstract class BasePlayerGestureListener( Log.d(TAG, "keepInDoubleTapMode called") isDoubleTapping = true - doubleTapHandler.removeCallbacks(doubleTapRunnable) - doubleTapHandler.postDelayed(doubleTapRunnable, doubleTapDelay) + doubleTapHandler.removeCallbacksAndMessages(DOUBLE_TAP) + doubleTapHandler.postDelayed(DOUBLE_TAP_DELAY, DOUBLE_TAP) { + if (DEBUG) { + Log.d(TAG, "doubleTapRunnable called") + } + + isDoubleTapping = false + doubleTapControls?.onDoubleTapFinished() + } } fun endMultiDoubleTap() { @@ -164,7 +165,7 @@ abstract class BasePlayerGestureListener( Log.d(TAG, "endMultiDoubleTap called") isDoubleTapping = false - doubleTapHandler.removeCallbacks(doubleTapRunnable) + doubleTapHandler.removeCallbacksAndMessages(DOUBLE_TAP) doubleTapControls?.onDoubleTapFinished() } @@ -181,6 +182,7 @@ abstract class BasePlayerGestureListener( private const val TAG = "BasePlayerGestListener" private val DEBUG = Player.DEBUG + private const val DOUBLE_TAP = "doubleTap" private const val DOUBLE_TAP_DELAY = 550L } } diff --git a/app/src/main/java/org/schabi/newpipe/player/gesture/PopupPlayerGestureListener.kt b/app/src/main/java/org/schabi/newpipe/player/gesture/PopupPlayerGestureListener.kt index 666ea6a46..a540c0ab0 100644 --- a/app/src/main/java/org/schabi/newpipe/player/gesture/PopupPlayerGestureListener.kt +++ b/app/src/main/java/org/schabi/newpipe/player/gesture/PopupPlayerGestureListener.kt @@ -160,15 +160,15 @@ class PopupPlayerGestureListener( } } - override fun onLongPress(e: MotionEvent?) { + override fun onLongPress(e: MotionEvent) { playerUi.updateScreenSize() playerUi.checkPopupPositionBounds() playerUi.changePopupSize(playerUi.screenWidth) } override fun onFling( - e1: MotionEvent?, - e2: MotionEvent?, + e1: MotionEvent, + e2: MotionEvent, velocityX: Float, velocityY: Float ): Boolean { diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java index 5eaecd48d..b55a6547a 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHolder.java @@ -92,6 +92,13 @@ public final class PlayerHolder { return player.getPlayQueue().size(); } + public int getQueuePosition() { + if (player == null || player.getPlayQueue() == null) { + return 0; + } + return player.getPlayQueue().getIndex(); + } + public void setListener(@Nullable final PlayerServiceExtendedEventListener newListener) { listener = newListener; diff --git a/app/src/main/java/org/schabi/newpipe/player/mediaitem/MediaItemTag.java b/app/src/main/java/org/schabi/newpipe/player/mediaitem/MediaItemTag.java index d23dd4574..f08086287 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediaitem/MediaItemTag.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediaitem/MediaItemTag.java @@ -61,12 +61,11 @@ public interface MediaItemTag { @NonNull static Optional from(@Nullable final MediaItem mediaItem) { - if (mediaItem == null || mediaItem.localConfiguration == null - || !(mediaItem.localConfiguration.tag instanceof MediaItemTag)) { - return Optional.empty(); - } - - return Optional.of((MediaItemTag) mediaItem.localConfiguration.tag); + return Optional.ofNullable(mediaItem) + .map(item -> item.localConfiguration) + .map(localConfiguration -> localConfiguration.tag) + .filter(MediaItemTag.class::isInstance) + .map(MediaItemTag.class::cast); } @NonNull diff --git a/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java b/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java index 3488ec61e..6e50dda7d 100644 --- a/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java +++ b/app/src/main/java/org/schabi/newpipe/player/notification/NotificationUtil.java @@ -1,7 +1,6 @@ package org.schabi.newpipe.player.notification; import android.annotation.SuppressLint; -import android.app.PendingIntent; import android.content.Intent; import android.content.pm.ServiceInfo; import android.graphics.Bitmap; @@ -22,6 +21,7 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.player.Player; import org.schabi.newpipe.player.mediasession.MediaSessionPlayerUi; import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.PendingIntentCompat; import java.util.List; import java.util.Objects; @@ -133,8 +133,8 @@ public final class NotificationUtil { R.color.dark_background_color)) .setColorized(player.getPrefs().getBoolean( player.getContext().getString(R.string.notification_colorize_key), true)) - .setDeleteIntent(PendingIntent.getBroadcast(player.getContext(), NOTIFICATION_ID, - new Intent(ACTION_CLOSE), FLAG_UPDATE_CURRENT)); + .setDeleteIntent(PendingIntentCompat.getBroadcast(player.getContext(), + NOTIFICATION_ID, new Intent(ACTION_CLOSE), FLAG_UPDATE_CURRENT)); // set the initial value for the video thumbnail, updatable with updateNotificationThumbnail setLargeIcon(builder); @@ -151,7 +151,7 @@ public final class NotificationUtil { } // also update content intent, in case the user switched players - notificationBuilder.setContentIntent(PendingIntent.getActivity(player.getContext(), + notificationBuilder.setContentIntent(PendingIntentCompat.getActivity(player.getContext(), NOTIFICATION_ID, getIntentForNotification(), FLAG_UPDATE_CURRENT)); notificationBuilder.setContentTitle(player.getVideoTitle()); notificationBuilder.setContentText(player.getUploaderName()); @@ -334,7 +334,7 @@ public final class NotificationUtil { @StringRes final int title, final String intentAction) { return new NotificationCompat.Action(drawable, player.getContext().getString(title), - PendingIntent.getBroadcast(player.getContext(), NOTIFICATION_ID, + PendingIntentCompat.getBroadcast(player.getContext(), NOTIFICATION_ID, new Intent(intentAction), FLAG_UPDATE_CURRENT)); } diff --git a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java index 9b13bb3d7..88d7145bc 100644 --- a/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java +++ b/app/src/main/java/org/schabi/newpipe/player/playback/MediaSourceManager.java @@ -7,8 +7,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.collection.ArraySet; -import com.google.android.exoplayer2.source.MediaSource; - import org.reactivestreams.Subscriber; import org.reactivestreams.Subscription; import org.schabi.newpipe.extractor.exceptions.ExtractionException; @@ -23,10 +21,10 @@ import org.schabi.newpipe.player.playqueue.events.MoveEvent; import org.schabi.newpipe.player.playqueue.events.PlayQueueEvent; import org.schabi.newpipe.player.playqueue.events.RemoveEvent; import org.schabi.newpipe.player.playqueue.events.ReorderEvent; -import org.schabi.newpipe.util.ServiceHelper; import java.util.Collection; import java.util.Collections; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -43,6 +41,7 @@ import io.reactivex.rxjava3.subjects.PublishSubject; import static org.schabi.newpipe.player.mediasource.FailedMediaSource.MediaSourceResolutionException; import static org.schabi.newpipe.player.mediasource.FailedMediaSource.StreamInfoLoadException; import static org.schabi.newpipe.player.playqueue.PlayQueue.DEBUG; +import static org.schabi.newpipe.util.ServiceHelper.getCacheExpirationMillis; public class MediaSourceManager { @NonNull @@ -421,31 +420,39 @@ public class MediaSourceManager { } private Single getLoadedMediaSource(@NonNull final PlayQueueItem stream) { - return stream.getStream().map(streamInfo -> { - final MediaSource source = playbackListener.sourceOf(stream, streamInfo); - if (source == null || !MediaItemTag.from(source.getMediaItem()).isPresent()) { - final String message = "Unable to resolve source from stream info. " - + "URL: " + stream.getUrl() + ", " - + "audio count: " + streamInfo.getAudioStreams().size() + ", " - + "video count: " + streamInfo.getVideoOnlyStreams().size() + ", " - + streamInfo.getVideoStreams().size(); - return (ManagedMediaSource) - FailedMediaSource.of(stream, new MediaSourceResolutionException(message)); - } - - final MediaItemTag tag = MediaItemTag.from(source.getMediaItem()).get(); - final long expiration = System.currentTimeMillis() - + ServiceHelper.getCacheExpirationMillis(streamInfo.getServiceId()); - return new LoadedMediaSource(source, tag, stream, expiration); - }).onErrorReturn(throwable -> { - if (throwable instanceof ExtractionException) { - return FailedMediaSource.of(stream, new StreamInfoLoadException(throwable)); - } - // Non-source related error expected here (e.g. network), - // should allow retry shortly after the error. - return FailedMediaSource.of(stream, new Exception(throwable), - /*allowRetryIn=*/TimeUnit.MILLISECONDS.convert(3, TimeUnit.SECONDS)); - }); + return stream.getStream() + .map(streamInfo -> Optional + .ofNullable(playbackListener.sourceOf(stream, streamInfo)) + .flatMap(source -> + MediaItemTag.from(source.getMediaItem()) + .map(tag -> { + final int serviceId = streamInfo.getServiceId(); + final long expiration = System.currentTimeMillis() + + getCacheExpirationMillis(serviceId); + return new LoadedMediaSource(source, tag, stream, + expiration); + }) + ) + .orElseGet(() -> { + final String message = "Unable to resolve source from stream info. " + + "URL: " + stream.getUrl() + + ", audio count: " + streamInfo.getAudioStreams().size() + + ", video count: " + streamInfo.getVideoOnlyStreams().size() + + ", " + streamInfo.getVideoStreams().size(); + return FailedMediaSource.of(stream, + new MediaSourceResolutionException(message)); + }) + ) + .onErrorReturn(throwable -> { + if (throwable instanceof ExtractionException) { + return FailedMediaSource.of(stream, new StreamInfoLoadException(throwable)); + } + // Non-source related error expected here (e.g. network), + // should allow retry shortly after the error. + final long allowRetryIn = TimeUnit.MILLISECONDS.convert(3, + TimeUnit.SECONDS); + return FailedMediaSource.of(stream, new Exception(throwable), allowRetryIn); + }); } private void onMediaSourceReceived(@NonNull final PlayQueueItem item, diff --git a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueue.java b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueue.java index edf5a771c..4c6230964 100644 --- a/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueue.java +++ b/app/src/main/java/org/schabi/newpipe/player/playqueue/PlayQueue.java @@ -518,12 +518,10 @@ public abstract class PlayQueue implements Serializable { * This method also gives a chance to track history of items in a queue in * VideoDetailFragment without duplicating items from two identical queues */ - @Override - public boolean equals(@Nullable final Object obj) { - if (!(obj instanceof PlayQueue)) { + public boolean equalStreams(@Nullable final PlayQueue other) { + if (other == null) { return false; } - final PlayQueue other = (PlayQueue) obj; if (size() != other.size()) { return false; } @@ -539,9 +537,11 @@ public abstract class PlayQueue implements Serializable { return true; } - @Override - public int hashCode() { - return streams.hashCode(); + public boolean equalStreamsAndIndex(@Nullable final PlayQueue other) { + if (equalStreams(other)) { + return other.getIndex() == getIndex(); + } + return false; } public boolean isDisposed() { diff --git a/app/src/main/java/org/schabi/newpipe/player/resolver/AudioPlaybackResolver.java b/app/src/main/java/org/schabi/newpipe/player/resolver/AudioPlaybackResolver.java index 934beba19..e87c93114 100644 --- a/app/src/main/java/org/schabi/newpipe/player/resolver/AudioPlaybackResolver.java +++ b/app/src/main/java/org/schabi/newpipe/player/resolver/AudioPlaybackResolver.java @@ -11,7 +11,9 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.source.MediaSource; import org.schabi.newpipe.extractor.stream.AudioStream; +import org.schabi.newpipe.extractor.stream.Stream; import org.schabi.newpipe.extractor.stream.StreamInfo; +import org.schabi.newpipe.extractor.stream.VideoStream; import org.schabi.newpipe.player.helper.PlayerDataSource; import org.schabi.newpipe.player.mediaitem.MediaItemTag; import org.schabi.newpipe.player.mediaitem.StreamInfoTag; @@ -41,22 +43,50 @@ public class AudioPlaybackResolver implements PlaybackResolver { return liveSource; } - final List audioStreams = getNonTorrentStreams(info.getAudioStreams()); - - final int index = ListHelper.getDefaultAudioFormat(context, audioStreams); - if (index < 0 || index >= info.getAudioStreams().size()) { + final Stream stream = getAudioSource(info); + if (stream == null) { return null; } - final AudioStream audio = info.getAudioStreams().get(index); final MediaItemTag tag = StreamInfoTag.of(info); try { return PlaybackResolver.buildMediaSource( - dataSource, audio, info, PlaybackResolver.cacheKeyOf(info, audio), tag); + dataSource, stream, info, PlaybackResolver.cacheKeyOf(info, stream), tag); } catch (final ResolverException e) { Log.e(TAG, "Unable to create audio source", e); return null; } } + + /** + * Get a stream to be played as audio. If a service has no separate {@link AudioStream}s we + * use a video stream as audio source to support audio background playback. + * + * @param info of the stream + * @return the audio source to use or null if none could be found + */ + @Nullable + private Stream getAudioSource(@NonNull final StreamInfo info) { + final List audioStreams = getNonTorrentStreams(info.getAudioStreams()); + if (!audioStreams.isEmpty()) { + final int index = ListHelper.getDefaultAudioFormat(context, audioStreams); + return getStreamForIndex(index, audioStreams); + } else { + final List videoStreams = getNonTorrentStreams(info.getVideoStreams()); + if (!videoStreams.isEmpty()) { + final int index = ListHelper.getDefaultResolutionIndex(context, videoStreams); + return getStreamForIndex(index, videoStreams); + } + } + return null; + } + + @Nullable + Stream getStreamForIndex(final int index, @NonNull final List streams) { + if (index >= 0 && index < streams.size()) { + return streams.get(index); + } + return null; + } } diff --git a/app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java b/app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java index ead127250..9c8cbb8f6 100644 --- a/app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java +++ b/app/src/main/java/org/schabi/newpipe/player/resolver/PlaybackResolver.java @@ -158,6 +158,26 @@ public interface PlaybackResolver extends Resolver { return cacheKey.toString(); } + + /** + * Use common base type {@link Stream} to handle {@link AudioStream} or {@link VideoStream} + * transparently. For more info see {@link #cacheKeyOf(StreamInfo, AudioStream)} or + * {@link #cacheKeyOf(StreamInfo, VideoStream)}. + * + * @param info the {@link StreamInfo stream info}, to distinguish between streams with + * the same features but coming from different stream infos + * @param stream the {@link Stream} ({@link AudioStream} or {@link VideoStream}) + * for which the cache key should be created + * @return a key to be used to store the cache of the provided {@link Stream} + */ + static String cacheKeyOf(final StreamInfo info, final Stream stream) { + if (stream instanceof AudioStream) { + return cacheKeyOf(info, (AudioStream) stream); + } else if (stream instanceof VideoStream) { + return cacheKeyOf(info, (VideoStream) stream); + } + throw new RuntimeException("no audio or video stream. That should never happen"); + } //endregion diff --git a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHelper.java b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHelper.java index 43d89055c..28856d606 100644 --- a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHelper.java @@ -8,6 +8,8 @@ import android.widget.ImageView; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.BitmapCompat; import androidx.core.math.MathUtils; import androidx.preference.PreferenceManager; @@ -15,7 +17,6 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.util.DeviceUtils; import java.lang.annotation.Retention; -import java.util.Optional; import java.util.function.IntSupplier; import static java.lang.annotation.RetentionPolicy.SOURCE; @@ -65,21 +66,19 @@ public final class SeekbarPreviewThumbnailHelper { public static void tryResizeAndSetSeekbarPreviewThumbnail( @NonNull final Context context, - @NonNull final Optional optPreviewThumbnail, + @Nullable final Bitmap previewThumbnail, @NonNull final ImageView currentSeekbarPreviewThumbnail, @NonNull final IntSupplier baseViewWidthSupplier) { - - if (!optPreviewThumbnail.isPresent()) { + if (previewThumbnail == null) { currentSeekbarPreviewThumbnail.setVisibility(View.GONE); return; } currentSeekbarPreviewThumbnail.setVisibility(View.VISIBLE); - final Bitmap srcBitmap = optPreviewThumbnail.get(); // Resize original bitmap try { - final int srcWidth = srcBitmap.getWidth() > 0 ? srcBitmap.getWidth() : 1; + final int srcWidth = previewThumbnail.getWidth() > 0 ? previewThumbnail.getWidth() : 1; final int newWidth = MathUtils.clamp( // Use 1/4 of the width for the preview Math.round(baseViewWidthSupplier.getAsInt() / 4f), @@ -89,15 +88,15 @@ public final class SeekbarPreviewThumbnailHelper { Math.round(srcWidth * 2.5f)); final float scaleFactor = (float) newWidth / srcWidth; - final int newHeight = (int) (srcBitmap.getHeight() * scaleFactor); + final int newHeight = (int) (previewThumbnail.getHeight() * scaleFactor); - currentSeekbarPreviewThumbnail.setImageBitmap( - Bitmap.createScaledBitmap(srcBitmap, newWidth, newHeight, true)); + currentSeekbarPreviewThumbnail.setImageBitmap(BitmapCompat + .createScaledBitmap(previewThumbnail, newWidth, newHeight, null, true)); } catch (final Exception ex) { Log.e(TAG, "Failed to resize and set seekbar preview thumbnail", ex); currentSeekbarPreviewThumbnail.setVisibility(View.GONE); } finally { - srcBitmap.recycle(); + previewThumbnail.recycle(); } } } diff --git a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java index 08c6366c8..50ffa2f2a 100644 --- a/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java +++ b/app/src/main/java/org/schabi/newpipe/player/seekbarpreview/SeekbarPreviewThumbnailHolder.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.player.seekbarpreview; import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.SeekbarPreviewThumbnailType; +import static org.schabi.newpipe.player.seekbarpreview.SeekbarPreviewThumbnailHelper.getSeekbarPreviewThumbnailType; import android.content.Context; import android.graphics.Bitmap; @@ -8,6 +9,7 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.collection.SparseArrayCompat; import com.google.common.base.Stopwatch; @@ -15,12 +17,9 @@ import org.schabi.newpipe.extractor.stream.Frameset; import org.schabi.newpipe.util.PicassoHelper; import java.util.Comparator; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Supplier; @@ -34,18 +33,15 @@ public class SeekbarPreviewThumbnailHolder { // Key = Position of the picture in milliseconds // Supplier = Supplies the bitmap for that position - private final Map> seekbarPreviewData = new ConcurrentHashMap<>(); + private final SparseArrayCompat> seekbarPreviewData = + new SparseArrayCompat<>(); // This ensures that if the reset is still undergoing // and another reset starts, only the last reset is processed private UUID currentUpdateRequestIdentifier = UUID.randomUUID(); - public synchronized void resetFrom( - @NonNull final Context context, - final List framesets) { - - final int seekbarPreviewType = - SeekbarPreviewThumbnailHelper.getSeekbarPreviewThumbnailType(context); + public void resetFrom(@NonNull final Context context, final List framesets) { + final int seekbarPreviewType = getSeekbarPreviewThumbnailType(context); final UUID updateRequestIdentifier = UUID.randomUUID(); this.currentUpdateRequestIdentifier = updateRequestIdentifier; @@ -63,13 +59,12 @@ public class SeekbarPreviewThumbnailHolder { executorService.shutdown(); } - private void resetFromAsync( - final int seekbarPreviewType, - final List framesets, - final UUID updateRequestIdentifier) { - + private void resetFromAsync(final int seekbarPreviewType, final List framesets, + final UUID updateRequestIdentifier) { Log.d(TAG, "Clearing seekbarPreviewData"); - seekbarPreviewData.clear(); + synchronized (seekbarPreviewData) { + seekbarPreviewData.clear(); + } if (seekbarPreviewType == SeekbarPreviewThumbnailType.NONE) { Log.d(TAG, "Not processing seekbarPreviewData due to settings"); @@ -94,10 +89,8 @@ public class SeekbarPreviewThumbnailHolder { generateDataFrom(frameset, updateRequestIdentifier); } - private Frameset getFrameSetForType( - final List framesets, - final int seekbarPreviewType) { - + private Frameset getFrameSetForType(final List framesets, + final int seekbarPreviewType) { if (seekbarPreviewType == SeekbarPreviewThumbnailType.HIGH_QUALITY) { Log.d(TAG, "Strategy for seekbarPreviewData: high quality"); return framesets.stream() @@ -111,17 +104,14 @@ public class SeekbarPreviewThumbnailHolder { } } - private void generateDataFrom( - final Frameset frameset, - final UUID updateRequestIdentifier) { - + private void generateDataFrom(final Frameset frameset, final UUID updateRequestIdentifier) { Log.d(TAG, "Starting generation of seekbarPreviewData"); final Stopwatch sw = Log.isLoggable(TAG, Log.DEBUG) ? Stopwatch.createStarted() : null; int currentPosMs = 0; int pos = 1; - final int frameCountPerUrl = frameset.getFramesPerPageX() * frameset.getFramesPerPageY(); + final int urlFrameCount = frameset.getFramesPerPageX() * frameset.getFramesPerPageY(); // Process each url in the frameset for (final String url : frameset.getUrls()) { @@ -130,11 +120,11 @@ public class SeekbarPreviewThumbnailHolder { // The data is not added directly to "seekbarPreviewData" due to // concurrency and checks for "updateRequestIdentifier" - final Map> generatedDataForUrl = new HashMap<>(); + final var generatedDataForUrl = new SparseArrayCompat>(urlFrameCount); // The bitmap consists of several images, which we process here // foreach frame in the returned bitmap - for (int i = 0; i < frameCountPerUrl; i++) { + for (int i = 0; i < urlFrameCount; i++) { // Frames outside the video length are skipped if (pos > frameset.getTotalCount()) { break; @@ -161,7 +151,9 @@ public class SeekbarPreviewThumbnailHolder { // Check if we are still the latest request // If not abort method execution if (isRequestIdentifierCurrent(updateRequestIdentifier)) { - seekbarPreviewData.putAll(generatedDataForUrl); + synchronized (seekbarPreviewData) { + seekbarPreviewData.putAll(generatedDataForUrl); + } } else { Log.d(TAG, "Aborted of generation of seekbarPreviewData"); break; @@ -169,7 +161,7 @@ public class SeekbarPreviewThumbnailHolder { } if (sw != null) { - Log.d(TAG, "Generation of seekbarPreviewData took " + sw.stop().toString()); + Log.d(TAG, "Generation of seekbarPreviewData took " + sw.stop()); } } @@ -189,17 +181,14 @@ public class SeekbarPreviewThumbnailHolder { final Bitmap bitmap = PicassoHelper.loadSeekbarThumbnailPreview(url).get(); if (sw != null) { - Log.d(TAG, - "Download of bitmap for seekbarPreview from '" + url - + "' took " + sw.stop().toString()); + Log.d(TAG, "Download of bitmap for seekbarPreview from '" + url + "' took " + + sw.stop()); } return bitmap; } catch (final Exception ex) { - Log.w(TAG, - "Failed to get bitmap for seekbarPreview from url='" + url - + "' in time", - ex); + Log.w(TAG, "Failed to get bitmap for seekbarPreview from url='" + url + + "' in time", ex); return null; } } @@ -208,32 +197,20 @@ public class SeekbarPreviewThumbnailHolder { return this.currentUpdateRequestIdentifier.equals(requestIdentifier); } - public Optional getBitmapAt(final int positionInMs) { - // Check if the BitmapData is empty - if (seekbarPreviewData.isEmpty()) { - return Optional.empty(); + // Get the frame supplier closest to the requested position + Supplier closestFrame = () -> null; + synchronized (seekbarPreviewData) { + int min = Integer.MAX_VALUE; + for (int i = 0; i < seekbarPreviewData.size(); i++) { + final int pos = Math.abs(seekbarPreviewData.keyAt(i) - positionInMs); + if (pos < min) { + closestFrame = seekbarPreviewData.valueAt(i); + min = pos; + } + } } - // Get the closest frame to the requested position - final int closestIndexPosition = - seekbarPreviewData.keySet().stream() - .min(Comparator.comparingInt(i -> Math.abs(i - positionInMs))) - .orElse(-1); - - // this should never happen, because - // it indicates that "seekbarPreviewData" is empty which was already checked - if (closestIndexPosition == -1) { - return Optional.empty(); - } - - try { - // Get the bitmap for the position (executes the supplier) - return Optional.ofNullable(seekbarPreviewData.get(closestIndexPosition).get()); - } catch (final Exception ex) { - // If there is an error, log it and return Optional.empty - Log.w(TAG, "Unable to get seekbar preview", ex); - return Optional.empty(); - } + return Optional.ofNullable(closestFrame.get()); } } diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java index 248104738..a5c745ae6 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/MainPlayerUi.java @@ -32,7 +32,6 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; -import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.LinearLayout; @@ -40,6 +39,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.content.res.AppCompatResources; +import androidx.core.view.WindowCompat; +import androidx.core.view.WindowInsetsCompat; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; @@ -74,6 +75,7 @@ import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.external_communication.KoreUtils; import org.schabi.newpipe.util.external_communication.ShareUtils; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -154,6 +156,16 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh protected void initListeners() { super.initListeners(); + binding.screenRotationButton.setOnClickListener(makeOnClickListener(() -> { + // Only if it's not a vertical video or vertical video but in landscape with locked + // orientation a screen orientation can be changed automatically + if (!isVerticalVideo || (isLandscape() && globalScreenOrientationLocked(context))) { + player.getFragmentListener() + .ifPresent(PlayerServiceEventListener::onScreenRotationButtonClicked); + } else { + toggleFullscreen(); + } + })); binding.queueButton.setOnClickListener(v -> onQueueClicked()); binding.segmentsButton.setOnClickListener(v -> onSegmentsClicked()); @@ -173,6 +185,14 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh settingsContentObserver); binding.getRoot().addOnLayoutChangeListener(this); + + binding.moreOptionsButton.setOnLongClickListener(v -> { + player.getFragmentListener() + .ifPresent(PlayerServiceEventListener::onMoreOptionsLongClicked); + hideControls(0, 0); + hideSystemUIIfNeeded(); + return true; + }); } @Override @@ -433,11 +453,9 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh getParentActivity().map(Activity::getWindow).ifPresent(window -> { window.setStatusBarColor(Color.TRANSPARENT); window.setNavigationBarColor(Color.TRANSPARENT); - final int visibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - window.getDecorView().setSystemUiVisibility(visibility); - window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + WindowCompat.setDecorFitsSystemWindows(window, false); + WindowCompat.getInsetsController(window, window.getDecorView()) + .show(WindowInsetsCompat.Type.systemBars()); }); } } @@ -728,15 +746,10 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh } private int getNearestStreamSegmentPosition(final long playbackPosition) { - //noinspection SimplifyOptionalCallChains - if (!player.getCurrentStreamInfo().isPresent()) { - return 0; - } - int nearestPosition = 0; final List segments = player.getCurrentStreamInfo() - .get() - .getStreamSegments(); + .map(StreamInfo::getStreamSegments) + .orElse(Collections.emptyList()); for (int i = 0; i < segments.size(); i++) { if (segments.get(i).getStartTimeSeconds() * 1000L > playbackPosition) { @@ -846,45 +859,13 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh //////////////////////////////////////////////////////////////////////////*/ //region Click listeners - @Override - public void onClick(final View v) { - if (v.getId() == binding.screenRotationButton.getId()) { - // Only if it's not a vertical video or vertical video but in landscape with locked - // orientation a screen orientation can be changed automatically - if (!isVerticalVideo || (isLandscape() && globalScreenOrientationLocked(context))) { - player.getFragmentListener().ifPresent( - PlayerServiceEventListener::onScreenRotationButtonClicked); - } else { - toggleFullscreen(); - } - } - - // call it later since it calls manageControlsAfterOnClick at the end - super.onClick(v); - } - @Override protected void onPlaybackSpeedClicked() { - final AppCompatActivity activity = getParentActivity().orElse(null); - if (activity == null) { - return; - } - - PlaybackParameterDialog.newInstance(player.getPlaybackSpeed(), player.getPlaybackPitch(), - player.getPlaybackSkipSilence(), player::setPlaybackParameters) - .show(activity.getSupportFragmentManager(), null); - } - - @Override - public boolean onLongClick(final View v) { - if (v.getId() == binding.moreOptionsButton.getId() && isFullscreen) { - player.getFragmentListener().ifPresent( - PlayerServiceEventListener::onMoreOptionsLongClicked); - hideControls(0, 0); - hideSystemUIIfNeeded(); - return true; - } - return super.onLongClick(v); + getParentActivity().ifPresent(activity -> + PlaybackParameterDialog.newInstance(player.getPlaybackSpeed(), + player.getPlaybackPitch(), player.getPlaybackSkipSilence(), + player::setPlaybackParameters) + .show(activity.getSupportFragmentManager(), null)); } @Override @@ -984,22 +965,22 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh //////////////////////////////////////////////////////////////////////////*/ //region Getters + private Optional getParentContext() { + return Optional.ofNullable(binding.getRoot().getParent()) + .filter(ViewGroup.class::isInstance) + .map(parent -> ((ViewGroup) parent).getContext()); + } + public Optional getParentActivity() { - final ViewParent rootParent = binding.getRoot().getParent(); - if (rootParent instanceof ViewGroup) { - final Context activity = ((ViewGroup) rootParent).getContext(); - if (activity instanceof AppCompatActivity) { - return Optional.of((AppCompatActivity) activity); - } - } - return Optional.empty(); + return getParentContext() + .filter(AppCompatActivity.class::isInstance) + .map(AppCompatActivity.class::cast); } public boolean isLandscape() { // DisplayMetrics from activity context knows about MultiWindow feature // while DisplayMetrics from app context doesn't - return DeviceUtils.isLandscape( - getParentActivity().map(Context.class::cast).orElse(player.getService())); + return DeviceUtils.isLandscape(getParentContext().orElse(player.getService())); } //endregion } diff --git a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java index 1709755f2..e4f5b05e1 100644 --- a/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/ui/VideoPlayerUi.java @@ -42,6 +42,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.widget.PopupMenu; +import androidx.core.graphics.BitmapCompat; import androidx.core.graphics.Insets; import androidx.core.math.MathUtils; import androidx.core.view.ViewCompat; @@ -83,11 +84,11 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; import org.schabi.newpipe.views.player.PlayerFastSeekOverlay; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; -public abstract class VideoPlayerUi extends PlayerUi - implements SeekBar.OnSeekBarChangeListener, View.OnClickListener, View.OnLongClickListener, +public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBarChangeListener, PopupMenu.OnMenuItemClickListener, PopupMenu.OnDismissListener { private static final String TAG = VideoPlayerUi.class.getSimpleName(); @@ -131,9 +132,11 @@ public abstract class VideoPlayerUi extends PlayerUi private GestureDetector gestureDetector; private BasePlayerGestureListener playerGestureListener; - @Nullable private View.OnLayoutChangeListener onLayoutChangeListener = null; + @Nullable + private View.OnLayoutChangeListener onLayoutChangeListener = null; - @NonNull private final SeekbarPreviewThumbnailHolder seekbarPreviewThumbnailHolder = + @NonNull + private final SeekbarPreviewThumbnailHolder seekbarPreviewThumbnailHolder = new SeekbarPreviewThumbnailHolder(); @@ -186,13 +189,13 @@ public abstract class VideoPlayerUi extends PlayerUi abstract BasePlayerGestureListener buildGestureListener(); protected void initListeners() { - binding.qualityTextView.setOnClickListener(this); - binding.playbackSpeed.setOnClickListener(this); + binding.qualityTextView.setOnClickListener(makeOnClickListener(this::onQualityClicked)); + binding.playbackSpeed.setOnClickListener(makeOnClickListener(this::onPlaybackSpeedClicked)); binding.playbackSeekBar.setOnSeekBarChangeListener(this); - binding.captionTextView.setOnClickListener(this); - binding.resizeTextView.setOnClickListener(this); - binding.playbackLiveSync.setOnClickListener(this); + binding.captionTextView.setOnClickListener(makeOnClickListener(this::onCaptionClicked)); + binding.resizeTextView.setOnClickListener(makeOnClickListener(this::onResizeClicked)); + binding.playbackLiveSync.setOnClickListener(makeOnClickListener(player::seekToDefault)); playerGestureListener = buildGestureListener(); gestureDetector = new GestureDetector(context, playerGestureListener); @@ -201,20 +204,36 @@ public abstract class VideoPlayerUi extends PlayerUi binding.repeatButton.setOnClickListener(v -> onRepeatClicked()); binding.shuffleButton.setOnClickListener(v -> onShuffleClicked()); - binding.playPauseButton.setOnClickListener(this); - binding.playPreviousButton.setOnClickListener(this); - binding.playNextButton.setOnClickListener(this); + binding.playPauseButton.setOnClickListener(makeOnClickListener(player::playPause)); + binding.playPreviousButton.setOnClickListener(makeOnClickListener(player::playPrevious)); + binding.playNextButton.setOnClickListener(makeOnClickListener(player::playNext)); - binding.moreOptionsButton.setOnClickListener(this); - binding.moreOptionsButton.setOnLongClickListener(this); - binding.share.setOnClickListener(this); - binding.share.setOnLongClickListener(this); - binding.fullScreenButton.setOnClickListener(this); - binding.screenRotationButton.setOnClickListener(this); - binding.playWithKodi.setOnClickListener(this); - binding.openInBrowser.setOnClickListener(this); - binding.playerCloseButton.setOnClickListener(this); - binding.switchMute.setOnClickListener(this); + binding.moreOptionsButton.setOnClickListener( + makeOnClickListener(this::onMoreOptionsClicked)); + binding.share.setOnClickListener(makeOnClickListener(() -> { + final PlayQueueItem currentItem = player.getCurrentItem(); + if (currentItem != null) { + ShareUtils.shareText(context, currentItem.getTitle(), + player.getVideoUrlAtCurrentTime(), currentItem.getThumbnailUrl()); + } + })); + binding.share.setOnLongClickListener(v -> { + ShareUtils.copyToClipboard(context, player.getVideoUrlAtCurrentTime()); + return true; + }); + binding.fullScreenButton.setOnClickListener(makeOnClickListener(() -> { + player.setRecovery(); + NavigationHelper.playOnMainPlayer(context, + Objects.requireNonNull(player.getPlayQueue()), true); + })); + binding.playWithKodi.setOnClickListener(makeOnClickListener(this::onPlayWithKodiClicked)); + binding.openInBrowser.setOnClickListener(makeOnClickListener(this::onOpenInBrowserClicked)); + binding.playerCloseButton.setOnClickListener(makeOnClickListener(() -> + // set package to this app's package to prevent the intent from being seen outside + context.sendBroadcast(new Intent(VideoDetailFragment.ACTION_HIDE_MAIN_PLAYER) + .setPackage(App.PACKAGE_NAME)) + )); + binding.switchMute.setOnClickListener(makeOnClickListener(player::toggleMute)); ViewCompat.setOnApplyWindowInsetsListener(binding.itemsListPanel, (view, windowInsets) -> { final Insets cutout = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()); @@ -228,11 +247,8 @@ public abstract class VideoPlayerUi extends PlayerUi // player_overlays and fast_seek_overlay too. Without it they will be off-centered. onLayoutChangeListener = (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { - binding.playerOverlays.setPadding( - v.getPaddingLeft(), - v.getPaddingTop(), - v.getPaddingRight(), - v.getPaddingBottom()); + binding.playerOverlays.setPadding(v.getPaddingLeft(), v.getPaddingTop(), + v.getPaddingRight(), v.getPaddingBottom()); // If we added padding to the fast seek overlay, too, it would not go under the // system ui. Instead we apply negative margins equal to the window insets of @@ -455,10 +471,11 @@ public abstract class VideoPlayerUi extends PlayerUi } final float endScreenHeight = calculateMaxEndScreenThumbnailHeight(thumbnail); - final Bitmap endScreenBitmap = Bitmap.createScaledBitmap( + final Bitmap endScreenBitmap = BitmapCompat.createScaledBitmap( thumbnail, (int) (thumbnail.getWidth() / (thumbnail.getHeight() / endScreenHeight)), (int) endScreenHeight, + null, true); if (DEBUG) { @@ -549,7 +566,7 @@ public abstract class VideoPlayerUi extends PlayerUi SeekbarPreviewThumbnailHelper .tryResizeAndSetSeekbarPreviewThumbnail( player.getContext(), - seekbarPreviewThumbnailHolder.getBitmapAt(progress), + seekbarPreviewThumbnailHolder.getBitmapAt(progress).orElse(null), binding.currentSeekbarPreviewThumbnail, binding.subtitleView::getWidth); @@ -601,11 +618,6 @@ public abstract class VideoPlayerUi extends PlayerUi player.changeState(STATE_PAUSED_SEEK); } - player.saveWasPlaying(); - if (player.isPlaying()) { - player.getExoPlayer().pause(); - } - showControls(0); animate(binding.currentDisplaySeek, true, DEFAULT_CONTROLS_DURATION, AnimationType.SCALE_AND_ALPHA); @@ -620,7 +632,7 @@ public abstract class VideoPlayerUi extends PlayerUi } player.seekTo(seekBar.getProgress()); - if (player.wasPlaying() || player.getExoPlayer().getDuration() == seekBar.getProgress()) { + if (player.getExoPlayer().getDuration() == seekBar.getProgress()) { player.getExoPlayer().play(); } @@ -634,9 +646,8 @@ public abstract class VideoPlayerUi extends PlayerUi if (!player.isProgressLoopRunning()) { player.startProgressLoop(); } - if (player.wasPlaying()) { - showControlsThenHide(); - } + + showControlsThenHide(); } //endregion @@ -971,61 +982,56 @@ public abstract class VideoPlayerUi extends PlayerUi } private void updateStreamRelatedViews() { - //noinspection SimplifyOptionalCallChains - if (!player.getCurrentStreamInfo().isPresent()) { - return; - } - final StreamInfo info = player.getCurrentStreamInfo().get(); + player.getCurrentStreamInfo().ifPresent(info -> { + binding.qualityTextView.setVisibility(View.GONE); + binding.playbackSpeed.setVisibility(View.GONE); - binding.qualityTextView.setVisibility(View.GONE); - binding.playbackSpeed.setVisibility(View.GONE); + binding.playbackEndTime.setVisibility(View.GONE); + binding.playbackLiveSync.setVisibility(View.GONE); - binding.playbackEndTime.setVisibility(View.GONE); - binding.playbackLiveSync.setVisibility(View.GONE); - - switch (info.getStreamType()) { - case AUDIO_STREAM: - case POST_LIVE_AUDIO_STREAM: - binding.surfaceView.setVisibility(View.GONE); - binding.endScreen.setVisibility(View.VISIBLE); - binding.playbackEndTime.setVisibility(View.VISIBLE); - break; - - case AUDIO_LIVE_STREAM: - binding.surfaceView.setVisibility(View.GONE); - binding.endScreen.setVisibility(View.VISIBLE); - binding.playbackLiveSync.setVisibility(View.VISIBLE); - break; - - case LIVE_STREAM: - binding.surfaceView.setVisibility(View.VISIBLE); - binding.endScreen.setVisibility(View.GONE); - binding.playbackLiveSync.setVisibility(View.VISIBLE); - break; - - case VIDEO_STREAM: - case POST_LIVE_STREAM: - //noinspection SimplifyOptionalCallChains - if (player.getCurrentMetadata() != null - && !player.getCurrentMetadata().getMaybeQuality().isPresent() - || (info.getVideoStreams().isEmpty() - && info.getVideoOnlyStreams().isEmpty())) { + switch (info.getStreamType()) { + case AUDIO_STREAM: + case POST_LIVE_AUDIO_STREAM: + binding.surfaceView.setVisibility(View.GONE); + binding.endScreen.setVisibility(View.VISIBLE); + binding.playbackEndTime.setVisibility(View.VISIBLE); break; - } - buildQualityMenu(); + case AUDIO_LIVE_STREAM: + binding.surfaceView.setVisibility(View.GONE); + binding.endScreen.setVisibility(View.VISIBLE); + binding.playbackLiveSync.setVisibility(View.VISIBLE); + break; - binding.qualityTextView.setVisibility(View.VISIBLE); - binding.surfaceView.setVisibility(View.VISIBLE); - // fallthrough - default: - binding.endScreen.setVisibility(View.GONE); - binding.playbackEndTime.setVisibility(View.VISIBLE); - break; - } + case LIVE_STREAM: + binding.surfaceView.setVisibility(View.VISIBLE); + binding.endScreen.setVisibility(View.GONE); + binding.playbackLiveSync.setVisibility(View.VISIBLE); + break; - buildPlaybackSpeedMenu(); - binding.playbackSpeed.setVisibility(View.VISIBLE); + case VIDEO_STREAM: + case POST_LIVE_STREAM: + if (player.getCurrentMetadata() != null + && player.getCurrentMetadata().getMaybeQuality().isEmpty() + || (info.getVideoStreams().isEmpty() + && info.getVideoOnlyStreams().isEmpty())) { + break; + } + + buildQualityMenu(); + + binding.qualityTextView.setVisibility(View.VISIBLE); + binding.surfaceView.setVisibility(View.VISIBLE); + // fallthrough + default: + binding.endScreen.setVisibility(View.GONE); + binding.playbackEndTime.setVisibility(View.VISIBLE); + break; + } + + buildPlaybackSpeedMenu(); + binding.playbackSpeed.setVisibility(View.VISIBLE); + }); } //endregion @@ -1054,12 +1060,11 @@ public abstract class VideoPlayerUi extends PlayerUi qualityPopupMenu.getMenu().add(POPUP_MENU_ID_QUALITY, i, Menu.NONE, MediaFormat .getNameById(videoStream.getFormatId()) + " " + videoStream.getResolution()); } - final VideoStream selectedVideoStream = player.getSelectedVideoStream(); - if (selectedVideoStream != null) { - binding.qualityTextView.setText(selectedVideoStream.getResolution()); - } qualityPopupMenu.setOnMenuItemClickListener(this); qualityPopupMenu.setOnDismissListener(this); + + player.getSelectedVideoStream() + .ifPresent(s -> binding.qualityTextView.setText(s.getResolution())); } private void buildPlaybackSpeedMenu() { @@ -1165,14 +1170,9 @@ public abstract class VideoPlayerUi extends PlayerUi qualityPopupMenu.show(); isSomePopupMenuVisible = true; - final VideoStream videoStream = player.getSelectedVideoStream(); - if (videoStream != null) { - //noinspection SetTextI18n - binding.qualityTextView.setText(MediaFormat.getNameById(videoStream.getFormatId()) - + " " + videoStream.getResolution()); - } - - player.saveWasPlaying(); + player.getSelectedVideoStream() + .map(s -> MediaFormat.getNameById(s.getFormatId()) + " " + s.getResolution()) + .ifPresent(binding.qualityTextView::setText); } /** @@ -1189,8 +1189,7 @@ public abstract class VideoPlayerUi extends PlayerUi if (menuItem.getGroupId() == POPUP_MENU_ID_QUALITY) { final int menuItemIndex = menuItem.getItemId(); @Nullable final MediaItemTag currentMetadata = player.getCurrentMetadata(); - //noinspection SimplifyOptionalCallChains - if (currentMetadata == null || !currentMetadata.getMaybeQuality().isPresent()) { + if (currentMetadata == null || currentMetadata.getMaybeQuality().isEmpty()) { return true; } @@ -1229,10 +1228,9 @@ public abstract class VideoPlayerUi extends PlayerUi Log.d(TAG, "onDismiss() called with: menu = [" + menu + "]"); } isSomePopupMenuVisible = false; //TODO check if this works - final VideoStream selectedVideoStream = player.getSelectedVideoStream(); - if (selectedVideoStream != null) { - binding.qualityTextView.setText(selectedVideoStream.getResolution()); - } + player.getSelectedVideoStream() + .ifPresent(s -> binding.qualityTextView.setText(s.getResolution())); + if (player.isPlaying()) { hideControls(DEFAULT_CONTROLS_DURATION, 0); hideSystemUIIfNeeded(); @@ -1291,9 +1289,8 @@ public abstract class VideoPlayerUi extends PlayerUi // Build UI buildCaptionMenu(availableLanguages); - //noinspection SimplifyOptionalCallChains if (player.getTrackSelector().getParameters().getRendererDisabled( - player.getCaptionRendererIndex()) || !selectedTracks.isPresent()) { + player.getCaptionRendererIndex()) || selectedTracks.isEmpty()) { binding.captionTextView.setText(R.string.caption_none); } else { binding.captionTextView.setText(selectedTracks.get().language); @@ -1324,86 +1321,39 @@ public abstract class VideoPlayerUi extends PlayerUi //////////////////////////////////////////////////////////////////////////*/ //region Click listeners - @Override - public void onClick(final View v) { - if (DEBUG) { - Log.d(TAG, "onClick() called with: v = [" + v + "]"); - } - if (v.getId() == binding.resizeTextView.getId()) { - onResizeClicked(); - } else if (v.getId() == binding.captionTextView.getId()) { - onCaptionClicked(); - } else if (v.getId() == binding.playbackLiveSync.getId()) { - player.seekToDefault(); - } else if (v.getId() == binding.playPauseButton.getId()) { - player.playPause(); - } else if (v.getId() == binding.playPreviousButton.getId()) { - player.playPrevious(); - } else if (v.getId() == binding.playNextButton.getId()) { - player.playNext(); - } else if (v.getId() == binding.moreOptionsButton.getId()) { - onMoreOptionsClicked(); - } else if (v.getId() == binding.share.getId()) { - final PlayQueueItem currentItem = player.getCurrentItem(); - if (currentItem != null) { - ShareUtils.shareText(context, currentItem.getTitle(), - player.getVideoUrlAtCurrentTime(), currentItem.getThumbnailUrl()); - } - } else if (v.getId() == binding.playWithKodi.getId()) { - onPlayWithKodiClicked(); - } else if (v.getId() == binding.openInBrowser.getId()) { - onOpenInBrowserClicked(); - } else if (v.getId() == binding.fullScreenButton.getId()) { - player.setRecovery(); - NavigationHelper.playOnMainPlayer(context, player.getPlayQueue(), true); - return; - } else if (v.getId() == binding.switchMute.getId()) { - player.toggleMute(); - } else if (v.getId() == binding.playerCloseButton.getId()) { - // set package to this app's package to prevent the intent from being seen outside - context.sendBroadcast(new Intent(VideoDetailFragment.ACTION_HIDE_MAIN_PLAYER) - .setPackage(App.PACKAGE_NAME)); - } else if (v.getId() == binding.playbackSpeed.getId()) { - onPlaybackSpeedClicked(); - } else if (v.getId() == binding.qualityTextView.getId()) { - onQualityClicked(); - } - - manageControlsAfterOnClick(v); - } - /** - * Manages the controls after a click occurred on the player UI. - * @param v – The view that was clicked + * Create on-click listener which manages the player controls after the view on-click action. + * + * @param runnable The action to be executed. + * @return The view click listener. */ - public void manageControlsAfterOnClick(@NonNull final View v) { - if (player.getCurrentState() == STATE_COMPLETED) { - return; - } + protected View.OnClickListener makeOnClickListener(@NonNull final Runnable runnable) { + return v -> { + if (DEBUG) { + Log.d(TAG, "onClick() called with: v = [" + v + "]"); + } - controlsVisibilityHandler.removeCallbacksAndMessages(null); - showHideShadow(true, DEFAULT_CONTROLS_DURATION); - animate(binding.playbackControlRoot, true, DEFAULT_CONTROLS_DURATION, - AnimationType.ALPHA, 0, () -> { - if (player.getCurrentState() == STATE_PLAYING && !isSomePopupMenuVisible) { - if (v.getId() == binding.playPauseButton.getId() - // Hide controls in fullscreen immediately - || (v.getId() == binding.screenRotationButton.getId() - && isFullscreen())) { - hideControls(0, 0); - } else { - hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME); + runnable.run(); + + // Manages the player controls after handling the view click. + if (player.getCurrentState() == STATE_COMPLETED) { + return; + } + controlsVisibilityHandler.removeCallbacksAndMessages(null); + showHideShadow(true, DEFAULT_CONTROLS_DURATION); + animate(binding.playbackControlRoot, true, DEFAULT_CONTROLS_DURATION, + AnimationType.ALPHA, 0, () -> { + if (player.getCurrentState() == STATE_PLAYING && !isSomePopupMenuVisible) { + if (v == binding.playPauseButton + // Hide controls in fullscreen immediately + || (v == binding.screenRotationButton && isFullscreen())) { + hideControls(0, 0); + } else { + hideControls(DEFAULT_CONTROLS_DURATION, DEFAULT_CONTROLS_HIDE_TIME); + } } - } - }); - } - - @Override - public boolean onLongClick(final View v) { - if (v.getId() == binding.share.getId()) { - ShareUtils.copyToClipboard(context, player.getVideoUrlAtCurrentTime()); - } - return true; + }); + }; } public boolean onKeyDown(final int keyCode) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java index 550d64d06..ef0e8670c 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/AppearanceSettingsFragment.java @@ -44,7 +44,13 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment { return false; }); } else { - removePreference(nightThemeKey); + // disable the night theme selection + final Preference preference = findPreference(nightThemeKey); + if (preference != null) { + preference.setEnabled(false); + preference.setSummary(getString(R.string.night_theme_available, + getString(R.string.auto_device_theme_title))); + } } } @@ -61,13 +67,6 @@ public class AppearanceSettingsFragment extends BasePreferenceFragment { return super.onPreferenceTreeClick(preference); } - private void removePreference(final String preferenceKey) { - final Preference preference = findPreference(preferenceKey); - if (preference != null) { - getPreferenceScreen().removePreference(preference); - } - } - private void applyThemeChange(final String beginningThemeKey, final String themeKey, final Object newValue) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java index 5a4300cdd..782b7b906 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java @@ -1,5 +1,6 @@ package org.schabi.newpipe.settings; +import static org.schabi.newpipe.extractor.utils.Utils.decodeUrlUtf8; import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage; import android.app.Activity; @@ -31,8 +32,6 @@ import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; public class DownloadSettingsFragment extends BasePreferenceFragment { public static final boolean IGNORE_RELEASE_ON_OLD_PATH = true; @@ -125,7 +124,7 @@ public class DownloadSettingsFragment extends BasePreferenceFragment { } try { - rawUri = URLDecoder.decode(rawUri, StandardCharsets.UTF_8.name()); + rawUri = decodeUrlUtf8(rawUri); } catch (final UnsupportedEncodingException e) { // nothing to do } diff --git a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java index f1f63ffdf..d1a379e66 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/UpdateSettingsFragment.java @@ -16,25 +16,17 @@ public class UpdateSettingsFragment extends BasePreferenceFragment { .apply(); if (checkForUpdates) { - checkNewVersionNow(); + NewVersionWorker.enqueueNewVersionCheckingWork(requireContext(), true); } return true; }; private final Preference.OnPreferenceClickListener manualUpdateClick = preference -> { Toast.makeText(getContext(), R.string.checking_updates_toast, Toast.LENGTH_SHORT).show(); - checkNewVersionNow(); + NewVersionWorker.enqueueNewVersionCheckingWork(requireContext(), true); return true; }; - private void checkNewVersionNow() { - // Search for updates immediately when update checks are enabled. - // Reset the expire time. This is necessary to check for an update immediately. - defaultPreferences.edit() - .putLong(getString(R.string.update_expiry_key), 0).apply(); - NewVersionWorker.enqueueNewVersionCheckingWork(getContext()); - } - @Override public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) { addPreferencesFromResourceRegistry(); diff --git a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java index 039f00c1d..aae9cfca5 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/VideoAudioSettingsFragment.java @@ -27,14 +27,14 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { updateSeekOptions(); - listener = (sharedPreferences, s) -> { + listener = (sharedPreferences, key) -> { // on M and above, if user chooses to minimise to popup player on exit // and the app doesn't have display over other apps permission, // show a snackbar to let the user give permission if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M - && s.equals(getString(R.string.minimize_on_exit_key))) { - final String newSetting = sharedPreferences.getString(s, null); + && getString(R.string.minimize_on_exit_key).equals(key)) { + final String newSetting = sharedPreferences.getString(key, null); if (newSetting != null && newSetting.equals(getString(R.string.minimize_on_exit_popup_key)) && !Settings.canDrawOverlays(getContext())) { @@ -46,7 +46,7 @@ public class VideoAudioSettingsFragment extends BasePreferenceFragment { .show(); } - } else if (s.equals(getString(R.string.use_inexact_seek_key))) { + } else if (getString(R.string.use_inexact_seek_key).equals(key)) { updateSeekOptions(); } }; diff --git a/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigAdapter.kt b/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigAdapter.kt index 6ae264bb5..f61aa72ab 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigAdapter.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigAdapter.kt @@ -1,15 +1,13 @@ package org.schabi.newpipe.settings.notifications import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup -import android.widget.CheckedTextView -import androidx.recyclerview.widget.AsyncListDiffer import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView -import org.schabi.newpipe.R import org.schabi.newpipe.database.subscription.NotificationMode import org.schabi.newpipe.database.subscription.SubscriptionEntity +import org.schabi.newpipe.databinding.ItemNotificationConfigBinding import org.schabi.newpipe.settings.notifications.NotificationModeConfigAdapter.SubscriptionHolder /** @@ -19,85 +17,46 @@ import org.schabi.newpipe.settings.notifications.NotificationModeConfigAdapter.S */ class NotificationModeConfigAdapter( private val listener: ModeToggleListener -) : RecyclerView.Adapter() { - - private val differ = AsyncListDiffer(this, DiffCallback()) - - init { - setHasStableIds(true) - } - - override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): SubscriptionHolder { - val view = LayoutInflater.from(viewGroup.context) - .inflate(R.layout.item_notification_config, viewGroup, false) - return SubscriptionHolder(view, listener) - } - - override fun onBindViewHolder(subscriptionHolder: SubscriptionHolder, i: Int) { - subscriptionHolder.bind(differ.currentList[i]) - } - - fun getItem(position: Int): SubscriptionItem = differ.currentList[position] - - override fun getItemCount() = differ.currentList.size - - override fun getItemId(position: Int): Long { - return differ.currentList[position].id - } - - fun getCurrentList(): List = differ.currentList - - fun update(newData: List) { - differ.submitList( - newData.map { - SubscriptionItem( - id = it.uid, - title = it.name, - notificationMode = it.notificationMode, - serviceId = it.serviceId, - url = it.url - ) - } +) : ListAdapter(DiffCallback) { + override fun onCreateViewHolder(parent: ViewGroup, i: Int): SubscriptionHolder { + return SubscriptionHolder( + ItemNotificationConfigBinding + .inflate(LayoutInflater.from(parent.context), parent, false) ) } - data class SubscriptionItem( - val id: Long, - val title: String, - @NotificationMode - val notificationMode: Int, - val serviceId: Int, - val url: String - ) + override fun onBindViewHolder(holder: SubscriptionHolder, position: Int) { + holder.bind(currentList[position]) + } - class SubscriptionHolder( - itemView: View, - private val listener: ModeToggleListener - ) : RecyclerView.ViewHolder(itemView), View.OnClickListener { - - private val checkedTextView = itemView as CheckedTextView + fun update(newData: List) { + val items = newData.map { + SubscriptionItem(it.uid, it.name, it.notificationMode, it.serviceId, it.url) + } + submitList(items) + } + inner class SubscriptionHolder( + private val itemBinding: ItemNotificationConfigBinding + ) : RecyclerView.ViewHolder(itemBinding.root) { init { - itemView.setOnClickListener(this) + itemView.setOnClickListener { + val mode = if (itemBinding.root.isChecked) { + NotificationMode.DISABLED + } else { + NotificationMode.ENABLED + } + listener.onModeChange(bindingAdapterPosition, mode) + } } fun bind(data: SubscriptionItem) { - checkedTextView.text = data.title - checkedTextView.isChecked = data.notificationMode != NotificationMode.DISABLED - } - - override fun onClick(v: View) { - val mode = if (checkedTextView.isChecked) { - NotificationMode.DISABLED - } else { - NotificationMode.ENABLED - } - listener.onModeChange(bindingAdapterPosition, mode) + itemBinding.root.text = data.title + itemBinding.root.isChecked = data.notificationMode != NotificationMode.DISABLED } } - private class DiffCallback : DiffUtil.ItemCallback() { - + private object DiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame(oldItem: SubscriptionItem, newItem: SubscriptionItem): Boolean { return oldItem.id == newItem.id } @@ -107,18 +66,27 @@ class NotificationModeConfigAdapter( } override fun getChangePayload(oldItem: SubscriptionItem, newItem: SubscriptionItem): Any? { - if (oldItem.notificationMode != newItem.notificationMode) { - return newItem.notificationMode + return if (oldItem.notificationMode != newItem.notificationMode) { + newItem.notificationMode } else { - return super.getChangePayload(oldItem, newItem) + super.getChangePayload(oldItem, newItem) } } } - interface ModeToggleListener { + fun interface ModeToggleListener { /** * Triggered when the UI representation of a notification mode is changed. */ fun onModeChange(position: Int, @NotificationMode mode: Int) } } + +data class SubscriptionItem( + val id: Long, + val title: String, + @NotificationMode + val notificationMode: Int, + val serviceId: Int, + val url: String +) diff --git a/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigFragment.kt b/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigFragment.kt index 9021fd68c..581768c30 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigFragment.kt +++ b/app/src/main/java/org/schabi/newpipe/settings/notifications/NotificationModeConfigFragment.kt @@ -1,5 +1,6 @@ package org.schabi.newpipe.settings.notifications +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.Menu @@ -8,30 +9,36 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment -import androidx.recyclerview.widget.RecyclerView import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.disposables.Disposable import io.reactivex.rxjava3.schedulers.Schedulers import org.schabi.newpipe.R import org.schabi.newpipe.database.subscription.NotificationMode +import org.schabi.newpipe.databinding.FragmentChannelsNotificationsBinding import org.schabi.newpipe.local.subscription.SubscriptionManager -import org.schabi.newpipe.settings.notifications.NotificationModeConfigAdapter.ModeToggleListener /** * [NotificationModeConfigFragment] is a settings fragment * which allows changing the [NotificationMode] of all subscribed channels. * The [NotificationMode] can either be changed one by one or toggled for all channels. */ -class NotificationModeConfigFragment : Fragment(), ModeToggleListener { +class NotificationModeConfigFragment : Fragment() { + private var _binding: FragmentChannelsNotificationsBinding? = null + private val binding get() = _binding!! - private lateinit var updaters: CompositeDisposable + private val disposables = CompositeDisposable() private var loader: Disposable? = null - private var adapter: NotificationModeConfigAdapter? = null + private lateinit var adapter: NotificationModeConfigAdapter + private lateinit var subscriptionManager: SubscriptionManager + + override fun onAttach(context: Context) { + super.onAttach(context) + subscriptionManager = SubscriptionManager(context) + } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - updaters = CompositeDisposable() setHasOptionsMenu(true) } @@ -39,28 +46,34 @@ class NotificationModeConfigFragment : Fragment(), ModeToggleListener { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View = inflater.inflate(R.layout.fragment_channels_notifications, container, false) + ): View { + _binding = FragmentChannelsNotificationsBinding.inflate(inflater, container, false) + return binding.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val recyclerView: RecyclerView = view.findViewById(R.id.recycler_view) - adapter = NotificationModeConfigAdapter(this) - recyclerView.adapter = adapter + adapter = NotificationModeConfigAdapter { position, mode -> + // Notification mode has been changed via the UI. + // Now change it in the database. + updateNotificationMode(adapter.currentList[position], mode) + } + binding.recyclerView.adapter = adapter loader?.dispose() - loader = SubscriptionManager(requireContext()) - .subscriptions() + loader = subscriptionManager.subscriptions() .observeOn(AndroidSchedulers.mainThread()) - .subscribe { newData -> adapter?.update(newData) } + .subscribe(adapter::update) } override fun onDestroyView() { loader?.dispose() loader = null + _binding = null super.onDestroyView() } override fun onDestroy() { - updaters.dispose() + disposables.dispose() super.onDestroy() } @@ -79,41 +92,20 @@ class NotificationModeConfigFragment : Fragment(), ModeToggleListener { } } - override fun onModeChange(position: Int, @NotificationMode mode: Int) { - // Notification mode has been changed via the UI. - // Now change it in the database. - val subscription = adapter?.getItem(position) ?: return - updaters.add( - SubscriptionManager(requireContext()) - .updateNotificationMode( - subscription.serviceId, - subscription.url, - mode - ) - .subscribeOn(Schedulers.io()) - .subscribe() - ) - } - private fun toggleAll() { - val subscriptions = adapter?.getCurrentList() ?: return - val mode = subscriptions.firstOrNull()?.notificationMode ?: return + val mode = adapter.currentList.firstOrNull()?.notificationMode ?: return val newMode = when (mode) { NotificationMode.DISABLED -> NotificationMode.ENABLED else -> NotificationMode.DISABLED } - val subscriptionManager = SubscriptionManager(requireContext()) - updaters.add( - CompositeDisposable( - subscriptions.map { item -> - subscriptionManager.updateNotificationMode( - serviceId = item.serviceId, - url = item.url, - mode = newMode - ).subscribeOn(Schedulers.io()) - .subscribe() - } - ) + adapter.currentList.forEach { updateNotificationMode(it, newMode) } + } + + private fun updateNotificationMode(item: SubscriptionItem, @NotificationMode mode: Int) { + disposables.add( + subscriptionManager.updateNotificationMode(item.serviceId, item.url, mode) + .subscribeOn(Schedulers.io()) + .subscribe() ) } } diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java index 6b1d70a86..7e3f5d0c8 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java +++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java @@ -248,7 +248,7 @@ public abstract class Tab { @DrawableRes @Override public int getTabIconRes(final Context context) { - return R.drawable.ic_rss_feed; + return R.drawable.ic_subscriptions; } @Override diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java index 32f25ccbd..30676477c 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java +++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsJsonHelper.java @@ -20,6 +20,7 @@ public final class TabsJsonHelper { private static final List FALLBACK_INITIAL_TABS_LIST = List.of( Tab.Type.DEFAULT_KIOSK.getTab(), + Tab.Type.FEED.getTab(), Tab.Type.SUBSCRIPTIONS.getTab(), Tab.Type.BOOKMARKS.getTab()); diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java index 2836fe52b..c885b803c 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java +++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/TabsManager.java @@ -73,7 +73,7 @@ public final class TabsManager { private SharedPreferences.OnSharedPreferenceChangeListener getPreferenceChangeListener() { return (sp, key) -> { - if (key.equals(savedTabsKey)) { + if (savedTabsKey.equals(key)) { if (savedTabsChangeListener != null) { savedTabsChangeListener.onTabsChanged(); } diff --git a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java index 2b69f23ac..530959d96 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/WebMWriter.java @@ -652,7 +652,7 @@ public class WebMWriter implements Closeable { final int offset = withLength ? 1 : 0; final byte[] buffer = new byte[offset + length]; - final long marker = (long) Math.floor((length - 1f) / 8f); + final long marker = Math.floorDiv(length - 1, 8); int shift = 0; for (int i = length - 1; i >= 0; i--, shift += 8) { diff --git a/app/src/main/java/org/schabi/newpipe/util/CommentTextOnTouchListener.java b/app/src/main/java/org/schabi/newpipe/util/CommentTextOnTouchListener.java deleted file mode 100644 index 7c87e664b..000000000 --- a/app/src/main/java/org/schabi/newpipe/util/CommentTextOnTouchListener.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.schabi.newpipe.util; - -import android.text.Layout; -import android.text.Selection; -import android.text.Spannable; -import android.text.Spanned; -import android.text.style.ClickableSpan; -import android.text.style.URLSpan; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import org.schabi.newpipe.util.external_communication.ShareUtils; -import org.schabi.newpipe.util.external_communication.InternalUrlsHandler; - -import io.reactivex.rxjava3.disposables.CompositeDisposable; - -public class CommentTextOnTouchListener implements View.OnTouchListener { - public static final CommentTextOnTouchListener INSTANCE = new CommentTextOnTouchListener(); - - @Override - public boolean onTouch(final View v, final MotionEvent event) { - if (!(v instanceof TextView)) { - return false; - } - final TextView widget = (TextView) v; - final Object text = widget.getText(); - if (text instanceof Spanned) { - final Spannable buffer = (Spannable) text; - - final int action = event.getAction(); - - if (action == MotionEvent.ACTION_UP - || action == MotionEvent.ACTION_DOWN) { - int x = (int) event.getX(); - int y = (int) event.getY(); - - x -= widget.getTotalPaddingLeft(); - y -= widget.getTotalPaddingTop(); - - x += widget.getScrollX(); - y += widget.getScrollY(); - - final Layout layout = widget.getLayout(); - final int line = layout.getLineForVertical(y); - final int off = layout.getOffsetForHorizontal(line, x); - - final ClickableSpan[] link = buffer.getSpans(off, off, - ClickableSpan.class); - - if (link.length != 0) { - if (action == MotionEvent.ACTION_UP) { - if (link[0] instanceof URLSpan) { - final String url = ((URLSpan) link[0]).getURL(); - if (!InternalUrlsHandler.handleUrlCommentsTimestamp( - new CompositeDisposable(), v.getContext(), url)) { - ShareUtils.openUrlInBrowser(v.getContext(), url, false); - } - } - } else if (action == MotionEvent.ACTION_DOWN) { - Selection.setSelection(buffer, - buffer.getSpanStart(link[0]), - buffer.getSpanEnd(link[0])); - } - return true; - } - } - } - return false; - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java index 3c20dc04b..4b08cfcb5 100644 --- a/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/DeviceUtils.java @@ -1,14 +1,19 @@ package org.schabi.newpipe.util; +import static android.content.Context.INPUT_SERVICE; + +import android.annotation.SuppressLint; import android.app.UiModeManager; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Point; +import android.hardware.input.InputManager; import android.os.BatteryManager; import android.os.Build; import android.provider.Settings; import android.util.TypedValue; +import android.view.InputDevice; import android.view.KeyEvent; import android.view.WindowInsets; import android.view.WindowManager; @@ -22,9 +27,12 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.App; import org.schabi.newpipe.R; +import java.lang.reflect.Method; + public final class DeviceUtils { private static final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv"; + private static final boolean SAMSUNG = Build.MANUFACTURER.equals("samsung"); private static Boolean isTV = null; private static Boolean isFireTV = null; @@ -84,6 +92,82 @@ public final class DeviceUtils { return DeviceUtils.isTV; } + /** + * Checks if the device is in desktop or DeX mode. This function should only + * be invoked once on view load as it is using reflection for the DeX checks. + * @param context the context to use for services and config. + * @return true if the Android device is in desktop mode or using DeX. + */ + @SuppressWarnings("JavaReflectionMemberAccess") + public static boolean isDesktopMode(@NonNull final Context context) { + // Adapted from https://stackoverflow.com/a/64615568 + // to check for all input devices that have an active cursor + final InputManager im = (InputManager) context.getSystemService(INPUT_SERVICE); + for (final int id : im.getInputDeviceIds()) { + final InputDevice inputDevice = im.getInputDevice(id); + if (inputDevice.supportsSource(InputDevice.SOURCE_BLUETOOTH_STYLUS) + || inputDevice.supportsSource(InputDevice.SOURCE_MOUSE) + || inputDevice.supportsSource(InputDevice.SOURCE_STYLUS) + || inputDevice.supportsSource(InputDevice.SOURCE_TOUCHPAD) + || inputDevice.supportsSource(InputDevice.SOURCE_TRACKBALL)) { + return true; + } + } + + final UiModeManager uiModeManager = + ContextCompat.getSystemService(context, UiModeManager.class); + if (uiModeManager != null + && uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_DESK) { + return true; + } + + if (!SAMSUNG) { + return false; + // DeX is Samsung-specific, skip the checks below on non-Samsung devices + } + // DeX check for standalone and multi-window mode, from: + // https://developer.samsung.com/samsung-dex/modify-optimizing.html + try { + final Configuration config = context.getResources().getConfiguration(); + final Class configClass = config.getClass(); + final int semDesktopModeEnabledConst = + configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass); + final int currentMode = + configClass.getField("semDesktopModeEnabled").getInt(config); + if (semDesktopModeEnabledConst == currentMode) { + return true; + } + } catch (final NoSuchFieldException | IllegalAccessException ignored) { + // Device doesn't seem to support DeX + } + + @SuppressLint("WrongConstant") final Object desktopModeManager = context + .getApplicationContext() + .getSystemService("desktopmode"); + + if (desktopModeManager != null) { + try { + final Method getDesktopModeStateMethod = desktopModeManager.getClass() + .getDeclaredMethod("getDesktopModeState"); + final Object desktopModeState = getDesktopModeStateMethod + .invoke(desktopModeManager); + final Class desktopModeStateClass = desktopModeState.getClass(); + final Method getEnabledMethod = desktopModeStateClass + .getDeclaredMethod("getEnabled"); + final int enabledStatus = (int) getEnabledMethod.invoke(desktopModeState); + if (enabledStatus == desktopModeStateClass + .getDeclaredField("ENABLED").getInt(desktopModeStateClass)) { + return true; + } + } catch (final Exception ignored) { + // Device does not support DeX 3.0 or something went wrong when trying to determine + // if it supports this feature + } + } + + return false; + } + public static boolean isTablet(@NonNull final Context context) { final String tabletModeSetting = PreferenceManager.getDefaultSharedPreferences(context) .getString(context.getString(R.string.tablet_mode_key), ""); diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java index 27009efd1..d5d472d6f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java @@ -20,6 +20,7 @@ package org.schabi.newpipe.util; import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; +import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD; import android.content.Context; import android.util.Log; @@ -51,7 +52,7 @@ import org.schabi.newpipe.extractor.search.SearchInfo; import org.schabi.newpipe.extractor.stream.StreamInfo; import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor; -import org.schabi.newpipe.util.external_communication.TextLinkifier; +import org.schabi.newpipe.util.text.TextLinkifier; import java.util.Collections; import java.util.List; @@ -319,8 +320,9 @@ public final class ExtractorHelper { } metaInfoSeparator.setVisibility(View.VISIBLE); - TextLinkifier.createLinksFromHtmlBlock(metaInfoTextView, stringBuilder.toString(), - HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING, null, disposables); + TextLinkifier.fromHtml(metaInfoTextView, stringBuilder.toString(), + HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING, null, null, disposables, + SET_LINK_MOVEMENT_METHOD); } } diff --git a/app/src/main/java/org/schabi/newpipe/util/Localization.java b/app/src/main/java/org/schabi/newpipe/util/Localization.java index e20955a76..916b902f0 100644 --- a/app/src/main/java/org/schabi/newpipe/util/Localization.java +++ b/app/src/main/java/org/schabi/newpipe/util/Localization.java @@ -56,7 +56,6 @@ import java.util.stream.Collectors; */ public final class Localization { - public static final String DOT_SEPARATOR = " • "; private static PrettyTime prettyTime; @@ -76,16 +75,8 @@ public final class Localization { public static org.schabi.newpipe.extractor.localization.Localization getPreferredLocalization( final Context context) { - final String contentLanguage = PreferenceManager - .getDefaultSharedPreferences(context) - .getString(context.getString(R.string.content_language_key), - context.getString(R.string.default_localization_key)); - if (contentLanguage.equals(context.getString(R.string.default_localization_key))) { - return org.schabi.newpipe.extractor.localization.Localization - .fromLocale(Locale.getDefault()); - } return org.schabi.newpipe.extractor.localization.Localization - .fromLocalizationCode(contentLanguage); + .fromLocale(getPreferredLocale(context)); } public static ContentCountry getPreferredContentCountry(final Context context) { @@ -99,22 +90,11 @@ public final class Localization { } public static Locale getPreferredLocale(final Context context) { - final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); + return getLocaleFromPrefs(context, R.string.content_language_key); + } - final String languageCode = sp.getString(context.getString(R.string.content_language_key), - context.getString(R.string.default_localization_key)); - - try { - if (languageCode.length() == 2) { - return new Locale(languageCode); - } else if (languageCode.contains("_")) { - final String country = languageCode.substring(languageCode.indexOf("_")); - return new Locale(languageCode.substring(0, 2), country); - } - } catch (final Exception ignored) { - } - - return Locale.getDefault(); + public static Locale getAppLocale(final Context context) { + return getLocaleFromPrefs(context, R.string.app_language_key); } public static String localizeNumber(final Context context, final long number) { @@ -183,13 +163,13 @@ public final class Localization { final double value = (double) count; if (count >= 1000000000) { - return localizeNumber(context, round(value / 1000000000, 1)) + return localizeNumber(context, round(value / 1000000000)) + context.getString(R.string.short_billion); } else if (count >= 1000000) { - return localizeNumber(context, round(value / 1000000, 1)) + return localizeNumber(context, round(value / 1000000)) + context.getString(R.string.short_million); } else if (count >= 1000) { - return localizeNumber(context, round(value / 1000, 1)) + return localizeNumber(context, round(value / 1000)) + context.getString(R.string.short_thousand); } else { return localizeNumber(context, value); @@ -226,21 +206,6 @@ public final class Localization { deletedCount, shortCount(context, deletedCount)); } - private static String getQuantity(final Context context, @PluralsRes final int pluralId, - @StringRes final int zeroCaseStringId, final long count, - final String formattedCount) { - if (count == 0) { - return context.getString(zeroCaseStringId); - } - - // As we use the already formatted count - // is not the responsibility of this method handle long numbers - // (it probably will fall in the "other" category, - // or some language have some specific rule... then we have to change it) - final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); - return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); - } - public static String getDurationString(final long duration) { final String output; @@ -314,37 +279,42 @@ public final class Localization { return prettyTime.formatUnrounded(offsetDateTime); } - private static void changeAppLanguage(final Locale loc, final Resources res) { + public static void assureCorrectAppLanguage(final Context c) { + final Resources res = c.getResources(); final DisplayMetrics dm = res.getDisplayMetrics(); final Configuration conf = res.getConfiguration(); - conf.setLocale(loc); + conf.setLocale(getAppLocale(c)); res.updateConfiguration(conf, dm); } - public static Locale getAppLocale(final Context context) { - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - String lang = prefs.getString(context.getString(R.string.app_language_key), "en"); - final Locale loc; - if (lang.equals(context.getString(R.string.default_localization_key))) { - loc = Locale.getDefault(); - } else if (lang.matches(".*-.*")) { - //to differentiate different versions of the language - //for example, pt (portuguese in Portugal) and pt-br (portuguese in Brazil) - final String[] localisation = lang.split("-"); - lang = localisation[0]; - final String country = localisation[1]; - loc = new Locale(lang, country); + private static Locale getLocaleFromPrefs(final Context context, @StringRes final int prefKey) { + final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); + final String defaultKey = context.getString(R.string.default_localization_key); + final String languageCode = sp.getString(context.getString(prefKey), defaultKey); + + if (languageCode.equals(defaultKey)) { + return Locale.getDefault(); } else { - loc = new Locale(lang); + return Locale.forLanguageTag(languageCode); } - return loc; } - public static void assureCorrectAppLanguage(final Context c) { - changeAppLanguage(getAppLocale(c), c.getResources()); + private static double round(final double value) { + return new BigDecimal(value).setScale(1, RoundingMode.HALF_UP).doubleValue(); } - private static double round(final double value, final int places) { - return new BigDecimal(value).setScale(places, RoundingMode.HALF_UP).doubleValue(); + private static String getQuantity(final Context context, @PluralsRes final int pluralId, + @StringRes final int zeroCaseStringId, final long count, + final String formattedCount) { + if (count == 0) { + return context.getString(zeroCaseStringId); + } + + // As we use the already formatted count + // is not the responsibility of this method handle long numbers + // (it probably will fall in the "other" category, + // or some language have some specific rule... then we have to change it) + final int safeCount = (int) MathUtils.clamp(count, Integer.MIN_VALUE, Integer.MAX_VALUE); + return context.getResources().getQuantityString(pluralId, safeCount, formattedCount); } } diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index 13413e89d..b4556507c 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -156,8 +156,7 @@ public final class NavigationHelper { public static void playOnPopupPlayer(final Context context, final PlayQueue queue, final boolean resumePlayback) { - if (!PermissionHelper.isPopupEnabled(context)) { - PermissionHelper.showPopupEnablementToast(context); + if (!PermissionHelper.isPopupEnabledElseAsk(context)) { return; } @@ -183,6 +182,10 @@ public final class NavigationHelper { public static void enqueueOnPlayer(final Context context, final PlayQueue queue, final PlayerType playerType) { + if (playerType == PlayerType.POPUP && !PermissionHelper.isPopupEnabledElseAsk(context)) { + return; + } + Toast.makeText(context, R.string.enqueued, Toast.LENGTH_SHORT).show(); final Intent intent = getPlayerEnqueueIntent(context, PlayerService.class, queue); diff --git a/app/src/main/java/org/schabi/newpipe/util/PendingIntentCompat.java b/app/src/main/java/org/schabi/newpipe/util/PendingIntentCompat.java new file mode 100644 index 000000000..6b9c36eab --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/PendingIntentCompat.java @@ -0,0 +1,69 @@ +package org.schabi.newpipe.util; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.os.Build; + +import androidx.annotation.NonNull; + +public final class PendingIntentCompat { + private PendingIntentCompat() { + } + + private static int addImmutableFlag(final int flags) { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M + ? flags | PendingIntent.FLAG_IMMUTABLE : flags; + } + + /** + * Creates a {@link PendingIntent} to start an activity. It is immutable on API level 23 and + * greater. + * + * @param context The context in which the activity should be started. + * @param requestCode The request code + * @param intent The Intent of the activity to be launched. + * @param flags The flags for the intent. + * @return The pending intent. + * @see PendingIntent#getActivity(Context, int, Intent, int) + */ + @NonNull + public static PendingIntent getActivity(@NonNull final Context context, final int requestCode, + @NonNull final Intent intent, final int flags) { + return PendingIntent.getActivity(context, requestCode, intent, addImmutableFlag(flags)); + } + + /** + * Creates a {@link PendingIntent} to start a service. It is immutable on API level 23 and + * greater. + * + * @param context The context in which the service should be started. + * @param requestCode The request code + * @param intent The Intent of the service to be launched. + * @param flags The flags for the intent. + * @return The pending intent. + * @see PendingIntent#getService(Context, int, Intent, int) + */ + @NonNull + public static PendingIntent getService(@NonNull final Context context, final int requestCode, + @NonNull final Intent intent, final int flags) { + return PendingIntent.getService(context, requestCode, intent, addImmutableFlag(flags)); + } + + /** + * Creates a {@link PendingIntent} to perform a broadcast. It is immutable on API level 23 and + * greater. + * + * @param context The context in which the broadcast should be performed. + * @param requestCode The request code + * @param intent The Intent to be broadcast. + * @param flags The flags for the intent. + * @return The pending intent. + * @see PendingIntent#getBroadcast(Context, int, Intent, int) + */ + @NonNull + public static PendingIntent getBroadcast(@NonNull final Context context, final int requestCode, + @NonNull final Intent intent, final int flags) { + return PendingIntent.getBroadcast(context, requestCode, intent, addImmutableFlag(flags)); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java index f3151ec8b..55193599e 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java @@ -9,8 +9,6 @@ import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.provider.Settings; -import android.view.Gravity; -import android.widget.TextView; import android.widget.Toast; import androidx.annotation.RequiresApi; @@ -21,6 +19,7 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.settings.NewPipeSettings; public final class PermissionHelper { + public static final int POST_NOTIFICATIONS_REQUEST_CODE = 779; public static final int DOWNLOAD_DIALOG_REQUEST_CODE = 778; public static final int DOWNLOADS_REQUEST_CODE = 777; @@ -71,8 +70,7 @@ public final class PermissionHelper { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(activity, - new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - requestCode); + new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode); // PERMISSION_WRITE_STORAGE is an // app-defined int constant. The callback method gets the @@ -83,6 +81,18 @@ public final class PermissionHelper { return true; } + public static boolean checkPostNotificationsPermission(final Activity activity, + final int requestCode) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + && ContextCompat.checkSelfPermission(activity, + Manifest.permission.POST_NOTIFICATIONS) + != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(activity, + new String[] {Manifest.permission.POST_NOTIFICATIONS}, requestCode); + return false; + } + return true; + } /** * In order to be able to draw over other apps, @@ -116,18 +126,21 @@ public final class PermissionHelper { } } - public static boolean isPopupEnabled(final Context context) { - return Build.VERSION.SDK_INT < Build.VERSION_CODES.M - || checkSystemAlertWindowPermission(context); - } - - public static void showPopupEnablementToast(final Context context) { - final Toast toast = - Toast.makeText(context, R.string.msg_popup_permission, Toast.LENGTH_LONG); - final TextView messageView = toast.getView().findViewById(android.R.id.message); - if (messageView != null) { - messageView.setGravity(Gravity.CENTER); + /** + * Determines whether the popup is enabled, and if it is not, starts the system activity to + * request the permission with {@link #checkSystemAlertWindowPermission(Context)} and shows a + * toast to the user explaining why the permission is needed. + * + * @param context the Android context + * @return whether the popup is enabled + */ + public static boolean isPopupEnabledElseAsk(final Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M + || checkSystemAlertWindowPermission(context)) { + return true; + } else { + Toast.makeText(context, R.string.msg_popup_permission, Toast.LENGTH_LONG).show(); + return false; } - toast.show(); } } diff --git a/app/src/main/java/org/schabi/newpipe/util/PicassoHelper.java b/app/src/main/java/org/schabi/newpipe/util/PicassoHelper.java index 2e781631e..ece0c7e87 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PicassoHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/PicassoHelper.java @@ -9,6 +9,7 @@ import android.graphics.Bitmap; import android.util.Log; import androidx.annotation.Nullable; +import androidx.core.graphics.BitmapCompat; import com.squareup.picasso.Cache; import com.squareup.picasso.LruCache; @@ -139,21 +140,23 @@ public final class PicassoHelper { .getDimension(R.dimen.player_notification_thumbnail_width), source.getWidth()); - final Bitmap result = Bitmap.createScaledBitmap( + final Bitmap result = BitmapCompat.createScaledBitmap( source, (int) notificationThumbnailWidth, (int) (source.getHeight() / (source.getWidth() / notificationThumbnailWidth)), + null, true); - if (result == source) { + if (result == source || !result.isMutable()) { // create a new mutable bitmap to prevent strange crashes on some // devices (see #4638) - final Bitmap copied = Bitmap.createScaledBitmap( + final Bitmap copied = BitmapCompat.createScaledBitmap( source, (int) notificationThumbnailWidth - 1, (int) (source.getHeight() / (source.getWidth() / (notificationThumbnailWidth - 1))), + null, true); source.recycle(); return copied; diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java index 4b5e675c9..74de45720 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java @@ -1,7 +1,6 @@ package org.schabi.newpipe.util; import android.content.Context; -import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,6 +10,8 @@ import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.collection.SparseArrayCompat; import org.schabi.newpipe.DownloaderImpl; import org.schabi.newpipe.R; @@ -39,10 +40,10 @@ import us.shandian.giga.util.Utility; * @param the secondary stream type's class extending {@link Stream} */ public class StreamItemAdapter extends BaseAdapter { - private final Context context; - + @NonNull private final StreamSizeWrapper streamsWrapper; - private final SparseArray> secondaryStreams; + @NonNull + private final SparseArrayCompat> secondaryStreams; /** * Indicates that at least one of the primary streams is an instance of {@link VideoStream}, @@ -51,9 +52,10 @@ public class StreamItemAdapter extends BaseA */ private final boolean hasAnyVideoOnlyStreamWithNoSecondaryStream; - public StreamItemAdapter(final Context context, final StreamSizeWrapper streamsWrapper, - final SparseArray> secondaryStreams) { - this.context = context; + public StreamItemAdapter( + @NonNull final StreamSizeWrapper streamsWrapper, + @NonNull final SparseArrayCompat> secondaryStreams + ) { this.streamsWrapper = streamsWrapper; this.secondaryStreams = secondaryStreams; @@ -61,15 +63,15 @@ public class StreamItemAdapter extends BaseA checkHasAnyVideoOnlyStreamWithNoSecondaryStream(); } - public StreamItemAdapter(final Context context, final StreamSizeWrapper streamsWrapper) { - this(context, streamsWrapper, null); + public StreamItemAdapter(final StreamSizeWrapper streamsWrapper) { + this(streamsWrapper, new SparseArrayCompat<>(0)); } public List getAll() { return streamsWrapper.getStreamsList(); } - public SparseArray> getAllSecondary() { + public SparseArrayCompat> getAllSecondary() { return secondaryStreams; } @@ -106,6 +108,7 @@ public class StreamItemAdapter extends BaseA final View view, final ViewGroup parent, final boolean isDropdownItem) { + final var context = parent.getContext(); View convertView = view; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( @@ -129,7 +132,7 @@ public class StreamItemAdapter extends BaseA if (hasAnyVideoOnlyStreamWithNoSecondaryStream) { if (videoStream.isVideoOnly()) { - woSoundIconVisibility = hasSecondaryStream(position) + woSoundIconVisibility = secondaryStreams.get(position) != null // It has a secondary stream associated with it, so check if it's a // dropdown view so it doesn't look out of place (missing margin) // compared to those that don't. @@ -163,8 +166,7 @@ public class StreamItemAdapter extends BaseA } if (streamsWrapper.getSizeInBytes(position) > 0) { - final SecondaryStreamHelper secondary = secondaryStreams == null ? null - : secondaryStreams.get(position); + final var secondary = secondaryStreams.get(position); if (secondary != null) { final long size = secondary.getSizeInBytes() + streamsWrapper.getSizeInBytes(position); @@ -196,14 +198,6 @@ public class StreamItemAdapter extends BaseA return convertView; } - /** - * @param position which primary stream to check. - * @return whether the primary stream at position has a secondary stream associated with it. - */ - private boolean hasSecondaryStream(final int position) { - return secondaryStreams != null && secondaryStreams.get(position) != null; - } - /** * @return if there are any video-only streams with no secondary stream associated with them. * @see #hasAnyVideoOnlyStreamWithNoSecondaryStream @@ -213,7 +207,7 @@ public class StreamItemAdapter extends BaseA final T stream = streamsWrapper.getStreamsList().get(i); if (stream instanceof VideoStream) { final boolean videoOnly = ((VideoStream) stream).isVideoOnly(); - if (videoOnly && !hasSecondaryStream(i)) { + if (videoOnly && secondaryStreams.get(i) == null) { return true; } } @@ -228,16 +222,15 @@ public class StreamItemAdapter extends BaseA * @param the stream type's class extending {@link Stream} */ public static class StreamSizeWrapper implements Serializable { - private static final StreamSizeWrapper EMPTY = new StreamSizeWrapper<>( - Collections.emptyList(), null); + private static final StreamSizeWrapper EMPTY = + new StreamSizeWrapper<>(Collections.emptyList(), null); private final List streamsList; private final long[] streamSizes; private final String unknownSize; - public StreamSizeWrapper(final List sL, final Context context) { - this.streamsList = sL != null - ? sL - : Collections.emptyList(); + public StreamSizeWrapper(@NonNull final List streamList, + @Nullable final Context context) { + this.streamsList = streamList; this.streamSizes = new long[streamsList.size()]; this.unknownSize = context == null ? "--.-" : context.getString(R.string.unknown_content); @@ -297,10 +290,6 @@ public class StreamItemAdapter extends BaseA return formatSize(getSizeInBytes(streamIndex)); } - public String getFormattedSize(final T stream) { - return formatSize(getSizeInBytes(stream)); - } - private String formatSize(final long size) { if (size > -1) { return Utility.formatBytes(size); @@ -308,10 +297,6 @@ public class StreamItemAdapter extends BaseA return unknownSize; } - public void setSize(final int streamIndex, final long sizeInBytes) { - streamSizes[streamIndex] = sizeInBytes; - } - public void setSize(final T stream, final long sizeInBytes) { streamSizes[streamsList.indexOf(stream)] = sizeInBytes; } diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java index ea22e9368..ab74e0305 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -41,6 +41,7 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.NewPipe; import org.schabi.newpipe.extractor.StreamingService; import org.schabi.newpipe.extractor.exceptions.ExtractionException; +import org.schabi.newpipe.info_list.ItemViewMode; public final class ThemeHelper { private ThemeHelper() { @@ -332,7 +333,6 @@ public final class ThemeHelper { } } - /** * Returns whether the grid layout or the list layout should be used. If the user set "auto" * mode in settings, decides based on screen orientation (landscape) and size. @@ -341,19 +341,8 @@ public final class ThemeHelper { * @return true:use grid layout, false:use list layout */ public static boolean shouldUseGridLayout(final Context context) { - final String listMode = PreferenceManager.getDefaultSharedPreferences(context) - .getString(context.getString(R.string.list_view_mode_key), - context.getString(R.string.list_view_mode_value)); - - if (listMode.equals(context.getString(R.string.list_view_mode_list_key))) { - return false; - } else if (listMode.equals(context.getString(R.string.list_view_mode_grid_key))) { - return true; - } else /* listMode.equals("auto") */ { - final Configuration configuration = context.getResources().getConfiguration(); - return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE - && configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE); - } + final ItemViewMode mode = getItemViewMode(context); + return mode == ItemViewMode.GRID; } /** @@ -367,6 +356,36 @@ public final class ThemeHelper { context.getResources().getDimensionPixelSize(R.dimen.channel_item_grid_min_width)); } + /** + * Returns item view mode. + * @param context to read preference and parse string + * @return Returns one of ItemViewMode + */ + public static ItemViewMode getItemViewMode(final Context context) { + final String listMode = PreferenceManager.getDefaultSharedPreferences(context) + .getString(context.getString(R.string.list_view_mode_key), + context.getString(R.string.list_view_mode_value)); + final ItemViewMode result; + if (listMode.equals(context.getString(R.string.list_view_mode_list_key))) { + result = ItemViewMode.LIST; + } else if (listMode.equals(context.getString(R.string.list_view_mode_grid_key))) { + result = ItemViewMode.GRID; + } else if (listMode.equals(context.getString(R.string.list_view_mode_card_key))) { + result = ItemViewMode.CARD; + } else { + // Auto mode - evaluate whether to use Grid based on screen real estate. + final Configuration configuration = context.getResources().getConfiguration(); + final boolean useGrid = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + && configuration.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_LARGE); + if (useGrid) { + result = ItemViewMode.GRID; + } else { + result = ItemViewMode.LIST; + } + } + return result; + } + /** * Calculates the number of grid stream info items that can fit horizontally on the screen. The * width of a grid stream info item is obtained from the thumbnail width plus the right and left diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java index debeb902c..06dd3f945 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/ShareUtils.java @@ -90,19 +90,16 @@ public final class ShareUtils { // No browser set as default (doesn't work on some devices) openAppChooser(context, intent, true); } else { - if (defaultPackageName.isEmpty()) { - // No app installed to open a web url - Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); - return false; - } else { - try { + try { + // will be empty on Android 12+ + if (!defaultPackageName.isEmpty()) { intent.setPackage(defaultPackageName); - context.startActivity(intent); - } catch (final ActivityNotFoundException e) { - // Not a browser but an app chooser because of OEMs changes - intent.setPackage(null); - openAppChooser(context, intent, true); } + context.startActivity(intent); + } catch (final ActivityNotFoundException e) { + // Not a browser but an app chooser because of OEMs changes + intent.setPackage(null); + openAppChooser(context, intent, true); } } @@ -313,8 +310,16 @@ public final class ShareUtils { return; } - clipboardManager.setPrimaryClip(ClipData.newPlainText(null, text)); - Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT).show(); + try { + clipboardManager.setPrimaryClip(ClipData.newPlainText(null, text)); + if (Build.VERSION.SDK_INT < 33) { + // Android 13 has its own "copied to clipboard" dialog + Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT).show(); + } + } catch (final Exception e) { + Log.e(TAG, "Error when trying to copy text to clipboard", e); + Toast.makeText(context, R.string.msg_failed_to_copy, Toast.LENGTH_SHORT).show(); + } } /** diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/TextLinkifier.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/TextLinkifier.java deleted file mode 100644 index 8b8eb265b..000000000 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/TextLinkifier.java +++ /dev/null @@ -1,289 +0,0 @@ -package org.schabi.newpipe.util.external_communication; - -import android.content.Context; -import android.text.SpannableStringBuilder; -import android.text.method.LinkMovementMethod; -import android.text.style.ClickableSpan; -import android.text.style.URLSpan; -import android.text.util.Linkify; -import android.util.Log; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.text.HtmlCompat; - -import org.schabi.newpipe.extractor.Info; -import org.schabi.newpipe.extractor.stream.StreamInfo; -import org.schabi.newpipe.util.NavigationHelper; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import io.noties.markwon.Markwon; -import io.noties.markwon.linkify.LinkifyPlugin; -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.core.Single; -import io.reactivex.rxjava3.disposables.CompositeDisposable; -import io.reactivex.rxjava3.schedulers.Schedulers; - -import static org.schabi.newpipe.util.external_communication.InternalUrlsHandler.playOnPopup; - -public final class TextLinkifier { - public static final String TAG = TextLinkifier.class.getSimpleName(); - - // Looks for hashtags with characters from any language (\p{L}), numbers, or underscores - private static final Pattern HASHTAGS_PATTERN = - Pattern.compile("(#[\\p{L}0-9_]+)"); - - private TextLinkifier() { - } - - /** - * Create web links for contents with an HTML description. - *

- * This will call {@link TextLinkifier#changeIntentsOfDescriptionLinks(TextView, CharSequence, - * Info, CompositeDisposable)} after having linked the URLs with - * {@link HtmlCompat#fromHtml(String, int)}. - * - * @param textView the TextView to set the htmlBlock linked - * @param htmlBlock the htmlBlock to be linked - * @param htmlCompatFlag the int flag to be set when {@link HtmlCompat#fromHtml(String, int)} - * will be called - * @param relatedInfo if given, handle timestamps to open the stream in the popup player at - * the specific time, and hashtags to search for the term in the correct - * service - * @param disposables disposables created by the method are added here and their lifecycle - * should be handled by the calling class - */ - public static void createLinksFromHtmlBlock(@NonNull final TextView textView, - final String htmlBlock, - final int htmlCompatFlag, - @Nullable final Info relatedInfo, - final CompositeDisposable disposables) { - changeIntentsOfDescriptionLinks( - textView, HtmlCompat.fromHtml(htmlBlock, htmlCompatFlag), relatedInfo, disposables); - } - - /** - * Create web links for contents with a plain text description. - *

- * This will call {@link TextLinkifier#changeIntentsOfDescriptionLinks(TextView, CharSequence, - * Info, CompositeDisposable)} after having linked the URLs with - * {@link TextView#setAutoLinkMask(int)} and - * {@link TextView#setText(CharSequence, TextView.BufferType)}. - * - * @param textView the TextView to set the plain text block linked - * @param plainTextBlock the block of plain text to be linked - * @param relatedInfo if given, handle timestamps to open the stream in the popup player at - * the specific time, and hashtags to search for the term in the correct - * service - * @param disposables disposables created by the method are added here and their lifecycle - * should be handled by the calling class - */ - public static void createLinksFromPlainText(@NonNull final TextView textView, - final String plainTextBlock, - @Nullable final Info relatedInfo, - final CompositeDisposable disposables) { - textView.setAutoLinkMask(Linkify.WEB_URLS); - textView.setText(plainTextBlock, TextView.BufferType.SPANNABLE); - changeIntentsOfDescriptionLinks(textView, textView.getText(), relatedInfo, disposables); - } - - /** - * Create web links for contents with a markdown description. - *

- * This will call {@link TextLinkifier#changeIntentsOfDescriptionLinks(TextView, CharSequence, - * Info, CompositeDisposable)} after creating an {@link Markwon} object and using - * {@link Markwon#setMarkdown(TextView, String)}. - * - * @param textView the TextView to set the plain text block linked - * @param markdownBlock the block of markdown text to be linked - * @param relatedInfo if given, handle timestamps to open the stream in the popup player at - * the specific time, and hashtags to search for the term in the correct - * @param disposables disposables created by the method are added here and their lifecycle - * should be handled by the calling class - */ - public static void createLinksFromMarkdownText(@NonNull final TextView textView, - final String markdownBlock, - @Nullable final Info relatedInfo, - final CompositeDisposable disposables) { - final Markwon markwon = Markwon.builder(textView.getContext()) - .usePlugin(LinkifyPlugin.create()).build(); - changeIntentsOfDescriptionLinks(textView, markwon.toMarkdown(markdownBlock), relatedInfo, - disposables); - } - - /** - * Add click listeners which opens a search on hashtags in a plain text. - *

- * This method finds all timestamps in the {@link SpannableStringBuilder} of the description - * using a regular expression, adds for each a {@link ClickableSpan} which opens - * {@link NavigationHelper#openSearch(Context, int, String)} and makes a search on the hashtag, - * in the service of the content. - * - * @param context the context to use - * @param spannableDescription the SpannableStringBuilder with the text of the - * content description - * @param relatedInfo used to search for the term in the correct service - */ - private static void addClickListenersOnHashtags(final Context context, - @NonNull final SpannableStringBuilder - spannableDescription, - final Info relatedInfo) { - final String descriptionText = spannableDescription.toString(); - final Matcher hashtagsMatches = HASHTAGS_PATTERN.matcher(descriptionText); - - while (hashtagsMatches.find()) { - final int hashtagStart = hashtagsMatches.start(1); - final int hashtagEnd = hashtagsMatches.end(1); - final String parsedHashtag = descriptionText.substring(hashtagStart, hashtagEnd); - - // don't add a ClickableSpan if there is already one, which should be a part of an URL, - // already parsed before - if (spannableDescription.getSpans(hashtagStart, hashtagEnd, - ClickableSpan.class).length == 0) { - spannableDescription.setSpan(new ClickableSpan() { - @Override - public void onClick(@NonNull final View view) { - NavigationHelper.openSearch(context, relatedInfo.getServiceId(), - parsedHashtag); - } - }, hashtagStart, hashtagEnd, 0); - } - } - } - - /** - * Add click listeners which opens the popup player on timestamps in a plain text. - *

- * This method finds all timestamps in the {@link SpannableStringBuilder} of the description - * using a regular expression, adds for each a {@link ClickableSpan} which opens the popup - * player at the time indicated in the timestamps. - * - * @param context the context to use - * @param spannableDescription the SpannableStringBuilder with the text of the - * content description - * @param relatedInfo what to open in the popup player when timestamps are clicked - * @param disposables disposables created by the method are added here and their - * lifecycle should be handled by the calling class - */ - private static void addClickListenersOnTimestamps(final Context context, - @NonNull final SpannableStringBuilder - spannableDescription, - final Info relatedInfo, - final CompositeDisposable disposables) { - final String descriptionText = spannableDescription.toString(); - final Matcher timestampsMatches = - TimestampExtractor.TIMESTAMPS_PATTERN.matcher(descriptionText); - - while (timestampsMatches.find()) { - final TimestampExtractor.TimestampMatchDTO timestampMatchDTO = - TimestampExtractor.getTimestampFromMatcher( - timestampsMatches, - descriptionText); - - if (timestampMatchDTO == null) { - continue; - } - - spannableDescription.setSpan( - new ClickableSpan() { - @Override - public void onClick(@NonNull final View view) { - playOnPopup( - context, - relatedInfo.getUrl(), - relatedInfo.getService(), - timestampMatchDTO.seconds(), - disposables); - } - }, - timestampMatchDTO.timestampStart(), - timestampMatchDTO.timestampEnd(), - 0); - } - } - - /** - * Change links generated by libraries in the description of a content to a custom link action - * and add click listeners on timestamps in this description. - *

- * Instead of using an {@link android.content.Intent#ACTION_VIEW} intent in the description of - * a content, this method will parse the {@link CharSequence} and replace all current web links - * with {@link ShareUtils#openUrlInBrowser(Context, String, boolean)}. - * This method will also add click listeners on timestamps in this description, which will play - * the content in the popup player at the time indicated in the timestamp, by using - * {@link TextLinkifier#addClickListenersOnTimestamps(Context, SpannableStringBuilder, Info, - * CompositeDisposable)} method and click listeners on hashtags, by using - * {@link TextLinkifier#addClickListenersOnHashtags(Context, SpannableStringBuilder, Info)}, - * which will open a search on the current service with the hashtag. - *

- * This method is required in order to intercept links and e.g. show a confirmation dialog - * before opening a web link. - * - * @param textView the TextView in which the converted CharSequence will be applied - * @param chars the CharSequence to be parsed - * @param relatedInfo if given, handle timestamps to open the stream in the popup player at - * the specific time, and hashtags to search for the term in the correct - * service - * @param disposables disposables created by the method are added here and their lifecycle - * should be handled by the calling class - */ - private static void changeIntentsOfDescriptionLinks(final TextView textView, - final CharSequence chars, - @Nullable final Info relatedInfo, - final CompositeDisposable disposables) { - disposables.add(Single.fromCallable(() -> { - final Context context = textView.getContext(); - - // add custom click actions on web links - final SpannableStringBuilder textBlockLinked = new SpannableStringBuilder(chars); - final URLSpan[] urls = textBlockLinked.getSpans(0, chars.length(), URLSpan.class); - - for (final URLSpan span : urls) { - final String url = span.getURL(); - final ClickableSpan clickableSpan = new ClickableSpan() { - public void onClick(@NonNull final View view) { - if (!InternalUrlsHandler.handleUrlDescriptionTimestamp( - new CompositeDisposable(), context, url)) { - ShareUtils.openUrlInBrowser(context, url, false); - } - } - }; - - textBlockLinked.setSpan(clickableSpan, textBlockLinked.getSpanStart(span), - textBlockLinked.getSpanEnd(span), textBlockLinked.getSpanFlags(span)); - textBlockLinked.removeSpan(span); - } - - // add click actions on plain text timestamps only for description of contents, - // unneeded for meta-info or other TextViews - if (relatedInfo != null) { - if (relatedInfo instanceof StreamInfo) { - addClickListenersOnTimestamps(context, textBlockLinked, relatedInfo, - disposables); - } - addClickListenersOnHashtags(context, textBlockLinked, relatedInfo); - } - - return textBlockLinked; - }).subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe( - textBlockLinked -> setTextViewCharSequence(textView, textBlockLinked), - throwable -> { - Log.e(TAG, "Unable to linkify text", throwable); - // this should never happen, but if it does, just fallback to it - setTextViewCharSequence(textView, chars); - })); - } - - private static void setTextViewCharSequence(@NonNull final TextView textView, - final CharSequence charSequence) { - textView.setText(charSequence); - textView.setMovementMethod(LinkMovementMethod.getInstance()); - textView.setVisibility(View.VISIBLE); - } -} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/CommentTextOnTouchListener.java b/app/src/main/java/org/schabi/newpipe/util/text/CommentTextOnTouchListener.java new file mode 100644 index 000000000..5018a6120 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/CommentTextOnTouchListener.java @@ -0,0 +1,42 @@ +package org.schabi.newpipe.util.text; + +import static org.schabi.newpipe.util.text.TouchUtils.getOffsetForHorizontalLine; + +import android.annotation.SuppressLint; +import android.text.Spanned; +import android.text.style.ClickableSpan; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +public class CommentTextOnTouchListener implements View.OnTouchListener { + public static final CommentTextOnTouchListener INSTANCE = new CommentTextOnTouchListener(); + + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouch(final View v, final MotionEvent event) { + if (!(v instanceof TextView)) { + return false; + } + final TextView widget = (TextView) v; + final CharSequence text = widget.getText(); + if (text instanceof Spanned) { + final Spanned buffer = (Spanned) text; + final int action = event.getAction(); + + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { + final int offset = getOffsetForHorizontalLine(widget, event); + final ClickableSpan[] links = buffer.getSpans(offset, offset, ClickableSpan.class); + + if (links.length != 0) { + if (action == MotionEvent.ACTION_UP) { + links[0].onClick(widget); + } + // we handle events that intersect links, so return true + return true; + } + } + } + return false; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/HashtagLongPressClickableSpan.java b/app/src/main/java/org/schabi/newpipe/util/text/HashtagLongPressClickableSpan.java new file mode 100644 index 000000000..8a0363ecb --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/HashtagLongPressClickableSpan.java @@ -0,0 +1,36 @@ +package org.schabi.newpipe.util.text; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.NonNull; + +import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.external_communication.ShareUtils; + +final class HashtagLongPressClickableSpan extends LongPressClickableSpan { + + @NonNull + private final Context context; + @NonNull + private final String parsedHashtag; + private final int relatedInfoServiceId; + + HashtagLongPressClickableSpan(@NonNull final Context context, + @NonNull final String parsedHashtag, + final int relatedInfoServiceId) { + this.context = context; + this.parsedHashtag = parsedHashtag; + this.relatedInfoServiceId = relatedInfoServiceId; + } + + @Override + public void onClick(@NonNull final View view) { + NavigationHelper.openSearch(context, relatedInfoServiceId, parsedHashtag); + } + + @Override + public void onLongClick(@NonNull final View view) { + ShareUtils.copyToClipboard(context, parsedHashtag); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java b/app/src/main/java/org/schabi/newpipe/util/text/InternalUrlsHandler.java similarity index 99% rename from app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java rename to app/src/main/java/org/schabi/newpipe/util/text/InternalUrlsHandler.java index c46e6636d..b87618922 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/InternalUrlsHandler.java +++ b/app/src/main/java/org/schabi/newpipe/util/text/InternalUrlsHandler.java @@ -1,4 +1,4 @@ -package org.schabi.newpipe.util.external_communication; +package org.schabi.newpipe.util.text; import android.content.Context; import android.util.Log; diff --git a/app/src/main/java/org/schabi/newpipe/util/text/LongPressClickableSpan.java b/app/src/main/java/org/schabi/newpipe/util/text/LongPressClickableSpan.java new file mode 100644 index 000000000..5c94a5850 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/LongPressClickableSpan.java @@ -0,0 +1,12 @@ +package org.schabi.newpipe.util.text; + +import android.text.style.ClickableSpan; +import android.view.View; + +import androidx.annotation.NonNull; + +public abstract class LongPressClickableSpan extends ClickableSpan { + + public abstract void onLongClick(@NonNull View view); + +} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/LongPressLinkMovementMethod.java b/app/src/main/java/org/schabi/newpipe/util/text/LongPressLinkMovementMethod.java new file mode 100644 index 000000000..bd57621cb --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/LongPressLinkMovementMethod.java @@ -0,0 +1,77 @@ +package org.schabi.newpipe.util.text; + +import static org.schabi.newpipe.util.text.TouchUtils.getOffsetForHorizontalLine; + +import android.os.Handler; +import android.os.Looper; +import android.text.Selection; +import android.text.Spannable; +import android.text.method.LinkMovementMethod; +import android.text.method.MovementMethod; +import android.view.MotionEvent; +import android.view.ViewConfiguration; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +// Class adapted from https://stackoverflow.com/a/31786969 + +public class LongPressLinkMovementMethod extends LinkMovementMethod { + + private static final int LONG_PRESS_TIME = ViewConfiguration.getLongPressTimeout(); + + private static LongPressLinkMovementMethod instance; + + private Handler longClickHandler; + private boolean isLongPressed = false; + + @Override + public boolean onTouchEvent(@NonNull final TextView widget, + @NonNull final Spannable buffer, + @NonNull final MotionEvent event) { + final int action = event.getAction(); + + if (action == MotionEvent.ACTION_CANCEL && longClickHandler != null) { + longClickHandler.removeCallbacksAndMessages(null); + } + + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { + final int offset = getOffsetForHorizontalLine(widget, event); + final LongPressClickableSpan[] link = buffer.getSpans(offset, offset, + LongPressClickableSpan.class); + + if (link.length != 0) { + if (action == MotionEvent.ACTION_UP) { + if (longClickHandler != null) { + longClickHandler.removeCallbacksAndMessages(null); + } + if (!isLongPressed) { + link[0].onClick(widget); + } + isLongPressed = false; + } else { + Selection.setSelection(buffer, buffer.getSpanStart(link[0]), + buffer.getSpanEnd(link[0])); + if (longClickHandler != null) { + longClickHandler.postDelayed(() -> { + link[0].onLongClick(widget); + isLongPressed = true; + }, LONG_PRESS_TIME); + } + } + return true; + } + } + + return super.onTouchEvent(widget, buffer, event); + } + + public static MovementMethod getInstance() { + if (instance == null) { + instance = new LongPressLinkMovementMethod(); + instance.longClickHandler = new Handler(Looper.myLooper()); + } + + return instance; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java b/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java new file mode 100644 index 000000000..e59a3dc05 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/TextLinkifier.java @@ -0,0 +1,369 @@ +package org.schabi.newpipe.util.text; + +import android.content.Context; +import android.text.SpannableStringBuilder; +import android.text.style.URLSpan; +import android.text.util.Linkify; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.text.HtmlCompat; + +import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.extractor.stream.Description; +import org.schabi.newpipe.util.NavigationHelper; +import org.schabi.newpipe.util.external_communication.ShareUtils; + +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import io.noties.markwon.Markwon; +import io.noties.markwon.linkify.LinkifyPlugin; +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.disposables.CompositeDisposable; +import io.reactivex.rxjava3.schedulers.Schedulers; + +public final class TextLinkifier { + public static final String TAG = TextLinkifier.class.getSimpleName(); + + // Looks for hashtags with characters from any language (\p{L}), numbers, or underscores + private static final Pattern HASHTAGS_PATTERN = Pattern.compile("(#[\\p{L}0-9_]+)"); + + public static final Consumer SET_LINK_MOVEMENT_METHOD = + v -> v.setMovementMethod(LongPressLinkMovementMethod.getInstance()); + + private TextLinkifier() { + } + + /** + * Create links for contents with an {@link Description} in the various possible formats. + *

+ * This will call one of these three functions based on the format: {@link #fromHtml}, + * {@link #fromMarkdown} or {@link #fromPlainText}. + * + * @param textView the TextView to set the htmlBlock linked + * @param description the htmlBlock to be linked + * @param htmlCompatFlag the int flag to be set if {@link HtmlCompat#fromHtml(String, int)} + * will be called (not used for formats different than HTML) + * @param relatedInfoService if given, handle hashtags to search for the term in the correct + * service + * @param relatedStreamUrl if given, used alongside {@code relatedInfoService} to handle + * timestamps to open the stream in the popup player at the specific + * time + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + * @param onCompletion will be run when setting text to the textView completes; use {@link + * #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable + */ + public static void fromDescription(@NonNull final TextView textView, + @NonNull final Description description, + final int htmlCompatFlag, + @Nullable final StreamingService relatedInfoService, + @Nullable final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables, + @Nullable final Consumer onCompletion) { + switch (description.getType()) { + case Description.HTML: + TextLinkifier.fromHtml(textView, description.getContent(), htmlCompatFlag, + relatedInfoService, relatedStreamUrl, disposables, onCompletion); + break; + case Description.MARKDOWN: + TextLinkifier.fromMarkdown(textView, description.getContent(), + relatedInfoService, relatedStreamUrl, disposables, onCompletion); + break; + case Description.PLAIN_TEXT: default: + TextLinkifier.fromPlainText(textView, description.getContent(), + relatedInfoService, relatedStreamUrl, disposables, onCompletion); + break; + } + } + + /** + * Create links for contents with an HTML description. + * + *

+ * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, + * String, CompositeDisposable, Consumer)} after having linked the URLs with + * {@link HtmlCompat#fromHtml(String, int)}. + *

+ * + * @param textView the {@link TextView} to set the the HTML string block linked + * @param htmlBlock the HTML string block to be linked + * @param htmlCompatFlag the int flag to be set when {@link HtmlCompat#fromHtml(String, + * int)} will be called + * @param relatedInfoService if given, handle hashtags to search for the term in the correct + * service + * @param relatedStreamUrl if given, used alongside {@code relatedInfoService} to handle + * timestamps to open the stream in the popup player at the specific + * time + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + * @param onCompletion will be run when setting text to the textView completes; use {@link + * #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable + */ + public static void fromHtml(@NonNull final TextView textView, + @NonNull final String htmlBlock, + final int htmlCompatFlag, + @Nullable final StreamingService relatedInfoService, + @Nullable final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables, + @Nullable final Consumer onCompletion) { + changeLinkIntents( + textView, HtmlCompat.fromHtml(htmlBlock, htmlCompatFlag), relatedInfoService, + relatedStreamUrl, disposables, onCompletion); + } + + /** + * Create links for contents with a plain text description. + * + *

+ * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, + * String, CompositeDisposable, Consumer)} after having linked the URLs with + * {@link TextView#setAutoLinkMask(int)} and + * {@link TextView#setText(CharSequence, TextView.BufferType)}. + *

+ * + * @param textView the {@link TextView} to set the plain text block linked + * @param plainTextBlock the block of plain text to be linked + * @param relatedInfoService if given, handle hashtags to search for the term in the correct + * service + * @param relatedStreamUrl if given, used alongside {@code relatedInfoService} to handle + * timestamps to open the stream in the popup player at the specific + * time + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + * @param onCompletion will be run when setting text to the textView completes; use {@link + * #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable + */ + public static void fromPlainText(@NonNull final TextView textView, + @NonNull final String plainTextBlock, + @Nullable final StreamingService relatedInfoService, + @Nullable final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables, + @Nullable final Consumer onCompletion) { + textView.setAutoLinkMask(Linkify.WEB_URLS); + textView.setText(plainTextBlock, TextView.BufferType.SPANNABLE); + changeLinkIntents(textView, textView.getText(), relatedInfoService, + relatedStreamUrl, disposables, onCompletion); + } + + /** + * Create links for contents with a markdown description. + * + *

+ * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, + * String, CompositeDisposable, Consumer)} after creating a {@link Markwon} object and using + * {@link Markwon#setMarkdown(TextView, String)}. + *

+ * + * @param textView the {@link TextView} to set the plain text block linked + * @param markdownBlock the block of markdown text to be linked + * @param relatedInfoService if given, handle hashtags to search for the term in the correct + * service + * @param relatedStreamUrl if given, used alongside {@code relatedInfoService} to handle + * timestamps to open the stream in the popup player at the specific + * time + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + * @param onCompletion will be run when setting text to the textView completes; use {@link + * #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable + */ + public static void fromMarkdown(@NonNull final TextView textView, + @NonNull final String markdownBlock, + @Nullable final StreamingService relatedInfoService, + @Nullable final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables, + @Nullable final Consumer onCompletion) { + final Markwon markwon = Markwon.builder(textView.getContext()) + .usePlugin(LinkifyPlugin.create()).build(); + changeLinkIntents(textView, markwon.toMarkdown(markdownBlock), + relatedInfoService, relatedStreamUrl, disposables, onCompletion); + } + + /** + * Change links generated by libraries in the description of a content to a custom link action + * and add click listeners on timestamps in this description. + * + *

+ * Instead of using an {@link android.content.Intent#ACTION_VIEW} intent in the description of + * a content, this method will parse the {@link CharSequence} and replace all current web links + * with {@link ShareUtils#openUrlInBrowser(Context, String, boolean)}. + *

+ * + *

+ * This method will also add click listeners on timestamps in this description, which will play + * the content in the popup player at the time indicated in the timestamp, by using + * {@link TextLinkifier#addClickListenersOnTimestamps(Context, SpannableStringBuilder, + * StreamingService, String, CompositeDisposable)} method and click listeners on hashtags, by + * using {@link TextLinkifier#addClickListenersOnHashtags(Context, SpannableStringBuilder, + * StreamingService)}, which will open a search on the current service with the hashtag. + *

+ * + *

+ * This method is required in order to intercept links and e.g. show a confirmation dialog + * before opening a web link. + *

+ * + * @param textView the {@link TextView} to which the converted {@link CharSequence} + * will be applied + * @param chars the {@link CharSequence} to be parsed + * @param relatedInfoService if given, handle hashtags to search for the term in the correct + * service + * @param relatedStreamUrl if given, used alongside {@code relatedInfoService} to handle + * timestamps to open the stream in the popup player at the specific + * time + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + * @param onCompletion will be run when setting text to the textView completes; use {@link + * #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable + */ + private static void changeLinkIntents(@NonNull final TextView textView, + @NonNull final CharSequence chars, + @Nullable final StreamingService relatedInfoService, + @Nullable final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables, + @Nullable final Consumer onCompletion) { + disposables.add(Single.fromCallable(() -> { + final Context context = textView.getContext(); + + // add custom click actions on web links + final SpannableStringBuilder textBlockLinked = + new SpannableStringBuilder(chars); + final URLSpan[] urls = textBlockLinked.getSpans(0, chars.length(), + URLSpan.class); + + for (final URLSpan span : urls) { + final String url = span.getURL(); + final LongPressClickableSpan longPressClickableSpan = + new UrlLongPressClickableSpan(context, disposables, url); + + textBlockLinked.setSpan(longPressClickableSpan, + textBlockLinked.getSpanStart(span), + textBlockLinked.getSpanEnd(span), + textBlockLinked.getSpanFlags(span)); + textBlockLinked.removeSpan(span); + } + + // add click actions on plain text timestamps only for description of contents, + // unneeded for meta-info or other TextViews + if (relatedInfoService != null) { + if (relatedStreamUrl != null) { + addClickListenersOnTimestamps(context, textBlockLinked, + relatedInfoService, relatedStreamUrl, disposables); + } + addClickListenersOnHashtags(context, textBlockLinked, relatedInfoService); + } + + return textBlockLinked; + }).subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + textBlockLinked -> + setTextViewCharSequence(textView, textBlockLinked, onCompletion), + throwable -> { + Log.e(TAG, "Unable to linkify text", throwable); + // this should never happen, but if it does, just fallback to it + setTextViewCharSequence(textView, chars, onCompletion); + })); + } + + /** + * Add click listeners which opens a search on hashtags in a plain text. + * + *

+ * This method finds all timestamps in the {@link SpannableStringBuilder} of the description + * using a regular expression, adds for each a {@link LongPressClickableSpan} which opens + * {@link NavigationHelper#openSearch(Context, int, String)} and makes a search on the hashtag, + * in the service of the content when pressed, and copy the hashtag to clipboard when + * long-pressed, if allowed by the caller method (parameter {@code addLongClickCopyListener}). + *

+ * + * @param context the {@link Context} to use + * @param spannableDescription the {@link SpannableStringBuilder} with the text of the + * content description + * @param relatedInfoService used to search for the term in the correct service + */ + private static void addClickListenersOnHashtags( + @NonNull final Context context, + @NonNull final SpannableStringBuilder spannableDescription, + @NonNull final StreamingService relatedInfoService) { + final String descriptionText = spannableDescription.toString(); + final Matcher hashtagsMatches = HASHTAGS_PATTERN.matcher(descriptionText); + + while (hashtagsMatches.find()) { + final int hashtagStart = hashtagsMatches.start(1); + final int hashtagEnd = hashtagsMatches.end(1); + final String parsedHashtag = descriptionText.substring(hashtagStart, hashtagEnd); + + // Don't add a LongPressClickableSpan if there is already one, which should be a part + // of an URL, already parsed before + if (spannableDescription.getSpans(hashtagStart, hashtagEnd, + LongPressClickableSpan.class).length == 0) { + final int serviceId = relatedInfoService.getServiceId(); + spannableDescription.setSpan( + new HashtagLongPressClickableSpan(context, parsedHashtag, serviceId), + hashtagStart, hashtagEnd, 0); + } + } + } + + /** + * Add click listeners which opens the popup player on timestamps in a plain text. + * + *

+ * This method finds all timestamps in the {@link SpannableStringBuilder} of the description + * using a regular expression, adds for each a {@link LongPressClickableSpan} which opens the + * popup player at the time indicated in the timestamps and copy the timestamp in clipboard + * when long-pressed. + *

+ * + * @param context the {@link Context} to use + * @param spannableDescription the {@link SpannableStringBuilder} with the text of the + * content description + * @param relatedInfoService the service of the {@code relatedStreamUrl} + * @param relatedStreamUrl what to open in the popup player when timestamps are clicked + * @param disposables disposables created by the method are added here and their + * lifecycle should be handled by the calling class + */ + private static void addClickListenersOnTimestamps( + @NonNull final Context context, + @NonNull final SpannableStringBuilder spannableDescription, + @NonNull final StreamingService relatedInfoService, + @NonNull final String relatedStreamUrl, + @NonNull final CompositeDisposable disposables) { + final String descriptionText = spannableDescription.toString(); + final Matcher timestampsMatches = TimestampExtractor.TIMESTAMPS_PATTERN.matcher( + descriptionText); + + while (timestampsMatches.find()) { + final TimestampExtractor.TimestampMatchDTO timestampMatchDTO = + TimestampExtractor.getTimestampFromMatcher(timestampsMatches, descriptionText); + + if (timestampMatchDTO == null) { + continue; + } + + spannableDescription.setSpan( + new TimestampLongPressClickableSpan(context, descriptionText, disposables, + relatedInfoService, relatedStreamUrl, timestampMatchDTO), + timestampMatchDTO.timestampStart(), + timestampMatchDTO.timestampEnd(), + 0); + } + } + + private static void setTextViewCharSequence(@NonNull final TextView textView, + @Nullable final CharSequence charSequence, + @Nullable final Consumer onCompletion) { + textView.setText(charSequence); + textView.setVisibility(View.VISIBLE); + if (onCompletion != null) { + onCompletion.accept(textView); + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/TimestampExtractor.java b/app/src/main/java/org/schabi/newpipe/util/text/TimestampExtractor.java similarity index 78% rename from app/src/main/java/org/schabi/newpipe/util/external_communication/TimestampExtractor.java rename to app/src/main/java/org/schabi/newpipe/util/text/TimestampExtractor.java index a13c66402..be603f41a 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/TimestampExtractor.java +++ b/app/src/main/java/org/schabi/newpipe/util/text/TimestampExtractor.java @@ -1,4 +1,7 @@ -package org.schabi.newpipe.util.external_communication; +package org.schabi.newpipe.util.text; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -15,17 +18,18 @@ public final class TimestampExtractor { } /** - * Get's a single timestamp from a matcher. + * Gets a single timestamp from a matcher. * - * @param timestampMatches The matcher which was created using {@link #TIMESTAMPS_PATTERN} - * @param baseText The text where the pattern was applied to / - * where the matcher is based upon - * @return If a match occurred: a {@link TimestampMatchDTO} filled with information.
- * If not null. + * @param timestampMatches the matcher which was created using {@link #TIMESTAMPS_PATTERN} + * @param baseText the text where the pattern was applied to / where the matcher is + * based upon + * @return if a match occurred, a {@link TimestampMatchDTO} filled with information, otherwise + * {@code null}. */ + @Nullable public static TimestampMatchDTO getTimestampFromMatcher( - final Matcher timestampMatches, - final String baseText) { + @NonNull final Matcher timestampMatches, + @NonNull final String baseText) { int timestampStart = timestampMatches.start(1); if (timestampStart == -1) { timestampStart = timestampMatches.start(2); diff --git a/app/src/main/java/org/schabi/newpipe/util/text/TimestampLongPressClickableSpan.java b/app/src/main/java/org/schabi/newpipe/util/text/TimestampLongPressClickableSpan.java new file mode 100644 index 000000000..f5864794a --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/TimestampLongPressClickableSpan.java @@ -0,0 +1,78 @@ +package org.schabi.newpipe.util.text; + +import static org.schabi.newpipe.util.text.InternalUrlsHandler.playOnPopup; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.NonNull; + +import org.schabi.newpipe.extractor.ServiceList; +import org.schabi.newpipe.extractor.StreamingService; +import org.schabi.newpipe.util.external_communication.ShareUtils; + +import io.reactivex.rxjava3.disposables.CompositeDisposable; + +final class TimestampLongPressClickableSpan extends LongPressClickableSpan { + + @NonNull + private final Context context; + @NonNull + private final String descriptionText; + @NonNull + private final CompositeDisposable disposables; + @NonNull + private final StreamingService relatedInfoService; + @NonNull + private final String relatedStreamUrl; + @NonNull + private final TimestampExtractor.TimestampMatchDTO timestampMatchDTO; + + TimestampLongPressClickableSpan( + @NonNull final Context context, + @NonNull final String descriptionText, + @NonNull final CompositeDisposable disposables, + @NonNull final StreamingService relatedInfoService, + @NonNull final String relatedStreamUrl, + @NonNull final TimestampExtractor.TimestampMatchDTO timestampMatchDTO) { + this.context = context; + this.descriptionText = descriptionText; + this.disposables = disposables; + this.relatedInfoService = relatedInfoService; + this.relatedStreamUrl = relatedStreamUrl; + this.timestampMatchDTO = timestampMatchDTO; + } + + @Override + public void onClick(@NonNull final View view) { + playOnPopup(context, relatedStreamUrl, relatedInfoService, + timestampMatchDTO.seconds(), disposables); + } + + @Override + public void onLongClick(@NonNull final View view) { + ShareUtils.copyToClipboard(context, getTimestampTextToCopy( + relatedInfoService, relatedStreamUrl, descriptionText, timestampMatchDTO)); + } + + @NonNull + private static String getTimestampTextToCopy( + @NonNull final StreamingService relatedInfoService, + @NonNull final String relatedStreamUrl, + @NonNull final String descriptionText, + @NonNull final TimestampExtractor.TimestampMatchDTO timestampMatchDTO) { + // TODO: use extractor methods to get timestamps when this feature will be implemented in it + if (relatedInfoService == ServiceList.YouTube) { + return relatedStreamUrl + "&t=" + timestampMatchDTO.seconds(); + } else if (relatedInfoService == ServiceList.SoundCloud + || relatedInfoService == ServiceList.MediaCCC) { + return relatedStreamUrl + "#t=" + timestampMatchDTO.seconds(); + } else if (relatedInfoService == ServiceList.PeerTube) { + return relatedStreamUrl + "?start=" + timestampMatchDTO.seconds(); + } + + // Return timestamp text for other services + return descriptionText.subSequence(timestampMatchDTO.timestampStart(), + timestampMatchDTO.timestampEnd()).toString(); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/TouchUtils.java b/app/src/main/java/org/schabi/newpipe/util/text/TouchUtils.java new file mode 100644 index 000000000..5c0db20a3 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/TouchUtils.java @@ -0,0 +1,38 @@ +package org.schabi.newpipe.util.text; + +import android.text.Layout; +import android.view.MotionEvent; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +public final class TouchUtils { + + private TouchUtils() { + } + + /** + * Get the character offset on the closest line to the position pressed by the user of a + * {@link TextView} from a {@link MotionEvent} which was fired on this {@link TextView}. + * + * @param textView the {@link TextView} on which the {@link MotionEvent} was fired + * @param event the {@link MotionEvent} which was fired + * @return the character offset on the closest line to the position pressed by the user + */ + public static int getOffsetForHorizontalLine(@NonNull final TextView textView, + @NonNull final MotionEvent event) { + + int x = (int) event.getX(); + int y = (int) event.getY(); + + x -= textView.getTotalPaddingLeft(); + y -= textView.getTotalPaddingTop(); + + x += textView.getScrollX(); + y += textView.getScrollY(); + + final Layout layout = textView.getLayout(); + final int line = layout.getLineForVertical(y); + return layout.getOffsetForHorizontal(line, x); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java b/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java new file mode 100644 index 000000000..eb0d7425e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java @@ -0,0 +1,41 @@ +package org.schabi.newpipe.util.text; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.NonNull; + +import org.schabi.newpipe.util.external_communication.ShareUtils; + +import io.reactivex.rxjava3.disposables.CompositeDisposable; + +final class UrlLongPressClickableSpan extends LongPressClickableSpan { + + @NonNull + private final Context context; + @NonNull + private final CompositeDisposable disposables; + @NonNull + private final String url; + + UrlLongPressClickableSpan(@NonNull final Context context, + @NonNull final CompositeDisposable disposables, + @NonNull final String url) { + this.context = context; + this.disposables = disposables; + this.url = url; + } + + @Override + public void onClick(@NonNull final View view) { + if (!InternalUrlsHandler.handleUrlDescriptionTimestamp( + disposables, context, url)) { + ShareUtils.openUrlInBrowser(context, url, false); + } + } + + @Override + public void onLongClick(@NonNull final View view) { + ShareUtils.copyToClipboard(context, url); + } +} diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeEditText.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeEditText.java index 2adc28d0e..f0993055e 100644 --- a/app/src/main/java/org/schabi/newpipe/views/NewPipeEditText.java +++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeEditText.java @@ -13,9 +13,10 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; /** * An {@link AppCompatEditText} which uses {@link ShareUtils#shareText(Context, String, String)} * when sharing selected text by using the {@code Share} command of the floating actions. + * *

- * This allows NewPipe to show Android share sheet instead of EMUI share sheet when sharing text - * from {@link AppCompatEditText} on EMUI devices. + * This class allows NewPipe to show Android share sheet instead of EMUI share sheet when sharing + * text from {@link AppCompatEditText} on EMUI devices. *

*/ public class NewPipeEditText extends AppCompatEditText { diff --git a/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java b/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java index 8fdac32db..dd3f20f40 100644 --- a/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java +++ b/app/src/main/java/org/schabi/newpipe/views/NewPipeTextView.java @@ -1,6 +1,7 @@ package org.schabi.newpipe.views; import android.content.Context; +import android.text.method.MovementMethod; import android.util.AttributeSet; import androidx.annotation.NonNull; @@ -13,9 +14,11 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; /** * An {@link AppCompatTextView} which uses {@link ShareUtils#shareText(Context, String, String)} * when sharing selected text by using the {@code Share} command of the floating actions. + * *

- * This allows NewPipe to show Android share sheet instead of EMUI share sheet when sharing text - * from {@link AppCompatTextView} on EMUI devices. + * This class allows NewPipe to show Android share sheet instead of EMUI share sheet when sharing + * text from {@link AppCompatTextView} on EMUI devices and also to keep movement method set when a + * text change occurs, if the text cannot be selected and text links are clickable. *

*/ public class NewPipeTextView extends AppCompatTextView { @@ -34,6 +37,16 @@ public class NewPipeTextView extends AppCompatTextView { super(context, attrs, defStyleAttr); } + @Override + public void setText(final CharSequence text, final BufferType type) { + // We need to set again the movement method after a text change because Android resets the + // movement method to the default one in the case where the text cannot be selected and + // text links are clickable (which is the default case in NewPipe). + final MovementMethod movementMethod = this.getMovementMethod(); + super.setText(text, type); + setMovementMethod(movementMethod); + } + @Override public boolean onTextContextMenuItem(final int id) { if (id == android.R.id.shareText) { diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java index 8b8a6ff09..edc6bb6fd 100755 --- a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java +++ b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java @@ -1,5 +1,8 @@ package us.shandian.giga.service; +import static org.schabi.newpipe.BuildConfig.APPLICATION_ID; +import static org.schabi.newpipe.BuildConfig.DEBUG; + import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -22,12 +25,12 @@ import android.os.IBinder; import android.os.Message; import android.os.Parcelable; import android.util.Log; -import android.util.SparseArray; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.collection.SparseArrayCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat.Builder; import androidx.core.app.ServiceCompat; @@ -37,23 +40,21 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.download.DownloadActivity; import org.schabi.newpipe.player.helper.LockManager; +import org.schabi.newpipe.streams.io.StoredDirectoryHelper; +import org.schabi.newpipe.streams.io.StoredFileHelper; +import org.schabi.newpipe.util.Localization; +import org.schabi.newpipe.util.PendingIntentCompat; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.List; import us.shandian.giga.get.DownloadMission; import us.shandian.giga.get.MissionRecoveryInfo; -import org.schabi.newpipe.streams.io.StoredDirectoryHelper; -import org.schabi.newpipe.streams.io.StoredFileHelper; -import org.schabi.newpipe.util.Localization; - import us.shandian.giga.postprocessing.Postprocessing; import us.shandian.giga.service.DownloadManager.NetworkState; -import static org.schabi.newpipe.BuildConfig.APPLICATION_ID; -import static org.schabi.newpipe.BuildConfig.DEBUG; - public class DownloadManagerService extends Service { private static final String TAG = "DownloadManagerService"; @@ -94,7 +95,7 @@ public class DownloadManagerService extends Service { private Builder downloadDoneNotification = null; private StringBuilder downloadDoneList = null; - private final ArrayList mEchoObservers = new ArrayList<>(1); + private final List mEchoObservers = new ArrayList<>(1); private ConnectivityManager mConnectivityManager; private ConnectivityManager.NetworkCallback mNetworkStateListenerL = null; @@ -107,7 +108,8 @@ public class DownloadManagerService extends Service { private int downloadFailedNotificationID = DOWNLOADS_NOTIFICATION_ID + 1; private Builder downloadFailedNotification = null; - private final SparseArray mFailedDownloads = new SparseArray<>(5); + private final SparseArrayCompat mFailedDownloads = + new SparseArrayCompat<>(5); private Bitmap icLauncher; private Bitmap icDownloadDone; @@ -142,7 +144,7 @@ public class DownloadManagerService extends Service { Intent openDownloadListIntent = new Intent(this, DownloadActivity.class) .setAction(Intent.ACTION_MAIN); - mOpenDownloadList = PendingIntent.getActivity(this, 0, + mOpenDownloadList = PendingIntentCompat.getActivity(this, 0, openDownloadListIntent, PendingIntent.FLAG_UPDATE_CURRENT); @@ -276,7 +278,7 @@ public class DownloadManagerService extends Service { } if (msg.what != MESSAGE_ERROR) - mFailedDownloads.delete(mFailedDownloads.indexOfValue(mission)); + mFailedDownloads.remove(mFailedDownloads.indexOfValue(mission)); for (Callback observer : mEchoObservers) observer.handleMessage(msg); @@ -308,7 +310,7 @@ public class DownloadManagerService extends Service { } private void handlePreferenceChange(SharedPreferences prefs, @NonNull String key) { - if (key.equals(getString(R.string.downloads_maximum_retry))) { + if (getString(R.string.downloads_maximum_retry).equals(key)) { try { String value = prefs.getString(key, getString(R.string.downloads_maximum_retry_default)); mManager.mPrefMaxRetry = value == null ? 0 : Integer.parseInt(value); @@ -316,13 +318,13 @@ public class DownloadManagerService extends Service { mManager.mPrefMaxRetry = 0; } mManager.updateMaximumAttempts(); - } else if (key.equals(getString(R.string.downloads_cross_network))) { + } else if (getString(R.string.downloads_cross_network).equals(key)) { mManager.mPrefMeteredDownloads = prefs.getBoolean(key, false); - } else if (key.equals(getString(R.string.downloads_queue_limit))) { + } else if (getString(R.string.downloads_queue_limit).equals(key)) { mManager.mPrefQueueLimit = prefs.getBoolean(key, true); - } else if (key.equals(getString(R.string.download_path_video_key))) { + } else if (getString(R.string.download_path_video_key).equals(key)) { mManager.mMainStorageVideo = loadMainVideoStorage(); - } else if (key.equals(getString(R.string.download_path_audio_key))) { + } else if (getString(R.string.download_path_audio_key).equals(key)) { mManager.mMainStorageAudio = loadMainAudioStorage(); } } @@ -460,7 +462,7 @@ public class DownloadManagerService extends Service { } public void notifyFailedDownload(DownloadMission mission) { - if (!mDownloadNotificationEnable || mFailedDownloads.indexOfValue(mission) >= 0) return; + if (!mDownloadNotificationEnable || mFailedDownloads.containsValue(mission)) return; int id = downloadFailedNotificationID++; mFailedDownloads.put(id, mission); @@ -484,7 +486,8 @@ public class DownloadManagerService extends Service { private PendingIntent makePendingIntent(String action) { Intent intent = new Intent(this, DownloadManagerService.class).setAction(action); - return PendingIntent.getService(this, intent.hashCode(), intent, PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntentCompat.getService(this, intent.hashCode(), intent, + PendingIntent.FLAG_UPDATE_CURRENT); } private void manageLock(boolean acquire) { diff --git a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java index 808928370..bfb6a15e2 100644 --- a/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java +++ b/app/src/main/java/us/shandian/giga/ui/adapter/MissionAdapter.java @@ -48,6 +48,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; +import androidx.core.os.HandlerCompat; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.Adapter; @@ -91,6 +92,10 @@ public class MissionAdapter extends Adapter implements Handler.Callb private static final String UNDEFINED_PROGRESS = "--.-%"; private static final String DEFAULT_MIME_TYPE = "*/*"; private static final String UNDEFINED_ETA = "--:--"; + + private static final String UPDATER = "updater"; + private static final String DELETE = "deleteFinishedDownloads"; + private static final int HASH_NOTIFICATION_ID = 123790; private final Context mContext; @@ -110,9 +115,6 @@ public class MissionAdapter extends Adapter implements Handler.Callb private final ArrayList mHidden; private Snackbar mSnackbar; - private final Runnable rUpdater = this::updater; - private final Runnable rDelete = this::deleteFinishedDownloads; - private final CompositeDisposable compositeDisposable = new CompositeDisposable(); public MissionAdapter(Context context, @NonNull DownloadManager downloadManager, View emptyMessage, View root) { @@ -595,12 +597,12 @@ public class MissionAdapter extends Adapter implements Handler.Callb i.remove(); } applyChanges(); - mHandler.removeCallbacks(rDelete); + mHandler.removeCallbacksAndMessages(DELETE); }); mSnackbar.setActionTextColor(Color.YELLOW); mSnackbar.show(); - mHandler.postDelayed(rDelete, 5000); + HandlerCompat.postDelayed(mHandler, this::deleteFinishedDownloads, DELETE, 5000); } else if (!delete) { mDownloadManager.forgetFinishedDownloads(); applyChanges(); @@ -693,7 +695,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(result -> { - Utility.copyToClipboard(mContext, result); + ShareUtils.copyToClipboard(mContext, result); notificationManager.cancel(HASH_NOTIFICATION_ID); }) ); @@ -786,15 +788,14 @@ public class MissionAdapter extends Adapter implements Handler.Callb public void onResume() { mDeleter.resume(); - mHandler.post(rUpdater); + HandlerCompat.postDelayed(mHandler, this::updater, UPDATER, 0); } public void onPaused() { mDeleter.pause(); - mHandler.removeCallbacks(rUpdater); + mHandler.removeCallbacksAndMessages(UPDATER); } - public void recoverMission(DownloadMission mission) { ViewHolderItem h = getViewHolder(mission); if (h == null) return; @@ -817,7 +818,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb updateProgress(h); } - mHandler.postDelayed(rUpdater, 1000); + HandlerCompat.postDelayed(mHandler, this::updater, UPDATER, 1000); } private boolean isNotFinite(double value) { diff --git a/app/src/main/java/us/shandian/giga/ui/common/Deleter.java b/app/src/main/java/us/shandian/giga/ui/common/Deleter.java index c554766ff..1902076d6 100644 --- a/app/src/main/java/us/shandian/giga/ui/common/Deleter.java +++ b/app/src/main/java/us/shandian/giga/ui/common/Deleter.java @@ -6,6 +6,8 @@ import android.graphics.Color; import android.os.Handler; import android.view.View; +import androidx.core.os.HandlerCompat; + import com.google.android.material.snackbar.Snackbar; import org.schabi.newpipe.R; @@ -19,6 +21,10 @@ import us.shandian.giga.service.DownloadManager.MissionIterator; import us.shandian.giga.ui.adapter.MissionAdapter; public class Deleter { + private static final String COMMIT = "commit"; + private static final String NEXT = "next"; + private static final String SHOW = "show"; + private static final int TIMEOUT = 5000;// ms private static final int DELAY = 350;// ms private static final int DELAY_RESUME = 400;// ms @@ -34,10 +40,6 @@ public class Deleter { private final Handler mHandler; private final View mView; - private final Runnable rShow; - private final Runnable rNext; - private final Runnable rCommit; - public Deleter(View v, Context c, MissionAdapter a, DownloadManager d, MissionIterator i, Handler h) { mView = v; mContext = c; @@ -46,21 +48,15 @@ public class Deleter { mIterator = i; mHandler = h; - // use variables to know the reference of the lambdas - rShow = this::show; - rNext = this::next; - rCommit = this::commit; - items = new ArrayList<>(2); } public void append(Mission item) { - /* If a mission is removed from the list while the Snackbar for a previously * removed item is still showing, commit the action for the previous item * immediately. This prevents Snackbars from stacking up in reverse order. */ - mHandler.removeCallbacks(rCommit); + mHandler.removeCallbacksAndMessages(COMMIT); commit(); mIterator.hide(item); @@ -82,7 +78,7 @@ public class Deleter { pause(); running = true; - mHandler.postDelayed(rNext, DELAY); + HandlerCompat.postDelayed(mHandler, this::next, NEXT, DELAY); } private void next() { @@ -95,7 +91,7 @@ public class Deleter { snackbar.setActionTextColor(Color.YELLOW); snackbar.show(); - mHandler.postDelayed(rCommit, TIMEOUT); + HandlerCompat.postDelayed(mHandler, this::commit, COMMIT, TIMEOUT); } private void commit() { @@ -124,15 +120,16 @@ public class Deleter { public void pause() { running = false; - mHandler.removeCallbacks(rNext); - mHandler.removeCallbacks(rShow); - mHandler.removeCallbacks(rCommit); + mHandler.removeCallbacksAndMessages(NEXT); + mHandler.removeCallbacksAndMessages(SHOW); + mHandler.removeCallbacksAndMessages(COMMIT); if (snackbar != null) snackbar.dismiss(); } public void resume() { - if (running) return; - mHandler.postDelayed(rShow, DELAY_RESUME); + if (!running) { + HandlerCompat.postDelayed(mHandler, this::show, SHOW, DELAY_RESUME); + } } public void dispose() { diff --git a/app/src/main/java/us/shandian/giga/util/Utility.java b/app/src/main/java/us/shandian/giga/util/Utility.java index 4cd424ab9..ecce6639e 100644 --- a/app/src/main/java/us/shandian/giga/util/Utility.java +++ b/app/src/main/java/us/shandian/giga/util/Utility.java @@ -192,18 +192,6 @@ public class Utility { } } - public static void copyToClipboard(Context context, String str) { - ClipboardManager cm = ContextCompat.getSystemService(context, ClipboardManager.class); - - if (cm == null) { - Toast.makeText(context, R.string.permission_denied, Toast.LENGTH_LONG).show(); - return; - } - - cm.setPrimaryClip(ClipData.newPlainText("text", str)); - Toast.makeText(context, R.string.msg_copied, Toast.LENGTH_SHORT).show(); - } - public static String checksum(final StoredFileHelper source, final int algorithmId) throws IOException { ByteString byteString; @@ -248,10 +236,10 @@ public class Utility { return number < 10 ? ("0" + number) : String.valueOf(number); } - public static String stringifySeconds(double seconds) { - int h = (int) Math.floor(seconds / 3600); - int m = (int) Math.floor((seconds - (h * 3600)) / 60); - int s = (int) (seconds - (h * 3600) - (m * 60)); + public static String stringifySeconds(final long seconds) { + final int h = (int) Math.floorDiv(seconds, 3600); + final int m = (int) Math.floorDiv(seconds - (h * 3600L), 60); + final int s = (int) (seconds - (h * 3600) - (m * 60)); String str = ""; diff --git a/app/src/main/res/drawable/ic_format_list_numbered.xml b/app/src/main/res/drawable/ic_format_list_numbered.xml deleted file mode 100644 index b11666c56..000000000 --- a/app/src/main/res/drawable/ic_format_list_numbered.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_menu_book.xml b/app/src/main/res/drawable/ic_menu_book.xml new file mode 100644 index 000000000..4cd4fb3a4 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_book.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_subscriptions.xml b/app/src/main/res/drawable/ic_subscriptions.xml new file mode 100644 index 000000000..f2ac7bec2 --- /dev/null +++ b/app/src/main/res/drawable/ic_subscriptions.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout-large-land/fragment_video_detail.xml b/app/src/main/res/layout-large-land/fragment_video_detail.xml index a29fa8c78..9fdede902 100644 --- a/app/src/main/res/layout-large-land/fragment_video_detail.xml +++ b/app/src/main/res/layout-large-land/fragment_video_detail.xml @@ -319,9 +319,7 @@ android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" - android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="@dimen/video_item_detail_uploader_text_size" - android:textStyle="bold" tools:ignore="RtlHardcoded" tools:text="Uploader" /> @@ -603,19 +601,19 @@ android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" - app:layout_behavior="@string/appbar_scrolling_view_behavior" - android:paddingBottom="48dp"/> + android:paddingBottom="48dp" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + app:tabIconTint="?attr/colorAccent" + app:tabIndicatorGravity="top" /> @@ -627,6 +625,7 @@ android:layout_weight="3" /> + @@ -713,22 +712,22 @@ android:layout_width="40dp" android:layout_height="match_parent" android:background="?attr/selectableItemBackground" - android:padding="10dp" - android:scaleType="center" + android:contentDescription="@string/pause" android:focusable="true" android:focusedByDefault="true" - android:src="@drawable/ic_play_arrow" - tools:ignore="ContentDescription,RtlHardcoded" /> + android:scaleType="center" + android:src="@drawable/ic_play_arrow" /> + tools:ignore="RtlSymmetry" /> diff --git a/app/src/main/res/layout/fragment_video_detail.xml b/app/src/main/res/layout/fragment_video_detail.xml index be3504878..438c618ef 100644 --- a/app/src/main/res/layout/fragment_video_detail.xml +++ b/app/src/main/res/layout/fragment_video_detail.xml @@ -41,9 +41,9 @@ android:id="@+id/detail_thumbnail_image_view" android:layout_width="match_parent" android:layout_height="wrap_content" - android:minHeight="200dp" android:background="?windowBackground" android:contentDescription="@string/detail_thumbnail_view_description" + android:minHeight="200dp" android:scaleType="fitCenter" tools:ignore="RtlHardcoded" tools:layout_height="200dp" @@ -306,9 +306,7 @@ android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" - android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="@dimen/video_item_detail_uploader_text_size" - android:textStyle="bold" tools:ignore="RtlHardcoded" tools:text="Uploader" /> @@ -586,19 +584,19 @@ android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" - app:layout_behavior="@string/appbar_scrolling_view_behavior" - android:paddingBottom="48dp"/> + android:paddingBottom="48dp" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + app:tabIconTint="?attr/colorAccent" + app:tabIndicatorGravity="top" /> @@ -668,8 +666,6 @@ android:layout_height="60dp" android:layout_alignParentEnd="true" android:gravity="center_vertical" - android:paddingLeft="@dimen/video_item_search_padding" - android:paddingRight="@dimen/video_item_search_padding" android:theme="@style/ContrastTintTheme" tools:ignore="RtlHardcoded"> @@ -678,7 +674,7 @@ android:layout_width="40dp" android:layout_height="match_parent" android:background="?attr/selectableItemBackground" - android:padding="10dp" + android:contentDescription="@string/title_activity_play_queue" android:scaleType="center" android:src="@drawable/ic_list" tools:ignore="ContentDescription,RtlHardcoded" /> @@ -688,22 +684,22 @@ android:layout_width="40dp" android:layout_height="match_parent" android:background="?attr/selectableItemBackground" - android:padding="10dp" - android:scaleType="center" + android:contentDescription="@string/pause" android:focusable="true" android:focusedByDefault="true" - android:src="@drawable/ic_play_arrow" - tools:ignore="ContentDescription,RtlHardcoded" /> + android:scaleType="center" + android:src="@drawable/ic_play_arrow" /> + tools:ignore="RtlSymmetry" /> diff --git a/app/src/main/res/layout/item_metadata.xml b/app/src/main/res/layout/item_metadata.xml index 31dedd880..251b9e832 100644 --- a/app/src/main/res/layout/item_metadata.xml +++ b/app/src/main/res/layout/item_metadata.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content" android:paddingVertical="6dp"> - - + tools:text="10M subscribers • 100 videos" /> + + diff --git a/app/src/main/res/layout/list_empty_view.xml b/app/src/main/res/layout/list_empty_view.xml index 21b3b436f..a25042aed 100644 --- a/app/src/main/res/layout/list_empty_view.xml +++ b/app/src/main/res/layout/list_empty_view.xml @@ -19,5 +19,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="6dp" - android:text="@string/empty_subscription_feed_subtitle" /> + android:gravity="center" + android:paddingHorizontal="16dp" + android:text="@string/empty_list_subtitle" /> diff --git a/app/src/main/res/layout/list_empty_view_subscriptions.xml b/app/src/main/res/layout/list_empty_view_subscriptions.xml new file mode 100644 index 000000000..74a5eced4 --- /dev/null +++ b/app/src/main/res/layout/list_empty_view_subscriptions.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/app/src/main/res/layout/list_playlist_card_item.xml b/app/src/main/res/layout/list_playlist_card_item.xml new file mode 100644 index 000000000..c7dd4f17c --- /dev/null +++ b/app/src/main/res/layout/list_playlist_card_item.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_stream_card_item.xml b/app/src/main/res/layout/list_stream_card_item.xml new file mode 100644 index 000000000..968dca082 --- /dev/null +++ b/app/src/main/res/layout/list_stream_card_item.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/list_stream_playlist_card_item.xml b/app/src/main/res/layout/list_stream_playlist_card_item.xml new file mode 100644 index 000000000..9cc6b326c --- /dev/null +++ b/app/src/main/res/layout/list_stream_playlist_card_item.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/player.xml b/app/src/main/res/layout/player.xml index 60cbcf7c4..b528e4e9b 100644 --- a/app/src/main/res/layout/player.xml +++ b/app/src/main/res/layout/player.xml @@ -212,11 +212,11 @@ android:clickable="true" android:focusable="true" android:paddingStart="6dp" - android:paddingTop="5dp" android:paddingEnd="6dp" android:paddingBottom="3dp" + android:paddingTop="3dp" android:scaleType="fitCenter" - android:src="@drawable/ic_format_list_numbered" + android:src="@drawable/ic_menu_book" android:visibility="gone" app:tint="@color/white" tools:ignore="ContentDescription,RtlHardcoded" /> diff --git a/app/src/main/res/layout/playlist_control.xml b/app/src/main/res/layout/playlist_control.xml index 5a8856128..685082013 100644 --- a/app/src/main/res/layout/playlist_control.xml +++ b/app/src/main/res/layout/playlist_control.xml @@ -48,6 +48,8 @@ diff --git a/app/src/main/res/menu/menu_play_queue_item.xml b/app/src/main/res/menu/menu_play_queue_item.xml index b23f8008f..00c63e1e0 100644 --- a/app/src/main/res/menu/menu_play_queue_item.xml +++ b/app/src/main/res/menu/menu_play_queue_item.xml @@ -16,4 +16,7 @@ + \ No newline at end of file diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index bd0658215..02c471d63 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -23,7 +23,7 @@ فاتح خطأ في الشبكة لم يتم العثور على مشغل بث. تثبيت VLC؟ - فتح في المتصفح + فتح في متصفح الويب الصوت تشغيل بواسطة كودي البحث @@ -114,7 +114,7 @@ تعليقك (باللغة الإنجليزية): التفاصيل: لم يتم العثور على نتائج - لا شيء هنا سوى الصراصير + لا شيء هنا سوى الصراصير الصوت إعادة المحاولة ألف @@ -370,8 +370,7 @@ القائمة الشبكة تلقائي - تحديث NewPipe متاح! - اضغط لتنزيل + تحديث NewPipe متاح! انتهى ريثما متوقف @@ -549,7 +548,6 @@ نظرا لقيود مشغل ExoPlayer مدة التقديم تم ضبطها الى %d ثانية إلغاء كتم الصوت كتم الصوت - مساعدة هذا المحتوى ليس مدعومًا من قبل NewPipe. \n \nنأمل أن يكون مدعومًا في التحديثات القادمة. @@ -776,4 +774,14 @@ إذا كنت تواجه مشكلة في استخدام التطبيق ، فتأكد من مراجعة هذه الإجابات للأسئلة الشائعة! مشاهدة على الموقع فرز + أنت تقوم بتشغيل أحدث إصدار من NewPipe + انقر للتنزيل %s + الوضع السريع + استيراد الاشتراكات أو تصديرها من القائمة المكونة من 3 نقاط + هذا الخيار متاح فقط إذا تم تحديد %s للسمة + إلغاء تعيين الصورة المصغرة الدائمة + فشل النسخ إلى الحافظة + البطاقة + تمت إضافة وقت (أوقات) مكررة %d + تحتوي قوائم التشغيل رمادية اللون بالفعل على هذا العنصر. \ No newline at end of file diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml new file mode 100644 index 000000000..be845845a --- /dev/null +++ b/app/src/main/res/values-as/strings.xml @@ -0,0 +1,101 @@ + + + কোনো ষ্ট্ৰিম প্লেয়াৰ পোৱা নগ\'ল (আপুনি ইয়াক বজাবলৈ VLC ইনষ্টল কৰিব পাৰে)। + ইনষ্টল + বাতিল কৰক + ঠিক আছে + ব্ৰাউজাৰত খোলক + POPUP অৱস্থাত খোলক + ...ৰ সৈতে খোলক + চেয়াৰ + %1$s ত প্ৰকাশ কৰা হৈছে + কোনো ষ্ট্ৰিম প্লেয়াৰ পোৱা নগ\'ল। VLC ইনষ্টল কৰক\? + ডাউনল’ড + ষ্ট্ৰিম কৰা ফাইল ডাউনলোড কৰক + সন্ধান কৰক + ছেটিংছ + %s ৰ বাবে ফলাফল দেখুৱা হৈছে + চেয়াৰ কৰক + কিছু ৰিজ’লিউচনত অডিঅ’ আঁতৰাওক + চাবস্ক্ৰাইব কৰা হ\'ল + আনচাবস্ক্ৰাইব + আৰম্ভ কৰিবলৈ মেগনিফাইং গ্লাছৰ চিহ্নত টিপক। + চাবস্ক্ৰাইব + চোৱা হ\'ল (চিহ্নিত কৰক) + আপুনি \"%1$s\" বুজাইছিল নেকি\? + বাহ্যিক ভিডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক + বাহ্যিক অডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক + Channel আনচাবস্ক্ৰাইব কৰা হ\'ল + subscription সলনি কৰিব পৰা নগ\'ল + subscription আপডেট কৰিব পৰা নগ\'ল + তথ্য দেখুৱাওক + চাবস্ক্ৰিপচন + বুকমাৰ্ক কৰা প্লেলিষ্ট + টেব নিৰ্বাচন কৰক + বেকগ্ৰাউণ্ড + পপ-আপ + স্থায়ী ৰিজ\'লিউচন + স্থায়ী পপআপ ৰিজোলিউচন + উচ্চ ৰিজ\'লিউচন দেখুৱাওক + কেৱল কিছুমান ডিভাইচেহে 2K/4K ভিডিঅ’ বজাব পাৰে + Kodi ৰ সৈতে বজাওক + Kore এপ ইনষ্টল\? + \"Kodi ৰ সৈতে খোলক\" বিকল্প দেখুৱাওক + Kodi মিডিয়া চেণ্টাৰৰ জৰিয়তে এটা ভিডিঅ\' চলাবলৈ এটা বিকল্প প্ৰদৰ্শন কৰক + প্লেয়াৰটো ক্ৰেচ কৰক + বাফাৰিং + নথিং + জাননী ৰ‌ঙিণ কৰক + অডিঅ\' + অডিঅ\' ৰ প্ৰকাৰ + ভিডিঅ\'ৰ প্ৰকাৰ + থিম + নিশাৰ থিম + পোহৰ + অন্ধকাৰ + ক\'লা + পপ-আপ বৈশিষ্ট্যসমূহ মনত ৰাখিব + পপ-আপৰ অন্তিম আকাৰ আৰু অৱস্থান মনত ৰাখিব + Inexact seek য়ে প্লেয়াৰটোক দ্ৰুত গতিত স্থান সলনি কৰিবলৈ অনুমতি দিয়ে। ৫, ১৫ বা ২৫ ছেকেণ্ড সলনি কৰিবলৈ বিচাৰিলে ইয়াৰ প্ৰয়োজন নহয় + ফাষ্ট-ফৰৱাৰ্ড/-ৰিৱাইণ্ড কৰিবলৈ বিচৰা সময়সীমা + প্লেবেক লোড কৰাৰ ব্যৱধানৰ আকাৰ + লোড ব্যৱধানৰ আকাৰ সলনি কৰক (বৰ্তমানে %s) । এটা কম মানে প্ৰাৰম্ভিক ভিডিঅ\' লোডিং দ্ৰুত কৰিব পাৰে। পৰিৱৰ্তনৰ বাবে এটা খেলুৱৈ পুনৰাৰম্ভৰ প্ৰয়োজন + থাম্বনেইলত থকা মূল ৰং অনুসৰি এণ্ড্ৰইডক জাননীৰ ৰং কাষ্টমাইজ কৰিবলৈ কওক (মন কৰিব যে এইটো সকলো ডিভাইচতে উপলব্ধ নহয়) + সক্ৰিয় প্লেয়াৰৰ queue সলনি কৰা হ’ব + থাম্বনেইল লোড কৰক + মন্তব্য দেখুৱাওক + বিৱৰণ দেখুৱাওক + মেটা তথ্য দেখুৱাওক + সংৰক্ষিত ছবি মচি পেলোৱা হ\'ল + সংৰক্ষিত কৰি থোৱা মেটাডাটা মচি পেলাওক + সকলো সংৰক্ষণ কৰি ৰখা ৱেবপেজৰ তথ্য আঁতৰাওক + সংৰক্ষণ কৰি থোৱা মেটাডাটা মচি পেলোৱা হ\'ল + পৰৱৰ্তী ষ্ট্ৰিম স্বয়ংক্ৰিয়ভাৱে enque কৰক + সজোৱা + ভিডিঅ\' ডাউনলোড folder + যোগ কৰক + ডাউনলোড কৰা অডিঅ\' ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয় + থাম্বনেইলক ১:১ অনুপাত লৈ ক্ৰপ কৰক + ডাউনলোড কৰা ভিডিঅ’ ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয় + ভিডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder বাছক + অডিঅ\' ডাউনলোড folder + অডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder নিৰ্বাচন কৰক + জাননীত দেখুওৱা ভিডিঅ’ থাম্বনেইলটো ১৬:৯ৰ পৰা ১:১ অনুপাতলৈ ক্ৰপ কৰক + First action button + Fifth action button + Edit each notification action below by tapping on it. Select up to three of them to be shown in the compact notification by using the checkboxes on the right + Second action button + You can select at most three actions to show in the compact notification! + পুনৰাবৃত্তি + শ্বাফেল + দ্ৰুত inexact seek ব্যৱহাৰ কৰক + এটা queue বিলুপ্তি কৰাৰ আগতে নিশ্চিতকৰণৰ বাবে সুধিব + এটা প্লেয়াৰ পৰা আন এটালৈ সলনি কৰিলে আপোনাৰ queue সলনি হ\'ব পাৰে + Fourth action button + Third action button + ভিডিঅ\'ৰ বিৱৰণ আৰু অতিৰিক্ত তথ্য লুকুৱাবলৈ বন্ধ কৰক + মন্তব্য লুকুৱাবলৈ বন্ধ কৰক + \'পৰৱৰ্তী\' আৰু \'সাদৃশ্য থকা\' ভিডিঅ\' দেখুৱাওক + থাম্বনেইলসমূহ লোড কৰা, তথ্য আৰু মেমৰি ব্যৱহাৰ সংৰক্ষণ কৰা ৰোধ কৰিবলে বন্ধ কৰক। পৰিবৰ্তনসমূহে ইন-মেমৰি আৰু অন-ডিস্ক কেশ্ব দুয়োটা পৰিষ্কাৰ কৰে + ষ্ট্ৰিমৰ সৃষ্টিকৰ্তা, ষ্ট্ৰিমৰ বিষয়বস্তু বা এটা সন্ধান অনুৰোধৰ বিষয়ে অতিৰিক্ত তথ্যৰ সৈতে মেটা তথ্যৰ বাকচসমূহ লুকুৱাবলৈ বন্ধ কৰক + \ No newline at end of file diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index b5480ba48..0cce71fb0 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -1,82 +1,82 @@ - Başlamaq üçün böyüdücüyə toxun. + Başlamaq üçün böyüdücü güzgüyə toxun. %1$s tarixində yayımlanıb - Yayım oynadıcı tapılmadı. \"VLC\" yüklənilsin\? - Yayım oynadıcı tapılmadı (Oynatmaq üçün VLC\'ni quraşdıra bilərsiniz). + Yayım oynadıcı tapılmadı. \"VLC\" quraşdırılsın\? + Yayım oynadıcı tapılmadı (Oynatmaq üçün VLC quraşdıra bilərsiniz). Yüklə - İmtina + Ləğv et Brauzerdə aç Paylaş Endir Yayım faylını endir - Axtar + Axtarış Tənzimləmələr - Bunu nəzərdə tuturdunuz: \"%1$s\"\? + Bunu demək istəyirdiniz: \"%1$s\"\? ilə paylaş Xarici video oynadıcı istifadə et - Bəzi qətnamələrdə səsi silir + Bəzi ayırdetmələrdə səsi silir Xarici səs oynadıcı istifadə et - Abunə Olun + Abunə Ol Abunə olundu Kanal abunəliyi ləğv edildi Məlumat göstər - Abunəliklər + Abunələr Əlfəcinlənmiş Pleylistlər Yeniliklər - Arxa Fon + Fon Video endirmə qovluğu Endirilmiş video fayllar burada saxlanılır - Video faylları üçün endirmə qovluğunu seç + Video fayllar üçün endirmə qovluğu seç Səs endirmə qovluğu Endirilmiş səs faylları burada saxlanılır - Səs faylları üçün endirmə qovluğunu seç - Defolt keyfiyyət - Daha böyük keyfiyyət seçimləri göstər + Səs faylları üçün endirmə qovluğu seç + Standart ayırdetmə + Daha böyük ayırdetmələr göstər \"Kodi\" ilə Oynat Çatışmayan \"Kore\" tətbiqi yüklənilsin\? \"Kodi ilə Oynat\" seçimini göstər - Videonu Kodi media mərkəzi ilə oynatmaq üçün seçim göstər + Kodi media mərkəzindən video oynatmaq üçün seçim göstər Səs - Defolt səs formatı - Defolt video formatı - Mövzu + Standart səs formatı + Standart video formatı + Tema İşıqlı Qaranlıq Qara - Abunəlikdən çıxın - Ani pəncərə rejimində aç - Avtomatik oynatma - Endirin - Fasilələrdən sonra (məsələn, telefon zəngləri) oynatmağa davam etdirin + Abunə olma + Ani görüntü rejimində aç + Avtomatik oynat + Yüklə + Fasilələr ardınca (məsələn, telefon zəngləri) oynatmağa davam etdir Oynatmanı davam etdir Baxılmış videoların saxlanılması - Məlumat təmizləmə - Siyahılarda oynatma mövqelərini göstərin + Məlumat təmizlə + Siyahılarda oynatma mövqe göstəricilərini göstər Siyahılardakı mövqelər - Son oynatma mövqeyinə qaytarın + Son oynatma mövqeyini qaytar Oynatmanı davam etdir Baxış tarixçəsi - Axtarış sorğularını yerli olaraq saxlayın + Axtarış sorğularını yerli olaraq saxla Axtarış tarixçəsi - Axtarış edərkən göstəriləcək təklifləri seçin + Axtarış zamanı göstərmək üçün təklifləri seç Axtarış təklifləri - Oynadıcının parlaqlığını nizamlamaq üçün jestlərdən istifadə edin - Parlaqlığı jestlə nizamlama - Oynadıcının səsini nizamlamaq üçün jestlərdən istifadə edin - Səsi jestlə nizamla - Avto-növbələmə - Növbəti Yayımı Avto-növbələmə + Oynadıcı parlaqlığını nizamlamaq üçün jestlər istifadə et + Parlaqlıq jesti idarəetməsi + Oynadıcı səsini nizamlamaq üçün jestlər istifadə et + Səs səviyyəsi jesti idarəetməsi + Avto-növbələ + Növbəti Yayımı Avto-növbələ Üst məlumat keşi silindi Keşlənmiş bütün veb-səhifə məlumatlarını sil Keşlənmiş üst məlumatı təmizlə Şəkil keşi silindi - Şərhləri gizlətmək üçün söndür + Şərhləri gizlətmək üçün bağla Şərhləri göstər - Aktiv oynadıcının növbəsi dəyişdiriləcək + Aktiv oynadıcı növbəsi dəyişdiriləcək Bir oynadıcıdan digərinə keçid növbənizi dəyişdirə bilər Növbəni təmizləməzdən əvvəl təsdiq üçün soruş - Sürətli qeyri-dəqiq axtarışdan istifadə edin + Sürətli qeyri-dəqiq axtarış istifadə et Qeyri-dəqiq axtarış oynadıcıya azaldılmış dəqiqliklə mövqeləri daha sürətli axtarmağa imkan verir. 5, 15 və ya 25 saniyəlik axtarış bununla işləmir Sürətli irəli/geri çəkmə axtarış müddəti Heç nə @@ -89,21 +89,21 @@ İkinci fəaliyyət düyməsi Birinci fəaliyyət düyməsi Yalnız bəzi cihazlar 2K/4K videoları oynada bilir - Defolt ani pəncərə keyfiyyəti + Standart ani görüntü ayırdetməsi Əlavə Et - Ani Pəncərə + Ani Görüntü Paneli Seç Abunəliyi yeniləmək alınmadı - Abunəliyi dəyişdirmək alınmadı + Abunəliyi dəyişmək alınmadı Nəticələr göstərilir: %s Kanallar %s tərəfindən - YouTube\'un \"Məhdud Rejimi\"ni açın - Yaş həddi səbəbiylə (məsələn, 18+) uşaqlar üçün uyğun olmayan məzmunu göstərin + YouTube\'un \"Məhdud Rejimi\"ni aç + Yaş həddi səbəbiylə (məsələn, 18+) uşaqlar üçün uyğun olmayan məzmunu göstər Yaş məhdudiyyətli məzmunu göstər Məzmun - Ani pəncərədə oynadılır - Arxa fonda oynadılır + Ani görüntü rejimində oynadılır + Fonda oynadılır Yeniləmələr Sazlama Görünüş @@ -111,37 +111,37 @@ Video və səs Davranış Oynadıcı - Defolt məzmun dili - Defolt məzmun ölkəsi + Cari məzmun dili + Cari məzmun ölkəsi URL\'i tanımaq olmadı. Başqa tətbiqlə açılsın\? Dəstəklənməyən URL\'i - \"Növbəyə əlavə etmək üçün basılı saxla\" ipucusun göstər + \"Növbələmək üçün basılı saxla\" tövsiyəsin göstər \"Növbəti\" və \"Bənzər\" videoları göstər - Tarixçəni, abunəlikləri, pleylistləri və tənzimləmələri ixrac edin - Cari tarixçənizi, abunəliklərinizi, pleylistlərinizi və (istəyə görə) tənzimləmələrinizi etibarsız edir - reCAPTCHA kukiləri təmizləndi - reCAPTCHA kukilərini təmizləyin - Məlumat bazasını ixrac edin - Məlumat bazasını idxal edin + Tarixçəni, abunəlikləri, pleylistləri və tənzimləmələri ixrac et + Cari tarixçənizi, abunəliklərinizi, pleylistlərinizi və (könüllü) tənzimləmələrinizi etibarsız edir + reCAPTCHA bazaları təmizləndi + reCAPTCHA bazalarını təmizlə + Məlumat bazasını ixrac et + Məlumat bazasını idxal et Əsas Görünüşə Keçid - Ani Pəncərəyə Keçid - Arxa Fona Keçid + Ani Görüntüyə Keçid + Fona Keçid [Naməlum] - Yeni \"NewPipe\" versiyası üçün bildirişlər + Yeni \"NewPipe\" versiyaları üçün bildirişlər Tətbiq yeniləmə bildirişi NewPipe oynadıcısı üçün bildirişlər Hamısı Xəta hesabatı - Endirmələr - Endirmələr + Endirilənlər + Endirilənlər Canlı Bu video yaş məhdudiyyətlidir. \n \nOnu görmək istəyirsinizsə, tənzimləmələrdə \"%1$s\" seçimini aktivləşdirin. YouTube potensial yetkin məzmunu gizlədən \"Məhdud Rejim\" təmin edir - \"PeerTube\" serverləri + \"PeerTube\" nümunələri Miniatürləri yüklə - Siz yığcam bildirişdə göstərilməsi üçün ən çoxu üç fəaliyyət seçə bilərsiniz! + Yığcam bildirişdə göstərmək üçün ən çoxu üç fəaliyyət seçə bilərsiniz! Həmişə yenilə Axın Yalnız qruplaşdırılmamış abunəlikləri göstər @@ -153,7 +153,7 @@ %d seçildi Abunəlik seçilməyib - Abunəlikləri seçin + Abunəlikləri seç Axın emal edilir… Axın yüklənir… Yüklənmədi: %d @@ -166,7 +166,7 @@ Fayl silindi Geri qaytar Ən yaxşı keyfiyyət - Təmizləyin + Təmizlə Qeyri-aktivdir Sənətkarlar Albomlar @@ -177,48 +177,47 @@ Videolar Pleylistlər Xəta - Kömək Axtarış tarixçəsi silindi Bütün axtarış tarixçəsi silinsin\? - Axtarışdakı açar sözlərin tarixçəsini silir - Axtarış tarixçəsini silin + Açar sözləri axtarışı tarixçəsini silir + Axtarış tarixçəsini sil Oynatma mövqeləri silindi Bütün oynatma mövqeləri silinsin\? - Bütün oynatma mövqelərini siləcək - Oynatma mövqelərini silin + Bütün oynatma mövqelərini silir + Oynatma mövqelərini sil Baxış tarixçəsi silindi Bütün baxış tarixçəsi silinsin\? Baxış tarixçəsini təmizlə - reCAPTCHA həll edərkən NewPipe\'ın saxladığı kukiləri silin + reCAPTCHA həll edərkən NewPipe saxladığı bazaları sil %s tərəfindən yaradıldı Yaxınlaşdır Doldur - Dart + Uyğunlaşdır Altyazı Yoxdur - Silin + Sil Hələ ki, kanal abunəliyi yoxdur - Kanal seçin + Kanal seç Kanal Səhifəsi - Defolt Köşk - Köşk Səhifəsi + Standart Köşk + Köşk Səhifə Boş Səhifə Əsas səhifədə hansı tablar göstərilir - Əsas səhifənin məzmunu + Əsas səhifə məzmunu Yeni versiya mövcud olduqda tətbiq yeniləməsini xatırlatmaq üçün bildiriş göstər Yeniləmələr - Mobil internet istifadə edərkən görüntü keyfiyyətini məhdudlaşdır + Mobil internet istifadə edərkən ayırdetməni məhdudlaşdır Limitsiz 1 element silindi. - Server əlavə edin - Sevimli \"PeerTube\" serverlərinizi seçin - Endirilmiş faylları silin - Endirmə tarixçənizi təmizləmək və ya endirilmiş bütün faylları silmək istəyirsiniz\? + Nümunə əlavə et + Sevimli \"PeerTube\" nümunələrinizi seçin + Endirilmiş faylları sil + Endirmə tarixçənizi təmizləmək və ya bütün endirilmiş faylları silmək istəyirsiniz\? Endirmə tarixçəsini təmizlə - Endirmələrə başla - Endirmələrə fasilə verin + Endirmələri başlat + Endirmələri dayandır Haraya endiriləcəyini soruş Sizdən hər endirmənin harada saxlanılacağı soruşulacaq. -\nXarici SD karta yükləmək istəyirsinizsə, sistem qovluğu seçicisini (SAF) aktiv edin +\nXarici SD karta endirmək istəyirsinizsə, sistem qovluğu seçicisini (SAF) aktiv edin
\'Yaddaş Giriş Çərçivəsi \' xarici SD karta endirməyə imkan verir Sistem defoltu Tətbiq dili @@ -242,13 +241,13 @@ Axın yeniləmə astanası Sürətli rejimi aktivləşdir Sürətli rejimi deaktiv et - Axının çox yavaş yükləndiyini düşünürsünüz\? Əgər elədirsə, sürətli yükləməni işə salmağı sınayın (tənzimləmələrdən dəyişə və ya aşağıdakı düyməni basa bilərsiniz). + Axının çox yavaş yükləndiyini düşünürsünüz\? Əgər elədirsə, sürətli yükləməni işə salmağı sınayın (tənzimləmələrdə dəyişə və ya aşağıdakı düyməni basa bilərsiniz). \n \nNewPipe axını yükləmək üçün 2 metod təklif edir: \n• Bütün abunəlik kanallarını gətirtmək, bu yavaş olsa da tamdır; \n• Ayrılmış xidmət uc nöqtəsi istifadə etmək, bu sürətlidir, amma tam deyil. \n -\nBu ikisi arasında fərq odur ki, sürətlisində, adətən elementin müddəti və növü kimi bəzi məlumatlar çatışmır (canlı video ilə adisini ayırd edə bilmir) və daha az element gətirir. +\nBu ikisi arasında fərq odur ki, sürətlisində, adətən elementin müddəti və növü kimi bəzi məlumatlar çatışmır (canlı video ilə adisini ayırd edə bilmir) və daha az elementlər gətirir. \n \nYouTube öz RSS axını ilə bu sürətli metodu təklif edən xidmətlərdən biridir. \n @@ -263,26 +262,26 @@ Xarici yaddaş əlçatan deyil Oynadılmış yayımlar tarixçəsini və oynatma mövqelərini silir Üst məlumatı göstər - Video açıqlamasını və əlavə məlumatı gizlətmək üçün söndürün + Video açıqlamanı və əlavə məlumatı gizlətmək üçün bağla Açıqlamanı göstər - Bildirişi rəngləndir + Bildirişi rənglə Belə qovluq yoxdur Əsas oynadıcını tam ekranda başlat Xarici oynadıcılar bu cür linkləri dəstəkləmir Yerli axtarış təklifləri Video - Əlaqədar yayımlar + Əlaqəli elementlər Baxılmış kimi işarələ ilə aç - Gecə Mövzusu + Gecə Teması Ani pəncərə xüsusiyyətlərini xatırla Ani pəncərənin son ölçüsü və mövqeyini xatırla Video yayımı tapılmadı Şərhlər Açıqlama - Burada kriketlərdən başqa heç nə yoxdur + Burada kriketlərdən başqa heç nə yoxdur Nəticə yoxdur - İlkin tənzimləmələri qaytarın + Standartları qaytar Fayl köçürüldü və ya silindi Oynadıcı xətası bərpa edilir Bərpa olunmayan oynatma xətası baş verdi @@ -290,48 +289,48 @@ Bu video yaş məhdudiyyətlidir. \nYaş məhdudiyyəti olan videolarla bağlı yeni YouTube siyasətlərinə görə, NewPipe bu cür video yayımlara daxil ola və oynada bilməz. Səs yayımı tapılmadı - Digər tətbiqlərin üzərində göstərməyə icazə verin + Digər tətbiqlərin üzərində göstərməyə icazə ver İlkin tənzimləmələri qaytarmaq istəyirsiniz\? - Miniatürlərin yüklənməsini, dataya qənaət etmək və yaddaşdan istifadəni azaltmaq üçün söndürün. Dəyişikliklər həm yaddaşdaxili, həm də diskdə olan təsvir keşini təmizləyir - Növbətini sıraya salın - Yenidən Cəhd Edin - Cari oynatma yayımı bildirişini konfiqurasiya edin + Miniatürləri yükləməyi, məlumata qənaət və yaddaş istifadəsin azaltmaq üçün söndür. Dəyişikliklər həm yaddaşdaxilində, həm də diskdə təsvir keşini təmizləyir + Növbətini növbələ + Təkrar Cəhd Et + Cari oynatma yayımı bildirişini konfiqurasiya et Bildirişlər Video fayl xülasəsi bildirişi Abunəliklər üçün yeni yayımlar haqqında bildirişlər Xəta hesabatları üçün bildirişlər Fayl adı boş ola bilməz - Yadda saxlanmış tabları oxumaq mümkün olmadı, buna görə defolt tablardan istifadə edin - NewPipe xəta ilə qarşılaşdı, bildirmək üçün toxunun - Bağışlayın, belə olmamalı idi. - Bu xətanı e-poçt vasitəsilə bildirin - GitHub\'da Hesabat Verin + Saxlanmış tabları oxumaq mümkün olmadı, buna görə standart tabları istifadə et + NewPipe xəta ilə qarşılaşdı, bildirmək üçün toxun + Bağışla, o baş verməməli idi. + Bu xətanı e-poçt-dan bildir + GitHub\'da Məlumat Ver Zəhmət olmasa, xətanızı müzakirə edən məsələnin mövcud olub-olmadığını yoxlayın. Dublikat biletləri yaradarkən, bizdən faktiki səhvi düzəltməyə sərf edəcəyimiz vaxt alırsınız. - Hesabat Bildirin + Məlumat Ver Məlumat: Nə baş verdi: Yükləyənin avatar miniatürü - Bəyəni - Bəyənməmə - Yenidən sıralamaq üçün sürüşdürün - m - M - M - Xidməti dəyişin,hazırda seçilmiş: + Bəyən + Bəyənmə + Yenidən sıralamaq üçün sürüklə + min + Mln + Mlrd + Xidməti dəyiş, hazırda seçilmiş: Abunəçi yoxdur Baxış yoxdur Heç kim izləmir Heç kim dinləmir Video yoxdur Şərhlər qeyri-aktivdir - Başladın - Dayandırın + Başlat + Dayandır Təsdiqləmə İmtina Xəta - Detallar üçün toxunun + Detallar üçün toxun Zəhmət olmasa, gözləyin… - Hələ endirmə qovluğu təyin edilməyib, indi defolt endirmə qovluğunu seçin + Hələ endirmə qovluğu təyin edilməyib, indi standart endirmə qovluğu seç reCAPTCHA çağırışı reCAPTCHA sorğusu göndərildi Bitdi @@ -340,21 +339,21 @@ Ən xüsusi simvollar Üçüncü Tərəf Lisenziyaları Haqqında & T-TSS - Töhfə Verin - Fikirlərinizin olub-olmaması, tərcümə, dizayn dəyişiklikləri, kodun təmizlənməsi və ya real ağırlıqlı kod dəyişiklikləri və.s kömək həmişə xoşdur. Nə qədər çox edilsə, bir o qədər yaxşı olar! - İanə Edin + Töhfə Ver + Fikirlərinizin olub-olmaması, tərcümə, dizayn dəyişiklikləri, kod təmizlənməsi və ya real ağır kod dəyişiklikləri və.s kömək həmişə xoşdur. Nə qədər çox edilsə, bir o qədər yaxşı olar! + İanə Et Veb sayt - Əlavə məlumat və xəbərlər üçün NewPipe Veb saytına daxil olun. - NewPipe\'ın Məxfilik Siyasəti - NewPipe layihəsi məxfiliyinizə çox ciddi yanaşır. Buna görə də, tətbiq sizin razılığınız olmadan heç bir məlumat toplamır. -\nNewPipe\'ın məxfilik siyasəti qəza hesabatı göndərdiyiniz zaman hansı məlumatların göndərildiyini və saxlanıldığını ətraflı izah edir. - Məxfilik siyasətini oxuyun - NewPipe\'ın Lisenziyası + Əlavə məlumat və xəbərlər üçün NewPipe Veb saytını ziyarət et. + NewPipe Məxfilik Siyasəti + NewPipe layihəsi məxfiliyinizə çox ciddi yanaşır. Nəticə etibarı ilə, tətbiq sizin razılığınız olmadan heç bir məlumat toplamır. +\nNewPipe məxfilik siyasəti xəta məlumatı göndərdiyiniz zaman hansı məlumatların göndərildiyini və saxlanıldığını ətraflı izah edir. + Məxfilik Siyasətini Oxu + NewPipe Lisenziyası Tarixçə Bu elementi axtarış tarixçəsindən silmək istəyirsiniz\? Son Oynadılan Ən Çox Oynadılan - Köşk seçin + Köşk seç İdxal edildi Etibarlı ZIP faylı yoxdur Xəbərdarlıq: Bütün faylları idxal etmək mümkün olmadı. @@ -367,15 +366,15 @@ Konfranslar Oynatma növbəsi Detallar - Kanal təfərrüatlarını göstərin - Ani pəncərədə oynatmağa başlayın + Kanal təfərrüatlarını göstər + Ani görüntüdə oynatmağa başla \"Açıq\" fəaliyyətə üstünlük verilir - Arxa Fon oynadıcı - Həmişə soruşun + Fon oynadıcı + Həmişə soruş Tələb olunan məzmun yüklənir Yeni Pleylist - Adını dəyişdirin - Pleylistə əlavə edin + Adını dəyişdir + Pleylistə əlavə et Emal edilir... Bir az vaxt ala bilər Səsi aç Pleylisti Əlfəcinlə @@ -387,11 +386,11 @@ Avtomatik yaradıldı Altyazılar LeakCanary yoxdur - Yaddaş sızmasının monitorinqi yığın boşaltma zamanı tətbiqin cavab verməməsinə səbəb ola bilər - Yaddaş sızmalarını göstərin - Utilizasiyadan sonra fraqment və ya fəaliyyətin yaşam dövründən kənarda çatdırıla bilməyən Rx istisnaları barədə hesabat verməyə məcbur edin + Yaddaş sızma monitorinqi yığın boşaltma zamanı tətbiqin cavab verməməsinə səbəb ola bilər + Yaddaş sızmalarını göstər + Utilizasiyadan sonra fraqment və ya fəaliyyətin yaşam dövründən kənarda çatdırıla bilməyən Rx istisnaları barədə hesabat verməyə məcbur et Xidmətlərdən alınmış orijinal mətnlər yayım elementlərində görünəcək - Yeni yayımları yoxlayın + Yeni yayımları yoxla URL və ya ID\'nizi daxil etməklə SoundCloud profilini idxal edin: \n \n1. Veb-brauzerdə \"iş masası rejimini\" aktiv edin (sayt mobil cihazlar üçün mövcud deyil) @@ -402,18 +401,18 @@ Unutmayın ki, bu əməliyyat şəbəkəyə ağır yük ola bilər. \n \nDavam etmək istəyirsiniz\? - Sükut zamanı sürətlə irəlilə + Səssizlik zamanı sürətlə irəli Yeni yayım bildirişləri - Abunəliklərdən yeni yayımlar haqqında bildiriş göndər + Abunəliklərdən yeni yayımlar haqqında bildir Yoxlama tezliyi Tələb olunan şəbəkə bağlantısı İstənilən şəbəkə - Tətbiq keçidində kiçildin - Arxa Fon oynadıcısına kiçildin - Ani-pəncərə oynadıcısına kiçildin - Oynatmağa avtomatik başlayın — %s - Aşağı keyfiyyətli (daha kiçik) - Göstərməyin + Tətbiq keçidində kiçilt + Fon oynadıcısına kiçilt + Ani-pəncərə oynadıcısına kiçilt + Oynatmanı avtomatik başlat — %s + Aşağı keyfiyyət (daha kiçik) + Göstərmə Endirmə uğursuz oldu Server çox iş parçalı endirmələri qəbul etmir, @string/msg_threads = 1 ilə yenidən cəhd edin Bütün endirilmiş fayllar diskdən silinsin\? @@ -427,26 +426,26 @@ Bu məzmun hələ NewPipe tərəfindən dəstəklənmir. \n \nÜmid edirik ki, gələcək versiyada dəstəklənəcək. - Həm kilid ekranı fonu, həm də bildirişlər üçün miniatürdən istifadə edin + Həm kilid ekranı fonu, həm də bildirişlər üçün miniatür istifadə et Ən Yeni Bu məzmun ölkənizdə mövcud deyil. Bu məzmun yalnız ödəniş etmiş istifadəçilər üçün əlçatandır, ona görə də NewPipe tərəfindən yayımlana və ya endirilə bilməz. - Avtomatik (cihaz mövzusu) - Sevimli gecə mövzunuzu seçin — %s + Avtomatik (cihaz teması) + Sevimli gecə temanızı seçin — %s Sabitlənmiş şərh Bildirişlər deaktiv edilib - Bildiriş alın + Bildiriş al Artıq bu kanala abunə oldunuz , - Hamısını dəyişdirin + Hamısını dəyişdir Fayl adı - Həll edin + Həll et Abunəlikləri ixrac etmək mümkün olmadı %s izləyici %s izləyici - Yeni versiyaları əlinizlə yoxlayın + Yeni versiyaları əl ilə yoxla %s dinləyici %s dinləyici @@ -455,7 +454,7 @@ %s video %s video - Yeniləmələri yoxlayın + Yeniləmələri yoxla Axtarış çubuğunun miniatür önizləməsi Əməliyyat sistem tərəfindən ləğv edildi Avto @@ -465,57 +464,57 @@ Sizdən hər endirmənin harada saxlanılacağı soruşulacaq \"Yaddaş Giriş Çərçivəsi\"yalnız Android 10\'dan başlayaraq dəstəklənir Kanalın avatar miniatürü - Sevdiyiniz gecə mövzusunu aşağıda seçə bilərsiniz + Sevdiyiniz gecə temasını aşağıda seçə bilərsiniz Android\'in bildiriş rəngini miniatürdəki əsas rəngə uyğun fərdiləşdirməsini təmin et (qeyd edək ki, bu, bütün cihazlarda mövcud deyil) - GitHub\'da Baxın - İanə Edin - NewPipe, sizə ən yaxşı istifadəçi təcrübəsini göstərmək üçün boş vaxtlarını sərf edən könüllülər tərəfindən hazırlanmışdır. Tərtibatçılara bir fincan qəhvə içərkən NewPipe-ı daha da yaxşılaşdırmağa ianə etməklə kömək edin. + GitHub\'da Bax + İanə Et + NewPipe, sizə ən yaxşı istifadəçi təcrübəsi göstərmək üçün boş vaxtlarını sərf edən könüllülər tərəfindən hazırlanmışdır. Tərtibatçılara bir fincan qəhvə içərkən NewPipe-ı daha da yaxşılaşdırmağa ianə etməklə kömək edin. Ən çox bəyənildi Növbəyə salındı - Məzmunu açarkən defolt hərəkət — %s + Məzmunu açarkən standart hərəkət — %s Ad - Pleylist miniatürü kimi təyin edin + Pleylist miniatürü kimi təyin et Yalnız Wi-Fi\'da Heç vaxt Siyahı görünüş rejimi Siyahı - Tor - Yüksək keyfiyyətli (daha böyük) - Gözlənilir - növbədə - son proseslər tətbiq olunur + Şəbəkə + Yüksək keyfiyyət (daha böyük) + Gözlənilən + növbədədir + sonrakı emal olunur Yeniləmələr yoxlanılır… - NewPipe yeniləməsi mövcuddur! + NewPipe yeniləməsi mövcuddur! Lisenziya Müəllifin hesabı bağlanıb. \nNewPipe gələcəkdə bu axını yükləyə bilməyəcək. -\nBu kanala abunəlikdən çıxmaq istəyirsiniz\? - Baxılmış elementləri göstərin +\nBu kanaldan abunəliyi çıxarmaq istəyirsiniz\? + Baxılan elementləri göstər Seçilmiş Çəkməcəni Bağla Video oynadıcı Video fayl xülasəsi prosesi üçün bildirişlər - Miniatürü 1:1 aspekt nisbətinə kəsin - Yükləmə intervalının həcmini dəyişdirin (hazırda %s). Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər. Dəyişikliklər oynadıcının yenidən başladılmasını tələb edir - Yayım yaradıcısı, məzmunu və ya axtarış sorğusu haqqında əlavə məlumat olan üst məlumat qutularını gizlətmək üçün söndürün - Əlaqədar yayımı əlavə etməklə (təkrarlanmayan) sonlanacaq oynatma sırasını davam etdir + Miniatürü 1:1 görünüş nisbətinə kəs + Yükləmə intervalı həcmini dəyişdir (hazırda %s). Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər. Dəyişikliklər oynadıcını yenidən başlatmağı tələb edir + Yayım yaradıcısı, məzmunu və ya axtarış sorğusu haqqında əlavə məlumat olan üst məlumat qutularını gizlətmək üçün söndür + Əlaqəli yayımı əlavə etməklə (təkrarlanmayan) sonlanacaq oynatma növbəsini davam etdir Kənar axtarış təklifləri - Server artıq mövcuddur - Videoları mini oynadıcıda başlatma, avtomatik fırlatma kilidlidirsə, birbaşa tam ekran rejiminə keçid. Siz hələ də tam ekran rejimindən çıxmaqla mini pleyerə daxil ola bilərsiniz + Nümunə artıq mövcuddur + Videoları kiçik oynadıcıda başlatma, avtomatik fırlatma kilidlidirsə, birbaşa tam ekran rejiminə keçid. Siz hələ də tam ekrandan çıxmaqla mini oynadıcıya daxil ola bilərsiniz 100+ video ∞ video Şərhlər yoxdur - Həll edildikdə \"Bitdi\" düyməsini basın - Pleylist seçin + Həll edildikdə \"Bitdi\" düyməsini bas + Pleylist seç Şərhləri yükləmək mümkün olmadı Trenddə olan Səs Tənzimləmələri Məlumat əldə edilir… - Elementlərdə orijinal əvvəlki vaxtı göstərin - Yaşam dövrəsi xaricindəki xətaları bildirin - Şəkil göstəricilərini göstərin - Şəkillərin üzərində mənbəsini göstərən Pikasso rəngli lentləri göstərin: şəbəkə üçün qırmızı, disk üçün mavi və yaddaş üçün yaşıl + Elementlərdə orijinal əvvəlki vaxtı göstər + Yaşam dövrəsi xaricindəki xətaları bildir + Şəkil göstəricilərini göstər + Şəkillərin üzərində mənbəsini göstərən Picasso rəngli lentləri göstər: şəbəkə üçün qırmızı, disk üçün mavi və yaddaş üçün yaşıl Bəzi endirmələri dayandırmaq mümkün olmasa da, mobil dataya keçərkən faydalıdır Bağla Fayl silindiyi üçün irəliləyiş itirildi @@ -526,14 +525,14 @@ Hesab ləğv edildi %s bu səbəbi təmin edir: Endirmə başladı - Açıqlamadakı mətni seçməyi deaktiv edin + Açıqlamadakı mətni seçməyi deaktiv et Kateqoriya Daxili - Açıqlamadakı mətni seçməyi aktivləşdirin + Açıqlamadakı mətni seçməyi aktivləşdir Etiketlər Planşet rejimi Bağla - Müəllifə ürəkləndi + Müəllifdən ürəkləndi Veb saytı aç %s baxış @@ -544,18 +543,18 @@ %s yeni yayım %s yeni yayım - Sıfırlayın + Sıfırla Faiz Yarımton Endirmə tamamlandı - %s endirmələr tamamlandı + %s endirmə tamamlandı - Defolt ExoPlayer - Mövcud olduqda xüsusi axından alın + Standart ExoPlayer + Mövcud olduqda xüsusi axından al Baxılmış videolar silinsin\? - İzlənilmişi silin - Sistem qovluğu seçicisini (SAF) istifadə edin + İzləniləni sil + Sistem qovluğu seçicisini (SAF) istifadə et Bağlantı fasiləsi Cihazda yer qalmayıb Fayl üzərində işləyərkən NewPipe bağlandı @@ -567,12 +566,11 @@ Bu adla bir endirmə davam edir faylın üzərinə yazıla bilməz Bu adda endirilmiş fayl artıq mövcuddur - Üzərinə yazın - Növbəyə qoyun + Üzərinə yaz + Növbəyə qoy bərpa olunur dayandırıldı Bitdi - Endirmək üçün toxunun Heç biri Əsas video oynadıcıdan digər tətbiqə keçid zamanı hərəkət — %s İmtina @@ -584,20 +582,20 @@ İdxal edilir… Pleylistə salındı Səsi bağla - Ani pəncərə oynadıcı + Ani görüntü oynadıcı Çəkməcəni Aç - Növbəyə saxlamaq üçün basılı tutun - Silin + Növbələşdirmək üçün basılı tut + Sil Android\'də pulsuz yüngül yayımlayıcı. © %1$s, %2$s tərəfindən %3$s altında Bu faylı oynatmaq üçün heç bir tətbiq quraşdırılmayıb Endirmə - Bu icazə, ani pəncərə rejimində + Bu icazə, ani görüntü rejimində \naçmaq üçün lazımdır Buferə kopyalandı Parçalar Adını dəyişdir - Yaradın + Yarat %s abunəçi %s abunəçi @@ -606,33 +604,33 @@ Təfərrüatlar: Nə:\\nTələb:\\nMəzmun Dili:\\nMəzmun Ölkəsi:\\nTətbiq Dili:\\nXidmət:\\nGMT Saatı:\\nPaket:\\nVersiya:\\nƏS versiyası: Bağışlayın, nəsə xəta baş verdi. - Formatlanmış hesabatı kopyalayın - Server URL\'sini daxil edin - Serveri doğrulamaq mümkün olmadı - %s-də bəyəndiyiniz serverləri tapın - Video \"Təfsilatlar:\"səhifəsində arxa fon və ya ani pəncərə düyməsini basarkən ipucu göstər - Oynadıcı altyazı miqyasını və arxa fon üslublarını dəyişdirin. Effektiv olması üçün tətbiqin yenidən başladılması tələb olunur + Formatlanmış hesabatı kopyala + Nümunə URL\'sini daxil et + Nümunəni doğrulamaq mümkün olmadı + %s-də bəyəndiyiniz nümunələri tapın + Video \"Təfsilatlar:\"səhifəsində fon və ya ani görüntü düyməsin basarkən ipucu göstər + Oynadıcı altyazı mətn miqyasını və arxa fon üslublarını dəyişdir. Effektiv olması üçün tətbiqi yenidən başlatmaq tələb olunur Xəta baş verdi: %1$s Fayl mövcud deyil, yaxud oxumaq və ya yazmaq icazəsi yoxdur Veb saytı təhlil etmək alınmadı - Səs ucalığı + Ucalıq Radio - \"Oynadıcını çökdür\" Göstərin - Oynadıcıdan istifadə edərkən çökdürmə seçimini göstərin + \"Oynadıcını çökdür\" Göstər + Oynadıcını istifadə edərkən çökdürmə seçimini göstər Xəta balonu göstər - Xəta bildirişi yaradın - Burdan idxal edin - Bura ixrac edin - Faylı idxal edin + Xəta bildirişi yarat + Burdan idxal et + Bura ixrac et + Faylı idxal et Abunəlikləri idxal etmək mümkün olmadı - Avropa Ümumi Məlumat Mühafizəsi Qaydasına (GDPR) riayət etmək üçün diqqətinizi NewPipe\'ın məxfilik siyasətinə cəlb edirik. Zəhmət olmasa, diqqətlə oxuyun. Xəta hesabatını bizə göndərmək üçün onu qəbul etməlisiniz. + Avropa Ümumi Məlumat Mühafizəsi Qaydasına (GDPR) riayət etmək üçün diqqətinizi NewPipe məxfilik siyasətinə cəlb edirik. Zəhmət olmasa, diqqətlə oxuyun. Xəta hesabatın bizə göndərmək üçün qəbul etməlisiniz. Bu adda fayl artıq mövcuddur Bu adla gözlənilən bir endirmə var Təyinat qovluğu yaradıla bilməz - Bənzərsiz ad yaradın + Bənzərsiz ad yarat Bölmələr Cihazınızdakı heç bir tətbiq bunu aça bilməz - Miniatürü göstərin + Miniatürü göstər Bu, ən azı sizin ölkənizdə olan SoundCloud Go+ trekidir, ona görə də NewPipe tərəfindən yayımlamaq və ya endirmək mümkün deyil. Bu məzmun şəxsidir, ona görə də NewPipe tərəfindən yayımlamaq və ya endirmək mümkün deyil. Dəstək @@ -645,7 +643,7 @@ Dil İctimai Abunəçi sayı əlçatan deyil - Lisenziyanı oxuyun + Lisenziyanı Oxu Tarixçə Hərflər və rəqəmlər Oynadıcını çökdür @@ -653,28 +651,28 @@ Oynadıcı bildirişi Yeni yayımlar Xəta hesabatı bildirişi - Video URL\'i imzasının şifrəsi qırılmadı - Endirmək üçün heç bir yayım yoxdur - Xəta baş verdi, bildirişə baxın - Şərhiniz (İngilis dilində): - Videonu oynadın, müddət: - Zəhmət olmasa, daha sonra tənzimləmələrdə endirmə qovluğunu təyin edin + Video URL\'i imzası şifrəsi qırılmadı + Endirmək üçün yayım mövcud deyil + Xəta baş verdi, bildirişi gör + Şərhiniz (İngiliscə): + Video oynat, müddət: + Zəhmət olmasa, endirmə qovluğunu daha sonra tənzimləmələrdə təyin et NewPipe Endirilir Hash hesablanır Fayl adlarında icazə verilən simvollar NewPipe Haqqında Lisenziyalar - NewPipe müəllif hüquqlu sərbəst tətbiqdir: Siz onu istədiyiniz zaman istifadə edə, öyrənə, paylaşa və təkmilləşdirə bilərsiniz. Xüsusilə, siz Lisenziyanın 3-cü versiyası və ya (seçiminizə görə) hər hansı sonrakı versiyada Azad Proqram Təminatı Fondu tərəfindən dərc edilən GNU Ümumi İctimai Lisenziyanın şərtlərinə uyğun olaraq onu yenidən paylaya və/yaxud dəyişdirə bilərsiniz. + NewPipe müəllif hüquqlu sərbəst tətbiqdir: Siz onu istədiyiniz zaman istifadə edə, öyrənə, paylaşa və təkmilləşdirə bilərsiniz. Xüsusilə, siz Lisenziyanın 3-cü versiyası və ya (seçiminizə görə) hər hansı sonrakı versiyada Azad Proqram Təminatı Fondu tərəfindən dərc edilən GNU Ümumi İctimai Lisenziya şərtlərinə uyğun olaraq onu yenidən paylaya və/yaxud dəyişdirə bilərsiniz. İxrac edildi - Elementləri silmək üçün sürüşdürün + Elementləri silmək üçün sürüşdür Hələ,əlfəcinlənmiş pleylistlər yoxdur Bu, cari quraşdırmanızı ləğv edəcək. Növbəyə qoy Qara ekranla qarşılaşsanız və ya videonu oynatdıqda səs qırılarsa, media tunelini deaktiv edin Növbəti sıraya salındı - Arxa fonda oynatmağa başlayın + Fonda oynatmağa başla Yayım təfərrüatları yüklənir… - Media tunelini deaktiv edin + Media tunelini deaktiv et Tətbiq çökdü YouTube abunəliklərini Google takeout\'dan \nidxal edin: @@ -683,7 +681,7 @@ \n2. Soruşulduqda daxil olun \n3.\"Bütün Məlumatlar Daxildir\",sonra \"Heçbirini Seçmə\", yalnız \"abunəliklər\"i seçin və \"Oldu\" kliklə \n4. \"Növbəti addım\"üzərinə klikləyin, sonra isə \"İxrac Yarat\" üzərinə klikləyin -\n5. Görünəndən sonra \"Endirin\"düyməsini basın +\n5. Görünəndən sonra \"Endir\"düyməsini basın \n6. Aşağıdakı FAYLI İDXAL ET düyməsinə klikləyin və endirilmiş .zip faylını seçin \n7. [Əgər .zip faylı idxalı uğursuz olsa] .csv faylını çıxarın(adətən\"YouTubevəYouTubeMusic/subscriptions/subscriptions.csv\" altında),aşağıda İDXAL EDİLƏN FAYL-ı klikləyin və çıxarılmış csv faylını seçin Oynatma Sürəti Nizamlamaları @@ -695,7 +693,7 @@ %1$s endirmə silindi Dayandır - Nümunə seçin + Nümunə seç Sürətli axın rejimi bu barədə əlavə məlumat vermir. ExoPlayer məhdudiyyətlərinə görə axtarış müddəti %d saniyəyə təyin edildi Bəzi xidmətlərdə mövcuddur, adətən daha sürətli olur, lakin məhdud sayda elementləri və çox vaxt natamam məlumatı qaytara bilər (məsələn, müddət, element növü, canlı status yoxdur) @@ -706,8 +704,8 @@ \nZəhmət olmasa ,Yaddaş Giriş Çərçivəsinə uyğun fayl menecerini quraşdırın Bu video yalnız YouTube Music Premium üzvləri üçün əlçatandır, ona görə də NewPipe tərəfindən yayımlamaq və ya endirmək mümkün deyil. İndi açıqlamadakı mətni seçə bilərsiniz. Nəzərə alın ki, seçim rejimində səhifə titrəyə və keçidlər kliklənməyə bilər. - Bildirişdə göstərilən video miniatürünü 16:9-dan 1:1 nisbətinə qədər kəs - Aşağıdakı bildiriş fəaliyyətini hər birinin üzərinə toxunaraq redaktə edin. Sağdakı təsdiq qutularından istifadə edərək yığcam bildirişdə göstərilməsi üçün onlardan üçə qədərini seç + Bildirişdə göstərilən video miniatürünü 16:9-dan 1:1 görünüş nisbətinə qədər kəs + Aşağıdakı hər bir bildiriş fəaliyyətini üzərinə toxunaraq redaktə et. Sağdakı təsdiq qutularından istifadə edərək yığcam bildirişdə göstərmək üçün onların üçünü seç Belə fayl/məzmun mənbəyi yoxdur Seçilmiş yayım xarici oynadıcılar tərəfindən dəstəklənmir Yükləyici tərəfindən hələ dəstəklənməyən yayımlar göstərilmir @@ -718,10 +716,20 @@ Naməlum keyfiyyət Oynatma yükləmə intervalı həcmi Gələcək elementləri göstər - Baxılan elementləri gizlədin + Baxılan elementləri gizlət Gələcək elementləri gizlət - Tətbiqdən istifadə etməkdə çətinlik çəkirsinizsə, ümumi suallara bu cavabların yoxlanıldığına əmin ol! + Tətbiqi istifadə etməkdə çətinlik çəkirsinizsə, ümumi suallara bu cavabları yoxladığınıza əmin olun! Tez-tez soruşulan suallar - Veb Saytında baxın + Veb Saytında bax Çeşidlə + NewPipe\'ın ən son versiyasın işlədirsiniz + Sürətli rejim + 3 nöqtə menyudan abunələri idxal və ya ixrac et + %s endirmək üçün toxun + Bu seçim yalnız tema üçün %s seçildikdə əlçatandır + Daimi miniatürü ləğv et + Kart + Buferə kopyalamaq alınmadı + Boz rəngdə olan pleylistlərdə artıq bu element var. + Dublikat %d dəfə əlavə edildi \ No newline at end of file diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 611c2dd03..12739ba41 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -73,7 +73,7 @@ La meyor resolución Avisu permanente de NewPipe Nun hai resultaos - Equí nun hai más que grillos + Equí nun hai más que grillos %s soscriptor %s soscriptores @@ -236,8 +236,7 @@ Soscribiéstite Nun hai vídeos ¿Desaniciar tol historial de busques\? - ¡Hai un anovamientu pa NewPipe! - Toca pa baxalu + ¡Hai un anovamientu pa NewPipe! Perdióse\'l progresu porque se desanició\'l ficheru Instancies de PeerTube La instancia yá esiste @@ -479,7 +478,6 @@ Fallu de la rede La descarga a la tarxeta SD nun ye posible. ¿Reafitar l\'allugamientu de la carpeta de descarga\? L\'almacenamientu esternu nun ta disponible - Ayuda Desanicióse l\'historial de busques. Desanicia l\'historial de les pallabres clave de busca Llimpiar l\'historial de busca diff --git a/app/src/main/res/values-b+uz+Latn/strings.xml b/app/src/main/res/values-b+uz+Latn/strings.xml index 05ad40fa6..323dda73d 100644 --- a/app/src/main/res/values-b+uz+Latn/strings.xml +++ b/app/src/main/res/values-b+uz+Latn/strings.xml @@ -281,7 +281,7 @@ Audio Video Qayta tartiblash uchun tortish - Bu erda kriketlardan boshqa hech narsa yo\'q + Bu erda kriketlardan boshqa hech narsa yo\'q Natija yo\'q Dislayklar Layklar @@ -325,7 +325,6 @@ Tashqi SD-kartaga yuklab olishning iloji yo\'q. Yuklash papkasining joylashuvi tiklansinmi\? Tashqi xotira mavjud emas Xato - Yordam Qidiruv tarixi o\'chirildi. Butun qidiruv tarixi o\'chirilsinmi\? Qidiruv kalit so\'zlar tarixini o\'chiradi @@ -453,8 +452,7 @@ to\'xtatildi Kutilmoqda Tugatildi - Yuklash uchun bosing - NewPipe yangilanishi mavjud! + NewPipe yangilanishi mavjud! Avto Tarmoq Ro\'yxat diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 8254855f5..8ed10b126 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -157,7 +157,7 @@ Спадабалася Не спадабалася Няма вынікаў - Нічога няма + Нічога няма Перацягніце, каб змяніць парадак Відэа Аўдыё @@ -355,8 +355,7 @@ Спіс Сетка Аўтаматычна - Даступна абнаўленне NewPipe! - Націсніце для загрузкі + Даступна абнаўленне NewPipe! Скончана У чарзе прыпынена @@ -464,7 +463,6 @@ Багрэпарт на GitHub Скапіруйце адфарматаваны багрэпарт Дайце дазвол на адлюстраванне паверх іншых праграм - Дапамога Выдаліць усе пазіцыі прайгравання\? Выдаліць пазіцыі прайгравання Ачысціць reCAPTCHA cookies diff --git a/app/src/main/res/values-ber/strings.xml b/app/src/main/res/values-ber/strings.xml index 0d6c89db5..3912381fc 100644 --- a/app/src/main/res/values-ber/strings.xml +++ b/app/src/main/res/values-ber/strings.xml @@ -52,7 +52,6 @@ ⴰⴼⵉⴷⵢⵓ ⵉⵔⵉⵜⵏ ⵜⴰⵣⴳⵍⵜ - ⵜⵉⵡⵉⵙⵉ ⴰⴼⴰⵢⵍⵓ ⵖⵔ ⵎⴰⵕⵕⴰ ⵉⵜⵜⵡⴰⴽⴽⵙ ⵓⴼⴰⵢⵍⵓ diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 5ac2b1db8..0c1ce484f 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -106,7 +106,7 @@ Харесвания Нехаресвания Няма резултати - Тук няма нищо + Тук няма нищо Видео Аудио Опитай отново @@ -398,10 +398,9 @@ Само при Wi-Fi Вид на списъка Възстанови последната позиция - Нова версия на NewPipe е налична! + Нова версия на NewPipe е налична! Миниатюри на лентата за превъртане Нискокачествени (малки) - Докоснете за изтегляне на опашка Актуализации Презаписване @@ -478,7 +477,6 @@ Коментарите са изключени Кои раздели се показват на началната страница Няма свободно място на устройството - Помощ %d секунда %d секунди diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 730150552..34d507ee3 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -178,7 +178,6 @@ এরর দেখান ডাউনলোড ব্যর্থ হয়েছে স্থগিত - ডাউনলোড করতে টোকা দিন অটো সীমাহীন কোন ক্যাপশন নেই @@ -231,7 +230,6 @@ প্লেয়ার এর এরর থেকে বেরিয়ে আসুন স্ট্রিম টি চালানো গেল না বাহ্যিক স্টোরেজ নেই - সাহায্য অনুসন্ধান ইতিহাস মোছা হয়েছে সমগ্র সার্চ ইতিহাস মুছবেন\? সার্চের ইতিহাস মোছা হয় @@ -364,7 +362,7 @@ সমস্যা হয়েছে, নোটিফিকেশন দেখুন তৈরিকৃত রিপোর্ট কপি করো সম্পর্কিত আইটেমসমূহ - ঝিঁঝিঁপোকা ছাড়া এখানে কিছু নেই + ঝিঁঝিঁপোকা ছাড়া এখানে কিছু নেই পুনর্বিন্যাস্ত করতে টান দিন গ্রাহকসংখ্যা সুলভ নয় কেউ দেখছে না @@ -392,7 +390,7 @@ পঞ্চম পদক্ষেপ বোতাম ভিডিও বর্ণনা ও বাড়তি তথ্য লুকাতে বন্ধ করুন দেখিও না - নিউ পাইপ আপডেট এসেছে! + নিউ পাইপ আপডেট এসেছে! মন্তব্যসমূহ নিষ্ক্রিয় আছে %s বার দেখেছে diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 00468f7f7..096674cce 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -153,7 +153,6 @@ সার্ভার পাওয়া যায় নি ডাউন লোড হয় নি পজ হয়েছে - ডাউন লোড করার জন্য চাপ দিন অটো গ্রিড ক্যাপশন @@ -197,7 +196,6 @@ দান করুন তৈরি করুন পুনরায় চেষ্টা করুন - সাহায্য দেখার ইতিহাস মুছে গেছে সম্পূর্ণ দেখার ইতিহাস মুছে ফেলুন\? দেখার ইতিহাস মুছে ফেলুন diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 4b90b22e2..46d12a8b6 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -17,7 +17,6 @@ ডাউন লোড হয় নি পজ হয়েছে সম্পূর্ণ - ডাউন লোড করার জন্য চাপ দিন অটো ছক তালিকা @@ -146,7 +145,6 @@ নেটওয়ার্ক ত্রুটি বাহ্যিক স্টোরেজ নেই ত্রুটি - সাহায্য সার্চ ইতিহাস ডিলিট হয়েছে সমগ্র সার্চ ইতিহাস মুছবেন\? সার্চের ইতিহাস মোছা হয় @@ -344,7 +342,7 @@ কেউ শুনছে না কেউ দেখছে না সেবাটি পরিবর্তন করো, বর্তমানে নির্বাচিত: - ঝিঝিপোকা ছাড়া কিছুই নেই এখানে + ঝিঝিপোকা ছাড়া কিছুই নেই এখানে এই ধরনের কোন ফাইল/বিষয়বস্তুর উৎস নেই অপুনরুদ্ধারযোগ্য প্লেয়ার ত্রুটি ঘটেছে ইন্সট্যান্সটি যাচাই করা যায়নি @@ -470,7 +468,7 @@ পরিমাপকৃত নেটওয়ার্কে বাধা দাও এই ডাউনলোড উদ্ধার করা যাচ্ছে না এই ফাইলের উপর লেখা যাচ্ছে না - নিউপাইপ হালনাগাদ আছে! + নিউপাইপ হালনাগাদ আছে! ভাসমান চালকের ক্ষুদ্রকরণ করো প্লেয়ার পটভূমিতে ক্ষুদ্রকরণ করো অ্যাপ পরিবর্তনে ক্ষুদ্রকরণ করো @@ -646,4 +644,5 @@ ভুক্তি মুছতে ডানে-বামে সরাও সম্প্রচার বিষয়ক তথ্য প্রক্রিয়ারত… ভবিষ্যৎ ভুক্তি দেখাও + প্লেব্যাক লোড বিরতির আকার \ No newline at end of file diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 099203790..fc9abd891 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -33,7 +33,7 @@ Depuració Contingut Mostra el contingut restringit a menors - Directe + En directe Baixades Baixades Tot @@ -93,7 +93,7 @@ S\'està exportant… Importa un fitxer Publicat el %1$s - No s\'ha trobat cap reproductor de fluxos. Instal·lar el VLC\? + No s\'ha trobat cap reproductor en temps real. Voleu instal·lar el VLC\? No s\'ha trobat cap reproductor de fluxos (podeu instal·lar el VLC per reproduir-ho). Obre en mode emergent Baixa el fitxer de vídeo @@ -109,7 +109,7 @@ Els fitxers de vídeo baixats es desen aquí Trieu la carpeta de baixades per als fitxers de vídeo Els fitxers d\'àudio baixats es desen aquí - Trieu la carpeta de baixades per als fitxers d\'àudio + Trieu la carpeta de baixada per als fitxers d\'àudio Resolució per defecte del mode emergent Mostra resolucions superiors Només alguns dispositius poden reproduir vídeos en 2K/4K @@ -120,7 +120,7 @@ Reproductor emergent intel·ligent Recorda la darrera mida i posició del reproductor emergent Cerca ràpida poc precisa - "La cerca poc precisa permet que el reproductor cerqui una posició més ràpidament amb menys precisió. Cerques de 5, 15 o 25 segons no funcionaran" + La cerca poc precisa permet que el reproductor cerqui una posició més ràpidament amb menys precisió. Cerques de 5, 15 o 25 segons no funcionaran Carrega les miniatures S\'ha eliminat la memòria cau d\'imatges Elimina les metadades de la memòria cau @@ -129,7 +129,7 @@ Suggeriments de cerca Mostra suggeriments durant la cerca Historial de cerca - Reprèn la reproducció després d\'una interrupció (per exemple, una trucada) + Reprèn la reproducció després d\'una interrupció (exemple: una trucada) Mostra el vídeo següent i similars País per defecte dels continguts Llengua per defecte dels continguts @@ -153,7 +153,7 @@ El fitxer no existeix o bé no teniu permisos de lectura/escriptura El nom del fitxer no pot estar en blanc S\'ha produït un error: %1$s - Informa d\'aquest error per correu electrònic + Informeu de l\'error per correu electrònic S\'han produït alguns errors. Informe Informació: @@ -165,7 +165,7 @@ M\'agrada No m\'agrada Cap resultat - No hi ha res aquí + No hi ha res aquí Torna a provar Cap subscripció Cap reproducció @@ -299,7 +299,7 @@ No hi ha vídeos que es puguin baixar Subtítols Modifica la mida i el fons dels subtítols. Cal reiniciar l\'aplicació per aplicar els canvis - No s\'ha trobat cap aplicació que pugui reproduir aquest fitxer + No s\'ha trobat cap aplicació instal·lada que pugui reproduir aquest fitxer Neteja l\'historial de reproduccions Neteja l\'historial dels vídeos reproduïts i les posicions de reproducció Voleu suprimir tot l\'historial de reproduccions\? @@ -315,7 +315,7 @@ El projecte NewPipe es pren molt seriosament la vostra privadesa. Per aquesta raó, l\'aplicació no emmagatzema cap dada sense el vostre consentiment. \nLa política de privadesa del NewPipe descriu detalladament quines dades s\'envien i s\'emmagatzemen quan envieu un informe d\'error. Llegiu la política de privadesa - Per complir amb el Reglament General de Protecció de Dades europeu (GDPR), us demanem que pareu atenció a la política de privadesa del NewPipe. Llegiu-la detingudament. + Per complir amb el Reglament General de Protecció de Dades Europeu (GDPR), us demanem que pareu atenció a la política de privadesa del NewPipe. Llegiu-la detingudament. \nSi voleu informar d\'un error, l\'haureu d\'acceptar. Accepta Rebutja @@ -347,7 +347,7 @@ Llista Quadrícula Automàtic - Una nova versió del NewPipe està disponible! + Una nova versió del NewPipe està disponible! Pendent en pausa a la cua @@ -359,7 +359,7 @@ Atura Esdeveniments Notificacions de noves versions del NewPipe - El nombre de subscriptors no està disponible + Nombre de subscriptors no disponible Quines pestanyes es mostren a la pàgina principal Conferències Mode de vista de llista @@ -381,14 +381,13 @@ Sobreescriu No s\'ha trobat Mostra els comentaris - Desactiveu-ho amagar els comentaris + Desactiveu-ho per no mostrar comentaris Reproducció automàtica Cap comentari No s\'han pogut carregar els comentaris Tanca S\'ha produït un error en llegir les pestanyes desades; s\'estan utilitzant les pestanyes per defecte Mostra una notificació per demanar l\'actualització de l\'aplicació si hi ha una versió nova disponible - Toqueu per baixar El servidor no està enviant dades Notificació d\'actualització de l\'aplicació Reprèn la reproducció @@ -438,10 +437,9 @@ Desactivar Silenci Silenciar Prem «Fet» quan estigui resolt - ∞ vídeos + Vídeos ∞ 100+ vídeos - Permeteu dibuixar a sobre d\'altres aplicacions - Ajuda + Concedeix permisos per a poder reproduir els continguts a sobre d\'altres aplicacions Artistes Àlbums Cançons @@ -683,4 +681,26 @@ Mostra una opció de fallada quan s\'utilitza el reproductor Mostra les cintes de color Picasso a la part superior de les imatges que indiquen la seva font: vermell per a la xarxa, blau per al disc i verd per a la memòria El LeakCanary no està disponible + Comprovant freqüència + Es necesita una conexió a Internet + Qualsevol xarxa + , + Notificació del reproductor + Notificacions + Si tens problemes utilitzant la aplicació, comprova las preguntes freqüents! + Ejecutar comprovació per nous streams + Cargant detalls del stream… + Notificacions estan desactivades + Percent + Preguntes freqüents + Veure a la pàgina web + Borrar tots el fitxers descargats al disc\? + Ser notificat + Ara estás subscrit a aquest canal + Selecciona la qualitat per reproductors externs + Format desconegut + Cualitat desconeguda + Ordenar + Configura la notificació de reproducció actual. + Canvia la mida de l\'interval de càrrega (actualment %s). Un valor inferior pot accelerar la càrrega inicial del vídeo. Els canvis requereixen un reinici del jugador. \ No newline at end of file diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index 4c53c11b9..00ac35aff 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -192,7 +192,6 @@ ناتوانرێت ماڵپەڕ شیبکرێتەوە ڕه‌نووسه‌ ڕێپێدراوه‌كان له‌ فایله‌ ناوییه‌كاندا ئایدییەکەت ، soundcloud.com/yourid - یارمەتی چی نوێ هه‌یه‌ كرتە بکە بۆ وردەکاری شوێنی هەموو کارپێکراوەکان بسڕدرێنەوە؟ @@ -354,7 +353,6 @@ هه‌ندێك له‌ قه‌باره‌كان ده‌نگیان تێدا نامێنێته‌وه‌ ڕووداوەکان وێنۆچکەی کەسی بەرزکەرەوە - كرتە بکە بۆ دابه‌زاندن هاورده‌كرا دابه‌زاندنه‌كان کۆنترۆڵی خێرایی کارپێکەر @@ -387,7 +385,7 @@ زۆرترین بەدڵ سڕینەوە جۆری بنەڕەتی ڤیدیۆ - هیچ شتێک لێرەدا نییە + هیچ شتێک لێرەدا نییە سڕینەوە هەمان فۆڵدەر بوونی نییە نیشانه‌كردنی خشته‌لێدان @@ -519,7 +517,7 @@ \nهەڵبژێرەری فۆڵدەری سیستەم کارابکە (SAF) گەر دەتەوێت بابەتەکانت لە بیرگەی دەرەکیدا داببەزێنرێن دواین لێدراو ناتوانرێ لیستی دابه‌زاندن دابنرێت - وەشانی نوێی نیوپایپ بەردەستە! + وەشانی نوێی نیوپایپ بەردەستە! وێنۆچکەی خشتەلێدان گۆڕدرا. هێنانەوەی پەڕەی کەسی SoundCloud بەدانانی بەستەر یاخوود ئایدی: \n diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index e790a5fe4..abc77e66c 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -11,16 +11,16 @@ Nastavení Mysleli jste „%1$s“\? Sdílet s - Použít externí video přehrávač + Použít externí přehrávač videí Použít externí audio přehrávač - Stažené audio je uloženo zde + Sem bude ukládáno stažené audio Zvolte adresář pro stažené audio soubory Adresář pro stažené audio Výchozí rozlišení Přehrát pomocí Kodi Nainstalovat chybějící aplikaci Kore\? Adresář pro stažená videa - Stažená videa jsou uložena tady + Sem budou ukládána stažená videa Zvolte adresář pro stažená videa Zobrazit možnost „Přehrát pomocí Kodi“ Zobrazit možnost přehrání videa pomocí multimediálního centra Kodi @@ -124,7 +124,7 @@ Oznámení NewPipe Oznámení pro NewPipe přehrávač Žádné výsledky - Je tu sranda jak v márnici + Je tu sranda jak v márnici mld. Žádní odběratelé @@ -213,7 +213,7 @@ Žádný platný soubor ZIP Upozornění: Nelze importovat všechny soubory. Tímto se anuluje vaše aktuální nastavení. - Video přehrávač + Přehrávač videa Přehrávač na pozadí Přehrávač v okně Získávám informace… @@ -298,7 +298,7 @@ Výška tónu Odpojit (může způsobit zkreslení) Ke stažení nejsou dostupné žádné streamy - Preferovaná \'otevřít\' akce + Preferovaná akce „otevření“ Výchozí chování při otevírání obsahu — %s Titulky Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace @@ -360,8 +360,7 @@ Seznam Mřížka Automaticky - Aktualizace NewPipe je k dispozici! - Klepněte pro stažení + Aktualizace NewPipe je k dispozici! Hotovo Vyčkávání Pozastaveno @@ -470,7 +469,6 @@ Kvůli omezením ExoPlayer bylo prohledávání nastaveno na %d vteřin Ztišit Obnovit hlasitost - Nápověda %d minuta %d minuty @@ -552,7 +550,7 @@ Ukazuji výsledky pro: %s Nikdy Pouze na Wi-Fi - Zahájit playback automaticky — %s + Automaticky zahájit přehrávání — %s Přehrát frontu Nelze rozpoznat zadané URL. Otevřít pomocí jiné aplikace\? Auto-fronta @@ -600,7 +598,7 @@ Vypnout pro skrytí popisu videa a doplňkové informace Zbořit aplikaci Stahování bylo zahájeno - Můžete si zvolit svůj oblíbený motiv níže + Níže si můžete zvolit svůj oblíbený motiv Zvolte si svůj oblíbený noční motiv - %s Automatický (motiv zařízení) Radio @@ -670,7 +668,7 @@ Ukázat indikátory obrázků Vzdálené návrhy vyhledávání Lokální návrhy vyhledávání - Pokud je vypnuté automatické otáčení, nespouštějte video v mini přehrávači, ale přepněte se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky + Pokud je vypnuté automatické otáčení, nespouštět video v mini přehrávači, ale přepnout se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky Další ve frontě Přidat do fronty (další) Tažením položky odstraníte @@ -730,11 +728,21 @@ Zobrazit nadcházející položky Streamy, které zatím nejsou podporovány systémem stahování, nebudou zobrazeny Vyberte kvalitu pro externí přehrávače - U externích přehrávačů nejsou dostupné žádné video streamy + U externích přehrávačů nejsou k dispozici žádné videostreamy Skrýt zhlédnuté položky Skrýt nadcházející položky Často kladené dotazy Pokud máte potíže s používáním aplikace, přečtěte si tyto odpovědi na časté otázky! Zobrazit na webu Řazení + Klepnutím stáhnete %s + Rychlý režim + Používáte nejnovější verzi NewPipe + Import nebo export odběrů z 3-tečkové nabídky + Tato možnost je dostupná pouze při vybraném motivu %s + Zrušení nastavení trvalého náhledu + Karta + Kopírování do schránky se nezdařilo + Zašedlé playlisty již obsahují tuto položku. + Duplikát přidán %dkrát \ No newline at end of file diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index a336d21a3..f4601ec2d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -32,12 +32,12 @@ Baggrund Pop op Føj til - Placering af videodownloads + Mappe til download af video Downloadede videoer gemmes her - Angiv downloadmappe for videofiler - Downloadmappe for lydfiler + Angiv download-mappe for videofiler + Download-mappe for lydfiler Downloadede lydfiler gemmes her - Angiv downloadmappe for lydfiler + Angiv download-mappe for lydfiler Standardopløsning Standardopløsning for pop op Vis højere opløsninger @@ -45,7 +45,7 @@ Afspil med Kodi Installer manglede Kore-app\? Vis valgmuligheden \"Afspil med Kodi\" - Vis en knap til at afspille en video via Kodi + Vis en knap til at afspille en video via Kodi-mediecenteret Lyd Standardformat for lydfiler Standardformat for videofiler @@ -56,7 +56,7 @@ Husk størrelse og placering af pop op Husk sidste størrelse og placering af pop op-afspiller Brug hurtig og upræcis søgning - Upræcis søgning lader afspilleren finde placeringer hurtigere, men mindre præcist. Søgninger på 5, 15 eller 25 sekunder fungerer ikke med denne indstilling, slået til + Upræcis søgning lader afspilleren finde placeringer hurtigere, men mindre præcist. Søgninger på 5, 15 eller 25 sekunder fungerer ikke med denne indstilling slået til Indlæs miniaturebilleder Slå fra for at undgå indlæsning af billeder, hvorved der spares data og hukommelse. Ændringer sletter billedcachen i både ram og lager Billedcache slettet @@ -64,7 +64,7 @@ Slet alle websidedata fra cachen Metadata-cache slettet Føj automatisk næste stream til køen - Fortsæt nedlukningen af en (ikke-gentagende) playback kø ved at tilføje et relateret stream + Fortsæt en afspilningskø, der afsluttes (ikke-gentagende), ved at tilføje en lignende stream Juster lydstyrke ved hjælp af fingerbevægelser Brug fingerbevægelser til at kontrollere afspillerens lydstyrke Styr lysstyrken med fingerbevægelser @@ -101,7 +101,7 @@ Fejlrapport Alle Kanaler - Playlister + Spillelister Én video %s videoer @@ -130,7 +130,7 @@ Overskriver din nuværende historik, abonnementer, spillelister og (hvis det ønskes) indstillinger Eksporter historik, abonnementer, spillelister og indstillinger Slet visningshistorik - Sletter historikken og positioner af tidligere viste videoer + Sletter historikken over afspillede streams og afspilningspositionerne Slet hele visningshistorikken\? Visningshistorikken blev slettet Slet søgehistorik @@ -217,7 +217,7 @@ Om NewPipe Tredjepartslicenser © %1$s af %2$s under %3$s - Om + Om & Ofte stillede spørgsmål Licenser Åben letvægtsstreaming på Android. Bidrag til projektet @@ -289,7 +289,6 @@ Liste Gitter Automatisk - Tryk for at downloade Færdig Afventning efterbehandling @@ -313,7 +312,7 @@ Efterbehandling fejlede Stop Hændelser - Intet at se her + Intet at se her t mio. mia. @@ -331,7 +330,7 @@ Luk skuffe Hvad:\\nForespørgsel:\\nIndholdssprog:\\nIndholdsland:\\nAppsprog:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersion:\\nOS-version: Standardhandling når indhold åbnes – %s - Anvend som playlistens miniature + Anvend som spillelistens miniaturebillede Bogmærk spilleliste Fjern bogmærke Føjet til spillelisten @@ -369,7 +368,7 @@ Ingen Minimer til baggrundsafspiller Minimer til pop op-afspiller - En NewPipe-opdatering er tilgængelig! + En NewPipe-opdatering er tilgængelig! sat på pause sat i kø Maksimalt antal genforsøg @@ -387,7 +386,7 @@ Afspil automatisk Ryd data Positioner i lister - Genopret forrige afspilningsposition + Gendan sidste afspilningsposition Fortsæt afspilning Slå fra for at skjule kommentarer Vis kommentarer @@ -399,13 +398,12 @@ Anden handlingstast Tredje handlingstast Viser resultater for: %s - Åben med + Åbn med LeakCanary er ikke tilgængelig Markér som set Beskrivelse Kapitler Notifikationer - Hjælp Kunstnere Luk Radio @@ -449,7 +447,7 @@ Nye streams Notifikationer om nye streams fra abonnementer reCAPTCHA cookies er ryddet - Slet alle playback positioner\? + Slet alle afspilningspositioner\? Filen er flyttet eller slettet NewPipe stødte ind i en fejl, tryk for at rapportere Rapporter på GitHub @@ -465,9 +463,9 @@ Download fuldført %s downloads fuldført - Lav indlæsningsintervallets størrelse, (som nu ligger på %s) om. En højere værdi kan øge videoindlæsningshastigheden. Ændringer af værdien kræver genstart. + Ændr indlæsningsintervallets størrelse (som nu er på %s). En lavere værdi kan øge videoindlæsningshastigheden. Ændringer kræver en genstart af afspiller Den aktive spilleliste bliver udskiftet - At skifte fra en afspiller til en anden kan udskifte din kø + Hvis du skifter fra en spiller til en anden, kan din kø blive erstattet Vis metainformation Lokale søgeforslag Fjerne søgeforslag @@ -477,8 +475,8 @@ Notifikationer om videohashfunktioners status Fejlrapport-notifikation Notifikationer for at rapportere fejl - Slet playback positioner - Sletter alle playback positioner + Slet afspilningspositioner + Sletter alle afspilningspositioner Spørg hvor filen skal downloades Et download ad gangen Slet downloadede filer @@ -489,23 +487,23 @@ \nNewPipes fortrolighedspolitik forklarer i detaljer, hvilke data der bliver sendt og opbevaret når du sender en nedbrudsrapport. Kopier en formatteret rapport Giv tilladelse til at vise over andre apps - Vis playback positionsvisere i lister - Playback positioner slettet + Vis indikatorer for afspilningsposition i lister + Afspilningspositioner slettet Ryd reCAPTCHA cookies Der er en afventende download med dette navn Start downloads - Skaler miniaturebilledet til 1:1 format - Skaler notifikationsminiaturebillederne fra 16:9 til 1:1 format (dette kan medføre forvrængninger) - Rediger hver eneste varselshandling nedenunder ved at trykke på dem. Vælg op til tre af dem som bliver vist i den lille notifikation, via kasserne til højre + Beskær miniaturebillede til 1:1 format + Beskær video-miniaturebillede i notifikationen fra 16:9 til 1:1 format + Rediger hver eneste varselshandling nedenunder ved at trykke på dem. Vælg op til tre af dem som bliver vist i den lille notifikation, via afkrydsningsfelterne til højre Du kan kun vælge op til tre handlinger som kan vises i den lille notifikation! Buffer Få Android til at vælge notifikationens farve ud fra den primære farve i miniaturebilledet (virker ikke på alle enheder) - Nattetema + Nattema Frem- og tilbagesøgningstid Denne video er aldersbegrænset. \nPga. YouTubes politik om aldersbegrænsede videoer har NewPipe ikke adgang til videoen. Crash afspilleren - Spørg om bekræftelse før du tømmer en kø + Spørg om bekræftelse før du rydder en kø Forhåndsvisning af miniaturebilleder på statuslinjen Sæt i kø som næste Er sat som næste i køen @@ -516,8 +514,8 @@ Kommentarer Relaterede objekter Stryg på elementer for at fjerne dem - Vælg en playliste - Ingen playliste bogmærker endnu + Vælg en spilleliste + Ingen spilleliste-bogmærker endnu Sproget ændres når appen genstarter Spillekø Vis kanalens detaljer @@ -532,7 +530,7 @@ Alle netværk Kontrolfrekvens Notifikationer ved nye streams - Notifikationer om ny streams fra abonnomenter + Giv besked om nye streams fra abonnementer Tjek manuelt efter opdateringer Tjekker efter opdateringer… Gendanner @@ -557,8 +555,8 @@ Vis sete elementer Dette indhold er ikke tilgængeligt i dit land. Af %s - Videoer på playlisten som allerede er blevet set fjernes. -\nDette kan ikke fortrydes! + Videoer, der er blevet set før og efter, at de er blevet tilføjet til spillelisten, vil blive fjernet. +\nEr du sikker\? Dette kan ikke gøres om! Vis miniaturebillede Tags Aldersbegrænsning @@ -655,4 +653,78 @@ Vis et crash alternativ når afspilleren er i brug Vis en fejl snackbar Brug system mappevælger (SAF) + Kanalens avatar-miniaturebillede + Dette er et SoundCloud Go+-nummer, i hvert fald i dit land, så det kan ikke streames eller downloades af NewPipe. + Der blev ikke fundet nogen passende filhåndtering til denne handling. +\nInstaller en Storage Access Framework-kompatibel filhåndtering + Der blev ikke fundet nogen passende filhåndtering til denne handling. +\nInstaller et filhåndteringsprogram eller prøv at deaktivere \'%s\' i download-indstillingerne + Aktivér valg af tekst i beskrivelsen + Automatisk (enhedstema) + Deaktiver valg af tekst i beskrivelsen + Fastgjort kommentar + Du abonnerer nu på denne kanal + , + Få besked + Du vil blive spurgt, hvor du vil gemme hver enkelt download + Den er tilgængelig i nogle tjenester og er normalt meget hurtigere, men kan returnere et begrænset antal elementer og ofte ufuldstændige oplysninger (f.eks. ingen varighed, elementtype, ingen live-status) + Ukendt format + Ukendt kvalitet + Hjertemarkeret af indholdsskaberen + Intervalstørrelse for afspilningsindlæsning + ExoPlayer-standard + Tomt gruppenavn + Du vil blive spurgt, hvor du vil gemme hver enkelt download. +\nAktiver systemet mappevælger (SAF), hvis du vil downloade til et eksternt SD-kort + Originaltekster fra tjenester vil være synlige i stream-emner + Ingen videostreams er tilgængelige for eksterne afspillere + URL til miniaturebillede + Fra + Tablet-tilstand + Skjul fremtidige elementer + Denne video er kun tilgængelig for YouTube Music Premium-medlemmer, så den kan ikke streames eller downloades af NewPipe. + \"Storage Access Framework\" gør det muligt at downloade til et eksternt SD-kort + Fremtving indberetning af ikke-leverbare Rx-undtagelser uden for fragmentets eller aktivitetens livscyklus efter bortskaffelse + Tryk for at downloade %s + Fra og med Android 10 understøttes kun \"Storage Access Framework\" + Synes du, at feed-indlæsning er for langsom\? Hvis det er tilfældet, så prøv at aktivere hurtig indlæsning (du kan ændre det i indstillingerne eller ved at trykke på knappen nedenfor). +\n +\nNewPipe tilbyder to strategier til feed-indlæsning: +\n- Hentning af hele abonnementskanalen, hvilket er langsomt, men komplet. +\n- Brug af et dedikeret service endpoint, hvilket er hurtigt, men normalt ikke komplet. +\n +\nForskellen mellem de to er, at den hurtige metode normalt mangler nogle oplysninger, f.eks. elementets varighed eller type (kan ikke skelne mellem livevideoer og normale videoer), og den returnerer muligvis færre elementer. +\n +\nYouTube er et eksempel på en tjeneste, der tilbyder denne hurtige metode med sit RSS-feed. +\n +\nValget er altså et spørgsmål om, hvad du foretrækker: hastighed eller præcise oplysninger. + Den valgte stream er ikke understøttet af eksterne afspillere + Denne indstilling er kun tilgængelig, hvis %s er valgt som tema + Du kan nu vælge tekst i beskrivelsen. Bemærk, at siden kan flimre, og at links muligvis ikke kan klikkes på, mens du er i valgtilstand. + Streams, som endnu ikke understøttes af downloaderen, vises ikke + Hurtig tilstand + Importér eller eksportér abonnementer fra 3-punktsmenuen + Ofte stillede spørgsmål + Hvis du har problemer med at bruge appen, bør du tjekke disse svar på almindelige spørgsmål! + Se på hjemmeside + Vis Picasso-farvede bånd oven på billeder, der angiver deres kilde: rød for netværk, blå for disk og grøn for hukommelse + Du kører den nyeste version af NewPipe + På grund af ExoPlayer-begrænsninger blev søgetiden sat til %d sekunder + Vis kun ikke-grupperede abonnementer + Skjul sete elementer + Side med spillelister + Du kan vælge dit foretrukne nattema nedenfor + Vælg dit foretrukne nattema - %s + Support + Host + Offentlig + Ikke oplyst + Privat + Intern + Til + Skift alle + Ingen lydstreams er tilgængelige for eksterne afspillere + Vælg kvalitet til eksterne afspillere + Vis fremtidige elementer + Sortér \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7502adbf8..2aff15046 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -161,7 +161,7 @@ Die meisten Sonderzeichen Wiedergabe fortsetzen Player - Nichts hier, außer dem Zirpen der Grillen + Nichts hier, außer dem Zirpen der Grillen Möchtest du dieses Element aus dem Suchverlauf löschen\? Leere Seite Einen Kanal auswählen @@ -364,8 +364,7 @@ Hohe Qualität (größer) Niedrige Qualität (kleiner) Nicht anzeigen - Eine NewPipe-Aktualisierung ist verfügbar! - Zum Herunterladen antippen + Eine NewPipe-Aktualisierung ist verfügbar! Fertig Ausstehend pausiert @@ -473,7 +472,6 @@ Aufgrund von ExoPlayer-Einschränkungen wurde die Suchdauer auf %d Sekunden gesetzt Stummschaltung Stummschaltung aufheben - Hilfe %d Minute %d Minuten @@ -570,12 +568,12 @@ Überschreiben der Warteschlange bestätigen Die aktive Player-Warteschlange wird ersetzt Eingereiht - YouTube bietet einen „Eingeschränkten Modus“, der potenzielle Inhalte für Erwachsene ausblendet + YouTube bietet einen „Eingeschränkten Modus“, der potenziell nicht jugendfreie Inhalte ausblendet Speicherlecks anzeigen Lösche Cookies, die NewPipe speichert, wenn du ein reCAPTCHA löst reCAPTCHA-Cookies wurden gelöscht reCAPTCHA-Cookies löschen - Zeige altersbeschränkte Inhalte (bspw. 18+), welche möglicherweise unpassend für Kinder sein könnten + Inhalte mit Altersbegrenzung (z. B. ab 18) anzeigen, die für Kinder möglicherweise ungeeignet sind In Wiedergabe einreihen Android kann die Farbe der Benachrichtigung entsprechend der Hauptfarbe in der Miniaturansicht anpassen (beachte, dass dies nicht auf allen Geräten verfügbar ist) Benachrichtigung farblich anpassen @@ -724,4 +722,14 @@ Häufig gestellte Fragen Wenn du Probleme bei der Verwendung der App hast, lies bitte die Antworten auf häufig gestellte Fragen! Sortieren + Schneller Modus + Du verwendest die neueste Version von NewPipe + Antippen um %s herunterzuladen + Importieren oder Exportieren von Abonnements über das 3-Punkte-Menü + Diese Option ist nur verfügbar, wenn %s als Design ausgewählt wird + Dauerhaftes Vorschaubild aufheben + Kopieren in die Zwischenablage fehlgeschlagen + Karte + Duplikat %d mal hinzugefügt + Die ausgegrauten Wiedergabelisten enthalten dieses Element bereits. \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index d54041a7f..d19b5731f 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -169,7 +169,7 @@ Συγγνώμη, κάτι πήγε στραβά. Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΧώρα περιεχομένου:\\nΓλώσσα εφαρμογής:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος: Κανένα αποτέλεσμα - Δεν υπάρχει τίποτα εδώ + Δεν υπάρχει τίποτα εδώ Σύρετε για ταξινόμηση Προσπάθεια εκ νέου χιλ. @@ -358,8 +358,7 @@ Λίστα Πλέγμα Αυτόματα - Μια νέα έκδοση του NewPipe είναι διαθέσιμη! - Πατήστε για λήψη + Μια νέα έκδοση του NewPipe είναι διαθέσιμη! Ολοκληρώθηκε Εκκρεμεί σε παύση @@ -475,7 +474,6 @@ Αναφορά στο GitHub Αντιγραφή μορφοποιημένης αναφοράς Δώστε άδεια για προβολή πάνω από άλλες εφαρμογές - Βοήθεια Καλλιτέχνες Άλμπουμ Τραγούδια @@ -724,4 +722,14 @@ Προβολή στην ιστοσελίδα Εάν αντιμετωπίζετε προβλήματα με τη χρήση της εφαρμογής, φροντίστε να ελέγξετε αυτές τις απαντήσεις σε συνήθεις ερωτήσεις! Ταξινόμηση + Γρήγορη λειτουργία + Εισάγετε ή εξάγετε συνδρομές από το μενού 3 κουκκίδων + Πατήστε για λήψη %s + Έχετε την πιο πρόσφατη έκδοση του NewPipe + Αυτή η επιλογή είναι διαθέσιμη μόνο εάν έχει επιλεγεί %s για Θέμα + Κατάργηση μόνιμης μικρογραφίας + Αποτυχία αντιγραφής στο πρόχειρο + Κάρτα + Οι λίστες αναπαραγωγής που είναι γκριζαρισμένες περιέχουν ήδη αυτό το στοιχείο. + Προστέθηκε διπλότυπο %d φορά(ες) \ No newline at end of file diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index da1a040cb..f82244246 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -214,7 +214,7 @@ Ekstera konservejo malhavebla Elŝuti al ekstera SD-karto ne eblas. Ĉu vi volas restarigi la elŝutan dosierujon \? viciĝita - Atendovico + Envicigi Halti Maksimuma nombro de provoj Maksimuma nombro de provoj antaŭ fordecidi la elŝuton @@ -288,7 +288,7 @@ Historio Historio Neniuj rezultoj - Neniu enhavo + Neniu enhavo Neniuj abonantoj %s abonanto @@ -388,8 +388,7 @@ Listo Krado Aŭto - Ĝisdatigo de NewPipe havebla! - Premi por elŝuti + Ĝisdatigo de NewPipe havebla! Finita Pritraktata Paŭzigita @@ -497,7 +496,6 @@ Pro ExoPlayer limoj, la serĉa daŭro estas metita %d sekundojn Mutigi Malmutigi - Helpo Tio enhavo ne estas ankoraŭ subtenata per NewPipe.\n\nĜi espereble estos en sekvanta versio. ∞ filmetoj 100+ filmetoj @@ -515,7 +513,7 @@ Malhela etoso farbi sciigon Alŝuto - Skali bildeton ĝis 1:1 proportio + Stuci bildeton ĝis 1:1 proportio Malŝatita Ŝaltita Etikedoj @@ -540,7 +538,7 @@ Priskribo Komentoj Montri priskribon - Skali la bildeto de la video en la sciigo inter 16:9 kaj 1:1 propocio (povas kaŭzi distordo) + Stuci la bildeton de la video en la sciigo de 16:9 ĝis 1:1 propocio Montri metadatumojn Marki spektita Malŝatu por kaŝi metadatumujojn kio havas aldonajn informojn pri la elsendfluisto, enhavo de la fluo, aŭ serĉpto @@ -553,4 +551,7 @@ Dua agobutono Tria agobutono Kvara agobutono + Kraŝi la ludilo + Envicigita + Envicigi \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ce00defd5..1ea514868 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -48,7 +48,7 @@ Miniatura del avatar del usuario Contenido Mostrar contenido con restricción de edad - Toca en «Buscar» para comenzar. + Pulsa la lupa para empezar. En directo Descargas Descargas @@ -144,7 +144,7 @@ Historial y caché Deshacer No hay resultados - Nada aquí más que grillos + Nada aquí más que grillos Sin suscriptores %s suscriptor @@ -411,8 +411,7 @@ Mostrar una notificación para solicitar actualizar la aplicación al haber una nueva versión disponible Modo de vista de lista Automático - ¡Actualización de NewPipe disponible! - Pulsa para descargar + ¡Actualización de NewPipe disponible! Mostrar comentarios Desactivar para ocultar comentarios Reproducción automática @@ -473,7 +472,6 @@ Debido a limitaciones de ExoPlayer, la duración de la búsqueda fue definida en %d segundos Silenciar Desactivar silencio - Ayuda %d minuto %d minutos @@ -732,11 +730,22 @@ Elija la calidad para reproductores externos Formato desconocido Calidad desconocida - Mostrar videos futuros + Mostrar elementos futuros Tamaño del intervalo de carga de reproducción Ocultar los elementos mirados Ocultar elementos futuros Ver en la página web Preguntas frecuentes Si tienes problemas al usar la aplicación, ¡Asegúrate de verificar estas respuestas a preguntas comunes! + Ordenar + Modo rápido + Importa o exporta las suscripciones desde el menú con los tres puntos + Está ejecutando la última versión de NewPipe + Pulsa para descargar %s + Esta opción sólo está disponible si %s está seleccionado para el tema + Desactivar las miniaturas permanente + Error al copiar al portapapeles + Tarjeta + Duplicado añadido %d vez/veces + Las listas de reproducción que están en gris ya contienen este elemento. \ No newline at end of file diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 3fcdbf04a..b9114c4d3 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -152,7 +152,7 @@ Meeldib Ei meeldi Tulemusi pole - Siin pole veel midagi + Siin pole veel midagi Lohista järjestuse muutmiseks Video Audio @@ -187,7 +187,7 @@ Lõimed Viga NewPipe allalaadimine - Puuduta üksikasjade nägemiseks + Üksikasjade nägemiseks toksa Palun oota… Kopeeriti lõikepuhvrisse Vali määra allalaadimiste kataloog hiljem sätetes @@ -358,8 +358,7 @@ Nimekiri Võrgustik Auto - NewPipe värskendus on saadaval! - Allalaadimiseks puuduta + NewPipe värskendus on saadaval! Lõpetatud Ootel peatatud @@ -465,7 +464,6 @@ Võta kasutusele YouTube\'i „Piiratud režiim“ Faili asukoht on muutunud või on ta kustutatud Taasesituste asukohad on kustutatud - Abiteave Kas kustutame kõik taasesituste asukohad\? Kustutab kõik taasesituse käigus salvestatud asukohad Kustuta taasesituste asukohad @@ -670,7 +668,7 @@ Uued andmevoo kirjed Näita „Jooksuta meediamängija kokku“ nupukest Näitab valikut meediamängija kokkujooksutamiseks - NewPipe töös tekkis viga, sellest teavitamiseks klõpsi + NewPipe töös tekkis viga, sellest teavitamiseks toksa Jooksuta meediamängija kokku Näita veateate akent Teavitus vigadest @@ -724,4 +722,14 @@ Kui sul tekib selle rakenduse kasutamisel probleeme, siis esmalt vaata, kas vastus leidub korduma kippuvate küsimuste hulgas! Edasi loe veebisaidist Sortimine + %s allalaadimiseks toksa + Kiirrežiim + Tellimusi saad importida või eksportida 3 punktiga menüüst + Sa kasutad NewPipe\'i uusimat versiooni + See valik on kasutusel vaid %s teema puhul + Lõikelauale kopeerimine ei õnnestunud + Eemalda püsiv pisipilt + Kaart + Hallina kuvatud esitusloendid juba sisaldavad seda kirjet. + Topeltkirje lisatud %d kord(a) \ No newline at end of file diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 19f9fcfa6..6b35b7316 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -108,7 +108,7 @@ NewPipe aplikazioari buruz Hirugarrengoen lizentziak © %1$s %2$s. %3$s - Honi buruz + Honi buruz eta ohiko galderak Lizentziak Androiderako streaming libre eta arina. Ikusi GitHub zerbitzarian @@ -142,7 +142,7 @@ Desegin NewPipe erreproduzigailuaren jakinarazpenak Emaitzarik ez - Kilkerrak besterik ez daude hemen + Kilkerrak besterik ez daude hemen Harpidedunik ez Harpidedun %s @@ -358,8 +358,7 @@ Zerrenda Sareta Automatikoa - NewPipe-ren eguneraketa eskuragarri dago! - Sakatu deskargatzeko + NewPipe-ren eguneraketa eskuragarri dago! Amaituta Zain pausatuta @@ -509,7 +508,6 @@ Aktibatu audioa Isilarazi - Laguntza Eduki hau ez dago oraindik NewPipengatik onatuta. \n \nEtorkizuneko bertsio batean onartua izatea espero da. @@ -720,4 +718,18 @@ Hautatu kanpoko erreproduzigailuen kalitatea Ezkutatu etorkizuneko elementuak Ezkutatu ikusitako elementuak + Grisez idatzitako erreprodukzio-zerrendek jada badute elementu hau. + Webgunean ikusi + Akatsa arbelera kopiatzean + Arazoren bat baduzu aplikazioa erabiltzerakoan, irakur itzazu ohiko galdera hauen erantzunak! + Betiko miniatura kendu + NewPipe-en azken bertsioa erabiltzen ari zara + Sakatu %s deskargatzeko + Kopia %d behin/aldiz gehitua + Txartela + Aukera hau Gaiarako %s aukeratua badago soilik dago erabilgarri + Ordenatu + Modu azkarra + Hiru-puntutako menutik harpidetzak inportatu edo esportatu + Maiz galdetutako galderak \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 1703784fd..72dc77660 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -178,7 +178,7 @@ مهم‌ترین نویسه‌های خاص کاره‌ای برای پخش این پرونده نصب نشده است درباره نیوپایپ - درباره + درباره و سوالات‌متداول پروانه‌ها پخش‌کننده آزاد سبُک برای اندروید. مشارکت @@ -254,8 +254,7 @@ سیاهه شبکه خودکار - به‌روزرسانی برای نیوپایپ موجود است! - برای بارگیری، لمس کنید + به‌روزرسانی برای نیوپایپ موجود است! تمام در انتظار صف‌گذاری @@ -287,7 +286,7 @@ کنترل روشنایی اشاره ای از اشارات برای کنترل روشنایی استفاده شود بازگردانی - چه:\\nدرخواست:\\nزبان محتوا:\\nکشور محتوا:\\nزبان کاره:\\nخدمت:\\nزمان GMT\\nبسته:T:\\nنگارش:\\nنگارش س.ع: + چی:\\nدرخواست:\\nزبان محتوا:\\nکشور محتوا:\\nزبان اپ:\\nخدمت:\\nزمان GMT\\nپکیج:T:\\nنسخه:\\nنسخه‌اندروید: چالش ری‌کپچا نیاز به چالش ری‌کپچا است این اجازه برای گشودن در حالت @@ -297,7 +296,7 @@ © %1$s توسط %2$s تحت %3$s اگر ایده‌ای برای ترجمه، تغییر طراحی، پاک‌سازی کد و یا تغییرات واقعا سنگین کدنویسی دارید، از کمک‌تان همواره استقبال می‌کنیم. هر چه بیشتر کار کنیم، نتایج بهتری می‌گیریم! آگاهی‌ها برای پخش‌کنندهٔ نیوپایپ - چیزی جز کریکت اینجا نیست + چیزی جز کریکت اینجا نیست فاقد مشترک خطای عدم احیای پخش‌کننده رخ داد در حال احیا از خطای پخش‌کننده @@ -496,7 +495,6 @@ کسی در حال مشاهده نیست تغییر خدمت، مورد انتخاب شده: اجازه نمایش روی دیگر برنامه‌ها را بدهید - راهنما هنرمندان آلبوم‌ها آوازها @@ -720,4 +718,16 @@ نمایش موارد آینده نهفتن موارد آینده نهفتن موارد دیده شده + سوالات متداول + اگر حین استفاده از اپ مشکلی دارید، حتما پاسخ‌ها به سوالات متداول را بررسی کنید! + نمایش در وبسایت + ترتیب + درون یا برون ریزی اشتراک‌ها از فهرست سه‌نقطه‌ای + حالت سریع + ضربه برای بارگیری %s + از جدیدترین نگارش نیوپایپ استفاده می‌کنید + این گزینه تنها هنگامی موجود است که %s به عنوان زمینه گزیده باشد + کارت + شکست در رونوشت به تخته‌گیره + ناتنظیم بندانگشتی ثابت \ No newline at end of file diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index af19e4f12..b0e6b2aba 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -99,7 +99,7 @@ Tykkäykset Ei-tykkäykset Ei tuloksia - Tyhjää täynnä + Tyhjää täynnä Video Ääni Toista uudelleen @@ -367,7 +367,6 @@ Tiedosto siirretty tai poistettu Lataaminen ulkoiselle SD-kortille ei ole mahdollista. Nollataanko latauskansion sijainti\? Ulkoinen tallennustila ei käytettävissä - Ohje Ilmoitukset uusista NewPipe-versioista Sovelluspäivitysilmoitus Tiedosto poistettu @@ -520,8 +519,7 @@ Hyödyllinen vaihdettaessa mobiilidataan, vaikka joitakin latauksia ei voi pysäyttää Keskeytä, kun yhteys on käytön mukaan laskutettava tauotettu - Napauta ladataksesi - NewPipe-päivitys on saatavilla! + NewPipe-päivitys on saatavilla! Listanäkymän ulkoasu Automaattinen Ruudukko diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index 758e522cd..b1529c7f7 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -12,34 +12,34 @@ I-download I-download ang stream file Maghanap - Pagsasaayos + Mga Setting \"%1$s\" ba ang tinutukoy mo\? Ibahagi sa Gumamit ng ibang video player Natatanggal ang tunog sa ilang mga resolusyon Gumamit ng ibang audio player - Mag-subscribe - Naka-subscribe - Mag-unsubscribe - Na-unsubscribe na sa channel - Di mabago ang subscription - Di ma-update ang subscription - Ipakita ang info - Mga subscription - Naka-bookmark na playlist + Sumubaybay + Sinusubaybayan + Ihinto ang pagsubaybay + Hininto ang pagsubaybay sa channel + Hindi mabago ang pagsubaybay + Hindi ma-update ang pagsubaybay + Ipakita ang impormasyon + Mga Pagsubaybay + Mga naka-bookmark na playlist Pumili ng Tab Anong Bago - Likuran - Naka-lutang - Idagdag sa - Download folder ng mga video + Background + Palutangin + Idagdag Sa + Folder ng mga na-download na video Pumili ng download folder para sa mga video file Ilalagay rito ang mga na-download na audio file Pumili ng download folder para sa mga audio file Maliwanag I-play gamit Kodi Madilim - Ilalagay rito ang mga na-download na video file + Dito inilalagay ang mga na-download na video file Download folder ng mga audio Ipinapakita ang mga resulta para sa: %s Buksan gamit ang @@ -159,7 +159,6 @@ Sinisimulan na ang Pagdownload Pinusuan ng creator Ni %s - Tulong Naka-pin na komento Buksan ang website Lisensya diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index af65a481c..77b4f09bb 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -143,7 +143,7 @@ Historique et cache Notifications pour le lecteur de NewPipe Aucun résultat - Aucun contenu + Aucun contenu Aucun abonné %s abonné @@ -178,13 +178,13 @@ Retirer Détails Paramètres audios - Afficher l’astuce « Maintenir pour ajouter » + Afficher l\'astuce « Maintenir pour ajouter à la file » Affiche l’astuce lors de l’appui des boutons « Arrière-plan » ou « Flottant » sur la page de détails d’une vidéo [Inconnu] Récupération depuis l’erreur du lecteur Kiosque Sélectionner un kiosque - Maintenir pour mettre en liste de lecture + Maintenir pour ajouter à la file Démarrer la lecture en arrière-plan Démarrer la lecture dans une fenêtre flottante Donner @@ -257,8 +257,8 @@ Le nom du fichier ne peut pas être vide Une erreur est survenue : %1$s Télécharger le flux - Ajouter automatiquement le flux suivant à la liste de lecture - Continue la liste de lecture (non répétitive) en ajoutant un flux lié + Ajout automatique du flux suivant à la file + Continue la file de lecture (non répétitive) en ajoutant un flux lié Débogage Remplir Générés automatiquement @@ -359,8 +359,7 @@ Liste Grille Auto - Une mise à jour de NewPipe est disponible ! - Appuyer pour télécharger + Une mise à jour de NewPipe est disponible ! Terminé En attente en pause @@ -385,7 +384,7 @@ Utile lors du basculement aux données mobiles, bien que certains téléchargements ne peuvent pas être suspendus Mode de vue en liste post-traitement - Mettre en file d\'attente + Ajouter à la file Action refusée par le système Le post-traitement a échoué Nombre d’essais maximum @@ -522,7 +521,6 @@ \nYouTube est un exemple de service qui offre une méthode rapide avec son flux RSS. \n \nDonc le choix se résume à ce que vous préférez : la rapidité ou des informations précises. - Aide Ce contenu n’est pas encore pris en charge par NewPipe. \n \nNous espérons qu’il le sera dans une future version. @@ -553,15 +551,15 @@ Signaler sur GitHub Copier le rapport formaté Affichage des résultats pour : %s - Basculer d’un lecteur à un autre peut remplacer votre liste de lecture + Basculer d’un lecteur à un autre peut remplacer votre file de lecture Jamais Uniquement en Wi-Fi Démarrer la lecture automatiquement — %s Liste de lecture Impossible de reconnaitre l’URL fournie. Voulez-vous l’ouvrir avec une autre application \? - Lire automatiquement - La liste de lecture du lecteur actif sera remplacée - Confirmer avant de supprimer une liste de lecture + Ajout automatique à la file + La file de lecture du lecteur actif sera remplacée + Confirmer avant de supprimer une file de lecture Rien Chargement Lire aléatoirement @@ -576,8 +574,8 @@ Recadrer la miniature de la vidéo affichée dans la notification du format 16:9 au format 1:1 Recadrer la miniature au format 1:1 Afficher les fuites de mémoire - Ajouté à la file d’attente - Ajouter à la file d’attente + Ajouté à la file + Ajouter à la file Effacer les cookies que NewPipe garde lorsque vous résolvez un reCAPTCHA Les cookies reCAPTCHA ont été effacés Effacer les cookies reCAPTCHA @@ -675,8 +673,8 @@ Balayez un élément pour le supprimer Ne pas lancer les vidéos dans le mini lecteur mais directement en plein écran si la rotation automatique est verrouillée. Vous pouvez toujours accéder au mini-lecteur en quittant le mode plein écran Lancer le lecteur principal en plein écran - Lire consécutivement - Flux placé à la suite + Placer en suivant dans la file + Placé en suivant dans la file Traitement en cours… Veuillez patienter Vérifier manuellement de nouvelles versions Vérification des mises à jour… @@ -739,4 +737,12 @@ Voir sur le site web Si vous avez des difficultés à utiliser l\'application, consultez les réponses aux questions les plus fréquentes ! Trier + Mode rapide + Importer ou exporter des abonnements à partir du menu + Vous utilisez la dernière version de NewPipe + Appuyez pour télécharger %s + Échec de la copie dans le presse-papiers + Cette option est disponible seulement si %s est sélectionné pour le thème + Les listes de lecture grisées contiennent déjà cet élément. + Carte \ No newline at end of file diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index f1e815499..b70f6266f 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -156,7 +156,7 @@ Gosto Non gosto Non hai resultados - Nada que ver aquí + Nada que ver aquí Arrastre para reordenar Vídeo Audio @@ -452,8 +452,7 @@ pausado Pendente Rematado - Prema para descargar - A actualización de NewPipe está dispoñible! + A actualización de NewPipe está dispoñible! Automático Mostra os indicadores de posición de reprodución nas listas Use xestos para controlar o brillo do reprodutor @@ -503,7 +502,6 @@ Ficheiro movido ou eliminado Non é posible descargar na tarxeta SD externa. Restaurar a localización do cartafol de descarga\? Non hai dispoñible almacenamento externo - Axuda Elimináronse as posicións de reprodución Eliminas todas as posicións de reprodución\? Elimina todas as posicións de reprodución @@ -724,4 +722,14 @@ Preguntas máis frecuentes Se tes problemas para usala aplicación, asegúrate de consultar estas respostas ás preguntas comúns! Ordenar + Modo rápido + Estás executandola última versión de NewPipe + Toca para descargar %s + Importa ou exporta subscricións dende o menú dos 3 puntos + Esta opción só está dispoñible se %s está seleccionado para o tema + Produciuse un erro ao copiar no portapapeis + Desactivala miniatura permanente + Tarxeta + As listas de reprodución que se atopan atenuadas xa conteñen este elemento. + Duplicado engadido %d vez/veces \ No newline at end of file diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 1ae0aab87..6be8c1073 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -109,7 +109,7 @@ אהבו לא אהבו אין תוצאות - אין כאן כלום מלבד צרצרים + אין כאן כלום מלבד צרצרים סרטון שמע ניסיון חוזר @@ -364,8 +364,7 @@ רשימה טבלה אוטומטית - יצא עדכון ל־NewPipe! - יש לגעת כדי להוריד + יצא עדכון ל־NewPipe! הסתיים מושהה בתור @@ -476,7 +475,6 @@ עקב מגבלות של ExoPlayer מגבלות טווחי החיפוש הוגדרו לכדי %d שניות השתקה ביטול השתקה - עזרה דקה שתי דקות @@ -750,4 +748,14 @@ הצגה באתר תשובות לשאלות נפוצות אם נתקלת בתקלות כשניסית להשתמש ביישומון, כדאי לעיין בתשובות לשאלות הנפוצות! + ניתן לייבא או לייצא מינויים מתפריט 3 הנקודות + נגיעה כאן תוריד את %s + מצב מהיר + זאת הגרסה העדכנית ביותר של NewPipe + אפשרות זאת זמינה רק אם נבחרה ערכת נושא %s + ביטול הגדרת תמונה ייצוגית קבועה + כרטיס + ההעתקה ללוח הגזירים נכשלה + רשימות הנגינה שבוטלו וסומנו באפור כבר מכילות את הפריט הזה. + הכפיל נוסף %d פעמים \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index a99795401..dc08899ed 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -9,27 +9,27 @@ डाउनलोड करे खोजें सेटिंग्स - सदस्यता लें - सदस्य है - चैनल सदस्यता हटाई गई + सब्सक्राइब करें + सब्सक्राइब है + चैनल अनसब्सक्राईब हुआ सब्सक्रिप्शनस बैकग्राउंड पॉपअप ध्वनि रौशनी काला - देखे हुए विडियोज का इतिहास + देखे हुए वीडियोज़ का इतिहास डाउनलोड करे वीडियो और ऑडियो - History and cache + इतिहास और कैश बैकग्राउंड में चल रहा है कोई दर्शक नहीं कोई वीडियो नहीं है न्यूपाइप के बारे में जाने तृतीय-पक्ष लाइसेंस - इसके बारे में + ऐप के बारे में और सामान्य प्रश्न लाइसेंस - GitHub में देखें + गिटहब में देखें न्यूपाइप का लाइसेंस लाइसेंस पढ़ें योगदान करें @@ -41,12 +41,12 @@ रद्द करें क्या आप का मतलब \"%1$s\" था\? के साथ शेयर करे - कोई दूसरा विडियो चालक प्रयोग करें - कुछ विडियो गुणवत्ता स्तर पर ध्वनि हट सकती है + कोई दूसरा वीडियो चालक प्रयोग करें + कुछ वीडियो गुणवत्ता स्तर पर ध्वनि हट सकती है कोई दूसरा ध्वनि चालक उपयोग करें - सदस्यता बदला नहीं जा सका - सदस्यता अपडेट नहीं किया जा सका - देखे की क्या नया है + सब्सक्रिप्शन बदली नहीं जा सकी + सब्सक्रिप्शन अपडेट नहीं किया जा सका + देखें कि क्या नया है वीडियो डाउनलोड का फ़ोल्डर डाउनलोड की गई वीडियो फ़ाइलें यहां संग्रहीत हैं वीडियो फ़ाइलों के लिए डाउनलोड फ़ोल्डर चुनें @@ -56,33 +56,33 @@ प्रथम स्थापित गुणवत्ता स्तर पॉपअप का प्रथम स्थापित गुणवत्ता स्तर उच्च गुणवत्ता स्तर दिखाएं - केवल कुछ ही यंत्र 2K/4K मे विडियो चला सकते हैं + केवल कुछ ही यंत्र 2K/4K मे वीडियो चला सकते हैं Kodi मे चलाए Kore ऐप नहीं मिली, इसे स्थापित करें\? \"Kodi मे चलाएं\" वाला विकल्प दिखाएँ - Kodi मीडिया सेंटर से विडियो चलने के लिए विकल्प प्रदर्शित करें + कोडी मीडिया सेंटर से वीडियो चलने के लिए विकल्प प्रदर्शित करें प्रथम स्थापित ध्वनि फॉर्मेट - प्रथम स्थापित विडियो फॉर्मेट + प्रथम स्थापित वीडियो फॉर्मेट ऐप थीम गहरा - विडियो पॉपअप का आकर और उसकी स्थति को याद रखे - विडियो पॉपअप की अंतिम स्थिति और आकर को याद रखे + वीडियो पॉपअप का आकार और उसकी स्थिति को याद रखें + वीडियो पॉपअप की अंतिम स्थिति और आकार को याद रखें खोज में सुझाव - खोज के दौरान सुझाव दिखाये + खोज के दौरान दिखाये जाने वाले सुझाव चुने खोज का इतिहास खोज के डेटा को सिर्फ डिवाइस मेमोरी में रखे - देखे गए विडियोज की सूची रखे - वीडियो - रूकावटे खत्म होने के बाद विडियो प्ले करे (जैसे - फ़ोन कॉल) + देखे गए वीडियोज़ की सूची रखें + प्लेबैक फिर से शुरू करें + रुकावटें खत्म होने के बाद वीडियो प्ले करें (जैसे - फ़ोन कॉल) \'अगला\' और \'समान\' वीडियो दिखाए - \"कतार में जोड़ने के लिए स्पर्श बनाये रखें\" दिखाए - जब बैकग्राउंड और पॉपअप बटन विडियो के विवरण पन्ने में दबाई जाए तो tip को दिखाए + \"कतार में जोड़ने के लिए स्पर्श बनाये रखें\" दिखाएं + जब बैकग्राउंड और पॉपअप बटन वीडियो के विवरण पन्ने में दबाई जाए तो सलाह दिखाएं असमर्थित URL डिफ़ॉल्ट विषय की भाषा प्लेयर चाल चलन दिखावट - विडियो पॉपअप के अंदाज में चल रहा + वीडियो पॉपअप के अंदाज में चल रहा विषयवस्तु आयु प्रतिबंधित सामग्री दिखाएं लाइव @@ -92,30 +92,30 @@ सारे बंद करे साफ़ - बेहतर विडियो की क्वालिटी - वापस जाए + बेहतर वीडियो की क्वालिटी + वापस जाएँ सारे प्ले करे NewPipe की सूचनापत्र - न्यूपाइप के बैकग्राउंड में चल रहे विडियो और पॉपअप विडियो के लिए सूचनापत्र + न्यूपाइप के बैकग्राउंड में चल रहे वीडियो और पॉपअप वीडियो के लिए सूचनापत्र [नहीं जानते] त्रुटी नेटवर्क में त्रुटी सारे thumbnail(फोटो जो फ़ोन की मेमोरी में है ) भरे नहीं जा सकते - विडियो के URL signature को decrypt नहीं कर सकते + वीडियो के URL हस्ताक्षर को डीऑबफस्केट नहीं कर सकते इस website का निरंक्षण नहीं कर सकते विषय वस्तु उपलब्ध नहीं है डाउनलोड मेनू को स्थापित नहीं कर सकते APP/UI टूट गया - इस विडियो को चलाने में असफल हुए - कभी ठीक न होने वाले विडियो प्लेयर की त्रुटी आ रही है - विडियो प्लेयर त्रुटी से ठीक हो रहा है + इस वीडियो को चलाने में असफल हुए + कभी ठीक न होने वाले वीडियो प्लेयर की त्रुटी आ रही है + वीडियो प्लेयर त्रुटी से ठीक हो रहा है खेद है की, ऐसा होना नहीं चाहिए था. त्रुटी की रिपोर्ट को ईमेल से भेजे माफ़ करे , कुछ त्रुटियाँ हो रही है - रिपोर्ट + रिपोर्ट करें जानकारी: क्या हुआ: - क्या:\\nमांग:\\nविषयवस्तु की भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण: + क्या:\\nअनुरोध:\\nसामग्री भाषा:\\nसामग्री देश:\\nऐप भाषा:\\nसेवा:\\nजीएमटी समय:\\nपैकेज:\\nसंस्करण:\\nOS संस्करण: आपकी टिप्पणी: विवरण: वीडियो चलाये, समय : @@ -123,17 +123,17 @@ पसंद नापसंद कोई परिणाम नहीं मिला - यंहा कुछ नहीं है - विडियो + यहां के खालीपन को दूर करने के लिए कुछ सर्च करें या किसी चैनल को सब्सक्राइब करें + वीडियो ऑडियो फिर से कोशिश करे हज़ार करोड़ अरब - कोई भी सदस्य नहीं है + कोई सब्सक्राइबर नहीं है - %s सदस्य - %s सदस्यो + %s सब्सक्राइबर + %s सब्सक्राइबर %s दर्शक @@ -146,7 +146,7 @@ शुरू रोकें मिटाएँ - checksum + चेकसम ठीक है फाइल का नाम मेसेज के thread @@ -156,17 +156,18 @@ कृपया प्रतीक्षा करें… क्लिपबोर्ड पर कॉपी हो गया है कृपया बाद में सेटिंग्स में डाउनलोड स्थान चुने - पॉपअप के तरीके में खोलने के लिए अनुमति की जरुरत है + पॉपअप के तरीके में खोलने के लिए +\nइस अनुमति की जरुरत है reCAPTCHA चुनौती reCAPTCHA चुनौती का अनुरोध किया डाउनलोड - फाइल के नाम के लिए आवश्यक characters(जैसे - १२३, abc) की अनुमति है - अमान्य characters इस value से बदल जायेंगे + फाइल के नाम के लिए आवश्यक कैरेक्टर (जैसे - १२३, abc) की अनुमति है + अमान्य कैरेक्टर्स इस संख्या से बदल जायेंगे रिप्लेसमेंट करैक्टर वर्ण और अंक - विशेष वर्ण + विशेष कैरेक्टर्स %2$s के द्वारा © %1$s जो %3$s के अधीन आते है - एंड्राइड के लिए हल्का और मुफ्त स्ट्रीमिंग एप्लिकेशन| + एंड्राइड के लिए हल्का और मुफ्त स्ट्रीमिंग एप्लिकेशन। अगर आपके पास कोई सुझाव हो जैसे -अनुवाद , डिजाईन में बदलाव ,code को साफ़ रखना , या फिर code में जायदा बदलाव लाना हो तो - साहयता के लिए आपका स्वागत है . जितना ज्यादा होगा उतना बेहतर होगा ! क्या आप इसको खोज इतिहास के मिटाना चाहते है ? मुख्य पेज की विषयवस्तु @@ -177,7 +178,7 @@ अभी तक किसी भी चैनल के सदस्य नहीं है kiosk को चुने टॉप 50 - नया और गरम + नया और प्रचलित निकाले विवरण जोड़ने के लिए पकड़ें रहे @@ -186,18 +187,18 @@ स्ट्रीमिंग करने के लिए कोई चालक उपलब्ध नहीं है (आप इसे चलाने के लिए VLC चालक स्थापित कर सकते हैं)। स्ट्रीम फाइल डाउनलोड करें जानकारी दिखाएं - बुकमार्क किये गए प्लेलिस्टस - इसमें जोड़ें - डिफ़ॉल्ट देश का विषय - हमेशा के लिए + बुकमार्क की गई प्लेलिस्टें + में शामिल करें + डिफ़ॉल्ट देश का विषय + हमेशा सिर्फ एक बार के लिए बैकग्राउंड में स्विच करें पॉपअप मोड में जाएं मुख्य पर स्विच करें डेटाबेस आयात करें डेटाबेस निर्यात करें - आपके वर्तमान इतिहास और सब्सक्रिप्शन को अधिभावी करेगा - इतिहास, सब्सक्रिप्शन और प्लेलिस्ट निर्यात करें + आपके वर्तमान इतिहास, सब्सक्रिप्शनस, प्लेलिस्ट और (वैकल्पिक रूप से) सेटिंग्स को अधिभावी करेगा + इतिहास, सब्सक्रिप्शन, प्लेलिस्ट और सेटिंग निर्यात करें एक्सटर्नल प्लेयर इन प्रकार के लिंक सपोर्ट नहीं करता कोई वीडियो स्ट्रीम नहीं मिला कोई ऑडियो स्ट्रीम नहीं मिली @@ -206,8 +207,8 @@ ख़ारिज करें नाम बदलें दान करें - NewPipe स्वयंसेवकों द्वारा विकसित किया जाता है जो आपको अच्छा अनुभव देने के लिए अपना खाली समय व्यतीत करते हैं। स्वयंसेवको को मदद भेजे, ताकि वह NewPipe को और अच्छा बना सके। - वापस दे + न्यूपाइप स्वयंसेवकों द्वारा विकसित किया जाता है जो आपको अच्छा अनुभव देने के लिए अपना खाली समय व्यतीत करते हैं। स्वयंसेवको को मदद भेजे, ताकि वह न्यूपाइप को और अच्छा बना सके। + वापस दें वेबसाइट अधिक जानकारी और खबरों के लिए न्यूपाइप की वेबसाइट पर जाएं। पिछला चलाया गया @@ -229,13 +230,13 @@ नाम बदलें नाम प्लेलिस्ट में जोड़ें - प्लेलिस्ट थंबनेल के रूप में सेट करें + प्लेलिस्ट थंमनेल के रूप में सेट करें प्लेलिस्ट बुकमार्क करें बुकमार्क हटायें प्लेलिस्ट को हटाना चाहते हैं\? सूची बना दी गई प्लेलिस्ट में जोड़ा गया - प्लेलिस्ट का थंबनेल बदल दिया गया है। + प्लेलिस्ट का थंमनेल बदल दिया गया है। कोई अनुशीर्षक नहीं है फिट भरें @@ -244,10 +245,10 @@ ऑटो-जनरेटेड हीप डंप करने के दौरान मेमोरी लीक मॉनिटरिंग ऐप को अनुत्तरदायी बना सकता है Out-of-Lifecycle त्रुटियों की रिपोर्ट करें - थंबनेल लोड करें + थंमनेल लोड करें तेज और अनिश्चित तलाश का प्रयोग करें - अनिश्चित खोज के कारण वीडियो प्लेयर कम सटीकता से लेकिन तेजी से वीडियो पोजीशन्स की तलाश कर सकता है। ५, १५, या २५ सेकंड की तलाश में यह काम नहीं करता। - थंबनेल लोड करने, डेटा और मेमोरी उपयोग को रोकने के लिए बंद करें। इन-मेमोरी और ऑन-डिस्क छवि कैश दोनों को बदलता है| + अनिश्चित खोज से प्लेयर में कम सटीकता से लेकिन तेजी से वीडियो पोजीशन्स की तलाश कर सकता हैं। 5,15 या 25 सेकंड की तलाश में यह काम नहीं करता + थंमनेल लोड करने, डेटा और मेमोरी उपयोग को रोकने के लिए बंद करें। इन-मेमोरी और ऑन-डिस्क छवि कैश दोनों को बदलता है चित्र कैश मिटाया गया कैश मेटाडेटा मिटाएं कैश किए गए सभी वेबपेज का डेटा हटाएं @@ -262,11 +263,11 @@ देखे हुए वीडियो की सूची साफ करें चलाये गए स्ट्रीम के इतिहास और प्लेबैक स्थानों को साफ करता है देखे गए सभी का इतिहास साफ करें\? - देखे हुए का इतिहास साफ कर दिया गया। + देखा हुआ इतिहास साफ कर दिया गया ढूंढने के इतिहास को साफ करें ढूंढे गए शब्दो का इतिहास साफ करता है पूरे खोज इतिहास को मिटा दे \? - ढूंढने के इतिहास को साफ कर दिया। + खोज के इतिहास को साफ कर दिया एसी कोई भी फ़ोल्डर मौजूद नहीं है अमान्य फाइल/विषय - वस्तु का स्रोत फ़ाइल मौजूद नहीं है या उसे पढ़ने या लिखने की पर्याप्त अनुमति नही़ं है @@ -280,10 +281,10 @@ \nन्यूपाइप की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है। गोपनीयता नीति पढ़े क्या आप सेटिंग्स भी आयात करना चाहते है? - पसंदीदा \'खोलने\' कि प्रक्रिया + पसंदीदा \'खोलने\' की प्रक्रिया सामग्री खोलते समय डिफ़ॉल्ट कारवाही — %s अनुशीर्षक - प्लेयर अनुशीर्षक के शब्दों का परिमाण और पृष्ठभूमि शैलियो को बदले। लागू करने के लिए ऐप को पुनः प्रारम्भ करना जरूरी है। + प्लेयर अनुशीर्षक के शब्दों का परिमाण और पृष्ठभूमि शैलियों को बदले। लागू करने के लिए ऐप को पुनः प्रारम्भ करना जरूरी है आयात से आयात करे पर निर्यात करे @@ -293,11 +294,15 @@ पहले वाला निर्यात सब्सक्रिप्शन आयात नही कर सके सब्सक्रिप्शन निर्यात नही कर सके - निर्यात की गई फाइल को डाउनलोड करके यूट्यूब सब्सक्रिप्शन को आयात करे: + गूगल टेकआउट से यूट्यूब सदस्यता आयात करें: \n -\n1. इस URL पर जाए: %1$s -\n2. जब कहा जाए, लॉगिन करे -\n3. एक डाउनलोड शुरू होना चाहिए (यही निर्यात की गई फाइल है) +\n1. इस URL पर जाएं:%1$s +\n2. पूछे जाने पर लॉग इन करें +\n3. \"सभी डेटा शामिल करें\" पर क्लिक करें, फिर \"सभी को अचयनित करें\" पर, फिर केवल \"सदस्यताएँ\" चुनें और \"ओके\" पर क्लिक करें +\n4. \"अगला चरण\" पर क्लिक करें और फिर \"निर्यात बनाएं\" +\n5. प्रकट होने के बाद \"डाउनलोड\" बटन पर क्लिक करें +\n6. नीचे आयात फ़ाइल पर क्लिक करें और डाउनलोड की गई .zip फ़ाइल चुनें +\n7. [यदि .zip आयात विफल हो जाता है] .csv फ़ाइल निकालें (आमतौर पर \"YouTube और YouTube Music/subscriptions/subscriptions.csv\" के अंतर्गत), नीचे आयात फ़ाइल पर क्लिक करें और निकाली गई csv फ़ाइल चुनें आपका आई डी, soundcloud.com/(आपका आई डी) ध्यान रखे, यह तरीका नेटवर्क साधनो के लिए मंहगा हो सकता है। \n @@ -316,30 +321,29 @@ ऐप बदलते समय उसे मिनिमाइज करे मुख्य वीडियो चालक से दूसरी ऐप पर जाने पर — %s कोई नही - पृष्ठभूमि प्लेयर में बदले + बैकग्राउंड प्लेयर में बदले पॉप अप प्लेयर में बदले न्यूपाइप एक काॅपीलेफ़्ट फ़्री साॅफ़्टवेर है: इसे आप अपनी इच्छा के अनुसार इस्तेमाल, जाँच, बाँट तथा और बेहतर बना सकते है। खास तौर पर आप इसे फ़्री साॅफ़्टवेर फ़ाउंडेशन के द्वारा जारी जीएनयू जनरल पब्लिक लाइसेंस के तीसरे या उसके बाद आने वाले कोई भी वर्णन के शर्तों के मुताबिक फिर से बाँट या बदल सकते हैं। - सदस्यता हटाए + अनसब्सक्राईब करें टैब चुने ध्वनि नियंत्रण इशारा - कतार + कतारबद्ध करें वीडियो प्लेयर की ध्वनि नियंत्रित करने के लिए इशारो का इस्तेमाल करे रोशनी स्तर नियंत्रण के इशारे वीडियो चालक की चमक को नियंत्रित करने के लिए इशारो का इस्तेमाल करें अपडेट फाइल मिटा दी गयी - अप्प अपडेट अधिसूचना + ऐप अपडेट अधिसूचना नए NewPipe अपडेट की सूचनापत्र एक्सटर्नल स्टोरेज अनुपलब्ध SD कार्ड पर डाउनलोड करना संभव नहीं।डाउनलोड स्थान पुनः चुने\? सामान्य चुनाव पर लौटें क्या आप सामान्य चुनाव पर लौटना चाहते है\? - अभिदाता संख्या अनुपलब्ध + सब्सक्राइबर स॔ख्या अनुपलब्ध मुख्य पृष्ठ पर कौन से टैब दिखाए जाते हैं अपडेट सूची - NewPipe अपडेट उपलब्ध! - डाउनलोड करने के लिए टैप करें + न्यूपाइप अपडेट उपलब्ध! समाप्त अपूर्ण रोका हुआ @@ -376,7 +380,7 @@ सूचियों में स्थान प्लेबैक पोजिशन के निशान सूचियों में दिखाए डाटा मिटायें - प्लेबैक स्थान मिटा दिए गए| + प्लेबैक स्थान मिटा दिए गए फाइल की जगह बदली गयी या फिर फाइल मिटा दी गयी इस नाम की कोई फ़ाइल पहले से मौजूद है इस नाम की एक डाउनलोड की गई फ़ाइल पहले से मौजूद है @@ -386,23 +390,25 @@ डिवाइस पर जगह समाप्त प्रगति खो गई, क्योंकि फ़ाइल मिटा दी गई थी कनेक्शन का समय समाप्त - क्या आपको यकीन है\? + क्या आप अपना डाउनलोड इतिहास मिटाना चाहते हैं या सभी डाउनलोड की गई फ़ाइलों को हटाना चाहते हैं\? डाउनलोड कतार सीमित करें एक ही समय में एक डाउनलोड चलेगा डाउनलोड प्रारंभ करें डाउनलोड रोकें - डोलोड कहाँ करने के लिए पूछे - आपको हर डाउनलोड का स्थान पूछा जाएगा - SAF का उपयोग करें + डाउनलोड कहाँ करने के लिए पूछे + आपको हर डाउनलोड का स्थान पूछा जाएगा +\nयदि आप बाहरी एसडी कार्ड में डाउनलोड करना चाहते हैं तो सिस्टम फोल्डर पिकर (SAF) को सक्षम करें + सिस्टम फोल्डर पिकर (एसएएफ) का प्रयोग करें प्लेबैक स्थानों को मिटाये सारे प्लेबैक स्थानों को मिटाये सारे प्लेबैक स्थानों को मिटाये\? फ्रेगमेंट या एक्टिविटी लाइफसाइकिल के बाद Rx सन्देश ना पहुँचाया जा सके तोह ज़रूर कोशिश करे SoundCloud प्रोफाइल निर्यात करने के लिए आईडी या युआरएल दीजिये: -\n१ अपने वेब ब्राउज़र मैं \"डेस्कटॉप मोड\" चालू करे (वेबसाइट मोबाइल उपकरणों के लिए उपलब्ध नहीं है) -\n२ इस युआरएल को खोले: %1$s -\n३ लोग इन करे -\n४ आप जिस प्रोफाइल युआरएल पे भेजे जाते है उसे कॉपी करे| +\n +\n1. अपने वेब ब्राउज़र मैं \"डेस्कटॉप मोड\" चालू करे (वेबसाइट मोबाइल उपकरणों के लिए उपलब्ध नहीं है) +\n2. इस युआरएल को खोले: %1$s +\n3. लोग इन करे +\n4. आप जिस प्रोफाइल युआरएल पे भेजे जाते है उसे कॉपी करे। यूरोप के जनरल डाटा प्रोटेक्शन रेगुलेशन (जी डी पी आर) का पालन करने के लिए, हम आपका ध्यान न्यूपाइप की नयी प्राइवेसी पालिसी पी डालना चाहते है।इसे बारीकी से पढ़िए। \nआपको अगर हमें किसी मुसीबत का सन्देश भेजना हो तो इसे स्वीकार करे। सामान्य टैब्स का इस्तेमाल, सहेजे टैब्स को पढ़ने में रूकावट @@ -412,8 +418,7 @@ ऑटो मुसीबत दिखाए सर्वर मल्टी थ्रेडेड डाउनलोड स्वीकार नहीं करता, पुनः कोशिश करे @string/msg_threads = 1 के साथ - स्टोरेज एक्सेस फ्रेमवर्क (एस ऐ ऍफ़) आपको एस डी कार्ड पर डाउनलोड करने देता है -\nसुचना - कुछ उपकरणों पर ये नहीं चलता + स्टोरेज एक्सेस फ्रेमवर्क (एस ऐ ऍफ़) आपको एस डी कार्ड पर डाउनलोड करने देता है सेवा चुने, वर्तमान चुनाव : सामान्य कीओस्क कोई नहीं देख रहा है @@ -426,7 +431,7 @@ %s श्रोता %s श्रोता - ऐप के पुनः आरंभ होने के बाद भाषा बदल जाएगी। + ऐप के पुनः आरंभ होने के बाद भाषा बदल जाएगी तेज मोड सक्षम करें तेज मोड अक्षम करें क्या आपको लगता है कि फीड लोडिंग बहुत धीमी है\? यदि ऐसा है, तो तेज़ लोडिंग को सक्षम करने का प्रयास करें (आप इसे सेटिंग्स में या नीचे दिए गए बटन को दबाकर बदल सकते हैं)। @@ -443,7 +448,7 @@ यह सामग्री फिलहाल NewPipe सपोर्ट नहीं करता है। \n \nइसे आशा से भविष्य के संस्करणों में सपोर्ट किया जायेगा। - चैनल का avatar थंबनेल + चैनल का अवतार थंमनेल %s के द्वारा %s के द्वारा बनाया गया प्लेलिस्ट पृष्ठ @@ -452,7 +457,6 @@ कलाकार गाने कभी नहीं - सहायता reCAPTCHA कुकीज़ को साफ़ कर दिए गए हैं ReCAPTCHA कुकीज़ साफ़ करें एल्बम @@ -468,7 +472,7 @@ अपने आप कतार में जोड़े कतार को मिटाने से पहले सत्यापन के लिए पूछें तलाश अवधि फास्ट-फ़ॉरवर्ड /- रिवाइंड करे - एंड्रॉइड को थंबनेल में मुख्य रंग के अनुसार अधिसूचना रंग को अनुकूलित करें (ध्यान दें कि यह सभी उपकरणों पर उपलब्ध नहीं है) + एंड्रॉइड को थंमनेल में मुख्य रंग के अनुसार अधिसूचना रंग को अनुकूलित करें (ध्यान दें कि यह सभी उपकरणों पर उपलब्ध नहीं है) सूचनापत्र को रंगीन करें कुछ नहीं बफरिंग @@ -481,51 +485,51 @@ तृतीय एक्शन बटन द्वितीय एक्शन बटन प्रथम एक्शन बटन - नोटिफिकेशन में दिखाए गए वीडियो थंबनेल को 16: 9 के बजाय 1: 1 के अनुपात में दिखाए (इस कारण कुछ परेशानियां हो सकती हैं) - थंबनेल को 1:1 के अनुपात मैं दिखाएं + नोटिफिकेशन में दिखाए गए वीडियो थंमनेल को 16: 9 के बजाय 1: 1 के अनुपात में दिखाए + थंमनेल को 1:1 के अनुपात में दिखाएं - %dघंटा - %dघंटे + %d घंटा + %d घंटे - %dसेकंड - Seconds + %d सेकेड + %d सेकंड्स देखे गए वीडियो हटायें\? देखे गए को हटा दें सिस्टम डिफ़ॉल्ट - ऐप भाषा + ऐप की भाषा डाउनलोड की गई फ़ाइलें हटाएं डाउनलोड इतिहास हटायें केवल वाईफाई पर स्वचालित रूप से प्लेबैक शुरू करें —%s मेमरी लीक दर्शाएँ - अन्म्यूट - म्यूट - सबसे ज्यादा पसंद + मौन हटायें + मौन + सबसे पसंद किए गए हाल ही में जोड़ा - लोकल - कोई प्लेलिस्ट का बुक्मार्क्स नहीं है - एक प्लेलिस्ट का चयन करें - ∞ विडीओ - १००+ विडीओ + स्थानीय + अभी कोई प्लेलिस्ट का बुक्मार्क नहीं है + प्लेलिस्ट का चयन करें + ∞ विडीओज़ + 100+ विडीओज़ विवरण संबंधित स्ट्रीमस टिप्पणियाँ - कृपया जांचें लें कि क्या आपके क्रैश पर चर्चा करने वाला मुद्दा पहले से मौजूद है। डुप्लिकेट टिकट बनाते समय, आप हमसे समय लेते हैं जो हम वास्तविक बग को ठीक करने के साथ खर्च कर सकते हैं। + कृपया जांचें लें कि क्या आपके क्रैश पर चर्चा करने वाला मुद्दा पहले से मौजूद है। डुप्लिकेट टिकट बनाते समय, आप हमसे समय लेते हैं जो हम वास्तविक बग को ठीक करने के लिए खर्च कर सकते हैं। गिटहब पर रिपोर्ट करें अन्य ऐप्स पर प्रदर्शित करने की अनुमति दें विडीओ हैशिंग की प्रगति की सूचना वीडियो हैश अधिसूचना - स्ट्रीम निर्माता, स्ट्रीम विषय सूची या खोज अनुरोध के बारे में अतिरिक्त जानकारी के साथ मेटा जानकारी बक्से को छिपाने के लिए बंद करें. - Meta जानकारी दिखाएँ + स्ट्रीम निर्माता, स्ट्रीम सामग्री या खोज अनुरोध के बारे में अतिरिक्त जानकारी के साथ मेटा जानकारी बक्से को छिपाने के लिए बंद करें + मेटा जानकारी दिखाएँ वीडियो का विवरण और अतिरिक्त जानकारी छिपाने के लिए इसे बंद करें विवरण दिखाएं सक्रिय चालक की क़तार बदल दी जाएगी एक चालक से दूसरे चालक में जाने से आपकी कतार बदल सकती है इसमें खोलें - थंबनेल दिखाएं - लॉक स्क्रीन और नोटिफिकेशन दोनों के लिए थंबनेल का इस्तेमाल करे + थंमनेल दिखाएं + लॉक स्क्रीन और नोटिफिकेशन दोनों के लिए थंमनेल का इस्तेमाल करे पाठ आपके डिवाइस का कोई भी ऐप इसे नहीं खोल सकता है यह सामग्री आपके देश में उपलब्ध नहीं है। @@ -547,17 +551,183 @@ स्वरूपित रिपोर्ट कॉपी करें कुकी साफ़ करें जिसे न्यूपाइप आपके द्वारा रीकैप्चा हल करने पर संग्रहीत करता है उदाहरण पहले से मौजूद है - उदाहरण मान्य नहीं किया जा सका - उदाहरण URL दर्ज करें + इंसटैंस मान्य नहीं किया जा सका + इंसटैंस यूआरएल दर्ज करें उदाहरण जोड़ें - %s . पर अपनी पसंद के उदाहरण ढूँढ़ें - अपने पसंदीदा PeerTube उदाहरण चुनें + %s पर अपनी पसंद के इंसटैंस ढूँढ़ें + अपने पसंदीदा पीयर ट्यूब इंसटैंस चुनें मुख्य प्लेयर को पूर्ण स्क्रीन में शुरू करें - मिनी प्लेयर में वीडियो शुरू न करें, लेकिन ऑटो रोटेशन लॉक होने पर सीधे फुल स्क्रीन मोड पर जाएं। आप अब भी फ़ुलस्क्रीन से बाहर निकलकर मिनी प्लेयर तक पहुंच सकते हैं। + मिनी प्लेयर में वीडियो शुरू न करें, लेकिन ऑटो रोटेशन लॉक होने पर सीधे फुल स्क्रीन मोड पर जाएं। आप अब भी फ़ुलस्क्रीन से बाहर निकलकर मिनी प्लेयर तक पहुंच सकते हैं टिप्पणियाँ करना बंद है देखा हुआ चिह्नित करें चालक सूचनापत्र सूचनापत्र चालक असफल हुआ स्थानीय खोज सुझाव + सार्वजनिक + अभी चल रही स्ट्रीम अधिसूचना को कॉन्फ़िगर करें + नई स्ट्रीमें + सब्सक्रिप्शनस के नई स्ट्रीमों के बारे में अधिसूचनाएं + त्रुटि रिपोर्ट अधिसूचना + त्रुटियों की रिपोर्ट करने के लिए अधिसूचनाएं + न्यूपाइप को एक त्रुटि का सामना करना पड़ा, रिपोर्ट करने के लिए टैप करें + हल करें + कतारबद्ध करें + प्ले कतार + कतार में आगे जोड़ा गया + कतारबद्ध हुआ + स्ट्रीम विवरण लोड हो रहे हैं… + प्रोसेस हो रहा है… कुछ समय लग सकता है + छवि संकेतक दिखाएं + प्लेयर का उपयोग करते समय क्रैश विकल्प दिखाता है + नई स्ट्रीमों के लिए जांच चलाएं + एक त्रुटि स्नैकबार दिखाएं + सब्सक्रिप्शनस से नई स्ट्रीमों के बारे में सूचित करें + जाँच करने की आवृत्ति + नेटवर्क कनेक्शन आवश्यक + नई स्ट्रीम अधिसूचनाएं + कोई भी नेटवर्क + अपडेट के लिए जाँच करें + निम्न गुणवत्ता (छोटा) + सीकबार थंमनेल पूर्वावलोकन + उच्च गुणवत्ता (बड़ा) + अपडेट्स के लिए जांच हो रही है… + ठीक हो रहा है + डिस्क से सभी डाउनलोड की गई फ़ाइलें मिटाएं\? + एंड्रॉइड 10 से शुरू होकर केवल \'स्टोरेज एक्सेस फ्रेमवर्क\' समर्थित है + एक इंस्टेंस चुनें + हां, और आंशिक रूप से देखे गए वीडियो भी + फीड लोड हो रही है… + फ़ीड अपडेट चरणसीमा + फ़ीड लोड करने में गड़बड़ी + \'%s\' के लिए फ़ीड लोड नहीं कर सका। + रीसैंट + विवरण में पाठ का चयन सक्षम करें + गोपनीयता + अब आप विवरण के अंदर पाठ का चयन कर सकते हैं। ध्यान दें कि पृष्ठ झिलमिला सकता है और चयन मोड में लिंक क्लिक करने योग्य नहीं हो सकते हैं। + आयु सीमा + सहायता + होसट + अधिसूचनाएं अक्षम हैं + गैर-सूचीबद्ध + संयुक्त टॉगल करें + सूचना पायें + , + नए संस्करणों के लिए मैन्युअल रूप से जांचें + एकसोप्लेयर की कमी के कारण खोज की अवधि %d सेकंड पर सेट की गई + खाता समाप्त किया गया + स्ट्रीम जो अभी तक डाउनलोडर द्वारा समर्थित नहीं हैं, नहीं दिखाई जाती हैं + बाहरी प्लेयरस के लिए क्वालिटी का चयन करें + अज्ञात प्रारूप + अज्ञात क्वालिटी + ऐप को क्रैश करें + श्रेणी + आपसे पूछा जाएगा कि प्रत्येक डाउनलोड को कहां सहेजना है + देखे गए आइटम दिखाएं + थंमनेल यूआरएल + ऑफ़ + हमेशा अपडेट करें + विवरण में पाठ का चयन अक्षम करें + मत दिखाओ + दूरस्थ खोज सुझाव + + %s नई स्ट्रीम + %s नई स्ट्रीमें + + प्रतिशत + सैमीटोन + + डाउनलोड समाप्त + %s डाउनलोड समाप्त + + + %d दिन + %d दिन + + + %d चयनित + %d चयनित + + एक्सोप्लेयर डिफ़ॉल्ट + प्लेबैक लोड अंतराल आकार + समूह का नाम नहीं + सब्सक्रिप्शनस चुनें + क्या आप इस समूह को हटाना चाहते हैं\? + नया + फ़ीड + भविष्य की आइटम दिखाएं + नई फ़ीड आइटम + फ़ीड संसाधित हो रही है … + वेबसाइट खोलें + उपलब्ध होने पर समर्पित फ़ीड से प्राप्त करें + भाषा + आन + स्वतः बने (कोई अपलोडर नहीं मिला) + चैनल समूह + देखे गए आइटम छुपाएं + भविष्य की आइटम छुपाएं + बार बार पूछे जाने वाले प्रश्न + वेबसाइट पर देखें + आइटम हटाने के लिए स्वाइप करें + मीडिया टनलिंग अक्षम करें + \"क्रैश द प्लेयर\" दिखाएं + लोड नहीं हुआ: %d + %s इसका कारण प्रदान करता है: + टैग + लाइसेंस + यदि आपको ऐप का उपयोग करने में परेशानी हो रही है, तो सामान्य प्रश्नों के इन उत्तरों को देखना सुनिश्चित करें! + कतार में आगे जोड़ें + लोड अंतराल आकार बदलें (वर्तमान में %s)। एक कम मान आरंभिक वीडियो लोडिंग को गति दे सकता है। परिवर्तन के लिए प्लेयर को पुनः आरंभ करने की आवश्यकता होती है + लीककैनरी उपलब्ध नहीं है + एक त्रुटी हुई है, अधिसूचना देखें + यदि आप काली स्क्रीन या वीडियो प्लेबैक खड़खड़ाते हुए चलने का अनुभव करते हैं तो मीडिया टनलिंग को अक्षम करें + छवियों के शीर्ष पर पिकासो रंगीन रिबन दिखाएँ जो उनके स्रोत को दर्शाता है: नेटवर्क के लिए लाल, डिस्क के लिए नीला और मेमोरी के लिए हरा + गड़बड़ी की सूचना बनाएं + इस डाउनलोड को पुनर्प्राप्त नहीं किया जा सकता + अभी तक कोई डाउनलोड फ़ोल्डर सेट नहीं किया गया है, अब डिफ़ॉल्ट डाउनलोड फ़ोल्डर चुनें + हल होने पर \"संपन्न\" दबाएं + चैनल विवरण दिखाएं + आइटम्स का असल अपलोड समय दिखाएं + सेवाओं से मूल पाठ स्ट्रीम आइटम में दिखाई देंगे + प्लेलिस्ट में जोड़े गए पहले और बाद में देखे गए वीडियो हटा दिए जाएंगे। +\nक्या यक़ीनन आप ऐसा चाह्ते हैं\? इसे असंपादित नहीं किया जा सकेगा! + + %d मिनट + %d मिनट + + अंतिम अपडेट फ़ीड: %s + कोई सदस्यता चयनित नहीं है + केवल असमूहीकृत सब्सक्रिप्शनस दिखाएं + फ़ास्ट फ़ीड मोड इस पर अधिक जानकारी प्रदान नहीं करता है। + अपडेट अंतराल जब सब्सक्रिप्शन फ़ीड दोबारा अपडेट किये जा सकें — %s + लेखक का खाता समाप्त कर दिया गया है। +\nन्यूपाइप भविष्य में इस फीड को लोड नहीं कर पाएगा। +\nक्या आप इस चैनल की सदस्यता समाप्त करना चाहते हैं\? + चयनित स्ट्रीम बाहरी प्लेयरस द्वारा समर्थित नहीं है + इस क्रिया के लिए कोई उपयुक्त फ़ाइल प्रबंधक नहीं मिला। +\nकृपया स्टोरेज एक्सेस फ्रेमवर्क संगत फ़ाइल प्रबंधक स्थापित करें + निजी + आंतरिक + पिन की हुई टिप्पणी + निर्माता द्वारा दिया दिल + टैबलेट मोड + आपने इस चैनल को अब सब्सक्राइब किया है + बाहरी प्लेयरस के लिए कोई वीडियो स्ट्रीम उपलब्ध नहीं है + बाहरी प्लेयरस के लिए कोई ऑडियो स्ट्रीम उपलब्ध नहीं है + कुछ सेवाओं में उपलब्ध, यह आमतौर पर बहुत तेज होता है लेकिन सीमित मात्रा में आइटम और अक्सर अधूरी जानकारी (जैसे कोई अवधि नहीं, आइटम प्रकार, कोई लाइव स्थिति नहीं) लौटा सकता है + इस क्रिया के लिए कोई उपयुक्त फ़ाइल प्रबंधक नहीं मिला। +\nकृपया फ़ाइल प्रबंधक स्थापित करें या डाउनलोड सेटिंग में \'%s\' को अक्षम करने का प्रयास करें + + %1$s डाउनलोड हटाए गए + %1$s डाउनलोड हटाए गए + + क्रमबद्ध करें + तेज मोड + 3-बिंदु वाले मेन्यू से सब्सक्रिप्शनस आयात या निर्यात करें + आप न्यूपाइप का नवीनतम संस्करण चला रहे हैं + %s डाउनलोड करने के लिए टैप करें + यह विकल्प केवल तभी उपलब्ध होता है जब थीम के लिए %s का चयन किया जाता है + स्थायी थंमनेल अनसेट करें + कार्ड + क्लिपबोर्ड पर कॉपी करने में विफल \ No newline at end of file diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 87f95366a..bc35866e3 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -144,7 +144,7 @@ Povijest i predmemorija Poništi Nema rezultata - Ovdje nema ništa osim cvrčaka + Ovdje nema ništa osim cvrčaka Nema pretplatnika %s pretplatnik @@ -310,8 +310,7 @@ Prikaži obavijest i zatraži aktualiziranje programa kad je dostupna nova verzija Popis Popločeno - Dostupna je nova verzija za NewPipe! - Dodirni za preuzimanje + Dostupna je nova verzija za NewPipe! Preuzimanje nije uspjelo Prikaži pogrešku Isključi za sprečavanje učitavanja sličica, čime se štedi korištenje podataka i memorije. Promjene čiste predmemoriju slika radne memorije i diska @@ -429,7 +428,6 @@ Videa Isključi zvuk Uključi - Pomoć Učitavanje feeda … Želiš li izbrisati ovu grupu\? Nova @@ -703,10 +701,8 @@ Pokreni traženje novih streamova Prvjeravanje učestalosti Biblioteka „LeakCanary” nije dostupna - Podešavanje visine tona po glazbenim polutonovima Obavijesti o novim streamovima Potrebna mrežna veza - Zadano za ExoPlayer Primaj obavijesti Za ovu radnju nije pronađen odgovarajući upravljač datoteka. \nInstaliraj upravljač datoteka ili pokušaj onemogućiti „%s” u postavkama preuzimanja diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 86f699a00..8a518bda6 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -135,9 +135,9 @@ Közvetítési fájl letöltése Hozzáadás ehhez Gyorsabb, de pontatlan tekerés használata - A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kisebb pontossággal. Az 5, 15, vagy 25 másodperces tekerés nem működik ebben a módban. + A pontatlan tekerés lehetővé teszi, hogy gyorsabban ugorjon a pozíciókra, de kisebb pontossággal. Az 5, 15, vagy 25 másodperces tekerés nem működik ebben a módban Bélyegképek betöltése - Kapcsolja ki, hogy a megelőzze a bélyegképek betöltését, így csökkentve az adat- és memóriahasználatot. A megváltoztatása törli a memóriában és a meghajtón lévő képgyorsítótárat. + Kapcsolja ki, hogy a megelőzze a bélyegképek betöltését, így csökkentve az adat- és memóriahasználatot. A megváltoztatása törli a memóriában és a meghajtón lévő képgyorsítótárat A bélyegkép gyorsítótár törölve Gyorsítótárazott metaadatok törlése Minden gyorsítótárazott weboldaladat törlése @@ -167,7 +167,7 @@ A fájlnév nem lehet üres Hiba történt: %1$s Nincs letölthető adatfolyam - Nincs itt semmi pár tücskön kívül + Nincs itt semmi pár tücskön kívül Húzza az átrendezéshez e m @@ -266,7 +266,7 @@ Nagyítás Automatikusan létrehozott Feliratok - Feliratok méretének és hátterének stílusbeli módosítása. A módosítások életbe lépésehez az alkalmazás újraindítása szükséges. + Feliratok méretének és hátterének stílusbeli módosítása. A módosítások életbe lépésehez az alkalmazás újraindítása szükséges Importálás Importálás a következőből Exportálás a következőbe @@ -381,8 +381,7 @@ szüneteltetve Függőben lévő Befejezett - Kattintson a letöltéshez - NewPipe frissítés érhető el! + NewPipe frissítés érhető el! Automatikus Rács Lista @@ -472,7 +471,6 @@ 100+ videó Jelentés a GitHubon Alapértelmezések visszaállítása - Súgó Sütik törlése, amelyeket a NewPipe akkor ment, amikor megold egy reCAPTCHA-t reCAPTCHA sütik törölve reCAPTCHA sütik törlése @@ -493,7 +491,7 @@ Frissítési értesítés megjelenítése, amikor egy új verzió érhető el Frissítések Az Android igazítsa az értesítés színét a bélyegkép meghatározó színéhez (nem minden eszközön érhető el) - Legfeljebb három művelet jeleníthető meg a kompakt értesítésben. + Legfeljebb három művelet jeleníthető meg a kompakt értesítésben! Koppintással szerkesztheti az egyes értesítéseken megjelenő műveleteket. Válasszon ki legfeljebb hármat a jobb oldali jelölőnégyzetekkel, amelyek a kompakt értesítéseken is megjelennek. Ötödik műveletgomb Negyedik műveletgomb @@ -570,13 +568,13 @@ Helyi keresési javaslatok Távoli keresési javaslatok A fő lejátszó teljes képernyős indítása - A videókat ne a kis lejátszóban indítsa el, hanem kapcsolja be a teljes képernyős módot, ha az automatikus forgatás zárolva van. Továbbra is elérheti a kis lejátszót, ha kilép a teljes képernyőből. + A videókat ne a kis lejátszóban indítsa el, hanem kapcsolja be a teljes képernyős módot, ha az automatikus forgatás zárolva van. Továbbra is elérheti a kis lejátszót, ha kilép a teljes képernyőből Szolgáltatás be/ki, jelenleg kiválasztott: A megjegyzések ki vannak kapcsolva Húzza oldalra az elemeket az eltávolításukhoz A következő sorba állítása A következő sorba állítva - Feldolgozás… Ez eltarthat egy ideig. + Feldolgozás… Ez eltarthat egy ideig Az eltávolítás utáni, fragment vagy activity életcikluson kívüli, nem kézbesíthető Rx kivételek jelentésének kényszerítése Eredeti „ennyi ideje” megjelenítése az elemeken Tiltsa le a médiacsatornázást, ha fekete képernyőt vagy akadozást tapasztal videólejátszáskor @@ -619,7 +617,7 @@ Nem listázott Ki Nem található megfelelő fájlkezelő ehhez a művelethez. -\nTelepítsen egy fájlkezelőt, vagy próbálja meg letiltani a következőt a letöltési beállításokban: „%s”. +\nTelepítsen egy fájlkezelőt, vagy próbálja meg letiltani a következőt a letöltési beállításokban: „%s” Letöltés befejezve %s letöltés befejezve @@ -658,7 +656,7 @@ Frissítések keresése… Készítette: %s Nem található megfelelő fájlkezelő ehhez a művelethez. -\nTelepítsen egy olyan fájlkezelőt, amely kompatibilis a Storage Access Frameworkkel. +\nTelepítsen egy olyan fájlkezelőt, amely kompatibilis a Storage Access Frameworkkel Szöveg kijelölésének engedélyezése a leírásban Kategória Címkék @@ -666,7 +664,7 @@ Gyors mód letiltása Igen, és távolítsa el a részben megnézett videókat is A videók, melyeket már megnézett miután a lejátszási listához adta őket, el lesznek távolítva. -\nBiztos benne\? Ez nem vonható vissza. +\nBiztos benne\? Ez nem vonható vissza!
A szolgáltatásokból származó eredeti szövegek láthatók lesznek a közvetítési elemeken Lejátszó összeomlasztása Képjelölők megjelenítése @@ -684,7 +682,7 @@ Rögzített megjegyzés LeakCanary nem elérhető Lejátszó értesítés - Módosítsa a betöltési intervallum méretét (jelenleg %s). Az alacsonyabb érték felgyorsíthatja a videó kezdeti betöltését. A változtatásokhoz a lejátszó újraindítása szükséges. + Módosítsa a betöltési intervallum méretét (jelenleg %s). Az alacsonyabb érték felgyorsíthatja a videó kezdeti betöltését. A változtatásokhoz a lejátszó újraindítása szükséges Az aktuális lejátszás konfigurálása értesítés Értesítések Új élő közvetítések @@ -722,6 +720,10 @@ Gyakran ismételt kérdések Megtekintés a weboldalon Rendezés - Ha problémája van az alkalmazás használatával, akkor nézze meg az ezekre a gyakori kérdésekre adott válaszokat. + Ha problémája van az alkalmazás használatával, akkor nézze meg az ezekre a gyakori kérdésekre adott válaszokat! Megnézett elemek elrejtése + Gyors mód + Feliratkozások importálása vagy exportálása a 3 pontos menüből + Ön a Newpipe legfrissebb verzióját futtatja + Nyomjon a %s letöltéséhez \ No newline at end of file diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml index 218854841..033e93c0e 100644 --- a/app/src/main/res/values-hy/strings.xml +++ b/app/src/main/res/values-hy/strings.xml @@ -83,7 +83,7 @@ %d րոպե Ալիքների խմբեր - NewPipe֊ի նոր թարմացում է հասանելի + NewPipe֊ի նոր թարմացում է հասանելի Ցանկ Երբեք Ոչինչ @@ -196,7 +196,6 @@ Նվագել ամենը Ուղիղ Շարունակել նվագարկումը - Օգնություն Լուծել Նշել ալիք Ցույց չտալ @@ -217,7 +216,7 @@ Հանրային Պիտակներ Ծանուցումները անջատված են - Ոչինչ բացի դատարկությունից + Ոչինչ բացի դատարկությունից Կրկին փորձել Հոսքի նորերը \ No newline at end of file diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index f4383defb..aa847b2a4 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -150,7 +150,7 @@ Predefinite del systema Lingua del application Actualisar sempre - Il ha un actualisation de NewPipe disponibile! + Il ha un actualisation de NewPipe disponibile! Monstrar un notification pro requestar le actualisation del application quando un nove version es disponibile Actualisationes Aperir in modo emergente @@ -196,7 +196,7 @@ Nulle subscriptores Audio Video - Nihil contentos ci + Nihil contentos ci Nulle resultatos Description Fluxos associate @@ -215,7 +215,6 @@ Le discarga al carta SD non es possibile. Reinitialisar le location del dossier de discargas\? Immagazinage externe non disponibile Error - Adjuta Esque tu vole deler tote le positiones de reproduction\? Dele tote le positiones de reproduction Usar le recerca rapide e inexacte diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 7fec1490d..cc5f6dd3b 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -173,7 +173,7 @@ Nama berkas tidak boleh kosong Telah terjadi galat: %1$s Tidak ada hasil - Tidak ada apa pun di sini selain jangkrik + Tidak ada apa pun di sini selain jangkrik Geser untuk ubah urutan Tidak ada pelanggan @@ -352,8 +352,7 @@ Daftar Kisi Otomatis - Pembaruan NewPipe telah tersedia! - Ketuk untuk mengunduh + Pembaruan NewPipe telah tersedia! Selesai Tertunda dijeda @@ -456,7 +455,6 @@ %d detik Karena kendala ExoPlayer, durasi pencarian ditetapkan ke %d detik - Bantuan %d menit @@ -711,4 +709,14 @@ Jika Anda mengalami masalah menggunakan aplikasi, pastikan untuk melihat jawaban untuk pertanyaan yang umum! Tampilkan di situs web Urutan + Mode cepat + Impor atau ekspor langganan dari menu 3 titik + Anda menjalankan NewPipe versi terkini + Ketuk untuk mengunduh %s + Opsi ini hanya tersedia jika %s dipilih untuk Tema + Batalkan penetapan gambar kecil permanen + Gagal menyalin ke papan klip + Kartu + Daftar putar yang bewarna abu-abu sudah berisi item ini. + Duplikat ditambahkan %d kali \ No newline at end of file diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index c57f46444..ffb0b59d1 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -44,7 +44,7 @@ Um NewPipe Áskrift hætt Hætta áskrift - Allt er tómt + Allt er tómt NewPipe er „copyleft“ frjáls hugbúnaður: Þú getur notað, rannsakað, deilt og bætt honum að vild. Þú getur endurdreift og breytt því samkvæmt skilmálum GNU GPL notendaleyfi eins og það er gefið út af Frjálsa Hugbúnaðarstofnuninni, annað hvort útgáfu 3 af leyfinu, eða (að eigin vali) hvaða síðari útgáfu sem er. Í áskrift Bókamerktir spilunarlistar @@ -53,7 +53,7 @@ Tilkynningar fyrir nýjar útgáfur NewPipe Hreinsa vefkökur sem NewPipe geymir þegar þú leysir reCAPTCHA NewPipe rakst á villu, pikkaðu til að tilkynna - Um + Um okkur og algengar spurningar Gerast áskrifandi Aðeins sum tæki geta spilað 2K/4K myndbönd Spila með Kodi @@ -136,7 +136,6 @@ Spilari Aflúsa Sjálfgefið tungumál efnis - NewPipe uppfærsla í boði! Tungumál Bæta við Sprettiglugga @@ -151,7 +150,6 @@ Ljós Afturkalla Alltaf - Hjálp Villa Fjarlægir hljóð í sumum upplausnum Gat ekki breytt áskrift @@ -455,7 +453,6 @@ Hágæða (stærra) Lágæða (minna) Ekki sýna - Pikkaðu til að sækja að jafna sig Niðurhal mistókst Sýna villu @@ -717,4 +714,8 @@ Engir hljóðstraumar eru í boði fyrir ytri spilara Veldu gæði fyrir ytri spilara Sýna framtíðaratriði + Ef þú átt í vandræðum með að nota forritið vertu viss um að skoða þessi svör við algengum spurningum! + Algengar spurningar + Skoða á vefsíðu + Raða \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index acb9d6bc0..ccaf93510 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -162,7 +162,7 @@ %s video %s video - Nulla da mostrare + Nulla da mostrare Eliminare questo elemento dalla cronologia delle ricerche\? Contenuto della pagina principale Pagina vuota @@ -359,8 +359,7 @@ Lista Griglia Automatica - Aggiornamento di NewPipe disponibile! - Premi per scaricare + Aggiornamento di NewPipe disponibile! Completati In corso in pausa @@ -470,7 +469,6 @@ A causa delle limitazioni di ExoPlayer la durata dello spostamento rapido è stata impostata a %d secondi Silenzia Riattiva audio - Aiuto %d minuto %d minuti @@ -737,4 +735,14 @@ Se riscontri problemi nell\'utilizzo dell\'app, dai un\'occhiata alle risposte delle domande più comuni! Ordina Visualizza sul sito + Recupero veloce + Premi per scaricare %s + Stai già usando l\'ultima versione di NewPipe + Importa o esporta iscrizioni dal menu a 3 punti + Questa opzione è disponibile solo se %s è selezionato come Tema + Copia negli appunti non riuscita + Schede + Disattiva copertina permanente + Le playlist in grigio contengono già questo elemento. + Doppione aggiunto %d volta/e \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d5d6ae8c9..e320649a3 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -108,7 +108,7 @@ NewPipe について サードパーティー ライセンス © %1$s 作者 %2$s ライセンス %3$s - このアプリについて + バージョン情報とよくある質問 ライセンス Android 向けのフリーで軽量なストリーミング。 GitHub で表示 @@ -176,7 +176,7 @@ 一度だけ データベースをインポート データベースをエクスポート - 既存の履歴、登録リスト、プレイリストおよび (任意) 設定は上書きされます + 既存の履歴、登録チャンネル一覧、プレイリストおよび (任意) 設定は上書きされます 再生履歴、登録チャンネル一覧、プレイリストおよび設定をエクスポートします エラーから回復中です 外部プレイヤーは、これらのタイプのリンクをサポートしていません @@ -288,7 +288,7 @@ 全画面 自動生成 プレーヤーのキャプションテキストの縮尺と背景スタイルを変更します。有効にするには、アプリの再起動が必要です - 何もありません + 何もありません Google takeout から YouTube の登録リストをインポート: \n \n1. この URL を開きます: %1$s @@ -342,8 +342,7 @@ リスト グリッド 自動 - NewPipe のアップデートがあります! - タップでダウンロード + NewPipe のアップデートがあります! 完了 順番に処理中 一時停止 @@ -458,7 +457,6 @@ ExoPlayer の制約のためシーク間隔は %d 秒に設定されました ミュート ミュート解除 - ヘルプ %d 分 @@ -707,4 +705,17 @@ 次のアイテムを表示する 再生済みを隠す 次のアイテムを隠す + 並び替え + ウェブサイトを表示 + タップして%sをダウンロード + あなたはNewPipeの最新版を起動しています + よくある質問 + アプリの使い方に困ったときは、よくある質問に答えていますので、ぜひご覧ください! + %sがテーマに選択された場合のみ、この選択肢が利用可能です + 高速モード + 3 点メニューから登録チャンネルをインポートまたはエクスポートします + カード + クリップボードへのコピーに失敗しました + 灰色で表示されているプレイリストには、すでにこのアイテムが含まれています。 + %d 回重複追加されました \ No newline at end of file diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml new file mode 100644 index 000000000..1d5d42cac --- /dev/null +++ b/app/src/main/res/values-ka/strings.xml @@ -0,0 +1,722 @@ + + + ნაკადის პლეერი ვერ მოიძებნა (მის დასაკრავად შეგიძლიათ დააინსტალიროთ VLC). + "ნაკადის მოთამაშე ვერ მოიძებნა. დააინსტალირე VLC\?" + გაუქმება + გააზიარეთ როგორც + გამოიყენეთ გარე ვიდეო დამკვრელი + მონიშნული დასაკრავი სიები + ინფორმაციის ჩვენება + აირჩიეთ ჩანართი + აირჩიეთ ჩამოტვირთვის საქაღალდე ვიდეო ფაილებისთვის + გადმოწერილი აუდიო ფაილები ინახება აქ + დაკვრა Kodi-სთან + აირჩიეთ ჩამოტვირთვის საქაღალდე აუდიო ფაილებისთვის + ნაგულისხმევი რეზოლუცია + ამომხტარი ფანჯრის ნაგულისხმევი რეზოლუცია + მხოლოდ ზოგიერთ მოწყობილობას შეუძლია 2K/4K ვიდეოების დაკვრა + დაარტყა დამკვრელი + ესკიზის ჩამოჭრა ასპექტის თანაფარდობაზე 1:1 + თქვენ შეგიძლიათ აირჩიოთ მაქსიმუმ სამი მოქმედება კომპაქტურ შეტყობინებაში საჩვენებლად! + "შეცვალეთ თითოეული შეტყობინებების მოქმედება ქვემოთ მასზე შეხებით. აირჩიეთ მაქსიმუმ სამი მათგანი, რომლებიც ნაჩვენები იქნება კომპაქტურ შეტყობინებაში მარჯვნივ მდებარე ველების გამოყენებით" + დისტანციური ძიების შეთავაზებები + გამორთეთ ვიდეოს აღწერილობისა და დამატებითი ინფორმაციის დასამალად + თემა + გამოიყენეთ სწრაფი არაზუსტი ძებნა + გამორთეთ მეტა-ინფორმაციის ყუთების დასამალად ნაკადის შემქმნელის, სტრიმინგის კონტენტის ან ძიების მოთხოვნის შესახებ დამატებითი ინფორმაციით + ვიდეოს ნაგულისხმევი ფორმატი + არაფერი + შეფერილობის შეტყობინება + გახსოვდეთ ამომხტარი ფანჯრის ბოლო ზომა და პოზიცია + მიეცით Android-ს შეტყობინებების ფერის მორგება მინიატურაში მთავარი ფერის მიხედვით (გაითვალისწინეთ, რომ ეს არ არის ხელმისაწვდომი ყველა მოწყობილობაზე) + პოზიციები სიებში + გააგრძელეთ დაკვრა + გააგრძელეთ დაკვრა შეფერხებების შემდეგ (მაგ. სატელეფონო ზარები + დაიწყეთ მთავარი მოთამაშე სრულ ეკრანზე + "URL-ის ამოცნობა ვერ მოხერხდა. სხვა აპით გახსნა\?" + ნაგულისხმევი აუდიო ფორმატი + აირჩიეთ თქვენი საყვარელი PeerTube ეგზემპლარები + დაკვრის დატვირთვის ინტერვალის ზომა + "შეცვალეთ დატვირთვის ინტერვალის ზომა (ამჟამად %s). დაბალმა მნიშვნელობამ შეიძლება დააჩქაროს საწყისი ვიდეოს ჩატვირთვა. ცვლილებები მოითხოვს მოთამაშის გადატვირთვას" + მოითხოვეთ დადასტურება რიგის გასუფთავებამდე + "არაზუსტი ძიება საშუალებას აძლევს მოთამაშეს უფრო სწრაფად მოიძიოს პოზიციები შემცირებული სიზუსტით. 5, 15 ან 25 წამის ძიება ამით არ მუშაობს" + სწრაფი წინსვლა/-გადახვევა ძიების ხანგრძლივობა + ერთი მოთამაშიდან მეორეზე გადართვამ შესაძლოა შეცვალოს თქვენი რიგი + გამორთეთ ესკიზების ჩატვირთვის თავიდან ასაცილებლად, მონაცემთა დაზოგვისა და მეხსიერების გამოყენების თავიდან ასაცილებლად. იცვლება როგორც მეხსიერებაში, ასევე დისკზე გამოსახულების ქეშის გასუფთავება + ძიების შეთავაზებები + წაშალეთ ყველა ქეშირებული ვებგვერდის მონაცემები + გამოიყენეთ ჟესტები მოთამაშის ხმის გასაკონტროლებლად + შემდეგი ნაკადის ავტომატური შეყვანა + გააგრძელეთ დაკვრის რიგის (არაგანმეორებადი) დასრულება შესაბამისი ნაკადის დამატებით + მეტამონაცემების ქეში წაშლილია + ავტომატური რიგი + ძიების ისტორია + მონაცემების გასუფთავება + აირჩიეთ შემოთავაზებების ჩვენება ძიებისას + ადგილობრივი ძიების წინადადებები + დაკვრის პოზიციის ინდიკატორების ჩვენება სიებში + ჩამოტვირთვა + თვალყური ადევნეთ ნანახ ვიდეოებს + არ დაიწყოთ ვიდეოები მინი პლეერში, არამედ პირდაპირ გადადით სრულეკრანიან რეჟიმში, თუ ავტომატური როტაცია დაბლოკილია. თქვენ კვლავ შეგიძლიათ მინი პლეერზე წვდომა სრულეკრანიდან გასვლით + დასაწყებად შეეხეთ გამადიდებელ შუშას. + გამოქვეყნდა%1$s + დაინსტალირება + კარგი + გახსენით ბრაუზერში + მონიშნეთ ნანახად + გახსენით popup რეჟიმში + გახსნა როგორც + გაზიარება + გადმოწერა + ნაკადის ფაილი ჩამოტვირთვა + ძიება + პარამეტრები + „%1$s“-ს გულისხმობდი\? + შედეგების ჩვენება: %s + შლის აუდიოს ზოგიერთი რეზოლუციით + გამოიყენეთ გარე აუდიო დამკვრელი + გამოწერა + გამოწერილი + გამოწერის გაუქმება + არხის გამოწერის გაუქმება + გამოწერის შეცვლა ვერ მოხერხდა + გამოწერის განახლება ვერ მოხერხდა + გამოწერები + ფონი + ამომხტარი ფანჯარა + დამატება: + ვიდეოს ჩამოტვირთვის საქაღალდე + გადმოწერილი ვიდეო ფაილები ინახება აქ + აუდიოს ჩამოტვირთვის საქაღალდე + უფრო მაღალი რეზოლუციის ჩვენება + დააინსტალიროთ დაკარგული Kore აპი\? + აჩვენეთ \"დაუკარი კოდით\" ვარიანტი + აჩვენეთ ვიდეოს დაკვრის ვარიანტი Kodi მედია ცენტრის საშუალებით + შეტყობინებაში ნაჩვენები ვიდეოს ესკიზის ამოჭრა 16:9-დან 1:1-მდე ასპექტის თანაფარდობით + პირველი მოქმედების ღილაკი + მეორე მოქმედების ღილაკი + მოქმედების მესამე ღილაკი + მოქმედების მეოთხე ღილაკი + მეხუთე მოქმედების ღილაკი + გაიმეორეთ + არევა + Ბუფერიზაცია + აუდიო + ღამის თემა + ღია + მუქი + შავი + დამახსოვრება ამომხტარი ფანჯრის თვისებები + აქტიური მოთამაშის რიგი შეიცვლება + ჩატვირთეთ ესკიზები + კომენტარების ჩვენება + გამორთეთ კომენტარების დასამალად + \"შემდეგი\" და \"მსგავსი\" ვიდეოების ჩვენება + აღწერილობის ჩვენება + მეტა ინფორმაციის ჩვენება + სურათის ქეში წაშლილია + წაშალეთ ქეშირებული მეტამონაცემები + ხმის ჟესტების კონტროლი + სიკაშკაშის ჟესტების კონტროლი + გამოიყენეთ ჟესტები მოთამაშის სიკაშკაშის გასაკონტროლებლად + შეინახეთ საძიებო მოთხოვნები ადგილობრივად + ნახვის ისტორია + განაახლეთ დაკვრა + აღადგინეთ დაკვრის ბოლო პოზიცია + Ავტომატური ჩართვა + აჩვენეთ წვერი \"შეაჩერე რიგში\". + რჩევის ჩვენება ფონზე ან ამომხტარ ღილაკზე დაჭერისას ვიდეოში \"დეტალები:\" + URL მხარდაუჭერელია + ნაგულისხმევი კონტენტის ქვეყანა + ნაგულისხმევი შინაარსის ენა + PeerTube-ის შემთხვევები + იპოვეთ თქვენთვის სასურველი შემთხვევები %s-ზე + მაგალითის დამატება + შეიყვანეთ მაგალითის URL + მხარდაჭერილია მხოლოდ HTTPS URL-ები + დამკვრელი + Მოქმედება + ვიდეო და აუდიო + ისტორია და ქეში + გარეგნობა + გამართვა + განახლებები + დამკვრელის შეტყობინება + მიმდინარე დამკვრელი ნაკადის შეტყობინების კონფიგურაცია + ვუკრავ ფონზე + ვუკრავ ამომხტარი ფანჯარაში + კონტენტი + ასაკით შეზღუდული კონტენტის ჩვენება + ბავშვებისთვის შესაძლოა შეუფერებელი კონტენტის ჩვენება, რადგან მას აქვს ასაკობრივი ზღვარი (როგორიცაა 18+) + YouTube გთავაზობთ „შეზღუდულ რეჟიმს“, რომელიც მალავს პოტენციურად ზრდასრულთა კონტენტს + ჩამოტვირთვები + ჩამოტვირთვები + შეცდომის საჩივარი + ყველა + არხები + დასაკრავი სიები + ვიდეოები + ტრეკები + მომხმარებლები + დღესასწაულები + სიმღერები + ალბუმები + მოღერლები + გათიშულია + გაწმენდა + საუკეთესო რეზოლუცია + გაუქმება + ყველას დაკვრა + ყოველთვის + მხოლოდ ერთხელ + ფაილი + შეტყობინებები + NewPipe შეტყობინება + შეტყობინებები NewPipe-ის დამკვრელისთვის + აპლიკაციის განახლების შეტყობინება + შეტყობინებები NewPipe-ის ახალი ვერსიებისთვის + ვიდეო ჰეშის შეტყობინება + შეტყობინებები ვიდეოების ჰეშირების პროგრესის შესახებ + ახალი ნაკადები + შეცდომის შესახებ შეტყობინება + შეტყობინებები შეცდომების გასასაჩივრებლად + [უცნობი] + ფონზე გადართვა + გადართვა ამომხტარ ფანჯარაზე + მთავარზე გადართვა + მონაცემთა ბაზის იმპორტი + მონაცემთა ბაზის ექსპორტი + reCAPTCHA ქუქიების გასუფთავება + reCAPTCHA ქუქი-ფაილები გასუფთავდა + ექსპორტის ისტორია, გამოწერები, დასაკრავი სიები და პარამეტრები + ნახვის ისტორიის გასუფთავება + წაშალოთ ნახვის მთელი ისტორია\? + ნახვის ისტორია წაშლილია + წაშალეთ დაკვრის პოზიციები + წაშლის დაკვრის ყველა პოზიციას + წაშალოთ დაკვრის ყველა პოზიცია\? + დაკვრის პოზიციები წაშლილია + წაშლის საძიებო საკვანძო სიტყვების ისტორიას + წაშალოთ მთელი ძიების ისტორია\? + გარე მეხსიერება მიუწვდომელია + Ქსელის შეცდომა + ყველა ესკიზის ჩატვირთვა ვერ მოხერხდა + ვიდეოს URL-ის ხელმოწერის დებფუსირება ვერ მოხერხდა + ვებსაიტის გარჩევა ვერ მოხერხდა + კონტენტი მიუწვდომელია + ჩამოტვირთვის მენიუს დაყენება ვერ მოხერხდა + აპი/UI გათიშულია + ამ ნაკადის დაკვრა ვერ მოხერხდა + მოხდა დამკვრელის გამოუსწორებელი შეცდომა + დამკვრელის შეცდომის აღდგენა + ვიდეო ნაკადები ვერ მოიძებნა + აუდიო ნაკადები ვერ მოიძებნა + ფაილი გადატანილია ან წაშლილია + ასეთი საქაღალდე არ არის + ასეთი ფაილის/შიგთავსის წყარო არ არის + ფაილის სახელი არ შეიძლება იყოს ცარიელი + მოხდა შეცდომა: %1$s + ჩამოსატვირთად ხელმისაწვდომი ნაკადები არ არის + ნაგულისხმევი პარამეტრების აღდგენა + გსურთ ნაგულისხმევი პარამეტრების აღდგენა\? + მიეცით სხვა აპებზე ჩვენების ნებართვა + NewPipe-ს შეექმნა შეცდომა, შეეხეთ შეტყობინებისთვის + მოხდა შეცდომა, იხილეთ შეტყობინება + უკაცრავად, ეს არ უნდა მომხდარიყო. + შეატყობინეთ ამ შეცდომის შესახებ ელფოსტით + დააკოპირეთ ფორმატირებული ანგარიში + მოხსენება GitHub-ზე + Ბოდიში, რაღაც არ არის რიგზე. + მოხსენება + ინფორმაცია: + Რა მოხდა: + თქვენი კომენტარი (ინგლისურად): + დეტალები: + ვიდეოს დაკვრა, ხანგრძლივობა: + მოსწონს + დაწუნებები + კომენტარები + დაკავშირებული ნივთები + აღწერა + არანაირი შედეგი + აქ არაფერია კრიკეტების გარდა + გადაიტანეთ ხელახლა შეკვეთისთვის + ვიდეო + აუდიო + ხელახლა სცადეთ + ათასი + მლნ + ბლნ + სერვისის გადართვა, ამჟამად არჩეულია: + გამოწერები არ არის + + %s გამომწერი + %s გამომწერები + + გამომწერების რაოდენობა მიუწვდომელია + ნახვები არ არის + + %s ნახვა + %s ნახვები + + არავინ უყურებს + + %s უყურებს + %s უყურებენ + + არავინ უსმენს + + %s მსმენელი + %s მსმენელები + + ვიდეოები არ არის + 100+ ვიდეოები + ∞ ვიდეოები + + %s ვიდეო + %s ვიდეოები + + კომენტარი არ არის + + %s ახალი ნაკადი + %s ახალი ნაკადები + + დაწყება + პაუზა + გადარქმევა + ფაილის სახელი + ძაფები + შეცდომა + NewPipe-ის ჩამოტვირთვა + შეეხეთ დეტალებისთვის + ჰეშის გაანგარიშება + გთხოვთ მოიცადოთ… + კოპირებულია ბუფერში + ეს ნებართვა საჭიროა ამომხტარი ფანჯრის რეჟიმში გასახსნელად + 1 ელემენტი წაიშალა. + reCAPTCHA გამოწვევა + როდესაც მოგვარდება, დააჭირეთ შესრულებულია + მოთხოვნილია reCAPTCHA გამოწვევა + ამოხსნა + შესრულებულია + შემცვლელი პერსონაჟი + ასოები და ციფრები + NewPipe-ის შესახებ + ლიცენზიები + უფასო მსუბუქი ნაკადი Android-ზე. + წვლილი შეიტანეთ + გაქვთ თუ არა იდეები; თარგმანი, დიზაინის ცვლილებები, კოდის გაწმენდა ან კოდის რეალური მძიმე ცვლილებები — დახმარება ყოველთვის მისასალმებელია. რაც მეტი კეთდება მით უკეთესი! + ნახვა GitHub-ზე + შემოწირულობა + დაბრუნება + საიტი + ეწვიეთ NewPipe ვებსაიტს დამატებითი ინფორმაციისა და სიახლეებისთვის. + NewPipe-ის კონფიდენციალურობის პოლიტიკა + "NewPipe პროექტი თქვენს კონფიდენციალურობას ძალიან სერიოზულად ეკიდება. ამიტომ, აპლიკაცია არ აგროვებს მონაცემებს თქვენი თანხმობის გარეშე. +\n NewPipe-ის კონფიდენციალურობის პოლიტიკა დეტალურად განმარტავს, თუ რა მონაცემები იგზავნება და ინახება ავარიის ანგარიშის გაგზავნისას." + წაიკითხეთ კონფიდენციალურობის პოლიტიკა + NewPipe-ის ლიცენზია + წაიკითხეთ ლიცენზია + Ხშირად დასმული შეკითხვები + თუ აპლიკაციის გამოყენება გიჭირთ, დარწმუნდით, რომ შეამოწმეთ ეს პასუხები საერთო კითხვებზე! + ნახვა საიტზე + ისტორია + ისტორია + გსურთ წაშალოთ ეს ელემენტი ძიების ისტორიიდან\? + ბოლოს დაუკრა + უმეტესად დაკვრილი + მთავარი გვერდის შინაარსი + რა ჩანართებია ნაჩვენები მთავარ გვერდზე + გადაფურცლეთ ელემენტები მათი ამოსაშლელად + არხის გვერდი + არხის გამოწერები ჯერ არ არის + აირჩიეთ დასაკრავი სია + დასაკრავი სიის სანიშნეები ჯერ არ არის + აირჩიეთ კიოსკი + ექსპორტირებულია + იმპორტირებულია + არ არის სწორი ZIP ფაილი + გაფრთხილება: ყველა ფაილის იმპორტი ვერ მოხერხდა. + ეს უგულებელყოფს თქვენს მიმდინარე პარამეტრს. + კომენტარების ჩატვირთვა ვერ მოხერხდა + ენა შეიცვლება აპის გადატვირთვის შემდეგ + ტრენდული + ტოპ 50 + ახალი და ცხელი + ყველაზე მეტად მოწონებული + კონფერენციები + რიგის დაკვრა + ამოღება + დეტალები + აუდიო პარამეტრები + გააჩერეთ რიგში + არხის დეტალების ჩვენება + რიგი + რიგში ჩადებული + რიგი შემდეგი + დაიწყეთ დაკვრა ფონზე + ნაკადის დეტალების ჩატვირთვა… + გახსენით უჯრა + დახურეთ უჯრა + სასურველი \"ღია\" მოქმედება + ნაგულისხმევი მოქმედება შინაარსის გახსნისას — %s + ვიდეო დამკვრელი + ფონური დამკვრელი + ამომხტარი დამკვრელი + ყოველთვის იკითხე + მოთხოვნილი კონტენტის ჩატვირთვა + გადარქმევა + სახელი + დასაკრავ სიაში დამატება + დადუმება + დადუმების მოხსნა + დასაკრავი სიის მინიატურად დაყენება + სანიშნე დასაკრავი სია + ამოიღეთ სანიშნე + დასაკრავი სია შეიქმნა + დასაკრავი სიაში + დასაკრავი სიის ესკიზი შეიცვალა. + ავტომატურად გენერირებული (ამტვირთავი ვერ მოიძებნა) + სუბიტრები არ არის + Ჯდება + შეავსეთ + მასშტაბირება + ავტომატურად გენერირებული + სუბტიტრები + შეცვალეთ დამკვრელის სუბტიტრების ტექსტის მასშტაბი და ფონის სტილი. ძალაში შესვლისთვის საჭიროა აპის გადატვირთვა + LeakCanary არ არის ხელმისაწვდომი + მეხსიერების გაჟონვის მონიტორინგმა შესაძლოა გამოიწვიოს აპი უპასუხოდ გროვის გადაყრის დროს + ორიგინალური დროის ჩვენება ერთეულებზე + ორიგინალური ტექსტები სერვისებიდან ხილული იქნება ნაკადის ერთეულებში + მედია გვირაბის გათიშვა + გამორთეთ მედია გვირაბი, თუ ვიდეოს დაკვრისას შავი ეკრანი ან ჭუჭყი გაქვთ + გამოსახულების ინდიკატორების ჩვენება + აჩვენე \"დამკვრელის დამსხვრევა\" + აჩვენებს ავარიის ვარიანტს დამკვრელის გამოყენებისას + გაუშვით შემოწმება ახალი ნაკადებისთვის + აპლიკაციის დაშლა + შეცდომის ზოლის ჩვენება + შექმენით შეცდომის შეტყობინება + იმპორტი + იმპორტი დან + ექსპორტი + მიმდინარეობს იმპორტი… + მიმდინარეობს ექსპორტი… + ფაილის იმპორტი + წინა ექსპორტი + გამოწერების ექსპორტი ვერ მოხერხდა + SoundCloud პროფილის იმპორტი URL-ის ან თქვენი ID-ის აკრეფით: +\n +\n 1. ჩართეთ \"დესკტოპის რეჟიმი\" ვებ-ბრაუზერში (საიტი მიუწვდომელია მობილური მოწყობილობებისთვის) +\n 2. გადადით ამ URL-ზე: %1$s +\n 3. შედით სისტემაში მოთხოვნისას +\n 4. დააკოპირეთ პროფილის URL, რომელზეც გადამისამართდით. + თქვენი ID, soundcloud.com/yourid + გაითვალისწინეთ, რომ ეს ოპერაცია შეიძლება იყოს ქსელის ძვირი. +\n +\n Გინდა გააგრძელო\? + დაკვრის სიჩქარის კონტროლი + ტემპი + ამოღება (შეიძლება გამოიწვიოს დამახინჯება) + დუმილის დროს სწრაფი წინსვლა + ნაბიჯი + გადატვირთვა + პროცენტი + ნახევარტონი + მიღება + უარყოფა + არანაირი ლიმიტი + შეზღუდეთ გარჩევადობა მობილური ინტერნეტის გამოყენებისას + შემატყობინეთ ახალი ნაკადების შესახებ გამოწერებიდან + სიხშირის შემოწმება + ნებისმიერი ქსელი + განახლებები + მაჩვენე შეტყობინება აპის განახლების მოთხოვნით, როდესაც ხელმისაწვდომი იქნება ახალი ვერსია + Შეამოწმოთ განახლებები + ხელით შეამოწმეთ ახალი ვერსიები + მინიმიზაცია აპის გადამრთველზე + მოქმედება სხვა აპზე გადასვლისას მთავარი ვიდეო დამკვრელიდან — %s + არცერთი + მინიმიზაცია ფონურ დამკვრელამდე + მინიმიზაცია ამომხტარ დამკვრელიდან + დაკვრის ავტომატურად დაწყება — %s + არასოდეს + სიის ნახვის რეჟიმი + სია + მაღალი ხარისხის (უფრო დიდი) + არ მაჩვენო + დასრულდა + მომლოდინე + დაპაუზდა + რიგში დადგა + შემდგომი დამუშავება + ჩამოტვირთვა ვერ მოხერხდა + + ჩამოტვირთვა დასრულდა%s + %s ჩამოტვირთვები დასრულდა + + ფაილის გადაწერა შეუძლებელია + მიმდინარეობს ჩამოტვირთვა ამ სახელით + ამ სახელით მომლოდინე ჩამოტვირთვაა + შეცდომის ჩვენება + ფაილის შექმნა შეუძლებელია + დანიშნულების საქაღალდის შექმნა შეუძლებელია + სერვერი ვერ ვიპოვე + სერვერთან დაკავშირება შეუძლებელია + სერვერი არ აგზავნის მონაცემებს + სერვერი არ იღებს მრავალ ნაკადის ჩამოტვირთვებს, ხელახლა სცადეთ @string/msg_threads = 1 + არ მოიძებნა + შემდგომი დამუშავება ვერ მოხერხდა + მოწყობილობაზე არ არის დარჩენილი თავისუფალი ადგილი + Კავშირის დრო ამოიწურა + ამ ჩამოტვირთვის აღდგენა შეუძლებელია + გადმოწერილი ფაილების წაშლა + წაშალოთ ყველა გადმოწერილი ფაილი დისკიდან\? + + წაიშალა %1$s ჩამოტვირთვა + წაიშალა %1$s ჩამოტვირთვები + + გაჩერდი + მაქსიმალური განმეორებითი ცდები + მცდელობების მაქსიმალური რაოდენობა ჩამოტვირთვის გაუქმებამდე + შეფერხება მრიცხველ ქსელებში + დახურვა + ჩამოტვირთვის რიგის შეზღუდვა + ერთი ჩამოტვირთვა ერთდროულად იმუშავებს + ჩამოტვირთვების დაწყება + თქვენ მოგეთხოვებათ სად შეინახოთ თითოეული ჩამოტვირთვა + გამოიყენეთ სისტემის საქაღალდის ამომრჩევი (SAF) + \"Storage Access Framework\" საშუალებას გაძლევთ ჩამოტვირთოთ გარე SD ბარათზე + Android 10-დან მხოლოდ „Storage Access Framework“ არის მხარდაჭერილი + აირჩიეთ მაგალითი + აპლიკაციის ენა + სისტემის ნაგულისხმევი + ნანახის ამოღება + წაშალოთ ნანახი ვიდეოები\? + დიახ, და ნაწილობრივ ნანახი ვიდეოები + ExoPlayer-ის შეზღუდვების გამო ძიების ხანგრძლივობა დაყენდა %d წამზე + + %d წამი + %d წამები + + + %d წუთი + %d წუთები + + + %d საათი + %d საათები + + + %d დღე + %d დღეების + + Რა არის ახალი + არხების ჯგუფები + არხი ბოლოს განახლდა: %s + არ არის ჩატვირთული: %d + არხის ჩატვირთვა… + არხის დამუშავება… + ახალი არხის ელემენტები + აირჩიეთ გამომწერები + გამოწერები არ არის არჩეული + + არჩეული %d + არჩეულია %d + + ცარიელი ჯგუფის სახელი + გსურთ ამ ჯგუფის წაშლა\? + ახალი + მხოლოდ დაუჯგუფებელი გამოწერების ჩვენება + არხი + არხის განახლების ბარიერი + დრო ბოლო განახლებიდან გამოწერამდე ითვლება მოძველებულად — %s + ყოველთვის განახლება + შეცდომა არხის ჩატვირთვისას + ავტორის ანგარიში შეჩერებულია. +\n NewPipe ვერ შეძლებს ამ არხის ჩატვირთვას მომავალში. +\n გსურთ ამ არხის გამოწერის გაუქმება\? + მიიღეთ გამოყოფილი არხიდან, როცა ხელმისაწვდომია + ჩართეთ სწრაფი რეჟიმი + სწრაფი რეჟიმის გამორთვა + ნანახი ნივთების ჩვენება + ნანახი ნივთების დამალვა + ეს შინაარსი ჯერ არ არის მხარდაჭერილი NewPipe-ის მიერ. +\n +\n იმედია, ის იქნება მხარდაჭერილი მომავალ ვერსიაში. + არხის ავატარის ესკიზი + შექმნილია %s-ის მიერ + %s-ის მიხედვით + დასაკრავი სიის გვერდი + ესკიზის ჩვენება + Ბოლო + თავები + თქვენს მოწყობილობაზე არცერთ აპლიკაციას არ შეუძლია ამის გახსნა + ამ მოქმედებისთვის შესაბამისი ფაილების მენეჯერი ვერ მოიძებნა. +\n გთხოვთ, დააინსტალიროთ Storage Access Framework თავსებადი ფაილ მენეჯერი + ეს კონტენტი მიუწვდომელია თქვენს ქვეყანაში. + ეს კონტენტი პირადია, ამიტომ მისი სტრიმინგი ან ჩამოტვირთვა შეუძლებელია NewPipe-ის მიერ. + ანგარიში შეწყვეტილია + %s იძლევა ამ მიზეზს + ეს კონტენტი ხელმისაწვდომია მხოლოდ მომხმარებლებისთვის, რომლებმაც გადაიხადეს, ამიტომ მისი სტრიმინგი ან ჩამოტვირთვა შეუძლებელია NewPipe-ის მიერ. + გამორჩეული + რადიო + აირჩიეთ თქვენი საყვარელი ღამის თემა — %s + ჩამოტვირთვა დაიწყო + ჩართეთ აღწერილობაში ტექსტის არჩევა + გამორთეთ აღწერილობაში ტექსტის არჩევა + კატეგორია + ტეგები + ლიცენზია + კონფიდენციალურობა + Ასაკობრივი შეზღუდვა + Ენა + მასპინძელი + მინიატურების URL + საჯარო + დამალული + პირადი + შიდა + ჩამაგრებული კომენტარი + დაგულებულია შემქმნელის მიერ + საიტის გახსნა + პლანშეტის რეჟიმი + ჩართულია + გამორთულია + ExoPlayer ნაგულისხმევი + შეტყობინებები გამორთულია + მიიღეთ შეტყობინება + თქვენ ახლა გამოიწერეთ ეს არხი + , + ყველას გადართვა + ნაკადები, რომლებიც ჯერ არ არის მხარდაჭერილი დამტვირთველის მიერ, არ არის ნაჩვენები + არჩეული ნაკადი არ არის მხარდაჭერილი გარე დამკვრელის მიერ + ვიდეო ნაკადები არ არის ხელმისაწვდომი გარე დამკვრელებისთვის + აირჩიეთ ხარისხი გარე დამკვრელებისთვის + უცნობი ფორმატი + უცნობი ხარისხი + მომავალი ელემენტების ჩვენება + სამომავლო ნივთების დამალვა + დალაგება + ეგეთი უკვე არსებობს + ინსტანციის დადასტურება ვერ მოხერხდა + ჩართეთ YouTube-ის „შეზღუდული რეჟიმი“ + "ეს ვიდეო ასაკობრივი შეზღუდულია. +\n თუ გსურთ მისი ნახვა, ჩართეთ „%1$s“ პარამეტრებში." + ლაივი + ეს ვიდეო ასაკობრივად შეზღუდულია. +\n YouTube-ის ახალი წესების გამო ასაკობრივად შეზღუდული ვიდეოებით, NewPipe-ს არ შეუძლია წვდომა მის რომელიმე ვიდეო ნაკადზე და, შესაბამისად, ვერ ახერხებს მის დაკვრას. + ძიების ისტორია წაიშალა + წაშალეთ ქუქი-ფაილები, რომლებსაც NewPipe ინახავს, როდესაც თქვენ გადაჭრით reCAPTCHA + წაშლის ნათამაშები დაკვრილ ისტორიას და დაკვრის პოზიციებს + ფაილი წაიშალა + შეტყობინებები ახალი ნაკადების შესახებ გამოწერებისთვის + უგულებელყოფს თქვენს ამჟამინდელ ისტორიას, გამოწერებს, დასაკრავ სიებს და (სურვილისამებრ) პარამეტრებს + ძიების ისტორიის გასუფთავება + შეცდომა + გთხოვთ, შეამოწმოთ, არის თუ არა პრობლემა თქვენი ავარიის განხილვის შესახებ. დუბლიკატი ბილეთების შექმნისას ჩვენგან იღებთ დროს, რომელიც ჩვენ შეგვიძლია დავხარჯოთ ფაქტობრივი ხარვეზის გამოსწორებაში. + გარე SD ბარათზე ჩამოტვირთვა შეუძლებელია. გსურთ ჩამოტვირთვის საქაღალდის მდებარეობის გადაყენება\? + გარე დამკვრელს არ აქვთ ამ ტიპის ბმულების მხარდაჭერა + ფაილი არ არსებობს ან მასზე წაკითხვის ან ჩაწერის ნებართვა აკლია + შენახული ჩანართების წაკითხვა ვერ მოხერხდა, ამიტომ გამოიყენეთ ნაგულისხმევი ჩანართები + რა:\\nმოითხოვეთ:\\შინაარსის ენა:\\nშინაარსის ქვეყანა:\\nაპლიკაციის ენა:\\nმომსახურება:\\nGMT დრო:\\პაკეტი:\\ვერსია:\\nOS ვერსია: + ამტვირთველის ავატარის ესკიზი + კომენტარები გამორთულია + Შექმნა + წაშლა + გაუქმება + საკონტროლო ჯამი + გთხოვთ, განსაზღვროთ ჩამოტვირთვის საქაღალდე მოგვიანებით პარამეტრებში + ჩამოტვირთვის საქაღალდე ჯერ არ არის დაყენებული, ახლავე აირჩიეთ ჩამოტვირთვის ნაგულისხმევი საქაღალდე + ჩამოტვირთვები + ყველაზე განსაკუთრებული პერსონაჟები + დაშვებული სიმბოლოები ფაილის სახელებში + არასწორი სიმბოლოები ჩანაცვლებულია ამ მნიშვნელობით + შესახებ & ხშირად დასმული კითხვები + ამ ფაილის დასაკრავად აპი არ არის დაინსტალირებული + მესამე მხარის ლიცენზიები + © %1$s მიერ %2$s %3$s-ის ქვეშ + NewPipe შემუშავებულია მოხალისეების მიერ, რომლებიც ატარებენ თავისუფალ დროს და მოგაქვთ საუკეთესო მომხმარებლის გამოცდილება. დაეხმარეთ დეველოპერებს, გააუმჯობესონ NewPipe, სანამ ფინჯანი ყავით ტკბებიან. + YouTube გამოწერების იმპორტი Google takeout-დან: +\n +\n 1. გადადით ამ URL-ზე: %1$s +\n 2. შედით სისტემაში მოთხოვნისას +\n 3. დააწკაპუნეთ ღილაკზე \"ყველა მონაცემი შედის\", შემდეგ \"გააუქმეთ ყველა\", შემდეგ აირჩიეთ მხოლოდ \"გამოწერა\" და დააწკაპუნეთ \"OK\" +\n 4. დააწკაპუნეთ „შემდეგი ნაბიჯი“ და შემდეგ „ექსპორტის შექმნა“ +\n 5. დააწკაპუნეთ ღილაკზე „ჩამოტვირთვა“ მისი გამოჩენის შემდეგ +\n 6. დააწკაპუნეთ IMPORT FILE ქვემოთ და აირჩიეთ გადმოწერილი .zip ფაილი +\n 7. [თუ .zip-ის იმპორტი ვერ მოხერხდა] ამოიღეთ. + მოედანი + ახალი ნაკადების შეტყობინებები + მონაცემთა დაცვის ევროპული ზოგადი რეგულაციის (GDPR) შესაბამისობის მიზნით, ჩვენ ვაქცევთ თქვენს ყურადღებას NewPipe-ის კონფიდენციალურობის პოლიტიკაზე. გთხოვთ ყურადღებით წაიკითხოთ. +\nთქვენ უნდა დაეთანხმოთ მას, რომ გამოგვიგზავნოთ ხარვეზის ანგარიში. + საჭიროა ქსელის კავშირი + ბადე + Seekbar-ის ესკიზის გადახედვა + მხოლოდ Wi-Fi-ზე + დაბალი ხარისხი(პატარა) + მოქმედება უარყოფილია სისტემის მიერ + მიმდინარეობს განახლებების შემოწმება… + შექმენით უნიკალური სახელი + გადაწერა + ფაილი ამ სახელით უკვე არსებობს + ჩამოტვირთული ფაილი ამ სახელით უკვე არსებობს + უსაფრთხო კავშირის დამყარება ვერ მოხერხდა + გსურთ თქვენი ჩამოტვირთვის ისტორიის გასუფთავება ან ყველა გადმოწერილი ფაილის წაშლა\? + ფაილზე მუშაობისას NewPipe დაიხურა + პროგრესი დაიკარგა, რადგან ფაილი წაიშალა + ჩამოტვირთვის ისტორიის გასუფთავება + სასარგებლოა მობილური ინტერნეტზე გადასვლისას, თუმცა ზოგიერთი ჩამოტვირთვის შეჩერება შეუძლებელია + ჩამოტვირთვების პაუზა + იკითხეთ, სად უნდა ჩამოტვირთოთ + თქვენ მოგეთხოვებათ სად შეინახოთ თითოეული ჩამოტვირთვა. +\n ჩართეთ სისტემის საქაღალდის ამომრჩევი (SAF), თუ გსურთ ჩამოტვირთოთ გარე SD ბარათზე + ვიდეოები, რომლებიც უყურეთ დასაკრავ სიაში დამატებამდე და მის შემდეგ, წაიშლება. +\n დარწმუნებული ხართ\? ამის გაუქმება შეუძლებელია! + NewPipe არის copyleft უფასო პროგრამული უზრუნველყოფა: თქვენ შეგიძლიათ გამოიყენოთ, შეისწავლოთ, გააზიაროთ და გააუმჯობესოთ იგი სურვილისამებრ. კონკრეტულად თქვენ შეგიძლიათ გადაანაწილოთ და/ან შეცვალოთ იგი GNU-ს ზოგადი საჯარო ლიცენზიის პირობებით, როგორც ეს გამოქვეყნებულია თავისუფალი პროგრამული უზრუნველყოფის ფონდის მიერ, ლიცენზიის მე-3 ვერსიით, ან (თქვენი სურვილისამებრ) ნებისმიერი შემდგომი ვერსიით. + ავტო + ცარიელი გვერდი + აირჩიეთ არხი + კიოსკის გვერდი + ნაგულისხმევი კიოსკი + გსურთ პარამეტრების იმპორტიც\? + რიგში დადგა შემდეგი + დაიწყეთ დაკვრა ამომხტარ ფანჯარაში + ადგილობრივი + ახლახან დამატებულია + ინფორმაციის მიღება… + ახალი დასაკრავი სია + დამუშავება… შეიძლება რამდენიმე წუთი დასჭირდეს + წაშალოთ ეს დასაკრავი სია\? + მეხსიერების გაჟონვის ჩვენება + აღდგენა. + რიგი + გამოწერების იმპორტი ვერ მოხერხდა + შეატყობინეთ სასიცოცხლო ციკლის შეცდომებს + იძულებითი მოხსენება შეუსაბამო Rx გამონაკლისების შესახებ ფრაგმენტის ან აქტივობის სასიცოცხლო ციკლის გარეთ განკარგვის შემდეგ + აჩვენეთ პიკასოს ფერადი ლენტები სურათების თავზე, სადაც მითითებულია მათი წყარო: წითელი ქსელისთვის, ლურჯი დისკისთვის და მწვანე მეხსიერებისთვის + სწრაფი კვების რეჟიმი ამაზე მეტ ინფორმაციას არ იძლევა. + „%s“-ის არხის ჩატვირთვა ვერ მოხერხდა. + ხელმისაწვდომია ზოგიერთ სერვისში, როგორც წესი, ბევრად უფრო სწრაფია, მაგრამ შეიძლება დააბრუნოს შეზღუდული რაოდენობის ელემენტი და ხშირად არასრული ინფორმაცია (მაგ. ხანგრძლივობის გარეშე, ელემენტის ტიპი, არ არის ლაივის სტატუსი) + გამოიყენეთ ესკიზი როგორც ჩაკეტილი ეკრანის ფონისთვის, ასევე შეტყობინებებისთვის + "როგორ ფიქრობთ, არხის ჩატვირთვა ძალიან ნელია\? თუ ასეა, სცადეთ ჩართოთ სწრაფი ჩატვირთვა (შეგიძლიათ შეცვალოთ ის პარამეტრებში ან ქვემოთ მოცემულ ღილაკზე დაჭერით). +\n +\n NewPipe გთავაზობთ არხის ჩატვირთვის ორ სტრატეგიას: +\n • მთელი სააბონენტო არხის მიღება, რომელიც ნელია, მაგრამ დასრულებულია. +\n • გამოყოფილი სერვისის საბოლოო წერტილის გამოყენება, რომელიც არის სწრაფი, მაგრამ ჩვეულებრივ არასრული. +\n +\n ამ ორს შორის განსხვავება ისაა, რომ სწრაფს, როგორც წესი, აკლია გარკვეული ინფორმაცია, მაგალითად, ნივთის ხანგრძლივობა ან ტიპი (არ განასხვავებს პირდაპირ ვიდეოებს ჩვეულებრივ ვიდეოებს შორის) და შეიძლება დაბრუნდეს ნაკლები ელემენტი. +\n +\n YouTube არის სერვისის მაგალითი, რომელიც გთავაზობთ ამ სწრაფ მეთოდს თავისი RSS არხით. +\n +\n ასე რომ, არჩევანი დამოკიდებულია იმაზე, თუ რა გირჩევნიათ: სიჩქარე ან ზუსტი ინფორმაცია." + ეს არის SoundCloud Go+ სიმღერა, ყოველ შემთხვევაში თქვენს ქვეყანაში, ამიტომ მისი სტრიმინგი ან ჩამოტვირთვა შეუძლებელია NewPipe-ის მიერ. + ამ მოქმედებისთვის შესაბამისი ფაილების მენეჯერი ვერ მოიძებნა. +\n გთხოვთ, დააინსტალიროთ ფაილის მენეჯერი ან სცადოთ გამორთოთ \'%s\' ჩამოტვირთვის პარამეტრებში + ეს ვიდეო ხელმისაწვდომია მხოლოდ YouTube Music Premium-ის წევრებისთვის, ამიტომ მისი სტრიმინგი ან ჩამოტვირთვა შეუძლებელია NewPipe-ის მიერ. + ავტომატური (მოწყობილობის თემა) + თქვენ შეგიძლიათ აირჩიოთ თქვენი საყვარელი ღამის თემა ქვემოთ + ახლა შეგიძლიათ აირჩიოთ ტექსტი აღწერილობაში. გაითვალისწინეთ, რომ გვერდი შეიძლება ციმციმდეს და ბმულები არ იყოს დაწკაპუნებული შერჩევის რეჟიმში. + მხარდაჭერა + აუდიო ნაკადები არ არის ხელმისაწვდომი გარე დამკვრელებისთვის + \ No newline at end of file diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index d84f7f698..ed4ef0f3b 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -16,7 +16,6 @@ Afaylu Semɣeṛ Iberdan - Tallalt Susem Yal tikelt Timeẓri @@ -127,7 +126,6 @@ Pas Amezwer n unagraw Snifel isem - Nnal akken ad tessidreḍ Asider ur yeddi ara Tamwalit o diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index c93a111f1..f2baecb0a 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -56,7 +56,7 @@ Deng Vîdyo Drag bikin da ku ji nû ve sererast bikin - Li vir ji xeynî krikan pê ve tiştek tune + Li vir ji xeynî krikan pê ve tiştek tune Encam tune Terîf Çemên pêwendîdar @@ -104,7 +104,6 @@ Dakêşandin ji karta SD ya derveyî re ne gengaz e. Cihê peldanka dakêşanê ji nû ve were çêkirin\? Depoya derveyî tune Şaşî - Alîkarî Dîroka lêgerînê hate jêbirin. Dîroka tevahî lêgerînê jê bibe\? Dîroka peyvên sereke yên lêgerînê jê dike @@ -424,8 +423,7 @@ sekinî Nexelas Qediya - Tap bikin dakêşin - Nûvekirina NewPipe heye! + Nûvekirina NewPipe heye! Jixweber Qefes Rêzok diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 85e15d3c5..6011432b1 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -116,7 +116,7 @@ 플레이어 오류로부터 복구 중 무엇:\\n요청:\\n콘텐츠 언어:\\n콘텐츠 국가:\\n앱 언어:\\n서비스:\\nGMT 시간:\\n패키지:\\n버전:\\nOS 버전: 결과 없음 - 구독할 항목을 추가하세요 + 구독할 항목을 추가하세요 백만 십억 @@ -150,7 +150,7 @@ NewPipe에 대해서 제3자 라이센스 © %3$s 하에서 %2$s 에 의한 %1$s - NewPipe 정보 + 정보 및 자주 묻는 질문들 라이센스 가볍고 빠른 자유 안드로이드 스트리밍 앱입니다. 기여 @@ -261,18 +261,18 @@ 구독 목록 내보내기 실패 구글 테이크아웃에서 유튜브 구독 가져오기: \n -\n1. 다음 URL로 이동: %1$s -\n2. 요청 시 로그인 -\n3. \"모든 데이터 포함\"을 클릭한 다음 \"모두 선택 취소\"를 클릭한 후 \"구독\"만 선택하고 \"확인\" 클릭 -\n4. \"다음 단계\"를 클릭한 다음 \"내보내기 만들기\" 클릭 -\n5. \"다운로드\" 버튼이 나타나면 클릭 -\n6. 아래 파일 가져오기를 클릭하고 다운로드한 .zip 파일 선택 +\n1. 다음 URL로 이동: %1$s +\n2. 요청 시 로그인 +\n3. \"모든 데이터 포함\"을 클릭한 다음 \"모두 선택 취소\"를 클릭한 후 \"구독\"만 선택하고 \"확인\" 클릭 +\n4. \"다음 단계\"를 클릭한 다음 \"내보내기 만들기\" 클릭 +\n5. \"다운로드\" 버튼이 나타나면 클릭 +\n6. 아래 파일 가져오기를 클릭하고 다운로드한 .zip 파일 선택 \n7. [.zip 가져오기가 실패한 경우] .csv 파일(일반적으로 \"YouTube 및 YouTube Music/subscriptions/subscriptions.csv\" 아래에 있음)의 압축을 풀고, 아래 파일 가져오기를 클릭하고 압축을 푼 csv 파일 선택 - URL 또는 ID를 입력하여 SoundCloud 프로필을 가져옵니다: + URL 또는 ID를 입력하여 SoundCloud 프로필을 가져옵니다: \n -\n1. 웹 브라우저에서 \"데스크톱 모드\"를 활성화합니다(모바일 장치에서는 사이트를 사용할 수 없습니다) -\n2. 다음 URL로 이동: %1$s -\n3. 요청 시 로그인 +\n1. 웹 브라우저에서 \"데스크톱 모드\"를 활성화합니다(모바일 장치에서는 사이트를 사용할 수 없습니다) +\n2. 다음 URL로 이동: %1$s +\n3. 요청 시 로그인 \n4. 리디렉션된 프로필 URL을 복사합니다. 프로필ID, soundcloud.com/프로필ID 경고: 데이터가 많이 소모될 수 있습니다. @@ -311,7 +311,7 @@ NewPipe는 카피레프트 자유 소프트웨어입니다: 마음대로 사용하고, 연구하고, 공유하고, 개선할 수 있습니다. 특히 자유 소프트웨어 재단에서 발행한 GNU 일반 공중 사용 라이센스의 조건에 따라 라이센스 버전 3 또는 (귀하의 선택에 따라) 이후 버전을 재배포 및/또는 수정할 수 있습니다. 설정도 가져오시겠습니까\? 무음 구간 빨리 감기 - 유럽 연합 일반 데이터 보호 규정(GDPR)을 준수하기 위해 NewPipe의 개인 정보 보호 정책에 주의를 기울입니다. 주의 깊게 읽으십시오. + 유럽 연합 일반 데이터 보호 규정(GDPR)을 준수하기 위해 NewPipe의 개인 정보 보호 정책에 주의를 기울입니다. 주의 깊게 읽으십시오. \n버그 보고서를 보내려면 수락해야 합니다. 동의 동의하지 않음 @@ -351,8 +351,7 @@ 목록 격자 자동 - NewPipe 업데이트를 사용할 수 있습니다! - 여기를 눌러서 다운로드 + NewPipe 업데이트를 사용할 수 있습니다! 완료됨 대기열에 있음 일시중지됨 @@ -406,7 +405,7 @@ 다운로드 시작 다운로드 일시정지 다운로드 위치를 묻기 - 각 다운로드를 저장할 위치를 묻는 메시지가 표시됩니다. + 각 다운로드를 저장할 위치를 묻는 메시지가 표시됩니다. \n외부 SD 카드에 다운로드하려면 시스템 폴더 선택기(SAF) 활성화 시스템 폴더 선택기(SAF) 사용 \'저장영역 접속 프레임워크\'를 통해 외부 SD 카드로 다운로드 가능 @@ -464,7 +463,6 @@ 해결 되었다면 “완료”를 누르세요 ∞ 비디오 100+ 비디오 - 도움말 노래 이 비디오는 연령제한이 있습니다. \n @@ -590,7 +588,7 @@ 태블릿 모드 지역 검색 제안 원격 검색 제안 - 이 동영상은 연령 제한이 있습니다. + 이 동영상은 연령 제한이 있습니다. \n연령 제한 동영상에 대한 새로운 유튜브 정책으로 인해 NewPipe는 동영상 스트림에 접속할 수 없으므로 재생할 수 없습니다. reCAPTCHA를 해결할 때 NewPipe가 저장하는 쿠키 지우기 설명 @@ -621,8 +619,8 @@ 새로운 피드 항목 그룹화되지 않은 구독만 표시 \'%s\'에 대한 피드를 불러올 수 없습니다. - 제작자의 계정이 해지되었습니다. -\nNewPipe는 앞으로 이 피드를 불러올 수 없습니다. + 제작자의 계정이 해지되었습니다. +\nNewPipe는 앞으로 이 피드를 불러올 수 없습니다. \n이 채널의 구독을 취소하겠습니까\? 빠른 공급 모드는 이에 대한 자세한 정보를 제공하지 않습니다. 사용 가능한 경우 전용 피드에서 가져오기 @@ -677,7 +675,7 @@ 구독 선택 일부 서비스에서 사용할 수 있으며 일반적으로 훨씬 빠르지만 제한된 양의 항목과 종종 불완전한 정보를 반환할 수 있습니다 (예: 기간 없음, 항목 유형, 라이브 상태 없음) 안드로이드 10부터 \'저장영역 접속 프레임워크\'만 지원됩니다 - 재생 목록에 추가되기 전과 후에 시청한 동영상은 제거됩니다. + 재생 목록에 추가되기 전과 후에 시청한 동영상은 제거됩니다. \n확실합니까\? 이것은 취소 할 수 없습니다! 미니 플레이어에서 동영상을 시작하지 말고 자동 회전이 잠겨 있는 경우 전체 화면 모드로 직접 전환하십시오. 전체 화면을 종료하여 미니 플레이어에 계속 접속할 수 있습니다 공식 @@ -691,20 +689,34 @@ \n저장영역 접속 프레임워크 호환 파일 관리자를 설치하십시오 이 작업에 적합한 파일 관리자를 찾을 수 없습니다. \n파일 관리자를 설치하거나 다운로드 설정에서 \'%s\'을(를) 비활성화하십시오 - 피드 로딩이 너무 느리다고 생각하십니까\? 그렇다면 빠른 로딩을 활성화해 보십시오 (설정에서 변경하거나 아래 버튼을 눌러 변경할 수 있습니다). -\n -\nNewPipe는 두 가지 피드 로딩 전략을 제공합니다: -\n• 느리지만 완전한 전체 구독 채널을 가져옵니다. -\n• 빠르지만 일반적으로 완전하지는 않은 전용 서비스 엔드포인트를 사용합니다. -\n -\n둘의 차이점은 빠른 동영상은 일반적으로 항목의 길이나 유형(라이브 동영상과 일반 동영상을 구분할 수 없음)과 같은 일부 정보가 부족하고 더 적은 항목을 반환할 수 있다는 것입니다. -\n -\n유튜브는 RSS 피드로 이 빠른 방법을 제공하는 서비스의 한 예입니다. + 피드 로딩이 너무 느리다고 생각하십니까\? 그렇다면 빠른 로딩을 활성화해 보십시오 (설정에서 변경하거나 아래 버튼을 눌러 변경할 수 있습니다). +\n +\nNewPipe는 두 가지 피드 로딩 전략을 제공합니다: +\n• 느리지만 완전한 전체 구독 채널을 가져옵니다. +\n• 빠르지만 일반적으로 완전하지는 않은 전용 서비스 엔드포인트를 사용합니다. +\n +\n둘의 차이점은 빠른 동영상은 일반적으로 항목의 길이나 유형(라이브 동영상과 일반 동영상을 구분할 수 없음)과 같은 일부 정보가 부족하고 더 적은 항목을 반환할 수 있다는 것입니다. +\n +\n유튜브는 RSS 피드로 이 빠른 방법을 제공하는 서비스의 한 예입니다. \n \n따라서 선택은 속도 또는 정확한 정보 중에서 선호하는 것으로 귀결됩니다. - 이 기능은 아직 NewPipe에서 지원하지 않습니다. -\n + 이 기능은 아직 NewPipe에서 지원하지 않습니다. +\n \n이후 버전에서 지원될 예정입니다. 감시한 항목 숨기기 향후 항목 숨기기 + 앱 사용에 문제가 있는 경우, 일반적인 질문에 대한 다음 답변을 확인하세요! + 자주 묻는 질문 + 웹사이트에서 보기 + 정렬 + 빠른 모드 + 점 3개 메뉴에서 구독 가져오기 또는 내보내기 + 최신 버전의 NewPipe를 실행 중입니다. + %s를 다운로드하려면 탭하세요. + 영구 썸네일 설정 해제 + 이 옵션은 테마로 %s를 선택한 경우에만 사용할 수 있음 + 중복 추가 %d 번 + 회색으로 표시된 재생 목록에 이미 이 항목이 포함되어 있습니다. + 카드 + 클립보드 복사 실패 \ No newline at end of file diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 09a4ad96a..c7dfd05d2 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -131,7 +131,7 @@ بەدڵبوون بەدڵنەبوون هیچ ئەنجامێک نییە - هیچ شتێک لێرەدا نییە + هیچ شتێک لێرەدا نییە ڕاکێشان بۆ دووبارە داواکردنەوە ڤیدیۆ دەنگ @@ -390,8 +390,7 @@ خشتە چوارخانە خۆکاری - وەشانی نوێی ئەپ بەردەستە! - کرتە بکە بۆ دابەزاندن + وەشانی نوێی ئەپ بەردەستە! تەواوبوو لە نۆرەیە وەستاوە @@ -463,7 +462,6 @@ بەهۆی ExoPlayer ەوە ماوەی بردنەپێش و بردنەپاش لە %d چرکەدا دیاریکرا کپ کپ نەکردن - یارمەتی %d خولەک %d خولەك diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 77d55ae7e..bb45a0970 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -97,14 +97,14 @@ Pradėti Pauzė - Ištrinti + Naikinti Kontrolinė suma Gerai Failo pavadinimas Gijos Klaida - NewPipe Atsiunčiama - Palieskite, kad peržiūrėtumėte išsamią informaciją + NewPipe atsisiunčiama + Bakstelėkite, kad peržiūrėtumėte išsamią informaciją Prašome palaukti… Nukopijuota į iškarpinę Prašome pasirinkti galimą atsisiuntimų aplankalą @@ -118,7 +118,7 @@ Negalima keisti prenumeratos Negalima atnaujinti prenumeratos Prenumeratos - Kas Naujo + Kas naujo Ieškoti istorijoje Saugoti paieškos užklausas vietinėje atmintyje Žiūrėjimo istorija @@ -139,7 +139,7 @@ Įvyko nepataisoma grotuvo klaida Atstatoma po grotuvo klaidos Nėra rezultatų - Čia nieko nėra išskyrus svirplius + Čia nieko nėra išskyrus svirplius Tūkst. Mln. Mlrd. @@ -212,9 +212,9 @@ Nerasta video srautų Nerasta audio srautų Tempti kad perrūšiuoti - Sukurti + Kurti Nutraukti - Pervadinti + Pervardyti Vėliausiai žiūrėta Dažniausiai žiūrėta Eksportavimas baigtas @@ -230,7 +230,7 @@ Visada klausti Gauname informaciją… Įkeliamas pasirinktas turinys - Naujas grojaraštį + Naujas grojaraštis Pervadinti Pavadinimas Pridėti į grojaraštį @@ -293,7 +293,6 @@ Failas perkeltas ar ištrintas Įrašyti į išorinę SD kortelę nepavyko. Atstatyti atsisiuntimo aplanką\? Išorinė saugykla neprieinama - Žinynas Paieškos istorija pašalinta Išvalyti visą paieškos istoriją\? Išvalo paieškos istoriją @@ -312,7 +311,7 @@ Pranešimas apie naują NewPipe versiją Programos atnaujinimo pranešimas Failą - Failas pašalintas + Failas panaikintas Atlikėjai Albumai Dainos @@ -436,7 +435,7 @@ Generuoti unikalų vardą Atkūrimo greičio valdymas Rodyti miniatiūrą - Kanalo grupės + Kanalų grupės %d diena %d dienos @@ -463,7 +462,7 @@ Paskutiniai Niekada Kanalas - Naujas + Nauja atstatoma Užverti Sustabdyti @@ -569,7 +568,7 @@ Paskutinis atnaujinimas: %s Klausti kur parsiųsti failo perrašyti nepavyko - Prieinamas NewPipe atnaujinimas! + Prieinamas NewPipe atnaujinimas! Perjungiant programą sumažinti Atkabinti (gali iškraipyti) Nepavyko eksportuoti prenumeratų @@ -585,7 +584,6 @@ Pašalinti parsiųstus failus Pasirinkite kopiją Riboti parsiuntimų eilę - Paspauskite parsiuntimui Sąrašo rodinio režimas Prasukti kai nieko negroja Grojaraščio puslapis @@ -688,7 +686,7 @@ \nĮdiekite „Storage Access Framework“ suderinamą su šia failų tvarkykle Pranešimai pranešimui apie klaidas Rodyti „Grotuvas užlūžo“ - Sukurti klaidos pranešimą + Kurti klaidos pranešimą NewPipe susidūrė su klaida, paspauskite norėdami pranešti Šiam veiksmui nebuvo rasta tinkama failų tvarkyklė. \nĮdiekite failų tvarkyklę arba pabandykite išjungti \"%s\" atsisiuntimo nustatymuose @@ -737,4 +735,8 @@ Žiūrėti svetainėje Jei kyla sunkumų naudojantis programėle, būtinai peržiūrėkite šiuos atsakymus į dažniausiai užduodamus klausimus! Rikiuoti + Importuokite arba eksportuokite prenumeratas iš 3 taškelių meniu + Greitasis režimas + Naudojate naujausią „NewPipe“ versiją + Bakstelėkite, kad atsisiųstumėte %s \ No newline at end of file diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index ba8d49e57..86c756ecb 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -144,7 +144,7 @@ Audio Video Velciet, lai mainītu secību - Šeit nekā nav, tikai sienāži + Šeit nekā nav, tikai sienāži Nav resultātu Apraksts Līdzīgi video @@ -199,7 +199,6 @@ Lejupielādēt uz SD karti nav iespējams. Atiestatīt lejupielāžu mapes lokāciju\? Ārējā krātuve nepieejama Kļūda - Palīdzība Meklēšanas vēsture izdzēsta Izdzēsy visu meklēšanas vēsturi\? Izdzēš meklēto vārdu vēsturi @@ -447,8 +446,7 @@ Pausēts Gaida Pabeigts - Nospiediet, lai lejupielādētu - Ir pieejams Newpipe atjauninājums! + Ir pieejams Newpipe atjauninājums! Automātiski Tīkls Saraksts @@ -684,4 +682,17 @@ Avarēt atskaņotāju Pielāgojiet pašlaik atskaņotās plūsmas notifikāciju Atskaņotāja notifikācija + Jaunās tiešraides + Radās kļūda, detalizētāku informāciju skatiet paziņojumā + + %s jauna tiešraide + %s jauna tiešraide + %s jaunas tiešraides + + Paziņojumi par jaunām tiešraidēm abonementos + Bieži uzdotie jautājumi + Paziņojumi, lai ziņotu par kļūdām + Kļūdas ziņojuma paziņojums + Atskaņošanas ielādēšanas intervāla lielums + NewPipe radās kļūdu, pieskarieties, lai ziņotu \ No newline at end of file diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 0aaa8d546..6052b871b 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -144,7 +144,7 @@ Допаѓања Недопаѓања Нема резултати - Тука Е Празно :( + Тука Е Празно :( Влечи за да разместиш Видео Звук @@ -349,8 +349,7 @@ Список Решетка Автоматски - NewPipe ажурирање е достапно! - Допри за преземање + NewPipe ажурирање е достапно! Завршено Во очекување Паузирано diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 9e4d29cfe..35243ca26 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -192,7 +192,7 @@ ഓഡിയോ വീഡിയോ പുനക്രമീകരിക്കാൻ വലിച്ചിടുക - നോക്കേണ്ടടാ ഉണ്ണി ഇവിടെ ഒന്നും ഇല്ല + നോക്കേണ്ടടാ ഉണ്ണി ഇവിടെ ഒന്നും ഇല്ല ഫലങ്ങൾ ലഭ്യമല്ല ഡിസ്ലൈക്കുകൾ ലൈക്കുകൾ @@ -233,7 +233,6 @@ എസ്ഡി കാർഡിലേക്ക്‌ ഡൗൺലോഡ് അസാധ്യം. ഡൗൺലോഡ് ഫോൾഡർ മാറ്റട്ടെ\? എസ്ഡി സൗകര്യം ലഭ്യമല്ല പിശക് - സഹായം സെർച്ച് ചരിത്രം നീക്കം ചെയ്തു സെർച്ച് ചരിത്രം നീക്കം ചെയ്യട്ടെയോ\? സെർച്ച് കീവേർഡുകളെ നീക്കം ചെയ്യും @@ -420,8 +419,7 @@ താൽക്കാലികമായി നിർത്തി ശേഷിക്കുന്നു പൂർത്തിയായി - ഡൗൺലോഡുചെയ്യാൻ ടാപ്പുചെയ്യുക - ന്യൂപൈപ്പ് അപ്‌ഡേറ്റ് ലഭ്യമാണ്! + ന്യൂപൈപ്പ് അപ്‌ഡേറ്റ് ലഭ്യമാണ്! ഓട്ടോ ഗ്രിഡ് ലിസ്റ്റ് diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 2c358748a..1ad8fe0ef 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -173,7 +173,7 @@ Suka Tidak suka Tiada keputusan - Tiada apa-apa di sini tetapi jangkrik + Tiada apa-apa di sini tetapi jangkrik Seret untuk menyusun semula Video Audio @@ -348,8 +348,7 @@ Senarai Grid Auto - Kemas kini NewPipe Tersedia! - Ketik untuk muat turun + Kemas kini NewPipe Tersedia! Selesai dijeda telah beratur @@ -381,7 +380,6 @@ %d hari - Bantuan Buka dengan %s pendengar diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 4bd996ede..79bfa710a 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -21,18 +21,18 @@ Velg nedlastingsmappe for lydfiler Forvalgt oppløsning Spill av med Kodi - Installer manglende Kore-program\? + Installer manglende Kore-app\? Vis \"Spill av med Kodi\"-valg Vis valg for avspilling via Kodi mediasenter Lyd Forvalgt lydformat - Drakt + Tema Mørk Lys Last ned Vis \"Neste\" og \"Lignende\" -videoer Nettadressen støttes ikke - Foretrukket innholdsspråk + Forvalgt innholdsspråk Video og lyd Utseende Spiller i bakgrunnen @@ -41,7 +41,7 @@ Opplasterens avatar Nikk Nesetrekk - Trykk forstørrelsesglasset for å begynne + Trykk på forstørrelsesglasset for å komme i gang. Innhold Vis aldersbegrenset innhold Feil @@ -65,7 +65,7 @@ Nedlastinger Nedlastinger Feilrapport - Program/brukergrensesnitt krasjet + App/brukergrensesnitt krasjet Pause Slett Sjekksum @@ -77,7 +77,7 @@ Trykk for detaljer Vent… Kopiert til utklippstavle - Hva:\\nForespørsel:\\nInnholdsspråk:\\nInnholdsland:\\nProgramspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOS-versjon: + Hva:\\nForespørsel:\\nInnholdsspråk:\\nInnholdsland:\\nAppspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOS-versjon: Start Definer en nedlastingsmappe senere i innstillingene reCAPTCHA-oppgave @@ -127,7 +127,7 @@ Om NewPipe Tredjepartslisenser © %1$s av %2$s lisensiert %3$s - Om + Om og Ofte stilte spørsmål Lisenser Fri lett strømming på Android. Fortsett avspilling @@ -137,7 +137,7 @@ Historikk og mellomlagring Angre Ingen resultater - Bare ufisk her + Bare ufisk her Ingen abonnenter %s abonnent @@ -241,15 +241,15 @@ Tilpass Fyll Forstørr - Bruk rask unøyaktig blafring - Feilretting + Bruk rask unøyaktig spoling + Feilsøking Fil Ingen slik mappe Ingen slik fil/innholdskilde Filen finnes ikke eller så har du ikke tilgang til å lese eller skrive til den Filnavn kan ikke være tomt En feil inntraff: %1$s - Auto-generert + Autogenerert Importer Importer fra Eksporter til @@ -271,21 +271,21 @@ \n \nØnsker du å fortsette? Fartskontroller for avspilling - Tempo + Hastighet Tonehøyde Tøm avspillingshistorikk Slett historikken og posisjon for avspilte strømmer Slett hele visningshistorikken\? - Visningshistorikk slettet. + Visningshistorikken er slettet Tøm søkehistorikk Sletter historikken for søkte nøkkelord Slett hele søkehistorikken\? - Søkehistorikk slettet. + Søkehistorikken er slettet Ett element slettet. - Inget program installert for avspilling av denne filen + Ingen app installert for å spille av denne filen Undertekster - Endre undertekststørrelse og bakgrunnsstiler. Krever omstart av programmet for å tre i effekt. - NewPipe er copyleft, fri programvare: Du kan bruke, studere og forbedre etter egen vilje. Spesifikt kan du redistribuere og/eller modifisere det i henhold til vilkårene gitt i GNU General Public-lisensen, som publisert av Free Software Foundation, enten versjon 3 av lisensen, eller (etter eget ønske) enhver senere versjon. + Endre spillerens undertekststørrelse og bakgrunnsstiler. Krever omstart av appen for å tre i kraft + NewPipe er copyleft fri programvare: Du kan bruke, studere og forbedre den etter egen vilje. Spesifikt kan du redistribuere og/eller modifisere den i henhold til vilkårene gitt i GNU General Public-lisensen, som er publisert av Free Software Foundation, enten versjon 3 av lisensen, eller (etter eget ønske) enhver senere versjon. Ønsker du også å importere innstillinger? Kunne ikke importere abonnementer Kunne ikke eksportere abonnementer @@ -293,35 +293,36 @@ \n \n1. Gå til denne nettadressen: %1$s \n2. Logg inn når forespurt -\n3. Klikk på «All data inkludert\", så på «Fravelg alt», så på kun «Abonnementer», og klikk så «OK». -\n4. Klikk på «Neste steg» og så på «Opprett eksport» -\n5. Klikk på «Last ned»-knappen etter den vises, og -\n6. Fra nedlastet takeout.zip, pakk ut .json-filen (vanligvis under «YouTube og YouTube Music/subscriptions/subscriptions.json» og importer den her. +\n3. Klikk på \"All data inkludert\", så på \"Fjern merket for alle\", så på kun \"Abonnementer\", og klikk så \"OK\" +\n4. Klikk på \"Neste steg\" og så på \"Opprett eksport\" +\n5. Klikk på \"Last ned\"-knappen etter den vises +\n6. Klikk på IMPORTER FIL under og velg den nedlastede .zip filen +\n7. [Dersom .zip importen feiler] Pakk ut .csv filen (vanligvis under \"YouTube og YouTube Music/subscriptions/subscriptions.csv\"), klikk på IMPORTER FIL under og velg den utpakkede csv filen Importer en SoundCloud-profil ved å skrive enten nettadressen eller din ID: \n \n1. Skru på \"skrivebordsmodus\" i en nettleser ( siden er ikke tilgjengelig for mobile enheter) \n2. Gå til denne nettadressen: %1$s \n3. Logg inn når forespurt \n4. Kopier profil-nettadressen du ble videresendt til. - Unøyaktig blafring lar spilleren søke posisjoner raskere med redusert presisjon. Å søke i 5, 15 eller 25 sekunder fungerer ikke med dette + Unøyaktig spoling lar spilleren søke posisjoner raskere med redusert presisjon. Å søke i 5, 15 eller 25 sekunder fungerer ikke med dette Skru av for å stoppe innlasting av miniatyrbilder, noe som sparer data- og minnebruk. Endring av dette vil tømme både disk- og minne-hurtiglager Fortsett fullendt (ikke-repeterende) avspillingskø ved å legge til en relatert strøm - Minnelekkasjeoppsyn kan forårsake programmet å opptre uresponsivt under haugdumping + Overvåkning av minnelekkasjer kan forårsake at appen ikke svarer under heap dumping Rapporter feil utenfor livssyklusen Tving rapportering av uleverbare Rx-unntak utenom fragment eller aktivitetslevetid etter forkastelse Avhekt (kan forårsake forvrenging) NewPipes personvernspraksis - NewPipe-prosjektet tar ditt personvern veldig alvorlig. Derfor samler ikke programmet inn data uten ditt samtykke. + NewPipe-prosjektet tar ditt personvern veldig alvorlig. Derfor samler ikke appen inn data uten ditt samtykke. \nNewPipes personvernspraksis forklarer i detalj hvilken data som sendes og lagres når du sender en krasjrapport. Les personvernspraksis - For å overholde Europeisk Generell Data Proteksjons-Regularing (GDPR), vil vi rette oppmerksomheten din mot NewPipes personvernspraksis. Les den nøye. -\nDu må godta den for å sende oss feilrapporten. + For å overholde EUs personvernforordning (GDPR), vil vi rette oppmerksomheten din mot NewPipe sin personvernerklæring. Vennligst les den nøye. +\nDu må godta den, for å sende oss feilrapporten. Godta Avslå Ubegrenset Begrens oppløsning når mobildata brukes - Minimer ved programbytte - Handling ved bytting til annet program fra hovedspiller — %s + Minimer ved appbytte + Handling ved bytting til annen app fra hovedspiller — %s Ingen Minimer til bakgrunnsspiller Minimer til oppsprettsspiller @@ -341,7 +342,7 @@ Oppdateringer Hendelser Fil slettet - Programoppgraderingsmerknad + Varsel om appoppdatering Merknader for nye NewPipe-versjoner Ekstern lagring utilgjengelig Nedlasting til eksternt SD-kort er ikke mulig. Tilbakestill plassering av nedlastingsmappe\? @@ -352,13 +353,12 @@ Hvilke faner vises på hovedsiden Konferanser Oppdatering - Varsle om programoppdatering når en ny versjon er tilgjengelig - Listevisningmodus + Vis varsel om appoppdatering når en ny versjon er tilgjengelig + Listevisningsmodus Liste Rutenett - Auto - Ny NewPipe-versjon er tilgjengelig! - Trykk for å laste ned + Automatisk + Ny NewPipe-versjon er tilgjengelig! Fullført pauset I kø @@ -397,7 +397,7 @@ Posisjon i lister Vis avspillingsposisjonsindikator i lister Tøm data - Avspillingsposisjon slettet. + Avspillingsposisjoner er slettet Fil flyttet eller slettet En fil ved dette navnet finnes allerede Kan ikke overskrive filen @@ -412,9 +412,10 @@ Start nedlastinger Sett nedlastinger på pause Spør om hvor ting skal lastes ned til - Du vil bli spurt om hvor hver nedlasting skal plasseres + Du vil bli spurt om hvor hver nedlasting skal plasseres +\nAktiver system mappe velgeren (SAF) dersom du vil laste ned til et eksternt SD kort Bruk systemmappevelger (SAF) - «Lagringstilgangsrammeverk» (SAF) tillater nedlasting til eksternt SD-kort. + \'Lagringstilgangsrammeverk\' (SAF) tillater nedlasting til et eksternt SD-kort Slett avspillingsposisjoner Sletter alle avspillingsposisjoner Slett alle avspillingsposisjoner\? @@ -429,7 +430,7 @@ %s lytter %s lyttere - Språket vil endres når programmet startes på ny. + Språket vil endres etter at appen har startet på nytt Standard kiosk PeerTube-instanser Lokal @@ -448,7 +449,7 @@ Autogenerert (fant ingen opplaster) gjenoppretter Kan ikke gjenopprette denne nedlastingen - Hurtigframoverspoling/-tilbakeblafringsvarighet + Hurtigframoverspoling/-tilbakespolingsvarighet Gi tillatelse til å vise over andre apper Programspråk Systemforvalg @@ -461,7 +462,6 @@ Forstum Opphev forstumming - Hjelp %d minutt %d minutter @@ -481,12 +481,12 @@ Alltid oppdater %d valgt - %d valgt + %d valgte Ingen abonnement valgt Velg abonnementer Kanalgrupper - Skru av raskt modus + Skru av hurtigmodus Strømoppdateringsterskel Strøm Behandler strøm… @@ -505,12 +505,12 @@ Fjern sette Opprettet av %s Av %s - Slå på YouTubes \"begrensede modus\" + Slå på YouTubes \"Begrenset modus\" Aldri Kun på Wi-Fi Velg en spilleliste Innrapporter på GitHub - Legg i kø automatisk + Automatisk køstilling Den aktive spillerkøen blir erstattet Bytte fra en spiller til en annen kan erstatte køen din Be om bekreftelse før du tømmer køen @@ -524,7 +524,7 @@ \n• Hent hele abonnementskanalen, noe som er tregt, men fullstendig. \n• Bruk av et dedikert tjenesteendepunkt, noe som er raskt men vanligvis ikke fullstendig. \n -\nForskjellen mellom dem er at den raske vanligvis mangler info, som elementers varighet eller type (kan ikke skjelne mellom sanntidsvideoer og normale) og det kan gi færre elementer. +\nForskjellen mellom dem er at den raske vanligvis mangler info, som elementers varighet eller type (kan ikke skille mellom direktesendinger og normale videoer) og det kan gi færre elementer. \n \nYouTube er et eksempel på en tjeneste som tilbyr denne raske metoden med sin RSS-informasjonskanal. \n @@ -533,21 +533,21 @@ Sjekk om det allerede eksisterer et problem som diskuterer ditt krasj. Når du oppretter duplikatbilletter, tar du tid fra oss som vi kan bruke på å fikse den faktiske feilen. Du kan maksimalt velge tre handlinger som skal vises i kompaktvarselet! Rediger hver varslingshandling nedenfor ved å trykke på den. Velg opptil tre av dem som skal vises i det kompakte varselet ved å bruke avmerkingsboksene til høyre - Skaler videominiatyrbildet som vises i varselet fra 16:9 til 1:1 sideforhold (kan føre til forvrengninger) - Tilgjengelig i noen tjenester, det er vanligvis mye raskere, men kan gi et begrenset antall elementer, og ofte ufullstendig info (f.eks. ingen varighet, elementtype, eller sanntidsstatus). + Beskjær videominiatyrbildet som vises i varselet fra 16:9 til 1:1 sideforhold (kan føre til forvrengninger) + Tilgjengelig i noen tjenester, det er vanligvis mye raskere, men kan gi et begrenset antall elementer, og ofte ufullstendig informasjon (f.eks. ingen varighet, elementtype, eller sanntidsstatus) Hent fra dedikert strøm når tilgjengelig Tid siden siste oppdatering før et abonnement vurderes utdatert — %s - Som følge av begrensninger i ExoPlayer er blafringsdistansen begrenset til %d sekunder + Som følge av begrensninger i ExoPlayer er blafringsdistansen kun %d sekunder Videoer som har blitt sett før og etter at de er lagt til spillelisten, vil bli fjernet. \nEr du sikker\? Dette kan ikke angres! Start avspilling automatisk — %s - Kunne ikke gjenkjenne angitt nettadresse. Åpne den med annet program\? + Kunne ikke gjenkjenne angitt nettadresse. Åpne den med et annet program\? Innholdet støttes ikke enda av NewPipe. \n \nStøtte vil forhåpentligvis komme til i en senere versjon. Spillelisteside Kanalens avatar-miniatyrbilde - Skru på raskt modus + Skru på hurtigmodus Vis kun ugrupperte abonnementer Spill kø Ingen spillelistebokmerker enda @@ -558,7 +558,7 @@ Tredje handlingstast Andre handlingstast Første handlingstast - Skaler miniatyrbildet til 1: 1-sideforhold + Beskjær miniatyrbildet til sideforholdet 1:1 Ingenting Vis minnelekkasjer Satt i kø @@ -595,23 +595,23 @@ Dette er et spor fra SoundCloud Go+, ihvertfall i ditt land, så det kan ikke strømmes eller lastes ned av NewPipe. Innholdet er ikke tilgjengelig i din region. Nedlastingen har startet - Du kan velge din favorittnattdrakt nedenfor - Velg din favorittnattdrakt — %s - Automatisk (enhetsdrakt) + Du kan velge ditt favorittnattema nedenfor + Velg ditt favorittnattema — %s + Automatisk (enhetstema) Radio Framhevet Løs - Nattdrakt + Nattema Vis kanaldetaljer Skru av media-tunnelering hvis du opplever svart skjerm eller videohakking Skru av media-tunnelering Du kan nå velge tekst inne i beskrivelsen. Merk at siden kan flimre og lenker er kanskje ikke klikkbare i utvalgsmodus. - Raskt modus for informasjonskanal tilbyr ikke mer info om dette. + Hurtigmodus for informasjonskanal tilbyr ikke mer info om dette. Skaperens konto har blitt terminert. \nNewPipe vil ikke kunne laste inn denne informasjonskanalen i fremtiden. \nØnsker du å oppheve ditt abonnement på denne kanalen\? - Skru av valgt av tekst i beskrivelsen - Skru på valg av tekst i beskrivelsen + Skru av merking av tekst i beskrivelsen + Skru på merking av tekst i beskrivelsen %s oppgav denne grunnen: Konto terminert Vis avspilte elementer @@ -619,8 +619,8 @@ Kunne ikke laste inn informasjonskanal Fra Android 10 er kun «lagringstilgangsrammeverk» støttet Du vil bli spurt om hvor du vil lagre hver nedlastning - Miniatyrbildeforhåndsvisning - Ingen nedlastingsmappe valgt. Velg forvalgt nedlastingsmappe nå. + Forhåndsvisning av miniatyrbilde på spolelinjen + Ingen nedlastingsmappe er satt ennå, velg en standard nedlastingsmappe nå Av Nettbrett-modus @@ -653,31 +653,81 @@ Søkeforslag annensteds fra Lokale søkeforslag Marker som sett - Ikke start videoer i minispilleren, men gå til fullskjermsmodus direkte, hvis auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisning. + Ikke start videoer i minispilleren, men bytt til fullskjermsmodus direkte dersom auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisningen Vis Picasso-fargede bånd på toppen av bilder for å indikere kilde: Rød for nettverk, blå for disk, og grønn for minne - Hjertemerket av skaper + Hjertemerket av skaperen Vis bildeindikatorer Dra elementer for å fjerne dem Start hovedspiller i fullskjerm - Spill etterpå - Spill etterpå + Still i kø neste + I kø neste Se etter oppdateringer Behandler … Kan ta sin tid Krasj avspilleren - Vis «Krasj spilleren» + Vis \"Krasj spilleren\" Se etter nye versjoner manuelt Nye informasjonskanalelementer - Ser etter oppdateringer … + Ser etter oppdateringer… Viser et krasjalternativ ved bruk av avspilleren - Det oppstod en feil. Sjekk merknaden. + Det oppsto en feil, se varselet Festet kommentar Feilrapport-merknad Merknader for innrapportering av feil - NewPipe-feil. Trykk for å rapportere. + NewPipe oppdaget en feil, trykk for å rapportere Opprett en feilmerknad - Vis et feil-alternativsfelt - Installer en filbehandler først, eller skru av «%s» i nedlastingsinnstillingene. - Installer en filbehandler som støtter lagringstilgangsrammeverk først. + Vis en feil hurtigbar + Ingen passende filbehandler ble funnet for denne handlingen. +\nVennligst installer en filbehandler, eller prøv å skru av \'%s\' i nedlastingsinnstillingene + Ingen passende filbehandler ble funnet for denne handlingen. +\nVennligst installer en Storage Access Framework kompatibel filbehandler LeakCanary er ikke tilgjengelig ExoPlayer-forvalg + Intervallstørrelse for avspillingsinnlasting + Bytt avspillinginnlastingens intervallstørrelse (for øyeblikket %s). En lavere verdi kan øke hastigheten på den første videoinnlastingen. Endringer krever en omstart av spilleren + Spillervarsel + Varsler + Nye strømmer + Varsler om nye strømmer for abonnementer + + %s ny strøm + %s nye strømmer + + , + Konfigurer varsling for gjeldende avspillingsstrøm + Prosent + Halvtone + Den valgte strømmen støttes ikke av eksterne spillere + Laster inn strømdetaljer… + Slett alle nedlastede filer fra harddisken\? + Varsler er deaktivert + Du abonnerer nå på denne kanalen + Strømmer som ennå ikke er støttet av nedlasteren, vises ikke + Velg kvalitet for eksterne spillere + Vis fremtidige elementer + Skjul viste elementer + Ingen videostrømmer er tilgjengelige for eksterne spillere + Ukjent format + Ukjent kvalitet + Skjul fremtidige elementer + Ofte stilte spørsmål + Vis på nettsiden + Start sjekk etter nye strømmer + Varsel om nye strømmer + Hyppighet for sjekk + Varsle om nye strømmer fra abonnementer + Nødvendig nettverkstilkobling + Et hvilket som helst nettverk + Bli varslet + Ingen lydstrømmer er tilgjengelige for eksterne spillere + Sorter + Velg alle + Hvis du har problemer med å bruke appen, så bør du sjekke ut disse svarene fra generelle spørsmål! + Skru av vedvarende miniatyrbilde + Dette valget er kun tilgjengelig dersom %s er valgt som tema + Klarte ikke å kopiere til utklippstavlen + Trykk for å laste ned %s + Du bruker den nyeste versjonen av NewPipe + Kort + Importer eller eksporter fra trepunktsmenyen + Hurtigmodus \ No newline at end of file diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 9cbad12ab..6f3d2bb6e 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -178,7 +178,7 @@ मनपर्दो मन नपर्ने कुनै परिणामहरु छैनन् - यहाँ झ्याउँकिरी बाहेक केहि पनि छैन + यहाँ झ्याउँकिरी बाहेक केहि पनि छैन पुन: क्रमबद्ध गर्न तान्नुहोस् भिडियो अडियो @@ -356,8 +356,7 @@ सूची ग्रिड स्वतः - NewPipe अपडेट उपलब्ध छ! - डाउनलोड गर्न ट्याप गर्नुहोस् + NewPipe अपडेट उपलब्ध छ! समाप्त रोकिएको पज @@ -459,7 +458,6 @@ ExoPlayer अवरोधका कारण खोजी अवधि %d सेकेन्डमा सेट गरियो म्युट ध्वनि सुचारु - मद्दत के तपाईलाई लाग्छ फिड लोडि एकदम ढिलो छ\? यदि हो भने, छिटो लोडिङ् सक्षम गर्न प्रयास गर्नुहोस् (तपाईं यसलाई सेटिंङ्हरूमा वा तलको बटन थिचेर बदल्न सक्नुहुन्छ)। \n \nनयाँ पाइपले दुई फिड लोड गर्ने रणनीति प्रदान गर्दछ: diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 3b54c56f5..6ab0fbf5c 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -145,7 +145,7 @@ Duimen Duimen omlaag Geen resultaten - Helemaal niets hier te zien + Helemaal niets hier te zien Versleep om de volgorde te wijzigen Video Geluid @@ -358,8 +358,7 @@ Lijst Raster Auto - NewPipe update is beschikbaar! - Tik om te downloaden + NewPipe update is beschikbaar! Voltooid gepauzeerd toegevoegd aan wachtrij @@ -519,7 +518,6 @@ Kopieer opgemaakt rapport Geef toestemming voor weergave over andere apps Stream bestand downloaden - Hulp Afspeelposities verwijderd Alle afspeelposities verwijderen\? Verwijdert alle geschiedenis van afspeelposities diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 8f2ef55b1..ab73b602f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -144,7 +144,7 @@ Geschiedenis en cache Ongedaan maken Geen resultaten - Niets, maar dan ook niets te zien + Niets, maar dan ook niets te zien Geen abonnees %s abonnee @@ -356,8 +356,7 @@ Lijst Raster Auto - NewPipe-update is beschikbaar! - Tik om te downloaden + NewPipe-update is beschikbaar! Voltooid In afwachting van gepauzeerd @@ -457,7 +456,6 @@ Door beperkingen van ExoPlayer is de zoekduur ingesteld op %d seconden Geluid dempen Geluid aanzetten - Hulp %d seconde %d seconden @@ -723,4 +721,15 @@ Veelgestelde vragen Als u problemen ondervindt bij het gebruik van de app, bekijk dan deze antwoorden op veelgestelde vragen! Bekijk op de website + Sorteer + Snelle modus + Importeer of exporteer abonnementen vanuit het 3-punten menu + U heeft de laatste versie van NewPipe + Klik om %s te downloaden + Kon niet naar klembord kopiëren + Deze instelling is alleen beschikbaar als %s als Thema ingesteld is + Kaart + Miniatuur niet ingesteld + De afspeellijsten die grijs zijn, bevatten dit item al. + Duplicaat is %d tijd(en) toegevoegd \ No newline at end of file diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml new file mode 100644 index 000000000..f7d4eec86 --- /dev/null +++ b/app/src/main/res/values-nn/strings.xml @@ -0,0 +1,73 @@ + + + Trykk på aukeglaset for å byrja. + Gjeve ut den %1$s + Fann ingen straumspelar. Legg inn VLC\? + Ingen straumavspelar funne (du kan leggja inn VLC for å spela av straumen). + Legg inn + Avbryt + Greitt + Opna i ein nettlesar + Merk som sett + Sprett opp i eit vindauga + Opna med + Del + Søk + Innstillingar + Meinte du «%1$s»\? + Del med + Nytta ytre videospelar + Tek bort ljod ved somme oppløysingar + Nytta ein ytre ljodavspelar + Fylg + Fylgjer + Stogg å fylgja + Gjeve opp å fylgja kanalen + Vis opplysingar + Fylgingar + Gøymde spelelister + Vel fane + Sprett opp + Legg til i + Vel hentemappe for videofiler + Hentemappe for ljod + Vis høgare oppløysingar + Berre somme einingar kan spela av 2K-/4K-videoar + Spel av med Kodi + Syna \"Spela av med Kodi\"-val + Hent + Hent straumfil + Gøymer henta videofiler her + Bakgrunn + Videohentingsmappe + Henta ljodfiler vert gøymt her + Vel hentemappe for ljodfiler + Legg inn saknande Kore-app\? + Viser svar for: %s + Kunne ikkje brigde fylging + Nettbrettmodus + + Av + Merknader er slått av + , + Slå av/på alle + Ingen ljodstraumar er tilgjengelege for ytre spelarar + Ingen videostraumar er tilgjengelege for ytre spelarar + Vel kvalitet for ytre spelarar + Vis framtidige ting + Skjul framtidige ting + Skil ut + Opna nettstaden + Du fylgjer no denne kanalen + Vald straum er ikkje stødd av ytre spelarar + Straumar som ikkje enno er stødde av hentaren, er ikkje synlege + Ukjend kvalitet + Ukjend format + Forvald oppløysing + Forvald oppsprettsoppløysing + Vis eit val om å spela av ein video med mediasamlestaden Kodi + Skjer småbiletet til storleikshøvet 1:1 + Skjer videosmåbiletet som vert vist i varselet, ifrå storleikshøvet 16:9 til 1:1 + Fyrste gjerdknapp + Andre gjerdknapp + \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index be3ee95e4..31a53a6b3 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -1,6 +1,6 @@ - ଆରମ୍ଭ କରିବା ପାଇଁ \"ସର୍ଚ୍ଚ\" ବଟନ କୁ ଦବାନ୍ତୁ + ଆରମ୍ଭ କରିବା ପାଇଁ \"ସର୍ଚ୍ଚ\" ବଟନ କୁ ଦବାନ୍ତୁ । ସିଷ୍ଟମ୍ ଡିଫଲ୍ଟ ନାମ ବଦଳାନ୍ତୁ ବନ୍ଦ @@ -15,7 +15,7 @@ ଗାଢ଼ %d ମିନିଟ୍ - %d ମିନିଟ୍ + ମୋଟ %d ମିନିଟ୍ ଆପ୍ ଭାଷା ସ୍ୱୟଂଚାଳିତ (ଡିଭାଇସ୍ ଥିମ୍) @@ -25,15 +25,711 @@ ଚାଲୁ %d ଘଣ୍ଟା - %d ଘଣ୍ଟା + ମୋଟ %d ଘଣ୍ଟା %d ସେକେଣ୍ଡ - %d ସେକେଣ୍ଡ + ମୋଟ %d ସେକେଣ୍ଡ %d ଦିନ - %d ଦିନ + ମୋଟ %d ଦିନ ନୂଆ + %1$s ରେ ପ୍ରକାଶିତ + କୌଣସି ଷ୍ଟ୍ରିମ୍ ପ୍ଲେୟାର୍ ମିଳିଲା ନାହିଁ । VLC ସଂସ୍ଥାପନ କରନ୍ତୁ \? + କୌଣସି ଷ୍ଟ୍ରୀମ ପ୍ଲେୟାର ନାହିଁ । + ସଂସ୍ଥାପନ କରନ୍ତୁ + ପପ୍ଅପ୍ ମୋଡ୍ ରେ ଖୋଲନ୍ତୁ + ଏଥିରେ ଖୋଲନ୍ତୁ + ବାତିଲ୍ କରନ୍ତୁ + ଦେଖାଯାଇଥିବା ପରି ଚିହ୍ନିତ କର + ସଞ୍ଚୟ କରନ୍ତୁ + ସେଟିଂ + ତୁମେ ଏହା ଚାଂହ କି \"%1$s\"\? + ଫାଇଲ୍ ଡାଉନଲୋଡ କରନ୍ତୁ + ପଠାନ୍ତୁ + ସନ୍ଧାନ + ଠିକ୍ ଅଛି + ବ୍ରାଉଜରରେ ଖୋଲନ୍ତୁ + ବୁକମାର୍କ ହୋଇଥିବା ପ୍ଲେଲିଷ୍ଟଗୁଡିକ + ପୃଷ୍ଠଭୂମି + ପପ୍ଅପ୍ + ଭିଡିଓ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର୍ + ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଭିଡିଓ ଫାଇଲଗୁଡ଼ିକ ଏଠାରେ ଗଚ୍ଛିତ ଅଛି + ଅଡିଓ ଫାଇଲ୍ ପାଇଁ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର୍ ବାଛନ୍ତୁ + ୟୁଟ୍ୟୁବ୍ ଏକ \"ପ୍ରତିବନ୍ଧିତ ମୋଡ୍\" ପ୍ରଦାନ କରେ ଯାହା ସମ୍ଭାବ୍ୟ ପରିପକ୍ୱ ବିଷୟବସ୍ତୁକୁ ଲୁଚାଇଥାଏ + ଇତିହାସ ବିଲୋପ ଦେଖନ୍ତୁ + ପ୍ଲେକ୍ ପୋଜିସନ୍ ଡିଲିଟ୍ ହୋଇଛି + ସନ୍ଧାନ ଇତିହାସ ବିଲୋପ ହେଲା + ଆପ୍ ପୁନଃଆରମ୍ଭ ହେବା ପରେ ଭାଷା ପରିବର୍ତ୍ତନ ହେବ + ପ୍ଲେଲିଷ୍ଟ ଥମ୍ବନେଲ ଭାବରେ ସେଟ୍ କରନ୍ତୁ + ଫାଇଲ୍ କୁ ନବଲିଖନ କରିପାରିବ ନାହିଁ + ଫାଇଲ୍ ସୃଷ୍ଟି ହୋଇପାରିବ ନାହିଁ + ସର୍ଭର ସହିତ ସଂଯୋଗ ହୋଇପାରିବ ନାହିଁ + ଗନ୍ତବ୍ୟସ୍ଥଳ ଫୋଲ୍ଡର ସୃଷ୍ଟି ହୋଇପାରିବ ନାହିଁ + %s ରେ ଆପଣ ପସନ୍ଦ କରୁଥିବା ଉଦାହରଣଗୁଡିକ ଖୋଜ + ଉଦାହରଣ ଯୋଡନ୍ତୁ + ଉଦାହରଣ ବୈଧ କରିପାରିଲା ନାହିଁ + ଭିଡିଓ ବର୍ଣ୍ଣନା ଏବଂ ଅତିରିକ୍ତ ସୂଚନା ଲୁଚାଇବାକୁ ବନ୍ଦ କରନ୍ତୁ + ଅଡିଓ + ବାହ୍ୟ ଅଡିଓ ପ୍ଲେୟାର ବ୍ୟବହାର କରନ୍ତୁ + ସଦସ୍ୟତା ଯୋଡ଼ନ୍ତୁ + ସଦସ୍ୟତା ଅଦ୍ୟତନ କରିପାରିଲା ନାହିଁ + ଟ୍ୟାବ୍ ବାଛନ୍ତୁ + ଅଡିଓ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର୍ + ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଅଡିଓ ଫାଇଲଗୁଡ଼ିକ ଏଠାରେ ଗଚ୍ଛିତ ଅଛି + ଭିଡିଓ ଫାଇଲ୍ ପାଇଁ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର୍ ବାଛନ୍ତୁ + ଡିଫଲ୍ଟ ରେଜୋଲୁସନ + କୋଡି ସହିତ ଖୋଲନ୍ତୁ + ଦ୍ୱିତୀୟ କ୍ରିୟା ବଟନ୍ + ପୁନରାବୃତ୍ତି କରନ୍ତୁ + ବିଜ୍ଞପ୍ତିକୁ ରଙ୍ଗ କରନ୍ତୁ + ପପ୍ଅପ୍ ର ଶେଷ ଆକାର ଏବଂ ସ୍ଥିତି ମନେରଖ + ଦ୍ରୁତ ନିଷ୍କ୍ରିୟ ସନ୍ଧାନ ବ୍ୟବହାର କରନ୍ତୁ + ମନ୍ତବ୍ୟ ଲୁଚାଇବାକୁ ବନ୍ଦ କରନ୍ତୁ + ଇତିହାସ ଖୋଜ + ସ୍ଥାନୀୟ ଭାବରେ ସନ୍ଧାନ ଜିଜ୍ଞାସା ଗଚ୍ଛିତ କରନ୍ତୁ + \"ଧାଡ଼ିରେ ମିଶାଇବାକୁ ଧରି ରଖନ୍ତୁ\" ଟିପ୍ ଦେଖାନ୍ତୁ + ଅସମର୍ଥିତ URL + ଦ୍ରୁତ-ଅଗ୍ରଗାମୀ / ପାଶ୍ଚାତ ଗାମୀ ସମୟ ଖୋଜ + ମନ୍ତବ୍ୟଗୁଡିକ ଦେଖାନ୍ତୁ + ଡାଉନଲୋଡ୍ କରନ୍ତୁ + ସହିତ ଅଂଶୀଦାର କରନ୍ତୁ + ପରବର୍ତ୍ତୀ ଷ୍ଟ୍ରିମ୍କୁ ଅଟୋ-ଏନକ୍ୟୁ କରନ୍ତୁ + ଅଟୋ-ଏନକ୍ୟୁଇଙ୍ଗ୍ + ଏକ ଧାଡି ସଫା କରିବା ପୂର୍ବରୁ ନିଶ୍ଚିତକରଣ ମାଗନ୍ତୁ + ଗୋଟିଏ ଖେଳାଳୀରୁ ଅନ୍ୟ ଖେଳାଳୀକୁ ପରିବର୍ତ୍ତନ କରିବା ଆପଣଙ୍କ ଧାଡି ବଦଳାଇପାରେ + ସକ୍ରିୟ ପ୍ଲେୟାର କ୍ୟୁ ବଦଳାଯିବ + ଥମ୍ୱନେଲ୍ ଲୋଡ୍ କରନ୍ତୁ + \'ପରବର୍ତ୍ତୀ\' ଏବଂ \'ସମାନ\' ଭିଡିଓଗୁଡିକ ଦେଖାନ୍ତୁ + ବର୍ଣ୍ଣନା ଦେଖାନ୍ତୁ + ପ୍ରତିଛବି କ୍ୟାଚ୍ ପୋଛି ଦିଆଗଲା + ମେଟାଡାଟା କ୍ୟାଚ୍ ପୋଛି ହୋଇଗଲା + ଭଲ୍ୟୁମ୍ ଅଙ୍ଗଭଙ୍ଗୀ ନିୟନ୍ତ୍ରଣ + ପ୍ଲେୟାରର ଉଜ୍ଜ୍ୱଳତାକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଅଙ୍ଗଭଙ୍ଗୀ ବ୍ୟବହାର କରନ୍ତୁ + ପରାମର୍ଶ ଖୋଜ + ସ୍ଥାନୀୟ ସନ୍ଧାନ ପରାମର୍ଶ + ସୁଦୂର ସନ୍ଧାନ ପରାମର୍ଶ + ଦେଖାଯାଇଥିବା ଭିଡିଓ ଗୁଡ଼ିକର ଇତିହାସ + ପୁନଃ ଚଲାନ୍ତୁ + ତାଲିକାରେ ଅବସ୍ଥାନ + ତଥ୍ୟ ସଫା କରନ୍ତୁ + ଦେଖାଯାଇଥିବା ଭିଡିଓଗୁଡିକର ଟ୍ରାକ୍ ରଖନ୍ତୁ + ଖେଳିବା ଆରମ୍ଭ କରନ୍ତୁ + ଫୁଲ ସ୍କ୍ରିନରେ ମୁଖ୍ୟ ପ୍ଲେୟାର ଆରମ୍ଭ କରନ୍ତୁ + ସ୍ଵତଃ ଚଳିତ + URL ଚିହ୍ନି ପାରିଲା ନାହିଁ । ଅନ୍ୟ ଏକ ଆପ୍ ସହିତ ଖୋଲନ୍ତୁ\? + ଡିଫଲ୍ଟ ବିଷୟବସ୍ତୁ ଦେଶ + ଡିଫଲ୍ଟ ବିଷୟବସ୍ତୁ ଭାଷା + PeerTube ଉଦାହରଣ + ଉଦାହରଣ URL ପ୍ରବେଶ କରନ୍ତୁ + କେବଳ HTTPS URL ଗୁଡିକ ସମର୍ଥିତ + ଇନଷ୍ଟାଣ୍ଟ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି + ପ୍ଲେୟାର + ଇତିହାସ ଏବଂ କ୍ୟାଚ୍ + ଦୃଶ୍ୟ + ତ୍ରୁଟି ନିବାରଣ କରନ୍ତୁ + ଅଦ୍ୟତନଗୁଡିକ + ପ୍ଲେବେକ୍ ଲୋଡ୍ ବ୍ୟବଧାନ ଆକାର + ଫାଇଲନାମ ଖାଲି ହୋଇପାରିବ ନାହିଁ + କୋଡି ମିଡିଆ ସେଣ୍ଟର ମାଧ୍ୟମରେ ଏକ ଭିଡିଓ ଚଲାଇବା ପାଇଁ ଏକ ବିକଳ୍ପ ପ୍ରଦର୍ଶନ କରନ୍ତୁ + 16: 9 ରୁ 1: 1 ଆସପେକ୍ଟ ଅନୁପାତରେ ବିଜ୍ଞପ୍ତିରେ ଦେଖାଯାଇଥିବା ଭିଡିଓ ଥମ୍ବନେଲକୁ କ୍ରପ୍ କରନ୍ତୁ + ଏକ ସଂପୃକ୍ତ ଷ୍ଟ୍ରିମ୍ ଯୋଡି ପ୍ଲେବ୍ୟାକ୍ କ୍ୟୁ ଶେଷ କରିବା (ପୁନରାବୃତ୍ତି ନକରିବା) ଜାରି ରଖ + କମ୍ପାକ୍ଟ ନୋଟିଫିକେସନ୍ ରେ ଦେଖାଇବାକୁ ଆପଣ ପ୍ରାୟ ତିନୋଟି କ୍ରିୟା ଚୟନ କରିପାରିବେ! + ଥମ୍ବନେଲରେ ଥିବା ମୁଖ୍ୟ ରଙ୍ଗ ଅନୁଯାୟୀ ଆଣ୍ଡ୍ରଏଡ୍ ବିଜ୍ଞପ୍ତିର ରଙ୍ଗ କଷ୍ଟୋମାଇଜ୍ କରନ୍ତୁ (ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ ଏହା ସମସ୍ତ ଡିଭାଇସରେ ଉପଲବ୍ଧ ନୁହେଁ) + କ୍ୟାଚ୍ ହୋଇଥିବା ମେଟାଡାଟା ପୋଛି ଦିଅ + ମେଟା ସୂଚନା ଦେଖାନ୍ତୁ + ଶେଷ ପ୍ଲେବେକ୍ ସ୍ଥିତିକୁ ପୁନଃ ସ୍ଥାପନ କରନ୍ତୁ + ତାଲିକାରେ ପ୍ଲେବେକ୍ ପୋଜିସନ୍ ସୂଚକ ଦେଖାନ୍ତୁ + ସମସ୍ତ କ୍ୟାଚ୍ ହୋଇଥିବା ୱେବପୃଷ୍ଠା ତଥ୍ୟ ଅପସାରଣ କରନ୍ତୁ + ପ୍ଲେୟାର ଭଲ୍ୟୁମକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଅଙ୍ଗଭଙ୍ଗୀ ବ୍ୟବହାର କରନ୍ତୁ + ସନ୍ଧାନ କରିବା ସମୟରେ ଦେଖାଇବାକୁ ପରାମର୍ଶଗୁଡିକ ବାଛନ୍ତୁ + ବାଧା ପରେ ଖେଳିବା ଜାରି ରଖନ୍ତୁ (ଯଥା ଫୋନକଲ୍) + ଭିଡିଓ \"ବିବରଣୀ:\" ରେ ପୃଷ୍ଠଭୂମି କିମ୍ବା ପପ୍ଅପ୍ ବଟନ୍ ଦବାଇବା ସମୟରେ ଟିପ୍ ଦେଖାନ୍ତୁ + ଆପଣଙ୍କର ପ୍ରିୟ PeerTube ଉଦାହରଣଗୁଡିକ ବାଛନ୍ତୁ + ବ୍ୟବହାର + ଭିଡିଓ ଏବଂ ଅଡିଓ + ମିନି ପ୍ଲେୟାରରେ ଭିଡିଓ ଆରମ୍ଭ କରନ୍ତୁ ନାହିଁ, କିନ୍ତୁ ଅଟୋ ଘୂର୍ଣ୍ଣନ ବନ୍ଦ ହୋଇଗଲେ ସିଧାସଳଖ ଫୁଲ୍ ସ୍କ୍ରିନ୍ ମୋଡ୍ କୁ ଯାଆନ୍ତୁ। ଫୁଲ୍ ସ୍କ୍ରିନ୍ ଛାଡି ଆପଣ ଏପର୍ଯ୍ୟନ୍ତ ମିନି ପ୍ଲେୟାରକୁ ପ୍ରବେଶ କରିପାରିବେ + ଏହା ଉପରେ ଟ୍ୟାପ୍ କରି ନିମ୍ନରେ ପ୍ରତ୍ୟେକ ବିଜ୍ଞପ୍ତି କାର୍ଯ୍ୟ ସଂପାଦନ କରନ୍ତୁ। ଡାହାଣରେ ଥିବା ଚେକ୍ ବକ୍ସ ବ୍ୟବହାର କରି କମ୍ପାକ୍ଟ ବିଜ୍ଞପ୍ତିରେ ଦେଖାଯିବାକୁ ସେମାନଙ୍କ ମଧ୍ୟରୁ ତିନୋଟି ପର୍ଯ୍ୟନ୍ତ ଚୟନ କରନ୍ତୁ + ଥମ୍ବନେଲ ଲୋଡିଂ, ଡାଟା ଏବଂ ମେମୋରୀ ବ୍ୟବହାରକୁ ରୋକିବା ପାଇଁ ବନ୍ଦ କରନ୍ତୁ । ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ଉଭୟ ଇନ-ମେମୋରୀ ଏବଂ ଅନ୍-ଡିସ୍କ ଇମେଜ୍ କ୍ୟାଚ୍ ସଫା କରେ + ଷ୍ଟ୍ରିମ୍ ସୃଷ୍ଟିକର୍ତ୍ତା, ଷ୍ଟ୍ରିମ୍ ବିଷୟବସ୍ତୁ କିମ୍ବା ଏକ ସନ୍ଧାନ ଅନୁରୋଧ ବିଷୟରେ ଅତିରିକ୍ତ ସୂଚନା ସହିତ ମେଟା ସୂଚନା ବାକ୍ସଗୁଡ଼ିକୁ ଲୁଚାଇବାକୁ ବନ୍ଦ କରନ୍ତୁ + ପିଲାମାନଙ୍କ ପାଇଁ ସମ୍ଭବତ content ଅନୁପଯୁକ୍ତ ବିଷୟବସ୍ତୁ ଦେଖାନ୍ତୁ କାରଣ ଏହାର ବୟସ ସୀମା ଅଛି (ଯେପରିକି 18+) + ଏହି ଭିଡିଓ ବୟସ-ସୀମିତ ଅଟେ । +\nବୟସ-ସୀମିତ ଭିଡିଓ ସହିତ ନୂତନ ୟୁଟ୍ୟୁବ୍ ନୀତି ହେତୁ, NewPipe ଏହାର କୌଣସି ଭିଡିଓ ଷ୍ଟ୍ରିମ୍ ପ୍ରବେଶ କରିପାରିବ ନାହିଁ ଏବଂ ଏହିପରି ଏହାକୁ ଚଲାଇବାରେ ଅସମର୍ଥ । + NewPipe ହେଉଛି copyleft libre ସଫ୍ଟୱେର୍: ଆପଣ ନିଜ ଇଚ୍ଛାରେ ଏହାକୁ ବ୍ୟବହାର, ଅଧ୍ୟୟନ, ଅଂଶୀଦାର ଏବଂ ଉନ୍ନତି କରିପାରିବେ । ନିର୍ଦ୍ଦିଷ୍ଟ ଭାବରେ ଆପଣ ମାଗଣା ସଫ୍ଟୱେର୍ ଫାଉଣ୍ଡେସନ୍ ଦ୍ଵାରା ପ୍ରକାଶିତ GNU ଜେନେରାଲ୍ ପବ୍ଲିକ୍ ଲାଇସେନ୍ସର ସର୍ତ୍ତାବଳୀ ଅନୁଯାୟୀ ଏହାକୁ ପୁନ istr ବଣ୍ଟନ ଏବଂ / କିମ୍ବା ରୂପାନ୍ତର କରିପାରିବେ, ଲାଇସେନ୍ସର ସଂସ୍କରଣ 3 କିମ୍ବା ପରବର୍ତ୍ତୀ ସଂସ୍କରଣରେ (ଆପଣଙ୍କ ବିକଳ୍ପରେ) । + \"ପ୍ଲେୟାର୍ କ୍ରାସ୍\" ଦେଖାନ୍ତୁ + ଗୁଗୁଲ୍ ନିଆଯିବା ଠାରୁ ୟୁଟ୍ୟୁବ୍ ସଦସ୍ୟତା ଆମଦାନୀ କରନ୍ତୁ: +\n +\n1. ଏହି URL କୁ ଯାଆନ୍ତୁ: %1$s । +\n2. ପଚରାଗଲେ ଲଗ୍ ଇନ୍ କରନ୍ତୁ । +\n3. \"ସମସ୍ତ ତଥ୍ୟ ଅନ୍ତର୍ଭୂକ୍ତ\" ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ, ତାପରେ \"ସମସ୍ତ ଚୟନ କରନ୍ତୁ\" ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ, ତାପରେ କେବଳ \"ସଦସ୍ୟତା\" ଚୟନ କରନ୍ତୁ ଏବଂ \"ଓକେ\" କ୍ଲିକ୍ କରନ୍ତୁ । +\n4. \"ପରବର୍ତ୍ତୀ ପଦକ୍ଷେପ\" ଏବଂ ତାପରେ \"ରପ୍ତାନି ସୃଷ୍ଟି\" ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ । +\n5. ଏହା ଦେଖାଯିବା ପରେ \"ଡାଉନଲୋଡ୍\" ବଟନ୍ ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ । +\n6. ନିମ୍ନରେ IMPORT FILE ଉପରେ କ୍ଲିକ୍ କରନ୍ତୁ ଏବଂ ଡାଉନଲୋଡ୍ ହୋଇଥିବା .zip ଫାଇଲ୍ ଚୟନ କରନ୍ତୁ । +\n7. [ଯଦି .zip ଆମଦାନି ବିଫଳ] + ମୋବାଇଲ୍ ଡାଟା ସୁଇଚ୍ କରିବା ସମୟରେ ଉପଯୋଗୀ, ଯଦିଓ କିଛି ଡାଉନଲୋଡ୍ ସ୍ଥଗିତ ହୋଇପାରିବ ନାହିଁ + କେତେକ ସେବାରେ ଉପଲବ୍ଧ, ଏହା ସାଧାରଣତଃ ଅଧିକ ତୀବ୍ର ଅଟେ କିନ୍ତୁ ଏକ ସୀମିତ ପରିମାଣର ଆଇଟମ୍ ଏବଂ ପ୍ରାୟତଃ ଅସମ୍ପୂର୍ଣ୍ଣ ସୂଚନା ଫେରସ୍ତ କରିପାରେ (ଯଥା କୌଣସି ଅବଧି, ଆଇଟମ୍ ପ୍ରକାର, ଜୀବନ୍ତ ସ୍ଥିତି ନାହିଁ) + ଆପଣ ଭାବୁଛନ୍ତି କି ଫିଡ୍ ଲୋଡିଂ ବହୁତ ଧୀର ଅଟେ\? ଯଦି ଏହା ହୁଏ, ଦ୍ରୁତ ଲୋଡିଂ ସକ୍ଷମ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ (ଆପଣ ଏହାକୁ ସେଟିଂସମୂହରେ କିମ୍ବା ତଳେ ଥିବା ବଟନ୍ ଦବାଇ ଏହାକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ) । +\n +\nNewPipe ଦୁଇଟି ଫିଡ୍ ଲୋଡିଂ କ strateg ଶଳ ପ୍ରଦାନ କରେ: +\n• ସମଗ୍ର ସବସ୍କ୍ରିପସନ୍ ଚ୍ୟାନେଲ୍ ଆଣିବା, ଯାହା ଧୀର କିନ୍ତୁ ସଂପୂର୍ଣ୍ଣ । +\nଏକ ଉତ୍ସର୍ଗୀକୃତ ସେବା ଶେଷ ପଏଣ୍ଟ ବ୍ୟବହାର କରିବା, ଯାହା ଦ୍ରୁତ କିନ୍ତୁ ସାଧାରଣତଃ ସଂପୂର୍ଣ୍ଣ ନୁହେଁ । +\n +\nଉଭୟଙ୍କ ମଧ୍ୟରେ ପାର୍ଥକ୍ୟ ହେଉଛି ଦ୍ରୁତତମରେ ସାଧାରଣତ some କିଛି ସୂଚନା ଅଭାବ ଥାଏ, ଯେପରିକି ଆଇଟମ୍ ର ଅବଧି କିମ୍ବା ପ୍ରକାର (ଲାଇଭ୍ ଭିଡିଓ ଏବଂ ସାଧାରଣ ଭିଡିଓ ମଧ୍ୟରେ ପାର୍ଥକ୍ୟ କରିପାରିବ ନାହିଁ) ଏବଂ ଏହା କମ୍ ଆଇଟମ୍ ଫେରସ୍ତ କରିପାରେ । +\n +\nୟୁଟ୍ୟୁବ୍ ହେଉଛି ଏକ ସେବାର ଏକ ଉଦାହରଣ ଯାହା ଏହାର RSS ଫିଡ୍ ସହିତ ଏହି ଦ୍ରୁତ ପଦ୍ଧତି ପ୍ରଦାନ କରେ । +\n +\nତେଣୁ ଆପଣ ଯାହା ପସନ୍ଦ କରନ୍ତି ତାହା ପସନ୍ଦ ଫୁଟିବ: ଗତି କିମ୍ବା ସଠିକ୍ ସୂଚନା । + ଏହି କାର୍ଯ୍ୟ ପାଇଁ କୌଣସି ଉପଯୁକ୍ତ ଫାଇଲ ପରିଚାଳକ ମିଳିଲା ନାହିଁ । +\nଦୟାକରି ଏକ ଫାଇଲ୍ ମ୍ୟାନେଜର୍ ସଂସ୍ଥାପନ କରନ୍ତୁ କିମ୍ବା ଡାଉନଲୋଡ୍ ସେଟିଂସମୂହରେ \'%s\' ଅକ୍ଷମ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ + ଏହି ଭିଡିଓ କେବଳ ୟୁଟ୍ୟୁବ୍ ମ୍ୟୁଜିକ୍ ପ୍ରିମିୟମ୍ ସଦସ୍ୟଙ୍କ ପାଇଁ ଉପଲବ୍ଧ, ତେଣୁ ଏହାକୁ ନ୍ୟୁପାଇପ୍ ଦ୍ୱାରା ଷ୍ଟ୍ରିମ୍ କିମ୍ବା ଡାଉନଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ । + ଲୋଡ୍ ବ୍ୟବଧାନ ଆକାର ପରିବର୍ତ୍ତନ କରନ୍ତୁ (currently %s)। ଏକ କମ୍ ମୂଲ୍ୟ ପ୍ରାରମ୍ଭିକ ଭିଡିଓ ଲୋଡିଂକୁ ତ୍ୱରାନ୍ୱିତ କରିପାରେ । ପରିବର୍ତ୍ତନଗୁଡିକ ଏକ ପ୍ଲେୟାର ପୁନଃଆରମ୍ଭ ଆବଶ୍ୟକ କରେ + ଏହି କାର୍ଯ୍ୟ ପାଇଁ କୌଣସି ଉପଯୁକ୍ତ ଫାଇଲ ପରିଚାଳକ ମିଳିଲା ନାହିଁ । +\nଦୟାକରି ଏକ ଷ୍ଟୋରେଜ୍ ଆକ୍ସେସ୍ ଫ୍ରେମୱାର୍କ ସୁସଙ୍ଗତ ଫାଇଲ୍ ମ୍ୟାନେଜର୍ ସଂସ୍ଥାପନ କରନ୍ତୁ + ଅନ୍ତତଃ ପକ୍ଷେ ଆପଣଙ୍କ ଦେଶରେ ଏହା ଏକ ସାଉଣ୍ଡକ୍ଲାଉଡ୍ ଗୋ + ଟ୍ରାକ୍, ତେଣୁ ଏହାକୁ ନ୍ୟୁପାଇପ୍ ଦ୍ୱାରା ଷ୍ଟ୍ରିମ୍ କିମ୍ବା ଡାଉନଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ । + ଆପଣ ବର୍ତ୍ତମାନ ବର୍ଣ୍ଣନା ଭିତରେ ଟେକ୍ସଟ୍ ଚୟନ କରିପାରିବେ । ଧ୍ୟାନ ଦିଅନ୍ତୁ ଯେ ପୃଷ୍ଠାଟି ଫ୍ଲିକର ହୋଇପାରେ ଏବଂ ଚୟନ ମୋଡରେ ଥିବାବେଳେ ଲିଙ୍କଗୁଡିକ କ୍ଲିକ୍ ହୋଇନପାରେ । + ଏହି ବିଷୟବସ୍ତୁ କେବଳ ଉପଭୋକ୍ତାମାନଙ୍କ ପାଇଁ ଉପଲବ୍ଧ, ଯେଉଁମାନେ ଦେୟ ଦେଇଛନ୍ତି, ତେଣୁ ଏହାକୁ NewPipe ଦ୍ୱାରା ଷ୍ଟ୍ରିମିଟ୍ କିମ୍ବା ଡାଉନଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ । + ୟୁରୋପୀୟ ଜେନେରାଲ୍ ଡାଟା ପ୍ରୋଟେକସନ୍ ରେଗୁଲେସନ୍ (GDPR) କୁ ପାଳନ କରିବାକୁ, ଆମେ ଏଠାରେ NewPipe ର ଗୋପନୀୟତା ନୀତି ପ୍ରତି ଆପଣଙ୍କ ଦୃଷ୍ଟି ଆକର୍ଷଣ କରୁ । ଦୟାକରି ଏହାକୁ ଭଲ ଭାବରେ ପଢ଼ନ୍ତୁ । +\nଆମକୁ ବଗ୍ ରିପୋର୍ଟ ପଠାଇବାକୁ ତୁମେ ଏହାକୁ ଗ୍ରହଣ କରିବା ଜରୁରୀ । + ସଦସ୍ୟତା ଗୁଡ଼ିକ + କିଛି ରେଜୋଲୁସନରେ ଅଡିଓ ଅପସାରଣ କରେ + ଉଚ୍ଚ ରେଜୋଲୁସନ ଦେଖାନ୍ତୁ + \"କୋଡି ସହିତ ଖୋଲନ୍ତୁ\" ବିକଳ୍ପ ଦେଖାନ୍ତୁ + ପ୍ଲେ ଲିଷ୍ଟରେ ଯୋଡାଯିବା ପୂର୍ବରୁ ଏବଂ ପରେ ଦେଖାଯାଇଥିବା ଭିଡିଓଗୁଡିକ ଅପସାରିତ ହେବ । +\nତମେ ନିଶ୍ଚିତ କି\? ଏହାକୁ ପୂର୍ବବତ୍ କରାଯାଇପାରିବ ନାହିଁ! + ପ୍ଲେୟାରକୁ କ୍ରାସ୍ କରନ୍ତୁ + ଡିଫଲ୍ଟ ଅଡିଓ ଫର୍ମାଟ୍ + ଅକ୍ଷୟ ସନ୍ଧାନ ପ୍ଲେୟାରକୁ ହ୍ରାସ ହୋଇଥିବା ସଠିକତା ସହିତ ଶୀଘ୍ର ପଦବୀ ଖୋଜିବାକୁ ଅନୁମତି ଦିଏ । 5, 15 କିମ୍ବା 25 ସେକେଣ୍ଡ ଖୋଜିବା ଏହା ସହିତ କାମ କରେ ନାହିଁ + %s ପାଇଁ ଫଳାଫଳ ଦେଖାଉଛି + ବାହ୍ୟ ଭିଡିଓ ପ୍ଲେୟାର ବ୍ୟବହାର କରନ୍ତୁ + ସଦସ୍ୟତା + ସଦସ୍ୟତା ରଦ୍ଦ କରନ୍ତୁ + ଚ୍ୟାନେଲ ସଦସ୍ୟତା ରଦ୍ଦ ହେଲା + ସଦସ୍ୟତା ପରିବର୍ତ୍ତନ କରିପାରିଲା ନାହିଁ + ସୂଚନା ଦେଖାନ୍ତୁ + ମିଶାଅ + ଡିଫଲ୍ଟ ପପ୍ଅପ୍ ରେଜୋଲୁସନ + କେବଳ କିଛି ଡିଭାଇସ୍ 2K / 4K ଭିଡିଓ ଚଲାଇ ପାରିବେ + ନିଖୋଜ କୋର ଆପ୍ ସଂସ୍ଥାପନ କରିବେ\? + ଥମ୍ୱନେଲ କୁ 1:1 ଅନୁପାତରେ କ୍ରୋପ୍ କରନ୍ତୁ + ପ୍ରଥମ କ୍ରିୟା ବଟନ୍ + ତୃତୀୟ କ୍ରିୟା ବଟନ୍ + ଚତୁର୍ଥ କ୍ରିୟା ବଟନ୍ + ପଞ୍ଚମ କ୍ରିୟା ବଟନ୍ + ଶଫଲ୍ + ବଫରିଂ + କିଛି ନୁହେଁ + ଡିଫଲ୍ଟ ଭିଡିଓ ଫର୍ମାଟ୍ + ପପ୍ଅପ୍ ଗୁଣଗୁଡିକ ମନେରଖ + ଉଜ୍ଜ୍ୱଳତା ଅଙ୍ଗଭଙ୍ଗୀ ନିୟନ୍ତ୍ରଣ + ପ୍ରକ୍ରିୟାକରଣ… କିଛି ସମୟ ନେଇପାରେ + ପ୍ଲେୟାର କ୍ୟାପସନ୍ ଟେକ୍ସଟ୍ ସ୍କେଲ୍ ଏବଂ ପୃଷ୍ଠଭୂମି ଶୈଳୀକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ । କାର୍ଯ୍ୟକାରୀ ହେବାକୁ ଆପ୍ ପୁନଃଆରମ୍ଭ ଆବଶ୍ୟକ କରେ + LeakCanary ଉପଲବ୍ଧ ନାହିଁ + ଏନକ୍ୟୁ + ଏହି ଡାଉନଲୋଡ୍ ପୁନରୁଦ୍ଧାର କରିପାରିବ ନାହିଁ + ଉଭୟ ଲକ୍ ସ୍କ୍ରିନ୍ ପୃଷ୍ଠଭୂମି ଏବଂ ବିଜ୍ଞପ୍ତି ପାଇଁ ଥମ୍ବନେଲ୍ ବ୍ୟବହାର କରନ୍ତୁ + ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଅଟେ, ତେଣୁ ଏହାକୁ NewPipe ଦ୍ୱାରା ଷ୍ଟ୍ରିମିଟ୍ କିମ୍ବା ଡାଉନଲୋଡ୍ କରାଯାଇପାରିବ ନାହିଁ । + ପରବର୍ତ୍ତୀ ରେ ଏନକ୍ୟୁ + ପରବର୍ତ୍ତି ରେ ପ୍ଲେ ହେବ + ବୁକମାର୍କ ପ୍ଲେଲିଷ୍ଟ + ଡାଉନଲୋଡ୍ ଆରମ୍ଭ କରନ୍ତୁ + ମ୍ୟୁଟ କରନ୍ତୁ + ପ୍ଲେୟାର ବିଜ୍ଞପ୍ତି + ସାମ୍ପ୍ରତିକ ଖେଳୁଥିବା ଷ୍ଟ୍ରିମ୍ ବିଜ୍ଞପ୍ତିକୁ ବିନ୍ୟାସ କରନ୍ତୁ + ପପ୍ଅପ୍ ମୋଡ୍ ରେ ଖେଳିବା + ବୟସ ସୀମିତ ବିଷୟବସ୍ତୁ ଦେଖାନ୍ତୁ + ୟୁଟ୍ୟୁବ୍ ର \"ପ୍ରତିବନ୍ଧିତ ମୋଡ୍\" ଟର୍ନ୍ ଅନ୍ କରନ୍ତୁ + ଡାଉନଲୋଡ୍ + ଡାଉନଲୋଡ୍ + ଚ୍ୟାନେଲଗୁଡିକ + ପ୍ଲେଲିଷ୍ଟ ଗୁଡିକ + ଭିଡିଓ ଗୁଡିକ + ଟ୍ରାକ ଗୁଡିକ + ଉପଯୋଗକର୍ତ୍ତାଗଣ + ସଫା + ସର୍ବୋତ୍ତମ ରେଜୋଲୁସନ + ପୂର୍ବବତ୍ କରନ୍ତୁ + ସମସ୍ତ ପ୍ଲେ କରନ୍ତୁ + ସର୍ବଦା + ଫାଇଲ୍ + ବିଜ୍ଞପ୍ତି ଗୁଡିକ + ଆପ୍ ଅଦ୍ୟତନ ବିଜ୍ଞପ୍ତି + ନୂତନ NewPipe ସଂସ୍କରଣ ପାଇଁ ବିଜ୍ଞପ୍ତି + ଭିଡିଓ ହ୍ୟାସ୍ ବିଜ୍ଞପ୍ତି + ଭିଡିଓ ହ୍ୟାସିଂ ପ୍ରଗତି ପାଇଁ ବିଜ୍ଞପ୍ତି + ନୂତନ ଷ୍ଟ୍ରିମ୍ ଗୁଡ଼ିକ + ସଦସ୍ୟତା ପାଇଁ ନୂତନ ଷ୍ଟ୍ରିମ୍ ବିଷୟରେ ବିଜ୍ଞପ୍ତି + ତ୍ରୁଟି ରିପୋର୍ଟ ବିଜ୍ଞପ୍ତି + ତ୍ରୁଟି ରିପୋର୍ଟ କରିବାକୁ ବିଜ୍ଞପ୍ତି + [ଅଜ୍ଞାତ] + ପୃଷ୍ଠଭୂମିକୁ ସୁଇଚ୍ କରନ୍ତୁ + ପପ୍ଅପ୍ କୁ ସୁଇଚ୍ କରନ୍ତୁ + ମେନ୍ କୁ ସୁଇଚ୍ କର + ଡାଟାବେସ୍ ରପ୍ତାନି କରନ୍ତୁ + ରପ୍ତାନି ଇତିହାସ, ସଦସ୍ୟତା, ପ୍ଲେଲିଷ୍ଟ ଏବଂ ସେଟିଂସମୂହ + ସମ୍ପୂର୍ଣ୍ଣ ଘଣ୍ଟା ଇତିହାସ ବିଲୋପ କରିବେ କି\? + ପ୍ଲେବେକ୍ ପୋଜିସନ୍ ଡିଲିଟ୍ କରନ୍ତୁ + ସମସ୍ତ ପ୍ଲେକ୍ ପୋଜିସନ୍ ଡିଲିଟ୍ କରେ + ସନ୍ଧାନ ଇତିହାସ ସଫା କରନ୍ତୁ + ସମଗ୍ର ସନ୍ଧାନ ଇତିହାସ ବିଲୋପ କରିବେ କି\? + ବାହ୍ୟ ସଂରକ୍ଷଣ ଉପଲବ୍ଧ ନାହିଁ + ନେଟୱର୍କ ତ୍ରୁଟି + ସମସ୍ତ ଥମ୍ୱନେଲ୍ ଲୋଡ୍ କରିପାରିଲା ନାହିଁ + ୱେବସାଇଟ୍ ପାର୍ସ କରିପାରିଲା ନାହିଁ + ବିଷୟବସ୍ତୁ ଉପଲବ୍ଧ ନାହିଁ + ଆପ୍ / UI କ୍ରାସ୍ ହୋଇଛି + ପ୍ଲେୟାର ତ୍ରୁଟିରୁ ପୁନରୁଦ୍ଧାର + କୌଣସି ଭିଡିଓ ଷ୍ଟ୍ରିମ୍ ମିଳିଲା ନାହିଁ + କୌଣସି ଅଡିଓ ଷ୍ଟ୍ରିମ୍ ମିଳିଲା ନାହିଁ + ଏକ ତ୍ରୁଟି ଘଟିଲା:%1$s + ଡାଉନଲୋଡ୍ କରିବାକୁ କୌଣସି ଷ୍ଟ୍ରିମ୍ ଉପଲବ୍ଧ ନାହିଁ + ଆପଣ ଡିଫଲ୍ଟ ପୁନଃସ୍ଥାପନ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + NewPipe ଏକ ତ୍ରୁଟିର ସମ୍ମୁଖୀନ ହେଲା, ରିପୋର୍ଟ କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ + ଦୁଃଖିତ, ତାହା ହୋଇ ନଥାନ୍ତା । + ଇ-ମେଲ ମାଧ୍ୟମରେ ଏହି ତ୍ରୁଟି ରିପୋର୍ଟ କରନ୍ତୁ + GitHub ରେ ରିପୋର୍ଟ କରନ୍ତୁ + ଭିଡିଓ + ଅଡିଓ + ଗ୍ରାହକ ଗଣନା ଉପଲବ୍ଧ ନାହିଁ + କୌଣସି ଦର୍ଶନ ନାହିଁ + କେହି ଦେଖୁ ନାହାଁନ୍ତି + କେହି ଶୁଣୁ ନାହାଁନ୍ତି + କୌଣସି ଭିଡିଓ ନାହିଁ + 100+ ଭିଡିଓ + ∞ ଭିଡିଓ ଗୁଡିକ + ଆରମ୍ଭ + ବିଲୋପ କରନ୍ତୁ + ଚେକ୍ସମ୍ + ବରଖାସ୍ତ + ଦସ୍ତାବିଜ୍ ର ନାମ + ଥ୍ରେଡ୍ + ତ୍ରୁଟି + ନୂତନ ପାଇପ୍ ଡାଉନଲୋଡ୍ କରୁଛି + ହ୍ୟାସ୍ ଗଣନା + କ୍ଲିପବୋର୍ଡରେ କପି କରାଯାଇଛି + 1 ଆଇଟମ୍ ଡିଲିଟ୍ ହୋଇଛି । + reCAPTCHA ଆହ୍ୱାନ + ସମାପ୍ତ + ଡାଉନଲୋଡ୍ କରନ୍ତୁ + ଅବୈଧ ବର୍ଣ୍ଣଗୁଡିକ ଏହି ମୂଲ୍ୟ ସହିତ ବଦଳାଯାଏ + ପ୍ରତିସ୍ଥାପନ ବର୍ଣ୍ଣ + ଅଧିକାଂଶ ବିଶେଷ ବର୍ଣ୍ଣ + NewPipe ବିଷୟରେ + ତୃତୀୟ-ପକ୍ଷ ଲାଇସେନ୍ସ + ଲାଇସେନ୍ସ ଗୁଡ଼ିକ + ଯୋଗଦାନ କରନ୍ତୁ + GitHub ରେ ଦେଖନ୍ତୁ + ଦାନ କରନ୍ତୁ + ସ୍ଵେଚ୍ଛାସେବୀ ସେମାନଙ୍କର ସର୍ବୋତ୍ତମ ସମୟ ଆପଣଙ୍କୁ ସର୍ବୋତ୍ତମ ଉପଭୋକ୍ତା ଅଭିଜ୍ଞତା ଆଣିବା ଦ୍ୱାରା ନୂତନ ପାଇପ୍ ବିକଶିତ କରନ୍ତି । ଡେଭଲପର୍ମାନଙ୍କୁ ଏକ କପ୍ କଫି ଉପଭୋଗ କରୁଥିବାବେଳେ NewPipe କୁ ଆହୁରି ଉନ୍ନତ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ ଫେରନ୍ତୁ । + NewPipe ର ଗୋପନୀୟତା ନୀତି + ଗୋପନୀୟତା ନୀତି ପଢ଼ନ୍ତୁ + NewPipe ର ଲାଇସେନ୍ସ + ଲାଇସେନ୍ସ ପଢ଼ନ୍ତୁ + ଶେଷ ଥର ପ୍ଲେ ହୋଇଛି + ଖାଲି ପୃଷ୍ଠା + ଚ୍ୟାନେଲ୍ ପୃଷ୍ଠା + କିଓସ୍କ ପୃଷ୍ଠା + ଡିଫଲ୍ଟ କିଓସ୍କ + ଶ୍ରେଷ୍ଠ 50 + ନୂତନ ଏବଂ ଗରମ + ସ୍ଥାନୀୟ + ସମ୍ପ୍ରତି ଯୋଡା ଯାଇଛି + ସର୍ବଦା ପଚାର + ଅନୁରୋଧ କରାଯାଇଥିବା ବିଷୟବସ୍ତୁକୁ ଧାରଣ କରୁଛି + ପୃଷ୍ଠଭୂମି ପ୍ଲେୟାର + ପପ୍ଅପ୍ ପ୍ଲେୟାର୍ + ନୂତନ ପ୍ଲେଲିଷ୍ଟ + ଅନ୍ମୁଟ୍ କରନ୍ତୁ + ଏହି ପ୍ଲେଲିଷ୍ଟ ବିଲୋପ କରିବେ କି\? + କୌଣସି କ୍ୟାପସନ୍ ନାହିଁ + ଫିଟ୍ + ମେମୋରୀ ଲିକ୍ ମନିଟରିଂ ହିପ୍ ଡମ୍ପିଂ କରିବା ସମୟରେ ଆପ୍ ପ୍ରତିକ୍ରିୟାଶୀଳ ହୋଇପାରେ + ସେବାଗୁଡିକରୁ ମୂଳ ଲେଖା ଷ୍ଟ୍ରିମ୍ ଆଇଟମ୍ ଗୁଡିକରେ ଦୃଶ୍ୟମାନ ହେବ + ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ + ଯଦି ଆପଣ ଏକ କଳା ପରଦା ଅନୁଭବ କରନ୍ତି କିମ୍ବା ଭିଡିଓ ପ୍ଲେବେକ୍ ଉପରେ ଝୁଣ୍ଟି ପଡ଼ନ୍ତି ତେବେ ମିଡିଆ ଟନେଲିଂକୁ ଅକ୍ଷମ କରନ୍ତୁ + ଚିତ୍ରଗୁଡ଼ିକର ଉପରେ ପିକାସୋ ରଙ୍ଗୀନ ଫିତା ଦେଖାନ୍ତୁ: ସେମାନଙ୍କର ଉତ୍ସକୁ ସୂଚାଇଥାଏ: ନେଟୱାର୍କ ପାଇଁ ନାଲି, ଡିସ୍କ ପାଇଁ ନୀଳ ଏବଂ ସ୍ମୃତି ପାଇଁ ସବୁଜ + ଆମଦାନି କରନ୍ତୁ + ଠାରୁ ଆମଦାନୀ କରନ୍ତୁ + ଆମଦାନି… + ରପ୍ତାନି… + ଫାଇଲ୍ ଆମଦାନୀ କରନ୍ତୁ + ପୂର୍ବ ରପ୍ତାନି + ମନେରଖନ୍ତୁ ଏହି ଅପରେସନ୍ ନେଟୱାର୍କ ମହଙ୍ଗା ହୋଇପାରେ । +\n +\nଆପଣ ଜାରି ରଖିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ବାରମ୍ବାର ଯାଞ୍ଚ କରୁଛି + ନୂତନ ଷ୍ଟ୍ରିମ୍ ବିଜ୍ଞପ୍ତିଗୁଡିକ + ଆବଶ୍ୟକ ନେଟୱର୍କ ସଂଯୋଗ + ସଦସ୍ୟତା ଠାରୁ ନୂତନ ଷ୍ଟ୍ରିମ୍ ବିଷୟରେ ସୂଚିତ କର + ଯେକୌଣସି ନେଟୱାର୍କ + ଅଦ୍ୟତନ ଗୁଡିକ + ଏକ ନୂତନ ସଂସ୍କରଣ ଉପଲବ୍ଧ ହେଲେ ଆପ୍ ଅପଡେଟ୍ କୁ ତୁରନ୍ତ ଏକ ବିଜ୍ଞପ୍ତି ଦେଖାନ୍ତୁ + କଦାପି ନୁହେଁ + ଭ୍ୟୁ ମୋଡ୍ ତାଲିକା କର + ଗ୍ରୀଡ୍ + ସ୍ଵତଃ + ବିରାମ ଅଛି + + ଡାଉନଲୋଡ୍ ସମାପ୍ତ ହୋଇଛି + %s ଟି ଡାଉନଲୋଡ୍ ସମାପ୍ତ ହୋଇଛି + + ଅନନ୍ୟ ନାମ ସୃଷ୍ଟି କରନ୍ତୁ + ଏହି ନାମ ସହିତ ଏକ ଡାଉନଲୋଡ୍ ଚାଲିଛି + ଏହି ନାମ ସହିତ ଏକ ବିଚାରାଧୀନ ଡାଉନଲୋଡ୍ ଅଛି + ତ୍ରୁଟି ଦେଖାନ୍ତୁ + ସର୍ଭର ଡାଟା ପଠାଏ ନାହିଁ + ସର୍ଭର ମଲ୍ଟି-ଥ୍ରେଡେଡ୍ ଡାଉନଲୋଡ୍ ଗ୍ରହଣ କରେ ନାହିଁ, @string/msg_threads = 1 ସହିତ ପୁନଃଚେଷ୍ଟା କର + ମିଳିଲା ନାହିଁ + ପ୍ରଗତି ହଜିଗଲା, କାରଣ ଫାଇଲ୍ ଡିଲିଟ୍ ହେଲା + ପରବର୍ତ୍ତୀ ପ୍ରକ୍ରିୟାକରଣ ବିଫଳ ହେଲା + ଫାଇଲରେ କାମ କରିବାବେଳେ ନ୍ୟୁ ପାଇପ୍ ବନ୍ଦ ହୋଇଯାଇଥିଲା + ଡିଭାଇସରେ କୌଣସି ସ୍ଥାନ ବାକି ନାହିଁ + ଡିସ୍କରୁ ସମସ୍ତ ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଫାଇଲଗୁଡ଼ିକୁ ଲିଭାନ୍ତୁ\? + ବନ୍ଦ କର + ସର୍ବାଧିକ ପୁନଃଚେଷ୍ଟା + ମିଟର ନେଟୱାର୍କରେ ବାଧା + ବନ୍ଦ କର + ଡାଉନଲୋଡ୍ ବିରତି କରନ୍ତୁ + କେଉଁଠାରେ ଡାଉନଲୋଡ୍ କରିବେ ପଚାରନ୍ତୁ + \'ଷ୍ଟୋରେଜ୍ ଆକ୍ସେସ୍ ଫ୍ରେମୱାର୍କ\' ଏକ ବାହ୍ୟ SD କାର୍ଡକୁ ଡାଉନଲୋଡ୍ କରିବାକୁ ଅନୁମତି ଦିଏ + ଆଣ୍ଡ୍ରଏଡ୍ 10 ରୁ କେବଳ \'ଷ୍ଟୋରେଜ୍ ଆକ୍ସେସ୍ ଫ୍ରେମୱାର୍କ\' ସମର୍ଥିତ + ଏକ ଉଦାହରଣ ବାଛନ୍ତୁ + ExoPlayer ପ୍ରତିବନ୍ଧକ ହେତୁ ସନ୍ଧାନ ସମୟସୀମା %d ସେକେଣ୍ଡରେ ସେଟ୍ ହୋଇଥିଲା + ଆପଣ ଏହି ଗୋଷ୍ଠୀ ବିଲୋପ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + କେବଳ ଅଣସଂଗଠିତ ସଦସ୍ୟତା ଦେଖାନ୍ତୁ + ଫିଡ୍ + ଫିଡ୍ ଅପଡେଟ୍ ସୀମା + ସର୍ବଦା ଅଦ୍ୟତନ କରନ୍ତୁ + ଦ୍ରୁତ ମୋଡ୍ ଅକ୍ଷମ କରନ୍ତୁ + ପ୍ଲେଲିଷ୍ଟ ପୃଷ୍ଠା + ଥମ୍ୱନେଲ୍ ଦେଖାନ୍ତୁ + ଆପଣଙ୍କ ଡିଭାଇସରେ କୌଣସି ଆପ୍ ଏହାକୁ ଖୋଲିପାରିବ ନାହିଁ + ଏହି ବିଷୟବସ୍ତୁ ଆପଣଙ୍କ ଦେଶରେ ଉପଲବ୍ଧ ନୁହେଁ । + ବର୍ଣ୍ଣନାରେ ପାଠ ବାଛିବା ସକ୍ଷମ କରନ୍ତୁ + ବର୍ଗ + ବିଜ୍ଞପ୍ତି ଗୁଡିକ ଅକ୍ଷମ ହୋଇଛି + ସମସ୍ତ ଟୋଗଲ୍ କରନ୍ତୁ + ଅକ୍ଷମ + ଡାଉନଲୋଡ୍ ମେନୁ ସେଟ୍ ଅପ୍ କରିପାରିଲା ନାହିଁ + ଟ୍ରେଣ୍ଡିଂ + ସ୍ଵତଃସୃଷ୍ଟ + ବିଷୟବସ୍ତୁ + ଡାଉନଲୋଡ୍ ଧାଡି ସୀମିତ କରନ୍ତୁ + ଅଦ୍ୟତନ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ + ନୂତନ ସଂସ୍କରଣଗୁଡ଼ିକ ପାଇଁ ମାନୁଆଲ ଯାଞ୍ଚ କରନ୍ତୁ + ବିଚାରାଧୀନ ଅଛି + ଦେଖାଯାଇଥିବା ଭିଡିଓଗୁଡିକ ଅପସାରଣ କରିବେ କି\? + ବର୍ଣ୍ଣନାରେ ପାଠ ବାଛିବା ଅକ୍ଷମ କରନ୍ତୁ + ଏକ ସୁରକ୍ଷିତ ସଂଯୋଗ ସ୍ଥାପନ କରିପାରିଲା ନାହିଁ + ଟୋଗଲ୍ ସେବା, ବର୍ତ୍ତମାନ ମନୋନୀତ: + ଫେରସ୍ତ କର + ଓଭର୍ ରାଇଟ୍ କରନ୍ତୁ + ଥମ୍ବନେଲ୍ URL + ହୋଷ୍ଟ + ଜନସାଧାରଣ + ତାଲିକାଭୁକ୍ତ ନୁହେଁ + ବ୍ୟକ୍ତିଗତ + ମନ୍ତବ୍ୟଗୁଡିକ ଅକ୍ଷମ ହୋଇଛି + ଦୟାକରି ସେଟିଂସମୂହରେ ଏକ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର୍ ବ୍ୟାଖ୍ୟା କରନ୍ତୁ + ଅଧ୍ୟାୟ ଗୁଡ଼ିକ + ସିଧାପ୍ରସରଣ + ପୃଷ୍ଠଭୂମିରେ ଖେଳିବା + ଦୁଃଖିତ, କିଛି ଭୁଲ ହୋଇଗଲା । + ରିପୋର୍ଟ କରନ୍ତୁ + ସୂଚନା: + କଣ ହେଲା: + ବିବରଣୀ: + ଭିଡିଓ ଚଲାନ୍ତୁ, ଅବଧି: + ଅପଲୋଡରର ଅବତାର ଥମ୍ୱବେଲ୍ + ପସନ୍ଦ + ନାପସନ୍ଦ + ମନ୍ତବ୍ୟ ଗୁଡିକ + ବର୍ଣ୍ଣନା + ମିଲିୟନ + ସମାଧାନ + ପ୍ଲେବେକ୍ ସ୍ପିଡ୍ ନିୟନ୍ତ୍ରଣ + ଟେମ୍ପୋ + ଅନ୍ହକ୍ (ବିକୃତିର କାରଣ ହୋଇପାରେ) + ନୀରବତା ସମୟରେ ଦ୍ରୁତ ଅଗ୍ରଗାମୀ + ପଦାଙ୍କ + ପୁନଃସେଟ୍ କରନ୍ତୁ + ଗ୍ରହଣ କରନ୍ତୁ + ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ + କୌଣସି ସୀମା ନାହିଁ + ନିମ୍ନ ଗୁଣ (ଛୋଟ) + ଦେଖାନ୍ତୁ ନାହିଁ + ପ୍ରତ୍ୟେକ ଡାଉନଲୋଡ୍ କୁ କେଉଁଠାରେ ସେଭ୍ କରାଯିବ ତାହା ଆପଣଙ୍କୁ ପଚରାଯିବ + ଖାତା ବନ୍ଦ ହୋଇଗଲା + ଆପଣଙ୍କର ପ୍ରିୟ ରାତିର ଥିମ୍ -%s ଚୟନ କରନ୍ତୁ + ଲାଇସେନ୍ସ + ସମସ୍ତ + ଗୀତ + ଘଟଣା + କଳାକାର ମାନେ + ଏହି ଷ୍ଟ୍ରିମ୍ ଚଲାଇ ପାରିଲା ନାହିଁ + ଫାଇଲ୍ ବିଦ୍ୟମାନ ନାହିଁ କିମ୍ବା ଏହାକୁ ପଢ଼ିବା କିମ୍ବା ଲେଖିବା ପାଇଁ ଅନୁମତି ଅଭାବ + ଏପରି ଫୋଲ୍ଡର ନାହିଁ + ସଞ୍ଚିତ ଟ୍ୟାବଗୁଡିକ ପଢ଼ି ପାରିଲା ନାହିଁ, ତେଣୁ ଡିଫଲ୍ଟଗୁଡିକ ବ୍ୟବହାର କରି + କଣ:\\nRequest:\\nContent Language:\\nContent Country:\\nApp Language:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS ସଂସ୍କରଣ: + କୌଣସି ଫଳାଫଳ ନାହିଁ + ଏଠାରେ କ୍ରିକେଟ୍ ବ୍ୟତୀତ ଆଉ କିଛି ନାହିଁ + ପୁନଃଚେଷ୍ଟା କରନ୍ତୁ + କିଛି କହିବାର ନାହିଁ + ୱେବସାଇଟ୍ + ଅଧିକ ସୂଚନା ଏବଂ ସମ୍ବାଦ ପାଇଁ NewPipe ୱେବସାଇଟ୍ ପରିଦର୍ଶନ କରନ୍ତୁ । + ରପ୍ତାନି ହୋଇଛି + କୌଣସି ବୈଧ ZIP ଫାଇଲ୍ ନାହିଁ + ଆଲୋଚନା + ଅପସାରଣ କରନ୍ତୁ + ଅଡିଓ ସେଟିଂସମୂହ + ଏନକ୍ୟୁ କରିବାକୁ ଧର + ବୁକମାର୍କ ଅପସାରଣ କରନ୍ତୁ + ପ୍ଲେଲିଷ୍ଟ ସୃଷ୍ଟି ହୋଇଛି + %s ଦ୍ୱାରା ସୃଷ୍ଟି + %s ଦ୍ଵାରା + ନୁଆ କଣ + ଶେଷ ଅଦ୍ୟତନ କରନ୍ତୁ: %s + ଲୋଡ୍ ହୋଇନାହିଁ: %d + ଫିଡ୍ ଲୋଡିଂ… + ସଦସ୍ୟତା ଚୟନ କରନ୍ତୁ + କୌଣସି ସଦସ୍ୟତା ଚୟନ ହୋଇନାହିଁ + ଦ୍ରୁତ ମୋଡ୍ ସକ୍ଷମ କରନ୍ତୁ + %s ଏହି କାରଣ ପ୍ରଦାନ କରେ: + ଚ୍ୟାନେଲର ଅବତାର ଥମ୍ୱନେଲ୍ + ବୈଶିଷ୍ଟ୍ୟ + ରେଡିଓ + ExoPlayer ଡିଫଲ୍ଟ + ବୟସ ସୀମା + ଅଜ୍ଞାତ ଗୁଣବତ୍ତା + ଭବିଷ୍ୟତ ଆଇଟମ୍ ଗୁଡିକ ଦେଖାନ୍ତୁ + ଏହି ଭିଡିଓ ବୟସ ସୀମିତ ଅଟେ । +\n +\nଯଦି ଆପଣ ଏହାକୁ ଦେଖିବାକୁ ଚାହୁଁଛନ୍ତି ତେବେ ସେଟିଂସମୂହରେ \"%1$s\" ଟର୍ନ୍ ଅନ୍ କରନ୍ତୁ । + ତ୍ରୁଟି ରିପୋର୍ଟ + ଆଲବମ୍ ଗୁଡ଼ିକ + ବାହ୍ୟ SD କାର୍ଡକୁ ଡାଉନଲୋଡ୍ କରିବା ସମ୍ଭବ ନୁହେଁ ।ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ଅବସ୍ଥାନ ପୁନଃସେଟ୍ କରନ୍ତୁ\? + ଫାଇଲ୍ ଡିଲିଟ୍ ହୋଇଛି + କେବଳ ଥରେ + ନୂତନ ପାଇପ୍ ବିଜ୍ଞପ୍ତି + ଡାଟାବେସ୍ ଆମଦାନୀ କରନ୍ତୁ + NewPipe ର ପ୍ଲେୟାର ପାଇଁ ବିଜ୍ଞପ୍ତି + ReCAPTCHA କୁକିଜ୍ ସଫା କରନ୍ତୁ + reCAPTCHA କୁକିଜ୍ ସଫା ହୋଇଛି + ଯେତେବେଳେ ଆପଣ ଏକ reCAPTCHA ସମାଧାନ କରନ୍ତି, କୁକିଜ୍ ସଫା କରନ୍ତୁ + ଆପଣଙ୍କର ସାମ୍ପ୍ରତିକ ଇତିହାସ, ସଦସ୍ୟତା, ପ୍ଲେଲିଷ୍ଟ ଏବଂ (ଇଚ୍ଛାଧୀନ) ସେଟିଂସମୂହକୁ ନବଲିଖନ କରେ + ଘଣ୍ଟା ଇତିହାସ ସଫା କରନ୍ତୁ + ଖେଳାଯାଇଥିବା ଷ୍ଟ୍ରିମ୍ ଏବଂ ପ୍ଲେକ୍ ସ୍ଥିତିକୁ ବିଲୋପ କରେ + ସମସ୍ତ ପ୍ଲେକ୍ ପୋଜିସନ୍ ବିଲୋପ କରିବେ କି\? + ସନ୍ଧାନ କୀ ଶବ୍ଦର ଇତିହାସ ବିଲୋପ କରେ + ତ୍ରୁଟି + ଭିଡିଓ URL ଦସ୍ତଖତକୁ ଡିବଫସ୍କେଟ୍ କରିପାରିଲା ନାହିଁ + ପୁନରୁଦ୍ଧାର ନ ହୋଇପାରିଲା ପରି ପ୍ଲେୟାର ତ୍ରୁଟି ଘଟିଲା + ବାହ୍ୟ ପ୍ଲେୟାରମାନେ ଏହି ପ୍ରକାର ଲିଙ୍କକୁ ସମର୍ଥନ କରନ୍ତି ନାହିଁ + ଫାଇଲ୍ ଘୁଞ୍ଚିଗଲା କିମ୍ବା ଡିଲିଟ୍ ହେଲା + ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ପ୍ଲେଲିଷ୍ଟ ବୁକମାର୍କ ନାହିଁ + ସେପରି କୌଣସି ଫାଇଲ / ବିଷୟବସ୍ତୁ ଉତ୍ସ ନାହିଁ + ଡିଫଲ୍ଟଗୁଡିକ ପୁନରୁଦ୍ଧାର କରନ୍ତୁ + ଏକ ତ୍ରୁଟି ଘଟିଛି, ବିଜ୍ଞପ୍ତିକୁ ଦେଖନ୍ତୁ + ଫର୍ମାଟ୍ ହୋଇଥିବା ରିପୋର୍ଟ କପି କରନ୍ତୁ + ଅନ୍ୟ ଆପ୍ସ ଉପରେ ପ୍ରଦର୍ଶନ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ + ଦୟାକରି ଯାଞ୍ଚ କରନ୍ତୁ ଯେ ଆପଣଙ୍କର କ୍ରାସ୍ ବିଷୟରେ ଆଲୋଚନା କରୁଥିବା ଏକ ସମସ୍ୟା ପୂର୍ବରୁ ଅଛି କି\? ନକଲ ଟିକେଟ୍ ତିଆରି କରିବାବେଳେ, ଆପଣ ଆମଠାରୁ ସମୟ ନିଅନ୍ତି ଯାହାକୁ ଆମେ ପ୍ରକୃତ ତ୍ରୁଟି ସୁଧାରିବା ସହିତ ଖର୍ଚ୍ଚ କରିପାରିବା । + ଆପଣଙ୍କର ମନ୍ତବ୍ୟ (ଇଂରାଜୀରେ): + ସମ୍ବନ୍ଧୀୟ ଆଇଟମ୍ ଗୁଡ଼ିକ + ପୁନଃ ସଯାଇବାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ + ବିରାମ + ବିଲିଅନ୍ + କୌଣସି ଗ୍ରାହକ ନାହାଁନ୍ତି + ସୃଷ୍ଟି କରନ୍ତୁ + ବିବରଣୀ ପାଇଁ ଟ୍ୟାପ୍ କରନ୍ତୁ + ଏହି ଫାଇଲ୍ ଚଲାଇବା ପାଇଁ କୌଣସି ଆପ୍ ସଂସ୍ଥାପିତ ହୋଇନାହିଁ + ନାମ ପରିବର୍ତ୍ତନ କରନ୍ତୁ + ଦୟାକରି ଅପେକ୍ଷା କର… + ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ସେଟ୍ ହୋଇନାହିଁ, ବର୍ତ୍ତମାନ ଡିଫଲ୍ଟ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ବାଛନ୍ତୁ + ସମାଧାନ ହେବାପରେ \"ସମାପ୍ତ\" ଦବାନ୍ତୁ + reCAPTCHA ଚ୍ୟାଲେଞ୍ଜ ଅନୁରୋଧ + ଫାଇଲ ନାମରେ ଅନୁମତିପ୍ରାପ୍ତ ବର୍ଣ୍ଣଗୁଡିକ + ଅକ୍ଷର ଏବଂ ସଂଖ୍ୟା + © %1$s ଦ୍ଵାରା %2$s ରେ %3$s + ଆପଣଙ୍କର ଧାରଣା ଅଛି କି ନାହିଁ; ଅନୁବାଦ, ଡିଜାଇନ୍ ପରିବର୍ତ୍ତନ, କୋଡ୍ ସଫା କରିବା, କିମ୍ବା ପ୍ରକୃତ ଭାରୀ କୋଡ୍ ପରିବର୍ତ୍ତନ - ସାହାଯ୍ୟ ସର୍ବଦା ସ୍ୱାଗତଯୋଗ୍ୟ ।ଯେତେ ଭଲ ହୁଏ ସେତେ ଭଲ ହୁଏ! + ଆଣ୍ଡ୍ରଏଡରେ ସ୍ଵାଧୀନ ହାଲୁକା ଷ୍ଟ୍ରିମିଂ । + ନ୍ୟୁ ପାଇପ୍ ପ୍ରୋଜେକ୍ଟ ଆପଣଙ୍କ ଗୋପନୀୟତାକୁ ଅତି ଗମ୍ଭୀରତାର ସହିତ ନେଇଥାଏ । ତେଣୁ, ଆପଣଙ୍କ ସମ୍ମତି ବିନା ଆପ୍ କୌଣସି ତଥ୍ୟ ସଂଗ୍ରହ କରେ ନାହିଁ । +\nNewPipe ର ଗୋପନୀୟତା ନୀତି ବିସ୍ତୃତ ଭାବରେ ବ୍ୟାଖ୍ୟା କରେ ଯେତେବେଳେ ଆପଣ କ୍ରାସ୍ ରିପୋର୍ଟ ପଠାନ୍ତି କେଉଁ ତଥ୍ୟ ପଠାଯାଏ ଏବଂ ଗଚ୍ଛିତ ହୁଏ । + ମୁଖ୍ୟ ପୃଷ୍ଠାର ବିଷୟବସ୍ତୁ + ଏକ ପ୍ଲେଲିଷ୍ଟ ଚୟନ କରନ୍ତୁ + ଆମଦାନୀ ହୋଇଛି + ଏହା ତୁମର ସାମ୍ପ୍ରତିକ ସେଟଅପ୍ କୁ ନବଲିଖନ କରିବ । + ଧାଡି ଚଲାନ୍ତୁ + ଏହି ଅନୁମତି ଆବଶ୍ୟକ +\nପପ୍ଅପ୍ ମୋଡ୍ ରେ ଖୋଲ + ଏକ ତ୍ରୁଟି ବିଜ୍ଞପ୍ତି ସୃଷ୍ଟି କରନ୍ତୁ + କୁ ରପ୍ତାନି କରନ୍ତୁ + URL କିମ୍ବା ଆପଣଙ୍କର ID ଟାଇପ୍ କରି ଏକ ସାଉଣ୍ଡ କ୍ଲାଉଡ୍ ପ୍ରୋଫାଇଲ୍ ଆମଦାନୀ କରନ୍ତୁ: +\n +\nଏକ ୱେବ୍ ବ୍ରାଉଜରରେ “ଡେସ୍କଟପ୍ ମୋଡ୍” ସକ୍ଷମ କର (ମୋବାଇଲ୍ ଡିଭାଇସ୍ ପାଇଁ ସାଇଟ୍ ଉପଲବ୍ଧ ନୁହେଁ) +\n2. ଏହି URL କୁ ଯାଆନ୍ତୁ:%1$s । +\n3. ପଚରାଗଲେ ଲଗ୍ ଇନ୍ କରନ୍ତୁ । +\n4. ଆପଣ ପୁନଃ ନିର୍ଦ୍ଦେଶିତ ହୋଇଥିବା ପ୍ରୋଫାଇଲ୍ URL କପି କରନ୍ତୁ । + ପିଚ୍ + ମୋବାଇଲ୍ ଡାଟା ବ୍ୟବହାର କରିବା ସମୟରେ ରେଜୋଲୁସନ ସୀମିତ କରନ୍ତୁ + ଅଦ୍ୟତନ ପାଇଁ ଯାଞ୍ଚ କରୁଛି… + ସେକ୍ବାର୍ ଥମ୍ୱନେଲ୍ ପୂର୍ବାବଲୋକନ + ଉଚ୍ଚ ଗୁଣବତ୍ତା (ବଡ଼) + ଆପଣ ଆପଣଙ୍କର ଡାଉନଲୋଡ୍ ଇତିହାସ ସଫା କରିବାକୁ କିମ୍ବା ସମସ୍ତ ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଫାଇଲଗୁଡିକ ବିଲୋପ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ସର୍ଭର ଖୋଜି ପାଇଲା ନାହିଁ + + %1$s ଡାଉନଲୋଡ୍ ଡିଲିଟ୍ ହୋଇଛି + %1$s ଡାଉନଲୋଡ୍ ଗୁଡ଼ିକ ଡିଲିଟ୍ ହୋଇଛି + + + %d ଚୟନ ହୋଇଛି + ମୋଟ %d ଟି ଚୟନ ହୋଇଛି + + \'%s\' ପାଇଁ ଫିଡ୍ ଲୋଡ୍ ହୋଇପାରିଲା ନାହିଁ । + ନୂତନ ଫିଡ୍ ଆଇଟମ୍ + ଲେଖକଙ୍କ ଆକାଉଣ୍ଟକୁ ବନ୍ଦ କରିଦିଆଯାଇଛି । +\nଭବିଷ୍ୟତରେ NewPipe ଏହି ଫିଡ୍ ଲୋଡ୍ କରିବାକୁ ସମର୍ଥ ହେବ ନାହିଁ । +\nଆପଣ ଏହି ଚ୍ୟାନେଲରୁ ସଦସ୍ୟତା ରଦ୍ଦ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ଦେଖାଯାଇଥିବା ଆଇଟମଗୁଡିକ ଦେଖାନ୍ତୁ + ଆଭ୍ୟନ୍ତରୀଣ + ଆପଣ ବର୍ତ୍ତମାନ ଏହି ଚ୍ୟାନେଲକୁ ସବସ୍କ୍ରାଇବ କରିଛନ୍ତି + ବାହ୍ୟ ଖେଳାଳିଙ୍କ ପାଇଁ କୌଣସି ଭିଡିଓ ଷ୍ଟ୍ରିମ୍ ଉପଲବ୍ଧ ନାହିଁ + ସୃଷ୍ଟିକର୍ତ୍ତାଙ୍କ ଦ୍ୱାରା ହୃଦୟ + ଷ୍ଟ୍ରିମ୍ ଯାହା ଏପର୍ଯ୍ୟନ୍ତ ଡାଉନଲୋଡର୍ ଦ୍ୱାରା ସମର୍ଥିତ ନୁହେଁ + ଅଜ୍ଞାତ ଫର୍ମାଟ୍ + ପ୍ରତ୍ୟେକ ଡାଉନଲୋଡ୍ କୁ କେଉଁଠାରେ ସେଭ୍ କରାଯିବ ତାହା ଆପଣଙ୍କୁ ପଚରାଯିବ । +\nଯଦି ଆପଣ ଏକ ବାହ୍ୟ SD କାର୍ଡକୁ ଡାଉନଲୋଡ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି ତେବେ ସିଷ୍ଟମ୍ ଫୋଲ୍ଡର୍ ପିକର୍ (SAF) କୁ ସକ୍ଷମ କରନ୍ତୁ + ମେମୋରୀ ଲିକ୍ ଦେଖାନ୍ତୁ + ଆଇଟମଗୁଡିକରେ ମୂଳ ସମୟ ପୂର୍ବରୁ ଦେଖାନ୍ତୁ + ବିସର୍ଜନ ପରେ ଖଣ୍ଡ କିମ୍ବା କାର୍ଯ୍ୟକଳାପ ଜୀବନଚକ୍ର ବାହାରେ ଅଣସଂରକ୍ଷିତ Rx ବ୍ୟତିକ୍ରମଗୁଡିକର ଫୋର୍ସ ରିପୋର୍ଟିଂ + ଲାଇଫ୍ ସାଇକେଲ୍ ତ୍ରୁଟିଗୁଡିକ ରିପୋର୍ଟ କରନ୍ତୁ + ସମାପ୍ତ + ପୁନରୁଦ୍ଧାର ହେଉଛି + ଧାଡିରେ ଯୋଗ ହେଲା + ପରବର୍ତ୍ତୀ ପ୍ରକ୍ରିୟାକରଣ + ଏହି ନାମ ସହିତ ଏକ ଡାଉନଲୋଡ୍ ଫାଇଲ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି + ଡାଉନଲୋଡ୍ ହୋଇଥିବା ଫାଇଲଗୁଡିକ ଡିଲିଟ୍ କରନ୍ତୁ + ସିଷ୍ଟମ୍ ଫୋଲ୍ଡର୍ ପିକର୍ (SAF) ବ୍ୟବହାର କରନ୍ତୁ + ହଁ, ଏବଂ ଆଂଶିକ ଦେଖାଯାଇଥିବା ଭିଡିଓଗୁଡିକ + ଗୋଷ୍ଠୀ ନାମ ଖାଲି ଅଛି + ଉପଲବ୍ଧ ଥିବାବେଳେ ଉତ୍ସର୍ଗୀକୃତ ଫିଡରୁ ଆଣ + ତାଲିକା + ଗୋଟିଏ ଡାଉନଲୋଡ୍ ଏକ ସମୟରେ ଚାଲିବ + ସମ୍ପ୍ରତି + ଟାବଲେଟ୍ ମୋଡ୍ + ବାହ୍ୟ ଖେଳାଳିଙ୍କ ପାଇଁ କୌଣସି ଅଡିଓ ଷ୍ଟ୍ରିମ୍ ଉପଲବ୍ଧ ନାହିଁ + ବାହ୍ୟ ଖେଳାଳିଙ୍କ ପାଇଁ ଗୁଣବତ୍ତା ଚୟନ କରନ୍ତୁ + ପିନ୍ ହୋଇଥିବା ମନ୍ତବ୍ୟ + ଭବିଷ୍ୟତର ଆଇଟମ୍ ଲୁଚାନ୍ତୁ + ୱେବସାଇଟ୍ ଖୋଲନ୍ତୁ + ହଜାର + ସୂଚନା ପାଇବା… + + %s ଗ୍ରାହକ + ମୋଟ %s ଗ୍ରାହକ + + + %s ଦର୍ଶନ + ମୋଟ %s ଦର୍ଶନ + + + %s ଜଣ ଦେଖୁଛନ୍ତି + ମୋଟ %s ଜଣ ଦେଖୁଛନ୍ତି + + ବିଷୟରେ & FAQ + ପ୍ରାୟତଃ ପଚରାଯାଇଥିବା ପ୍ରଶ୍ନ + ଯଦି ଆପଣ ଆପ୍ ବ୍ୟବହାର କରିବାରେ ଅସୁବିଧାର ସମ୍ମୁଖୀନ ହେଉଛନ୍ତି, ସାଧାରଣ ପ୍ରଶ୍ନର ଏହି ଉତ୍ତରଗୁଡିକ ଯାଞ୍ଚ କରିବାକୁ ନିଶ୍ଚିତ ହୁଅନ୍ତୁ! + ୱେବସାଇଟ୍ ରେ ଦେଖନ୍ତୁ + ଆପଣ ସନ୍ଧାନ ଇତିହାସରୁ ଏହି ଆଇଟମ୍ ବିଲୋପ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ଅଧିକାଂଶ ପ୍ଲେ ହୋଇଛି + ମୁଖ୍ୟ ପୃଷ୍ଠାରେ କେଉଁ ଟ୍ୟାବଗୁଡ଼ିକ ଦେଖାଯାଏ + ଏକ ଚ୍ୟାନେଲ୍ ଚୟନ କରନ୍ତୁ + ସେଗୁଡିକ ଅପସାରଣ କରିବା ପାଇଁ ଆଇଟମଗୁଡିକ ସ୍ୱାଇପ୍ କରନ୍ତୁ + ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ଚ୍ୟାନେଲ ରେ ସଦସ୍ୟତା ନାହିଁ + ଏକ କିଓସ୍କ ଚୟନ କରନ୍ତୁ + ଚେତାବନୀ: ସମସ୍ତ ଫାଇଲ୍ ଆମଦାନି କରିପାରିଲା ନାହିଁ । + ଆପଣ ସେଟିଂସମୂହ ମଧ୍ୟ ଆମଦାନୀ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ମନ୍ତବ୍ୟ ଲୋଡ୍ ହୋଇପାରିଲା ନାହିଁ + ଅଧିକାଂଶ ପସନ୍ଦ କରନ୍ତି + ଚ୍ୟାନେଲର ବିବରଣୀ ଦେଖାନ୍ତୁ + ଏନକ୍ୟୁ + ଅନୁକରଣ + ପୃଷ୍ଠଭୂମିରେ ଖେଳିବା ଆରମ୍ଭ କରନ୍ତୁ + ଏକ ପପ୍ଅପ୍ ରେ ଖେଳିବା ଆରମ୍ଭ କରନ୍ତୁ + ଷ୍ଟ୍ରିମ୍ ବିବରଣୀ ଲୋଡ୍ କରୁଛି… + ଡ୍ରୟର ଖୋଲନ୍ତୁ + ଡ୍ରୟର ବନ୍ଦ କରନ୍ତୁ + ପସନ୍ଦିତ \'ଖୋଲା\' କ୍ରିୟା + ବିଷୟବସ୍ତୁ ଖୋଲିବା ସମୟରେ ଡିଫଲ୍ଟ କାର୍ଯ୍ୟ -%s + ଭିଡିଓ ପ୍ଲେୟାର + ପ୍ଲେ ଲିଷ୍ଟରେ ଯୋଡନ୍ତୁ + ତାଲିକାଭୁକ୍ତ + ଜୁମ୍ କରନ୍ତୁ + ପ୍ଲେଲିଷ୍ଟ ଥମ୍ବନେଲ ବଦଳିଗଲା । + ଅଟୋ-ଜେନେରେଟ୍ (କୌଣସି ଅପଲୋଡର୍ ମିଳିଲା ନାହିଁ) + ପୁରଣ କରନ୍ତୁ + କ୍ୟାପସନ୍ + ପ୍ରତିଛବି ସୂଚକ ଦେଖାନ୍ତୁ + ପ୍ଲେୟାର ବ୍ୟବହାର କରିବା ସମୟରେ ଏକ କ୍ରାସ୍ ବିକଳ୍ପ ଦେଖାଏ + ନୂତନ ଷ୍ଟ୍ରିମ୍ ପାଇଁ ଯାଞ୍ଚ ଚଲାନ୍ତୁ + ଆପ୍ କ୍ରାସ୍ କରନ୍ତୁ + ଏକ ତ୍ରୁଟି ସ୍ନାକବାର୍ ଦେଖାନ୍ତୁ + ସଦସ୍ୟତା ଆମଦାନି କରିପାରିଲା ନାହିଁ + ସଦସ୍ୟତା ରପ୍ତାନି କରିପାରିଲା ନାହିଁ + ତୁମର ID, soundcloud.com/yourid + ଶତକଡା + ସେମିଟୋନ୍ + ଆପ୍ ସୁଇଚ୍ ରେ କମ୍ କରନ୍ତୁ + ମୁଖ୍ୟ ଭିଡିଓ ପ୍ଲେୟାରରୁ ଅନ୍ୟ ଆପକୁ ସୁଇଚ୍ କରିବା ସମୟରେ କାର୍ଯ୍ୟ -%s + କିଛି ନୁହେଁ + ପୃଷ୍ଠଭୂମି ପ୍ଲେୟାରକୁ କମ୍ କରନ୍ତୁ + ପପ୍ଅପ୍ ପ୍ଲେୟାରକୁ ସର୍ବନିମ୍ନ କରନ୍ତୁ + ସ୍ୱୟଂଚାଳିତ ଭାବରେ ଚଲାଇବା ଆରମ୍ଭ କରନ୍ତୁ -%s + କେବଳ ୱାଇ-ଫାଇରେ + କାର୍ଯ୍ୟ ସିଷ୍ଟମ ଦ୍ୱାରା ପ୍ରତ୍ୟାଖ୍ୟାନ + ଡାଉନଲୋଡ୍ ବିଫଳ ହେଲା + ଏହି ନାମ ସହିତ ଏକ ଫାଇଲ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି + ସଂଯୋଗ ସମୟ ସମାପ୍ତ + ଡାଉନଲୋଡ୍ ଇତିହାସ ସଫା କରନ୍ତୁ + ଡାଉନଲୋଡ୍ ବାତିଲ୍ କରିବା ପୂର୍ବରୁ ସର୍ବାଧିକ ସଂଖ୍ୟକ ଚେଷ୍ଟା + ଦେଖାଯାଇଥିବା ଅପସାରଣ କରନ୍ତୁ + ଚ୍ୟାନେଲ୍ ଗୋଷ୍ଠୀଗୁଡିକ + ଫିଡ୍ ପ୍ରକ୍ରିୟାକରଣ… + ଏକ ସଦସ୍ୟତା ପୂର୍ବରୁ ଶେଷ ଅଦ୍ୟତନ ପରେ ସମୟ ପୁରୁଣା ବୋଲି ବିବେଚନା କରାଯାଏ -%s + ଫିଡ୍ ଲୋଡ୍ କରିବାରେ ତ୍ରୁଟି + ଫାଷ୍ଟ ଫିଡ୍ ମୋଡ୍ ଏହା ଉପରେ ଅଧିକ ସୂଚନା ପ୍ରଦାନ କରେ ନାହିଁ । + ଦେଖାଯାଇଥିବା ଆଇଟମଗୁଡିକ ଲୁଚାନ୍ତୁ + ଏହି ବିଷୟବସ୍ତୁ ଏପର୍ଯ୍ୟନ୍ତ NewPipe ଦ୍ୱାରା ସମର୍ଥିତ ନୁହେଁ । +\n +\nଭବିଷ୍ୟତ ସଂସ୍କରଣରେ ଏହା ସମର୍ଥିତ ହେବ ବୋଲି ଆଶା କରୁଛି । + ଆପଣ ନିମ୍ନରେ ଆପଣଙ୍କର ପ୍ରିୟ ରାତିର ଥିମ୍ ଚୟନ କରିପାରିବେ + ଡାଉନଲୋଡ୍ ଆରମ୍ଭ ହୋଇଛି + ଟ୍ୟାଗ୍ସ + ସୂଚିତ କର + , + ମନୋନୀତ ଷ୍ଟ୍ରିମ୍ ବାହ୍ୟ ଖେଳାଳିଙ୍କ ଦ୍ୱାରା ସମର୍ଥିତ ନୁହେଁ + + %s ଜଣ ଶ୍ରୋତା + ମୋଟ %s ଜଣ ଶ୍ରୋତା + + + %s ଭିଡିଓ + ମୋଟ %s ଭିଡିଓ + + + %s ନୂଆ ଷ୍ଟ୍ରୀମ + ମୋଟ %s ନୂଆ ଷ୍ଟ୍ରୀମ + + ସଜାନ୍ତୁ + NewPipe ଅଦ୍ୟତନ ଉପଲବ୍ଧ! + ଦ୍ରୁତ ମୋଡ୍ + 3-ଡଟ୍ ମେନୁରୁ ସଦସ୍ୟତା ଆମଦାନୀ କିମ୍ବା ରପ୍ତାନି କରନ୍ତୁ + ଆପଣ NewPipe ର ସର୍ବଶେଷ ସଂସ୍କରଣ ଚଳାଉଛନ୍ତି + %s ଡାଉନଲୋଡ୍ କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ + ଥିମ୍ ପାଇଁ %s ଚୟନ ହେଲେ ହିଁ ଏହି ବିକଳ୍ପ ଉପଲବ୍ଧ + କାର୍ଡ + କ୍ଲିପବୋର୍ଡରେ କପି କରିବାରେ ବିଫଳ + ସ୍ଥାୟୀ ଥମ୍ୱନେଲ୍ ସେଟ୍ କରନ୍ତୁ + ଧୂସର ହୋଇଯାଇଥିବା ପ୍ଲେଲିଷ୍ଟଗୁଡିକ ପୂର୍ବରୁ ଏହି ଆଇଟମ୍ ଧାରଣ କରିଥାଏ । + ନକଲ %d ସମୟ (ମୋଟ) ଯୋଡି ହୋଇଛି \ No newline at end of file diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 01b5deb60..0cc27a059 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -120,4 +120,11 @@ دِکھ صرف ایچ‌ٹی‌ٹی‌پی‌ایس نال کڑی دا پتہ ہی ماݨنیوگ ہن ویکھیا جا چُکیا چنت کرو + سمگری + کلاکار + بند کیتا + مٹاؤ + فائل + موڑو + ہمیشہ \ No newline at end of file diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index f73e1b824..2dcac20ab 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -16,10 +16,10 @@ ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ \"%1$s\"\? ਇਸ ਨਾਲ਼ ਸਾਂਝਾ ਕਰੋ ਬਾਹਰੀ ਵੀਡੀਓ ਪਲੇਅਰ ਵਰਤੋ - ਕੁਝ ਰੈਜ਼ੋਲੂਸ਼ਨਾਂ \'ਤੇ ਆਵਾਜ਼ ਨੂੰ ਹਟਾ ਦਿੰਦਾ ਹੈ + ਕੁਝ ਰੈਜ਼ੋਲਿਊਸ਼ਨਾਂ \'ਤੇ ਆਵਾਜ਼ ਨੂੰ ਹਟਾ ਦਿੰਦਾ ਹੈ ਬਾਹਰੀ ਆਡੀਓ ਪਲੇਅਰ ਵਰਤੋ ਸਬਸਕ੍ਰਾਈਬ ਕਰੋ - ਸਬਸਕ੍ਰਾਈਬ ਹੋ ਗਿਆ + ਸਬਸਕ੍ਰਾਈਬ ਹੈ ਚੈਨਲ ਅਨ-ਸਬਸਕ੍ਰਾਈਬ ਹੋ ਗਿਆ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਬਦਲਣ ਵਿੱਚ ਨਾਕਾਮੀ ਜਾਣਕਾਰੀ ਵਿਖਾਓ @@ -29,16 +29,16 @@ ਨਵਾਂ ਕੀ ਹੈ ਬੈਕਗ੍ਰਾਊਂਡ ਆਡੀਓ ਪੌਪ-ਅਪ - ਇਸ ਵਿੱਚ ਜੋੜੋ + ਵਿੱਚ ਸ਼ਾਮਿਲ ਕਰੋ ਵੀਡੀਓ ਲਈ ਡਾਊਨਲੋਡ ਫ਼ੋਲਡਰ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਵੀਡਿਓ ਇੱਥੇ ਜਮ੍ਹਾਂ ਹੁੰਦੀਆਂ ਹਨ ਵੀਡੀਓ ਫ਼ਾਈਲਾਂ ਲਈ ਡਾਊਨਲੋਡ ਫ਼ੋਲਡਰ ਚੁਣੋ ਆਡੀਓ ਲਈ ਡਾਊਨਲੋਡ ਫ਼ੋਲਡਰ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਆਡੀਓ ਇੱਥੇ ਜਮ੍ਹਾਂ ਹੁੰਦੀਆਂ ਹਨ ਆਡੀਓ ਫ਼ਾਈਲਾਂ ਲਈ ਡਾਊਨਲੋਡ ਫ਼ੋਲਡਰ ਚੁਣੋ - ਡਿਫ਼ਾਲਟ ਰੈਜ਼ੋਲੂਸ਼ਨ - ਪੌਪ-ਅਪ ਲਈ ਡਿਫ਼ਾਲਟ ਰੈਜ਼ੋਲੂਸ਼ਨ - ਵੱਡੀਆਂ ਰੈਜ਼ੋਲੂਸ਼ਨਾਂ ਦਿਖਾਓ + ਡਿਫ਼ਾਲਟ ਰੈਜ਼ੋਲਿਊਸ਼ਨ + ਪੌਪ-ਅਪ ਲਈ ਡਿਫ਼ਾਲਟ ਰੈਜ਼ੋਲਿਊਸ਼ਨ + ਵੱਡੀਆਂ ਰੈਜ਼ੋਲਿਊਸ਼ਨਜ਼ ਦਿਖਾਓ ਸਿਰਫ਼ ਕੁਝ ਹੀ ਡਿਵਾਈਸ 2K/4K ਵੀਡੀਓ ਨੂੰ ਚਲਾ ਸਕਦੇ ਹਨ Kodi ਵਿੱਚ ਚਲਾਓ Kodi ਐਪ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ\? @@ -53,13 +53,13 @@ ਕਾਲ੍ਹਾ ਪੌਪ-ਅਪ ਦਾ ਆਕਾਰ ਅਤੇ ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ ਪੌਪ-ਅਪ ਦਾ ਆਖਰੀ ਅਕਾਰ ਅਤੇ ਸਥਿਤੀ ਯਾਦ ਰੱਖੋ - ਤੇਜ਼ ਪਰ inexact seek ਵਰਤੋ - Inexact seek ਵੀਡੀਓ ਨੂੰ ਤੇਜ਼ ਪਰ ਅਣ-ਸਟੀਕ ਢੰਗ ਨਾਲ ਅੱਗੇ-ਪਿੱਛੇ ਲਿਜਾਂਦਾ ਹੈ । ਇਸ ਨਾਲ ਅੱਗੇ-ਪਿੱਛੇ 5,15 ਜਾਂ 25 ਸਕਿੰਟ ਜਾਣਾ ਕੰਮ ਨਹੀਂ ਕਰੇਗਾ + ਤੇਜ਼ ਪਰ ਅਸਪੱਸ਼ਟ ਸੀਕ ਵਰਤੋ + ਅਸਪੱਸ਼ਟ ਸੀਕ ਵੀਡੀਓ ਨੂੰ ਤੇਜ਼ ਪਰ ਅਣ-ਸਟੀਕ ਢੰਗ ਨਾਲ ਅੱਗੇ-ਪਿੱਛੇ ਲਿਜਾਂਦਾ ਹੈ । ਇਸ ਨਾਲ ਅੱਗੇ-ਪਿੱਛੇ 5,15 ਜਾਂ 25 ਸਕਿੰਟ ਜਾਣਾ ਕੰਮ ਨਹੀਂ ਕਰੇਗਾ ਥੰਮਨੇਲ ਲੋਡ ਕਰੋ ਥੰਮਨੇਲ ਲੋਡ, ਡਾਟਾ ਦੀ ਬੱਚਤ ਅਤੇ ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ ਨੂੰ ਰੋਕਣ ਲਈ ਇਸਨੂੰ ਬੰਦ ਕਰੋ। ਇਸ ਵਿਚ ਤਬਦੀਲੀ ਕਰਨ ਨਾਲ ਇਨ-ਮੈਮੋਰੀ ਅਤੇ ਆਨ-ਡਿਸਕ ਚਿੱਤਰ cache ਦੋਵੇਂ ਮਿਟ ਜਾਣਗੇ ਚਿੱਤਰ cache ਮਿਟਾ ਦਿੱਤੀ ਗਈ ਹੈ - Cached ਮੈਟਾ-ਡਾਟਾ ਮਿਟਾਓ - ਸਾਰੇ cached ਵੈੱਬ-ਪੇਜਾਂ ਦਾ ਡਾਟਾ ਮਿਟਾਓ + ਕੈਸ਼ ਕੀਤਾ ਮੈਟਾ-ਡਾਟਾ ਮਿਟਾਓ + ਸਾਰੇ ਕੈਸ਼ ਕੀਤੇ ਵੈੱਬ-ਪੇਜਾਂ ਦਾ ਡਾਟਾ ਮਿਟਾਓ ਮੈਟਾ-ਡਾਟਾ cache ਮਿਟਾ ਦਿੱਤੀ ਗਈ ਹੈ ਅਗਲੀ ਸਟ੍ਰੀਮ ਨੂੰ ਆਟੋ-ਕਤਾਰਬੱਧ ਕਰੋ ਇੱਕ ਮੁੱਕਣ ਵਾਲੀ ਪਰ ਨਾ-ਦੁਹਰਾਉਣ ਵਾਲੀ ਕਤਾਰ ਨੂੰ, ਸੰਬੰਧਤ ਸਟ੍ਰੀਮ ਜੋੜਦਿਆਂ, ਚਲਾਉਂਦੇ ਜਾਓ @@ -94,7 +94,7 @@ ਸਾਰੇ ਬੰਦ ਕੀਤਾ ਮਿਟਾਓ - ਵਧੀਆ ਰੈਜ਼ੋਲੂਸ਼ਨ + ਵਧੀਆ ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਵਾਪਿਸ ਸਾਰੇ ਚਲਾਓ ਹਮੇਸ਼ਾ @@ -110,7 +110,7 @@ ਡਾਟਾਬੇਸ ਨਿਰਯਾਤ ਕਰੋ ਤੁਹਾਡੇ ਮੌਜੂਦਾ ਇਤਿਹਾਸ, ਸਬਸਕ੍ਰਿਪਸ਼ਨਜ਼, ਪਲੇਸੂਚੀ ਅਤੇ (ਆਪਨਸ਼ਨਲੀ) ਸੈਟਿੰਗਾਂ ਨੂੰ ਨਵਿਆਂ ਨਾਲ਼ ਬਦਲ ਦਿੰਦਾ ਹੈ ਇਤਿਹਾਸ, ਸੁਬਸਕ੍ਰਿਪਸ਼ਨਜ਼, ਪਲੇ-ਸੂਚੀ ਅਤੇ ਸੈਟਿੰਗਾਂ ਦਰਾਮਦ ਕਰੋ - ਦੇਖੇ ਗਏ ਵੀਡੀਓਜ਼ ਦੀ ਸੂਚੀ ਮਿਟਾਓ + ਵੇਖੇ ਗਏ ਵੀਡੀਓਜ਼ ਦੀ ਸੂਚੀ ਮਿਟਾਓ ਚਲਾਏ ਗਏ ਵੀਡੀਓਜ਼ ਦੇ ਇਤਿਹਾਸ ਅਤੇ ਪਲੇ-ਸਥਿਤੀਆਂ ਨੂੰ ਮਿਟਾਉਂਦਾ ਹੈ ਕੀ ਵੇਖੇ ਗਏ ਵੀਡੀਓਜ਼ ਦਾ ਇਤਿਹਾਸ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇ\? ਖੋਜ ਸੂਚੀ ਦਾ ਇਤਿਹਾਸ ਮਿਟਾਓ @@ -129,8 +129,8 @@ ਅਣਚਾਹੀ ਪਲੇਅਰ ਤਰੁੱਟੀ ਆਈ ਹੈ ਪਲੇਅਰ ਤਰੁੱਟੀ ਤੋਂ ਮੁੜ-ਸੁਰਜੀਤ ਹੋ ਰਿਹਾ ਹੈ ਬਾਹਰੀ ਪਲੇਅਰ ਇਸ ਕਿਸਮ ਦੇ ਲਿੰਕਾਂ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ - ਕੋਈ ਵੀ ਵੀਡੀਓ ਸਟ੍ਰੀਮ ਨਹੀਂ ਮਿਲੀ - ਕੋਈ ਵੀ ਆਡੀਓ ਸਟ੍ਰੀਮ ਨਹੀਂ ਮਿਲੀ + ਕੋਈ ਵੀਡੀਓ ਸਟ੍ਰੀਮ ਨਹੀਂ ਮਿਲੀ + ਕੋਈ ਆਡੀਓ ਸਟ੍ਰੀਮ ਨਹੀਂ ਮਿਲੀ ਅਜਿਹਾ ਕੋਈ ਫੋਲਡਰ ਨਹੀਂ ਅਜਿਹਾ ਕੋਈ ਫਾਈਲ/ਸਮੱਗਰੀ ਸਰੋਤ ਨਹੀਂ ਹੈ ਫਾਈਲ ਮੌਜੂਦ ਨਹੀਂ ਹੈ ਜਾਂ ਇਸ ਨੂੰ ਪੜ੍ਹਨ ਜਾਂ ਲਿਖਣ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ @@ -151,7 +151,7 @@ ਪਸੰਦਾਂ ਨਾਪਸੰਦਾਂ ਕੋਈ ਨਤੀਜੇ ਨਹੀਂ - ਇਥੇ ਦਾ ਸੁੰਨਾਪਨ ਦੂਰ ਕਰਨ ਲਈ ਕੁਝ ਸਰਚ ਕਰੋ ਜਾਂ ਕੋਈ ਚੈਨਲ ਸਬਸਕ੍ਰਾਇਬ ਕਰੋ + ਇਥੇ ਦਾ ਖਾਲੀਪਣ ਦੂਰ ਕਰਨ ਲਈ ਕੁਝ ਸਰਚ ਕਰੋ ਜਾਂ ਕੋਈ ਚੈਨਲ ਸਬਸਕ੍ਰਾਇਬ ਕਰੋ ਮੁੜ-ਕ੍ਰਮਬੱਧ ਕਰਨ ਲਈ ਡਰੈਗ ਕਰੋ ਵੀਡੀਓ ਆਡੀਓ @@ -185,7 +185,7 @@ ਫਾਈਲ ਦਾ ਨਾਮ ਥਰੈੱਡ ਤਰੁੱਟੀ - ਨਿਊਪਾਈਪ ਡਾਊਨਲੋਡ ਕਰ ਰਿਹਾ ਹੈ + ਨਿਊਪਾਈਪ ਡਾਊਨਲੋਡ ਕਰ ਰਹੀ ਹੈ ਵੇਰਵਿਆਂ ਲਈ ਖੋਲੋ ਕ੍ਰਿਪਾ ਕਰਕੇ ਉਡੀਕ ਕਰੋ… ਕਲਿਪ-ਬੋਰਡ ਵਿੱਚ ਕਾਪੀ ਹੋ ਗਿਆ ਹੈ @@ -318,8 +318,8 @@ ਸਵੀਕਾਰ ਕਰੋ ਅਸਵੀਕਾਰ ਕੋਈ ਸੀਮਾ ਨਹੀਂ - ਮੋਬਾਈਲ ਡਾਟਾ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਰੈਜ਼ੋਲੂਸ਼ਨ ਨੂੰ ਸੀਮਿਤ ਕਰੋ - ਐਪ switch ਕਰਨ ਤੇ minimize ਕਰੋ + ਮੋਬਾਈਲ ਡਾਟਾ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਨੂੰ ਸੀਮਿਤ ਕਰੋ + ਐਪ ਸਵਿੱਚ ਕਰਨ ਤੇ ਮਿਨੀਮਾਈਜ਼ ਕਰੋ ਮੁੱਖ ਵੀਡੀਓ ਪਲੇਅਰ ਤੋਂ ਦੂਜੇ ਐਪ \'ਤੇ ਜਾਣ ਵੇਲ਼ੇ ਕਾਰਵਾਈ — %s ਕੋਈ ਨਹੀਂ ਬੈਕਗ੍ਰਾਉਂਡ ਪਲੇਅਰ ਵਿੱਚ Minimize ਕਰੋ @@ -327,7 +327,7 @@ ਚੁੱਪ ਦੌਰਾਨ ਤੇਜ਼ੀ ਨਾਲ ਅੱਗੇ ਕਰੋ ਕਦਮ ਰੀਸੈੱਟ - ਚੈਨਲਾਂ + ਚੈਨਲ ਪਲੇ ਸੂਚੀਆਂ ਟਰੈਕਸ ਯੂਜ਼ਰਸ @@ -351,12 +351,11 @@ ਮੁੱਖ ਪੰਨੇ ਤੇ ਕਿਹੜੇ ਟੈਬ ਵਿਖਾਏ ਜਾਣਗੇ ਅਪਡੇਟਾਂ ਜਦੋਂ ਨਵਾਂ ਸੰਸਕਰਣ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ ਤਾਂ ਐਪ ਅਪਡੇਟ ਨੂੰ ਪੁੱਛਣ ਲਈ ਇੱਕ ਨੋਟੀਫਿਕੇਸ਼ਨ ਦਿਖਾਓ - ਲਿਸਟ view ਮੋਡ + ਲਿਸਟ ਵਿਊ ਮੋਡ ਲਿਸਟ ਗਰਿੱਡ ਆਟੋ - ਨਿਊ-ਪਾਈਪ ਦੀ ਅਪਡੇਟ ਉਪਲਬੱਧ ਹੈ! - ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਦਬਾਓ + ਨਿਊ-ਪਾਈਪ ਦੀ ਅਪਡੇਟ ਉਪਲਬੱਧ ਹੈ! ਮੁਕੰਮਲ ਹੋਇਆ ਬਕਾਇਆ ਰੁਕਿਆ @@ -381,8 +380,8 @@ ਰੁੱਕੋ ਵੱਧ ਤੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ ਡਾਉਨਲੋਡ ਰੱਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਵੱਧ ਤੋਂ ਵੱਧ ਕੋਸ਼ਿਸ਼ਾਂ - Metered ਨੈਟਵਰਕਸ ਤੇ ਰੁਕਾਵਟ - ਮੋਬਾਈਲ ਡਾਟਾ ਤੇ switch ਕਰਨ ਵੇਲੇ ਲਾਭਦਾਇਕ ਹੈ, ਹਾਲਾਂਕਿ ਕੁਝ ਡਾਉਨਲੋਡਾਂ ਨੂੰ suspend ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ + ਮੀਟਰ ਕੀਤੇ ਨੈਟਵਰਕਸ ਤੇ ਰੁਕਾਵਟ + ਮੋਬਾਈਲ ਡਾਟਾ ਤੇ ਸਵਿੱਚ ਕਰਨ ਵੇਲੇ ਲਾਭਦਾਇਕ ਹੈ, ਹਾਲਾਂਕਿ ਕੁਝ ਡਾਉਨਲੋਡਾਂ ਨੂੰ ਮੁਅੱਤਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਇਵੇੰਟਸ ਕਾਨਫਰੰਸਾਂ ਟਿੱਪਣੀਆਂ ਦਿਖਾਓ @@ -409,7 +408,7 @@ ਕੁਨੈਕਸ਼ਨ timeout ਕੀ ਤੁਸੀਂ ਆਪਣਾ ਡਾਊਨਲੋਡ ਇਤਿਹਾਸ ਸਾਫ਼ ਕਰਨਾ ਜਾਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਫ਼ਾਈਲਾਂ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ\? ਡਾਊਨਲੋਡ ਸੀਮਾ ਕਤਾਰ ਵਿੱਚ - one download will run at the same time + ਇੱਕ ਸਮੇਂ ਤੇ ਇੱਕੋ ਡਾਊਨਲੋਡ ਚੱਲੇਗਾ ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ ਕਰੋ ਡਾਊਨਲੋਡਸ ਰੋਕੋ ਪੁੱਛੋ ਕਿੱਥੇ ਡਾਊਨਲੋਡ ਕਰਨਾ ਹੈ @@ -476,8 +475,8 @@ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਦੀ ਕੋਈ ਵੀ ਐਪ ਇਸ ਨੂੰ ਖੋਲ੍ਹ ਨਹੀਂ ਸਕਦੀ ਚੈਪਟਰ ਹਾਲੀਆ - ਥਮਨੇਲ ਨੂੰ ਤਾਲਾਬੱਧ ਸਕਰੀਨ ਦੇ ਪਿਛੋਕੜ ਅਤੇ ਇਤਲਾਹਾਂ ਦੋਹਾਂ ਲਈ ਵਰਤੋ - ਥਮਨੇਲ ਵਿਖਾਓ + ਥੰਮਨੇਲ ਨੂੰ ਤਾਲਾਬੱਧ ਸਕਰੀਨ ਦੇ ਪਿਛੋਕੜ ਅਤੇ ਇਤਲਾਹਾਂ ਦੋਹਾਂ ਲਈ ਵਰਤੋ + ਥੰਮਨੇਲ ਵਿਖਾਓ ਪਲੇ-ਸੂਚੀ ਪੰਨਾ %s ਦੁਆਰਾ %s ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ @@ -497,7 +496,7 @@ ਸਿਰਫ਼ ਉਹ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ ਵਿਖਾਓ ਜੋ ਕਿਸੇ ਗਰੁੱਪ ਵਿੱਚ ਨਹੀਂ ਪਾਈਆਂ ਹੋਈਆਂ ਨਵਾਂ ਕੀ ਤੁਸੀਂ ਇਸ ਗਰੁੱਪ ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ\? - ਗਰੁੱਪ ਨਾਮ ਖ਼ਾਲੀ ਕਰੋ + ਖ਼ਾਲੀ ਗਰੁੱਪ ਨਾਮ %d ਚੁਣੀ %d ਚੁਣੀਆਂ @@ -573,15 +572,14 @@ ਟਿੱਪਣੀਆਂ ਗਿਟਹੱਬ \'ਤੇ ਜਾ ਕੇ ਇਤਲਾਹ ਦਿਓ ਦੂਜੀਆਂ ਐਪਾਂ ਦੇ ਉੱਤੇ ਵਿਖਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ - ਮਦਦ ਸਾਰੀਆਂ ਪਲੇ-ਸਥਿਤੀਆਂ ਮਿਟਾਉਣੀਆਂ ਹਨ\? ਸਾਰੀਆਂ ਪਲੇ-ਸਥਿਤੀਆਂ ਮਿਟਾਉਂਦਾ ਹੈ ਪਲੇ-ਸਥਿਤੀਆਂ ਮਿਟਾਓ - ਵੀਡੀਉ ਹੈਸ਼ ਇਤਲਾਹ + ਵੀਡੀਓ ਹੈਸ਼ ਇਤਲਾਹ ਐਲਬਮਾਂ ਕਲਾਕਾਰ ਗੀਤ - ਵਿਡੀਉ + ਵੀਡੀਓ ਇਹ ਵੀਡੀਓ ਉਮਰ-ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ। \n \nਜੇ ਤੁਸੀਂ ਇਸਨੂੰ ਵੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚੋਂ \"%1$s\" ਚਾਲੂ ਕਰੋ। @@ -600,7 +598,7 @@ ਆਪ-ਮੁਖ਼ਤਾਰ ਕਤਾਰ ਕਰੋ ਸਟ੍ਰੀਮ ਦੇ ਕਰਤਾ, ਸਮੱਗਰੀ ਜਾਂ ਖੋਜ ਬੇਨਤੀ ਵਾਲੇ ਵਾਧੂ ਜਾਣਕਾਰੀ ਬਕਸਿਆਂ ਵਾਲ਼ੀ ਮੈਟਾ ਜਾਣਕਾਰੀ ਲੁਕਾਉਣ ਲਈ ਇਸਨੂੰ ਬੰਦ ਕਰ ਦਿਓ ਮੈਟਾ ਜਾਣਕਾਰੀ ਦਿਖਾਓ - ਵੀਡੀਉ ਵੇਰਵਾ ਅਤੇ ਵਾਧੂ ਜਾਣਕਾਰੀ ਲੁਕਾਉਣ ਲਈ ਇਸਨੂੰ ਬੰਦ ਕਰੋ + ਵੀਡੀਓ ਵੇਰਵਾ ਅਤੇ ਵਾਧੂ ਜਾਣਕਾਰੀ ਲੁਕਾਉਣ ਲਈ ਇਸਨੂੰ ਬੰਦ ਕਰੋ ਵੇਰਵਾ ਦਿਖਾਓ ਸਰਗਰਮ ਪਲੇਅਰ ਕਤਾਰ ਬਦਲ ਜਾਵੇਗੀ ਪਲੇਅਰ ਬਦਲਣ ਨਾਲ ਤੁਹਾਡੀ ਕਤਾਰ ਬਦਲ ਸਕਦੀ ਹੈ @@ -643,7 +641,7 @@ ਪਿੰਨ ਕੀਤੀ ਟਿੱਪਣੀ ਅੱਪਡੇਟ ਦੀ ਉਪਲੱਬਧਤਾ ਪਰਖੀ ਜਾ ਰਹੀ… ਵੇਖਿਆ ਜਾ ਚੁੱਕਿਆ ਚਿੰਨਤ ਕਰੋ - ਸੀਕਬਾਰ ਥਮਨੇਲ ਦੀ ਝਲਕ + ਸੀਕਬਾਰ ਥੰਮਨੇਲ ਦੀ ਝਲਕ ਸਮਾਂ-ਅਵਧੀ ਜਦ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਫੀਡ ਦੁਬਾਰਾ ਅੱਪਡੇਟ ਕੀਤੀ ਜਾ ਸਕੇ — %s ਰਚਨਾਕਾਰ ਨੇ ਦਿਲੋਂ ਪਸੰਦ ਕੀਤਾ ਲੋਡ ਅੰਤਰਾਲ ਆਕਾਰ ਬਦਲੋ (ਮੌਜੂਦਾ %s ਤੇ)। ਛੋਟੀ ਸੰਖਿਆ ਵੀਡੀਓ ਜਲਦੀ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਮੱਦਦ ਦੇ ਸਕਦੀ ਹੈ। ਬਦਲਾਅ ਪਲੇਅਰ ਦੁਬਾਰਾ ਚਲਾਉਣ ਤੇ ਹੀ ਹੋਣਗੇ @@ -724,4 +722,12 @@ \nਯੂਟਿਊਬ ਇੱਕ ਅਜਿਹੀ ਸੇਵਾ ਹੈ ਜਿਹੜੀ RSS ਫੀਡ ਜ਼ਰੀਏ ਇਹ ਤੇਜ਼ ਤਰੀਕਾ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। \n \nਤੁਹਾਡੀ ਚੋਣ ਇਸ ਗੱਲ ਤੇ ਮੁਨੱਸਰ ਕਰਦੀ ਹੈ ਕਿ ਤੁਸੀਂ ਗਤੀ ਤੇ ਸਟੀਕਤਾ ਵਿੱਚੋਂ ਕਿਸ ਨੂੰ ਪ੍ਰਾਥਮਿਕਤਾ ਦਿੰਦੇ ਹੋ। + ਤੇਜ ਮੋਡ + 3-ਡੌਟ ਮੀਨੂ ਤੋਂ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ ਨੂੰ ਆਯਾਤ ਜਾਂ ਨਿਰਯਾਤ ਕਰੋ + ਤੁਸੀਂ ਨਿਊਪਾਈਪ ਦਾ ਨਵੀਨਤਮ ਸੰਸਕਰਣ ਚਲਾ ਰਹੇ ਹੋ + %s ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ + ਇਹ ਵਿਕਲਪ ਤਾਂ ਹੀ ਉਪਲਬਧ ਹੈ ਜੇਕਰ %s ਨੂੰ ਥੀਮ ਲਈ ਚੁਣਿਆ ਗਿਆ ਹੈ + ਸਥਾਈ ਥੰਮਨੇਲ ਨੂੰ ਅਨਸੈੱਟ ਕਰੋ + ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ + ਕਾਰਡ \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index aa55dfb0e..4f5ae1448 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -48,7 +48,7 @@ Nie udało się załadować wszystkich miniatur Nie udało się odszyfrować sygnatury URL wideo Nie udało się przetworzyć strony internetowej - Zawartość niedostępna + Treść niedostępna Nie udało się utworzyć menu pobierania Przepraszamy, to nie powinno mieć miejsca. Zgłoś błąd przez e-mail @@ -151,7 +151,7 @@ Nie udało się odtworzyć tego strumienia Wystąpił nieodwracalny błąd odtwarzacza Odzyskiwanie po błędzie odtwarzacza - Nic tu nie ma. Słychać tylko świerszcze. + Nic tu nie ma. Słychać tylko świerszcze. Brak subskrybentów %s subskrybent @@ -206,7 +206,7 @@ Odtwarzacz wideo Odtwarzacz w tle Uzyskiwanie informacji… - Ładowanie żądanej zawartości + Ładowanie żądanej treści Pobierz plik strumienia Pokaż informacje Dodaj do @@ -280,12 +280,12 @@ Zaimportuj subskrypcje YouTube z Google Takeout: \n \n1. Przejdź do tego adresu URL: %1$s. -\n2. Zaloguj się, gdy zostaniesz o to poproszony(-na). +\n2. Zaloguj się, gdy zostaniesz o to poproszony(-a). \n3. Naciśnij „Wybrano wszystkie dane z YouTube”, następnie „Odznacz wszystkie”, potem zaznacz tylko „subskrypcje” i naciśnij „OK”. \n4. Naciśnij „Następny krok”, a następnie „Utwórz eksport”. \n5. Naciśnij przycisk „Pobierz”, gdy się pojawi. \n6. Naciśnij IMPORTUJ PLIK poniżej i wybierz pobrany plik ZIP. -\n7. [Jeśli importowanie pliku ZIP nie powiedzie się] Wypakuj plik subskrypcje.csv (powinien on znajdować się w katalogu „YouTube i YouTube Music/subskrypcje.csv”), naciśnij IMPORTUJ PLIK poniżej i wybierz wypakowany plik CSV. +\n7. [Jeśli importowanie pliku ZIP nie powiedzie się] Wypakuj plik subskrypcje.csv (powinien znajdować się w katalogu „YouTube i YouTube Music/subskrypcje.csv”), naciśnij IMPORTUJ PLIK poniżej i wybierz wypakowany plik CSV. Ta operacja może wygenerować duże użycie danych. \n \nCzy chcesz kontynuować? @@ -298,11 +298,11 @@ \n \n1. Włącz opcję „Wersja na komputery” w przeglądarce internetowej (strona nie jest dostępna dla urządzeń mobilnych). \n2. Przejdź do tego adresu URL: %1$s. -\n3. Zaloguj się, gdy zostaniesz o to poproszony(-na). -\n4. Skopiuj adres URL profilu, na który zostałeś(-aś) przekierowany(-na). +\n3. Zaloguj się, gdy zostaniesz o to poproszony(-a). +\n4. Skopiuj adres URL profilu, na który zostałeś(-aś) przekierowany(-a). Brak strumieni do pobrania Preferowana akcja „otwórz” - Domyślna akcja podczas otwierania zawartości — %s + Domyślna akcja podczas otwierania treści — %s Napisy Zmodyfikuj rozmiar tekstu napisów odtwarzacza i style tła. Wymaga ponownego uruchomienia aplikacji, aby zmiany zostały uwzględnione Wyczyść historię oglądania @@ -321,7 +321,7 @@ Projekt NewPipe bardzo poważnie traktuje Twoją prywatność, dlatego aplikacja nie gromadzi żadnych danych bez Twojej zgody. \nPolityka prywatności NewPipe szczegółowo wyjaśnia, jakie dane są zbierane i przesyłane, kiedy wysyłasz raport o awarii aplikacji. Przeczytaj politykę prywatności - Ze względu na wprowadzenie Ogólnego rozporządzenia o ochronie danych (RODO), chcielibyśmy zwrócić Twoją uwagę na politykę prywatności NewPipe. Prosimy przeczytać ją uważnie. + Ze względu na wprowadzenie Ogólnego rozporządzenia o ochronie danych (RODO) chcielibyśmy zwrócić Twoją uwagę na politykę prywatności NewPipe. Prosimy przeczytać ją uważnie. \nMusisz ją zaakceptować, aby przesyłać nam raporty o błędach. Akceptuj Odrzuć @@ -350,7 +350,7 @@ Powiadomienie o aktualizacji aplikacji Powiadomienia o nowych wersjach NewPipe Pamięć zewnętrzna niedostępna - Pobieranie na kartę SD nie jest możliwe. Zresetować lokalizację folderu zapisywania\? + Pobieranie na kartę pamięci nie jest możliwe. Zresetować lokalizację folderu zapisywania\? Nie udało się odczytać zapisanych kart, więc będą używane domyślne Przywróć domyślne Czy chcesz przywrócić ustawienia domyślne\? @@ -362,8 +362,7 @@ Lista Siatka Automatyczny - Dostępna jest aktualizacja NewPipe! - Naciśnij, aby pobrać + Dostępna jest aktualizacja NewPipe! Zakończone wstrzymane w kolejce @@ -418,12 +417,12 @@ Rozpocznij pobieranie Wstrzymaj pobieranie Pytaj, gdzie pobrać - Zostaniesz zapytany(-na), gdzie zapisać każdy pobrany plik. -\nWłącz systemowy selektor folderów (SAF), jeśli chcesz pobierać pliki na kartę SD + Zostaniesz zapytany(-a), gdzie zapisać każdy pobierany plik. +\nWłącz systemowy selektor folderów (SAF), jeśli chcesz pobierać pliki na kartę pamięci Minął czas połączenia Używaj systemowego selektora folderów (SAF) - Systemowy selektor folderów (SAF) umożliwia pobieranie na kartę SD - Usuń pozycje odtwarzania + Systemowy selektor folderów (SAF) umożliwia pobieranie na kartę pamięci + Wyczyść pozycje odtwarzania Usuwa wszystkie pozycje odtwarzania Usunąć wszystkie pozycje odtwarzania\? Przełącz usługę, aktualnie wybrana: @@ -471,7 +470,7 @@ %d sekundy %d sekund - Ze względu na ograniczenia odtwarzacza ExoPlayer, wielkość skoku przewijania została ustawiona na %d sekund + Wielkość skoku przewijania została ustawiona na %d sekund ze względu na ograniczenia odtwarzacza ExoPlayer Wycisz Wyłącz wyciszenie Czy uważasz, że ładowanie kanałów jest zbyt powolne\? Jeśli tak, spróbuj włączyć szybkie ładowanie (możesz je zmienić w ustawieniach lub naciskając przycisk poniżej). @@ -524,7 +523,6 @@ %d minuty %d minut - Pomoc Ta treść nie jest jeszcze obsługiwana przez NewPipe. \n \nMiejmy nadzieję, że będzie obsługiwana w przyszłej wersji. @@ -533,7 +531,7 @@ Artyści Albumy Piosenki - To wideo ma ograniczenia wiekowe. + To wideo jest objęte ograniczeniem wiekowym. \n \nWłącz „%1$s” w ustawieniach, jeśli chcesz je zobaczyć. Tak, i częściowo obejrzane wideo @@ -580,7 +578,7 @@ Dodano do kolejki Dodaj do kolejki Pokaż wycieki pamięci - Wyczyść ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA + Usuwa ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA Ciasteczka reCAPTCHA zostały wyczyszczone Wyczyść ciasteczka reCAPTCHA YouTube udostępnia „Tryb ograniczonego dostępu”, który ukrywa potencjalne treści dla dorosłych @@ -604,13 +602,13 @@ Żadna aplikacja na Twoim urządzeniu nie może tego otworzyć Powiązane pozycje Zepsuj aplikację - Ta zawartość dostępna jest tylko dla użytkowników, którzy za nią zapłacili. Nie może ona być strumieniowana ani pobierana przez NewPipe. - To wideo dostępne jest tylko dla subskrybentów usługi YouTube Music Premium. Nie może ono być strumieniowane ani pobierane przez NewPipe. - Ta zawartość jest prywatna, więc nie może być strumieniowana ani pobierana przez NewPipe + Ta treść dostępna jest tylko dla użytkowników, którzy za nią zapłacili. Nie może być strumieniowana ani pobierana przez NewPipe. + To wideo dostępne jest tylko dla subskrybentów usługi YouTube Music Premium. Nie może być strumieniowane ani pobierane przez NewPipe. + Ta treść jest prywatna, więc nie może być strumieniowana ani pobierana przez NewPipe Ta treść nie jest dostępna w Twoim kraju - To wideo ma ograniczenia wiekowe. -\nZe względu na nowe zasady YouTube odnośnie ograniczeń wiekowych, NewPipe nie ma dostępu do żadnego z jego strumieni wideo i dlatego nie jest w stanie go odtworzyć. - To jest utwór SoundCloud Go+ (przynajmniej w Twoim kraju). Nie może on być strumieniowany lub pobierany przez NewPipe. + To wideo jest objęte ograniczeniem wiekowym. +\nZe względu na nowe zasady YouTube dotyczące wideo z ograniczeniami wiekowymi NewPipe nie może uzyskać dostępu do żadnego z jego strumieni wideo i dlatego nie jest w stanie go odtworzyć. + To jest utwór SoundCloud Go+ (przynajmniej w Twoim kraju). Nie może być strumieniowany ani pobierany przez NewPipe. Radio Polecane Rozwiąż @@ -620,7 +618,7 @@ Automatyczny (motyw urządzenia) Motyw nocny Pokaż szczegóły kanału - Wyłącz tunelowanie multimediów, jeśli zaobserwowałeś czarny ekran bądź brak płynności odtwarzania wideo + Wyłącz tunelowanie multimediów, jeśli zaobserwowałeś(-aś) czarny ekran bądź brak płynności odtwarzania wideo Wyłącz tunelowanie multimediów Ograniczenie wiekowe Wyłącz zaznaczanie tekstu w opisie @@ -646,7 +644,7 @@ \nCzy chcesz anulować subskrypcję tego kanału\? Nie udało się załadować kanału dla „%s”. Począwszy od Androida 10 obsługiwany jest tylko systemowy selektor folderów (SAF) - Zostaniesz zapytany(-na), gdzie zapisać każdy pobierany plik + Zostaniesz zapytany(-a), gdzie zapisać każdy pobierany plik Nie ustawiono jeszcze folderu zapisywania, wybierz domyślny teraz Błąd podczas ładowania kanału Niepubliczny @@ -745,4 +743,14 @@ Jeśli masz problemy podczas korzystania z aplikacji, koniecznie sprawdź odpowiedzi na najczęściej pojawiające się pytania! Zobacz na stronie internetowej Sortuj + Naciśnij, aby pobrać %s + Tryb szybki + Importuj lub eksportuj subskrypcje z menu z trzema kropkami. + Używasz najnowszej wersji NewPipe + Ta opcja jest dostępna tylko wtedy, gdy %s jest wybrany jako motyw + Usuń stałą miniaturę + Nie udało się skopiować do schowka + Karta + Wyszarzone playlisty zawierają już tę pozycję + Dodano duplikat %d raz(y) \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index ddde09333..f9b3ac196 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -162,7 +162,7 @@ %s vídeos Player - Nada aqui além de grilos + Nada aqui além de grilos Deseja excluir este item do histórico de busca\? Conteúdo da página inicial Página em branco @@ -361,8 +361,7 @@ Lista Grade Automático - Atualização do NewPipe disponível! - Toque para baixar + Atualização do NewPipe disponível! Finalizado pausado na fila @@ -470,7 +469,6 @@ Devido a limitações do ExoPlayer, a duração do avanço foi definida para %d segundos Desativar som Ativar som - Ajuda %d minuto %d minutos @@ -737,4 +735,14 @@ Se você está com problemas ao usar o aplicativo, confira estas respostas para perguntas comuns! Perguntas frequentes Classificar + Modo rápido + Importar ou exportar inscrições do menu de 3 pontos + Toque para baixar %s + Você está executando a versão mais recente do NewPipe + Esta opção só está disponível se %s for selecionado para Tema + Desativar miniatura permanente + Cartão + Falha ao copiar para a área de transferência + Duplicata adicionada %d vez(es) + As playlists em cinza já contêm este item. \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 4fd41be2e..80f6331e3 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -75,7 +75,6 @@ \n \nPara o poder ver, tem que ativar \"%1$s\" nas definições. Ver licença - Ajuda Apenas os URL HTTPS são suportados Falha ao validar a instância Limpar histórico de descargas @@ -151,7 +150,6 @@ %s a ver Por favor aguarde… - Toque para descarregar Limpar Cancelar subscrição Conteúdo @@ -244,7 +242,7 @@ Grelha Exportado Escolha a pasta para colocar os ficheiros de áudio - Atualização NewPipe disponível! + Atualização NewPipe disponível! Eventos Política de privacidade do NewPipe Não foi possível carregar todas as miniaturas @@ -357,7 +355,7 @@ Melhor resolução Selecione um canal Parar - Aqui não há nada para ver + Aqui não há nada para ver Não foi possível configurar o menu de descargas Sem limite Erro @@ -495,7 +493,7 @@ Conteúdo indisponível Subscrito Cache de imagens limpa - Acerca + Sobre e FAQ Contagem de subscrições indisponível Ação padrão ao abrir o conteúdo — %s Repor @@ -718,9 +716,20 @@ Selecione a qualidade para reprodutores externos Tamanho do intervalo de carregamento da reprodução Mostrar artigos futuros - Ocultar artigos vistos + Ocultar itens reproduzidos Ocultar artigos futuros Perguntas frequentes Se tem problemas a usar a app, veja estas respostas para perguntas frequentes! Ver no sítio web + Modo rápido + Importar ou exportar subscrições do menu de 3 pontos + Já está a executar a versão mais recente do NewPipe + Toque para descarregar %s + Ordenação + Esta opção só está disponível se %s for selecionado como tema + Desativar miniatura permanente + Não foi possível copiar para a área de transferência + Cartão + As listas de reprodução acinzentadas já contêm este item. + Duplicar adicionado %d vez(es) \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 3d22a074f..36528078c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -136,7 +136,7 @@ Notificação NewPipe Notificações para o reprodutor do NewPipe Sem resultados - Aqui não há nada para ver + Aqui não há nada para ver Sem subscritores %s subscritor @@ -359,8 +359,7 @@ Lista Grelha Automático - Atualização NewPipe disponível! - Toque para descarregar + Atualização NewPipe disponível! Terminada em pausa na fila @@ -518,7 +517,6 @@ Devido às restrições de ExoPlayer, a duração da pesquisa foi definida para %d segundos Ativar som Sem som - Ajuda Vídeos Este conteúdo ainda não é suportado pelo NewPipe. \n @@ -737,4 +735,14 @@ Ver no site Se está a ter problemas a usar a aplicação, veja estas respostas para perguntas mais comuns! Ordenação + Modo rápido + Importar ou exportar subscrições do menu de 3 pontos + Já está a executar a versão mais recente do NewPipe + Toque para descarregar %s + Esta opção só está disponível se estiver selecionado %s para o tema + Desativar miniatura permanente + Não foi possível copiar para a área de transferência + Cartão + As listas de reprodução acinzentadas já contêm este item. + Duplicar adicionado %d vez(es) \ No newline at end of file diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index c5567b3f2..5eae3876f 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,11 +1,11 @@ - Încărcat pe %1$s + Publicat pe %1$s Niciun player pentru streaming găsit. Instalați VLC\? Instalare Anulare Deschidere în browser - Distribuiți + Distribuire Descărcare Căutare Setări @@ -78,7 +78,7 @@ Vă rugăm așteptați… Copiat în clipboard Vă rugăm să definiți un folder de descărcare mai târziu în setări - Deschide în modul popup + Deschidere în modul popup Această permisiune este necesară pentru a \ndeschide în mod pop-up Provocare reCAPTCHA @@ -105,7 +105,7 @@ Alegeți sugestiile care vor fi afișate la căutare Ștergeți Rezoluție maximă - Abonează-te + Abonare Abonat(ă) Canal dezabonat Nu s-a putut modifica abonamentul @@ -125,7 +125,7 @@ Notificare NewPipe Notificări pentru playerul NewPipe Fără rezultate - Nimic aici în afară de sunetul greierilor + Nimic aici în afară de sunetul greierilor Fără abonați %s abonat @@ -153,7 +153,7 @@ Despre NewPipe Licențe terță-parte © %1$s de %2$s sub %3$s - Despre + Despre & FAQ Licențe Un player de streaming „uşor” liber, pentru Android. Vedeți pe GitHub @@ -176,9 +176,9 @@ Noi și populare Niciun player pentru streaming găsit. (Totuși, puteți instala VLC). Descărcați fișierul de flux - Arată informații + Afișare informații Playlist-uri salvate - Salvează în + Salvare în Folosește parcurgerea rapidă inexactă Derularea inexactă permite player-ului să deruleze mai rapid, cu o precizie redusă. Derularea timp de 5, 15 sau 25 de secunde nu funcționează cu aceasta Încarcă miniaturi @@ -276,7 +276,7 @@ Viteză Acceptați Refuzați - Dezabonează-te + Dezabonare Alegeți fila Controlul prin gesturi al volumului Utilizați gesturi pentru a controla volumul @@ -348,7 +348,6 @@ Gata Apăsați \"Gata\" după ce ați rezolvat problema Raportați pe GitHub - Ajutor Ștergeți cookie-urile pe care NewPipe le stochează atunci când rezolvați un reCAPTCHA Cookie-urile reCAPTCHA au fost șterse Ștergeți cookie-urile reCAPTCHA @@ -368,9 +367,9 @@ Faceți ca Android să personalizeze culoarea notificării în funcție de culoarea principală din miniatură (rețineți că aceasta nu este disponibilă pe toate dispozitivele) Colorează notificarea Nimic - Tamponare + Se încarcă Redare aleatorie - Repetaţi + Repetare Puteți selecta cel mult trei acțiuni pentru afișare în notificarea compactă! Modificați fiecare acțiune de notificare de mai jos, atingând-o. Selectați până la trei dintre ele pentru a fi afișate în notificarea compactă, utilizând casetele de selectare din dreapta Al cincilea buton de acțiune @@ -380,7 +379,7 @@ Primul buton de acțiune Tăiați miniatura video afișată în notificare de la raportul de aspect 16:9 la 1:1 (poate introduce distorsiuni) Tăiere miniatură la raportul de aspect 1:1 - Se arată rezultate pentru:%s + Se arată rezultate pentru: %s Nicio aplicație de pe dispozitivul dvs. nu poate deschide acesta Capitole Recente @@ -512,8 +511,7 @@ Întrerupt În așteptare Finalizat - Atingeți pentru a descărca - Actualizare NewPipe disponibilă! + Actualizare NewPipe disponibilă! Automat Grilă Listă @@ -597,7 +595,7 @@ Dezactivați pentru a ascunde casetele de informații meta cu informații suplimentare despre creatorul fluxului, conținutul fluxului sau o cerere de căutare Dezactivați pentru a ascunde descrierea videoclipului și informațiile suplimentare Arată descrierea - Deschideți cu + Deschidere cu Blocați aplicația Rezolvați Evidențiate @@ -733,4 +731,16 @@ Afișați elementele din viitor Ascunde elementele vizionate Ascunde elementele din viitor + Vezi pe website + Dacă întâmpinați probleme cu utilizarea aplicației, nu uitați să consultați aceste răspunsuri la întrebări frecvente! + Întrebări frecvente + Sortează + Modul rapid + Importați sau exportați abonamente din meniul cu 3 puncte + Rulați cea mai recentă versiune NewPipe + Atingeți pentru a descărca %s + Această opțiune este disponibilă numai dacă %s este selectată ca temă + Cartelă + Nu s-a reușit copierea în clipboard + Dezactivare miniatură permanentă \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 048f5723e..999e9b2fe 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -147,7 +147,7 @@ История и кэш Отмена Нет результатов - Ничего нет + Ничего нет Нет подписчиков %s подписчик @@ -370,8 +370,7 @@ Уведомления о новых версиях NewPipe Обновления Показать уведомление при наличии новой версии - Доступно обновление NewPipe! - Нажмите для загрузки + Доступно обновление NewPipe! Завершено приостановлено в очереди @@ -476,7 +475,6 @@ Из-за ограничений ExoPlayer точность перемотки составляет %d секунд Отключить звук Включить звук - Помощь Введите имя группы %d выбрана @@ -663,7 +661,7 @@ Высокое качество (крупнее) Миниатюра над полосой прокрутки Автору видео понравилось это - Пометить просмотренными + Пометить проигранным Picasso: указать цветом источник изображений (красный — сеть, синий — диск, зелёный — память) Цветные метки на изображениях Серверные предложения поиска @@ -694,8 +692,8 @@ Новые видео Уведомления о новых видео в подписках Частота проверки - Уведомлять о новых видео - Получать уведомления о новых видео из каналов, на которые Вы подписаны + Новые видео + Уведомлять о новых видео в подписках Тип подключения Любая сеть Уведомления отключены @@ -718,11 +716,11 @@ Закреплённый комментарий LeakCanary недоступна Стандартное значение ExoPlayer - Изменить размер предварительной загрузки (сейчас %s). Меньшее значение может ускорить загрузку видео. При изменении требуется перезапуск плеера + Изменить интервал загрузки (сейчас %s). Меньшее значение может ускорить запуск видео. Нужен перезапуск плеера Загрузка сведений о трансляции… Проверить наличие новых трансляций Удалить все загруженные файлы\? - Уведомления плеера + Уведомление плеера , Полутон Проценты @@ -738,7 +736,17 @@ Скрыть проигранные Скрывать будущие видео Ответы на частые вопросы - Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространенные вопросы! - Посмотреть на вебсайте + Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространённые вопросы! + Посмотреть на веб-сайте Сортировка + У вас последняя версия + Быстрый режим + Импорт и экспорт подписок в меню с 3-мя точками + Нажмите для загрузки %s + Карта + Не удалось скопировать в буфер обмена + Доступно, когда Тема установлена в %s + Убрать постоянную миниатюру + Дубликат добавлен %d раз(а) + Плейлисты, выделенные серым уже содержат этот объект. \ No newline at end of file diff --git a/app/src/main/res/values-sat/strings.xml b/app/src/main/res/values-sat/strings.xml index a5c59c700..836ab01c3 100644 --- a/app/src/main/res/values-sat/strings.xml +++ b/app/src/main/res/values-sat/strings.xml @@ -64,4 +64,9 @@ ᱥᱟᱰᱮ ᱧᱮᱞ ᱠᱟᱱ ᱞᱮᱠᱷᱟ ᱪᱤᱱᱦᱟᱹ ᱠᱟᱜ ᱢᱮ ᱯᱞᱮᱭᱚᱨ ᱠᱨᱟᱥ ᱠᱟᱜ ᱢᱮ + ᱛᱷᱤᱢ + ᱟᱨᱥᱟᱞ + ᱧᱩᱛ + ᱧᱩᱛ ᱛᱷᱤᱢ + ᱦᱮᱱᱫᱮ \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 7af30f884..68c6fd5c1 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -174,7 +174,7 @@ Àudio Vìdeu Traga pro torrare a ordinare - Non b\'at nudda inoghe + Non b\'at nudda inoghe Perunu resurtadu Disagradessimentos Agradessimentos @@ -344,8 +344,7 @@ in pàusa In isetu Acabadu - Toca pro iscarrigare - B\'est un\'agiornamentu de NewPipe disponìbile! + B\'est un\'agiornamentu de NewPipe disponìbile! Automàtica Grìllia Lista @@ -382,7 +381,6 @@ Impossìbile iscarrigare in s\'ischeda SD esterna. Cheres resetare sa positzione de sa cartella de iscarrigamentu\? Memòria esterna non disponìbile Errore - Agiudu Cheres iscantzellare totu sa cronologia de sas chircas\? Iscantzella sa cronologia de sas paràulas chircadas Iscantzella sa cronologia de chirca @@ -724,4 +722,14 @@ Si ses tenende problemas impreende s\'aplicatzione assegura·ti de consultare custas rispostas a preguntas fitianas! Pòmpia in su situ web Òrdina + Toca pro iscarrigare %s + Modalidade lestra + Importa o esporta iscritziones dae su menù a 3 puntos + Ses impreende s\'ùrtima versione de NewPipe + Custa optzione est a disponimentu petzi si %s est seletzionadu comente tema + Carta + Còpia in punta de billete fallida + Disativa sa miniadura permanente + Sas iscalitas in colore murru tenent giai custu elementu. + Duplicadu annantu %d borta(s) \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index cb6b42f7d..f8340b47b 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -144,7 +144,7 @@ História a vyrovnávacia pamäť Vrátiť Žiadne výsledky - Zatiaľ je tu ticho ako v hrobe + Zatiaľ je tu ticho ako v hrobe Žiadni odberatelia %s odberateľ @@ -361,8 +361,7 @@ Zoznam Mriežka Auto - Aktualizácia NewPipe je k dispozícii! - Ťuknite a stiahnite + Aktualizácia NewPipe je k dispozícii! Ukončené Vo fronte pozastavené @@ -465,7 +464,6 @@ Pre obmedzenie ExoPlayera bolo prehľadávania nastavené na %d sekúnd Stlmiť Povoliť - Pomoc %d sekunda %d sekundy @@ -737,4 +735,14 @@ Pozrieť na webovej stránke Usporiadať Ak máte problémy s používaním aplikácie, určite si prečítajte tieto odpovede na časté otázky! + Vypnutie trvalého náhľadu + Kopírovanie do schránky zlyhalo + Zoznamy zobrazené šedou farbou už obsahujú danú položku. + Karta + Dotykom stiahnite %s + Duplikát bol pridaný %d-krát + Používate najnovšiu verziu NewPipe + Táto možnosť je dostupná len pre motív %s + Rýchly režim + Import alebo export odberov z 3-bodkovej ponuky \ No newline at end of file diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index a0314b710..222b4b137 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -61,7 +61,7 @@ Poskusi znova Opomba (v angleščini): v živo - Začnite z iskanjem + Pritisnite lupo in začnite z iskanjem. Začni Premor Izbriši @@ -144,7 +144,7 @@ Zgodovina in predpomnilnik Razveljavi Ni rezultatov iskanja - Tu ni ničesar! + Tu ni ničesar! Ni naročnikov %s naročnik @@ -227,7 +227,6 @@ Prenos spodletel Pavza Končano - Tapnite da prenesete Seznam Posodobitve Sprejmi @@ -321,13 +320,13 @@ Naključno Ponovi Izberete lahko največ 3 dejanja, ki se bodo prikazala v kompaktnem obvestilu! - Uredite vsako obvestilo z klikom na obvestilo. Izberite do 3 obvestila, ki se bodo prikazala v kompaktnem obvestilu z uporabo potrditvenega polja na desni. + Uredite vsako dejanje obvestila z klikom na posamezno dejanje. Z uporabo potrditvenega polja na desni izberite do 3 dejanja obvestil, ki se bodo prikazala v kompaktnem obvestilu Gumb za peto dejanje Gumb za četrto dejanje Gumb za tretje dejanje Gumb za drugo dejanje Gumb za prvo dejanje - Povečaj sličico videa, ki je prikazana v obvestilu iz razmerja 16:9 v razmerje 1:1 (lahko pride do popačenja) + Povečaj sličico videa, ki je prikazana v obvestilu iz razmerja 16:9 v razmerje 1:1 Zruši aplikacijo Spremeni velikost besedila podnapisov in stil ozadja v predvajalniku. Zahteva ponovni zagon aplikacije, da učinkuje. Podnapisi @@ -401,7 +400,6 @@ Obnavljanje od napake predvajanika Prišlo je do neobnovljive napake v predvajalniku Zunanja shramba ni na voljo - Pomoč Izbriše zgodovino ključnih besed za iskanje Položaji predvajalnika so bili izbrisani. Ali želite izbrisati vse položaje predvajalnika\? @@ -446,7 +444,7 @@ Prikazujem rezultate za %s Vrsta V vrsti - NewPipe posodobitve so na voljo! + NewPipe posodobitve so na voljo! Avtomatsko Mreža Nikoli @@ -466,4 +464,8 @@ Prikaži puščanje pomnilnika Prikaži detajle kanala Nočna tema + Povečaj sličico na razmerje 1:1 + Označi kot že ogledano + Uporabite hitro nenatančno iskanje + Sesuj predvajalnik \ No newline at end of file diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 431ef57ad..530cb465d 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -75,8 +75,7 @@ la qabtay Socda Dhamaystirmay - Ku dhufo si aad u dajiso - Nooc cusub oo NewPipe ah ayaa diyaar ah! + Nooc cusub oo NewPipe ah ayaa diyaar ah! Qaabka soobandhigga Marna WiFi-ga kaliya @@ -252,7 +251,7 @@ Dhagaysi Muuqaal Farta ku jiid si aad ukala hormariso - meel madhan + meel madhan natiijo lama helin intaan ka helin inta ka heshay @@ -297,7 +296,6 @@ Ku dajinta kaydka dibadda (mimoriga) suurtogal ma aha. Dib u fadhiisi khaanada wax lagu dajiyo\? Kaydka dibadda lama heli karo Khalad - Caawin Wixii la raadiyay waa la tirtiray Tirtir dhamaan wixii la raadiyay\? Wuxuu tirtiraa kaydka wixii lagu qoray xaga raadinta diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 74d89908b..073800b76 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -110,8 +110,7 @@ e shtuar në radhë ndalur Përfunduar - Shtyp për të shkarkuar - Përditësim i ri i NewPipe është i disponueshëm! + Përditësim i ri i NewPipe është i disponueshëm! Automatike Listë Pamja e listës @@ -306,7 +305,7 @@ Audio Video Tërhiqe për të ri-radhitur - Nuk ka asgjë këtu përveç bulkthave + Nuk ka asgjë këtu përveç bulkthave Nuk ka rezultate Mospëlqimet Pëlqimet @@ -410,7 +409,6 @@ Shkarkimi në kartën SD të jashtme nuk ishte i mundur. Doni të rivendosni vendndodhjen e dosjes së shkarkimeve\? Magazina e jashtme u padisponueshme Gabim - Ndihmë Historiku i kërkimeve u fshi Doni të fshini të gjithë historikun e kërkimeve\? Fshin historikun e fjalëve kyçe të kërkuara diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 26c3e896f..e87498e53 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -138,7 +138,7 @@ Њупајп обавештење Обавештења за Њупајп плејере у позадини и искачућем прозору Нема резултата - Нема ничега овде осим цврчака + Нема ничега овде осим цврчака Нема пратилаца %s пратилац @@ -268,8 +268,7 @@ паузирано На чекању Завршено - Тапните за преузимање - Доступно је ажурирање за ЊуПајп! + Доступно је ажурирање за ЊуПајп! аутоматски мрежа листа @@ -438,7 +437,6 @@ Спољни плејери не подржавају ове врсте веза Преузимање на спољну СД картицу није могуће. Ресетовати локацију фасцикле за преузимање\? Спољно складиште није доступно - Помоћ Историја претраге је обрисана Да обришем целу историју претраге\? Брише историју кључних речи за претрагу diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 1f13a4601..a64bbf555 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -109,7 +109,7 @@ Spela video, längd: Uppladdarens avatar-miniatyrbild Inga resultat - Här va\' det tomt + Här va\' det tomt Video Ljud Försök igen @@ -157,7 +157,7 @@ Om NewPipe Tredjepartslicenser © %1$s av %2$s under %3$s - Om + Om & FAQ Licenser Öppen och enkel Android-app för mediastreaming. Visa på GitHub @@ -355,8 +355,7 @@ Lista Rutnät Automatiskt - En NewPipe-uppdatering är tillgänglig! - Tryck för att hämta + En NewPipe-uppdatering är tillgänglig! Färdig pausad köad @@ -399,7 +398,6 @@ Endast HTTPS-URL:er stöds Instansen finns redan Videor - Hjälp Ta bort alla uppspelningspositioner\? Tar bort alla uppspelningspositioner Filen har flyttats eller tagits bort @@ -720,4 +718,16 @@ Den valda videoströmmen stöds inte av externa spelare Göm framtida objekt Göm sedda objekt + Om du har problem med att använda appen, kolla in dessa svar på vanligt ställda frågor! + Vanligt ställda frågor + Visa på webbplats + Sortera + Importera eller exportera prenumerationer från 3-punktsmenyn + Snabbt läge + Du använder den senaste versionen av NewPipe + Tryck för att ladda ner %s + Det här alternativet är endast tillgängligt om %s har valts som Tema + Inaktivera permanent miniatyrbild + Det gick inte att kopiera till urklipp + Kort \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f2fa5c40f..3b8bff427 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -87,7 +87,7 @@ விவரங்கள்: விருப்பங்கள் முடிவுகள் இல்லை - எந்த முடிவுகளும் இல்லை + எந்த முடிவுகளும் இல்லை இழுத்து வரிசைமாற்று காணொலி ஒலி @@ -241,7 +241,6 @@ இயக்கக குறியிடங்கள் அழிக்கப்பட்டன விவரிப்பு தொகுப்புகள் - உதவி கலைஞர்கள் காணொளிகள் HTTPS உரலிகள் மட்டுமே ஆதரிக்கப்படுகின்றன @@ -303,7 +302,6 @@ இப்பெயருடன் ஒரு பதிவிறக்கம் நிலுவையிலுள்ளது பின்னர் பதிவிறக்க அடைவை அமைவில் வரையறுக்கவும் பதிவிறக்கம் - பதிவிறக்க தட்டு பதிவிறக்கத்தை ரத்துசெய்வதற்கு முன் செய்யவேண்டிய அதிகபட்ச முயற்சிகள் பதிவிறக்கம் முடிந்தது @@ -317,7 +315,7 @@ இப்பதிவிறக்கத்தை மீட்டெடுக்க முடியவில்லை உருப்படிகளை அகற்ற அவற்றைத் தேய் பிழை அறிவிப்பைப் படை - NewPipe புதுப்பிப்பு கிடைக்கிறது! + NewPipe புதுப்பிப்பு கிடைக்கிறது! அருகலையில் மட்டும் ஒருபோதுமில்லை பட்டியல் பார்வை முறை @@ -375,4 +373,5 @@ சந்தாவுக்கான புதிய ஸ்ட்ரீம்கள் பற்றிய அறிவிப்புகள் இந்த வீடியோ வயது வரம்புக்குட்பட்டது. \nவயது வரம்புக்குட்பட்ட வீடியோக்கள் கொண்ட புதிய YouTube கொள்கைகள் காரணமாக, NewPipe ஆல் அதன் எந்த வீடியோ ஸ்ட்ரீம்களையும் அணுக முடியாது, இதனால் அதை இயக்க முடியவில்லை. + வேகமான பயன்முறை \ No newline at end of file diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 22ad6fbf5..ac34a316e 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -271,13 +271,12 @@ చెక్సమ్ వీడియో URL సంతకాన్ని డీఓబ్‌ఫస్కేట్ చేయడం సాధ్యపడలేదు GitHubపై నివేదించు - ఇక్కడ క్రికెట్‌లు తప్ప మరేమీ లేదు + ఇక్కడ క్రికెట్‌లు తప్ప మరేమీ లేదు ఎవరూ వినడం లేదు ఎవరూ చూడటం లేదు వ్యాఖ్యలు లేవు బాహ్య SD కార్డ్‌కి డౌన్‌లోడ్ చేయడం సాధ్యం కాదు. డౌన్‌లోడ్ ఫోల్డర్ స్థానాన్ని రీసెట్ చేయాలా\? సృష్టించు - సహాయం డౌన్‌లోడ్ చేయడానికి స్ట్రీమ్‌లు ఏవీ అందుబాటులో లేవు డిఫాల్ట్‌ విలువలకు మార్చు క్రమాన్ని మార్చడానికి లాగండి @@ -450,4 +449,26 @@ అడుగు నిశ్శబ్ద సమయంలో వేగంగా ముందుకు వెళ్లుము ప్లేబ్యాక్ స్పీడ్ నియంత్రణలు + ఏమిలేదు + మీరు బ్లాక్ స్క్రీన్ లేదా చలనచిత్రం ప్లేబ్యాక్‌లో అంతరాయాన్ని అనుభవిస్తే మీడియా టన్నెలింగ్‌ను నిలిపివేయండి + చిత్రాల మూలాన్ని సూచించే విధంగా వాటి పైభాగంలో పికాసో రంగు రిబ్బన్‌లను చూపండి: నెట్‌వర్క్ కోసం ఎరుపు, డిస్క్ కోసం నీలం మరియు మెమరీ కోసం ఆకుపచ్చ + లోపం స్నాక్‌బార్‌ని చూపండి + మీరు NewPipe యొక్క తాజా సంస్కరణను అమలు చేస్తున్నారు + NewPipe నవీకరణ అందుబాటులో ఉంది! + పూర్తయింది + వేలాడుతున్న + సర్వీస్‌ల నుండి ఒరిజినల్ టెక్స్ట్‌లు స్ట్రీమ్ ఐటెమ్‌లలో కనిపిస్తాయి + \"ప్లేయర్ పతనం\" చూపించు + ప్లేయర్‌ని ఉపయోగిస్తున్నప్పుడు పతనం ఎంపికను చూపుము + యాప్‌ను పతనం చేయండి + తక్కువ నాణ్యత (చిన్నది) + చూపించవద్దు + మీడియా టన్నెలింగ్‌ని నిలిపివేయండి + చిత్ర సూచికలను చూపు + కొత్త స్ట్రీమ్‌ల కోసం తనిఖీని అమలు చేయండి + ఎర్రర్ నోటిఫికేషన్‌ను సృష్టించండి + దిగుమతి + ఆగిపోయింది + క్రమం + %sని డౌన్‌లోడ్ చేయడానికి నొక్కండి \ No newline at end of file diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 3c0848af1..fd7e457bf 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -15,7 +15,7 @@ ตั้งค่า หรือคุณหมายถึง \"%1$s\"\? แชร์ด้วย - Use external video player + ใช้เครื่องเล่นวีดิโอภายนอก ใช้แอปเล่นเสียงภายนอก ติดตาม ติดตามแล้ว @@ -167,7 +167,7 @@ ชอบ ไม่ชอบ ไม่มีผลลัพธ์ - ไม่มีอะไรที่นี่นอกจากจิ้งหรีด + ไม่มีอะไรที่นี่นอกจากจิ้งหรีด ลากเพื่อจัดลำดับใหม่ วิดีโอ เสียง @@ -331,8 +331,7 @@ รายการ ตาราง อัตโนมัติ - NewPipe พร้อมให้อัพเดทแล้ว! - แตะเพื่อดาวน์โหลด + NewPipe พร้อมให้อัพเดทแล้ว! เสร็จแล้ว อยู่ในคิว หยุดชั่วคราว @@ -358,7 +357,7 @@ หยุดชั่วคราวเมื่อเปลี่ยนเป็นข้อมูลมือถือ การดาวน์โหลดที่ไม่สามารถหยุดพักได้จะเริ่มต้นใหม่ ปิด - Removes audio at some resolutions + บางความละเอียดอาจไม่มีเสียง แคช metadate ถูกลบแล้ว เล่นต่อหลังจากการขัดจังหวะ เล่นต่อ @@ -367,4 +366,16 @@ แสดงตำแหน่งวีดิโอที่เล่นในรายการ ล้างข้อมูล กำลังแสดงผลลัพธ์สำหรับ: %s + เปิดด้วย + ทำเครื่องหมายว่าดูแล้ว + ตกลง + ปุ่มการกระทำที่สี่ + ปุ่มการกระทำแรก + ปุ่มการกระทำที่สาม + ปุ่มการกระทำที่ห้า + แก้ไขการกระทำของการแต่การแจ้งเตือนด้วยการแตะไปที่มัน เลือกสามรายการที่จะแสดงในการแจ้งเตือนในการแจ้งเตือนแบบกระทัดรัดโดยใช้ปุ่มกาเครื่องหมายทางขวา + ครอบตัดตัวอย่างภาพเป็นอัตราส่วน 1:1 + ครอบตัดตัวอย่างภาพที่แสดงในการแจ้งเตือนจากอัตราส่วน 16:9 เป็น 1:1 + ทำเครื่องเล่นพัง + ปุ่มการกระทำรอง \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index eb7c157b0..898256031 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -108,7 +108,7 @@ NewPipe Hakkında Üçüncü Taraf Lisansları © %1$s, %2$s tarafından %3$s altında - Hakkında & SSS + Hakkında ve SSS Lisanslar Android\'de özgür ve hafif bir oynatıcı. GitHub\'da Görüntüle @@ -142,7 +142,7 @@ NewPipe bildirimi NewPipe oynatıcısı için bildirimler Sonuç yok - Burada cırcır böceklerinden başka bir şey yok + Burada cırcır böceklerinden başka bir şey yok Abone yok %s abone @@ -352,8 +352,6 @@ Liste Izgara Otomatik - NewPipe güncellemesi var! - İndirmek için dokunun Tamamlandı durduruldu sırada @@ -464,7 +462,6 @@ ExoPlayer kısıtlamaları gereği konumlama süresi %d saniyeye belirlenmiştir Sessize al Sesi aç - Yardım %d dakika %d dakika @@ -724,4 +721,15 @@ Web sitesinde görüntüle Uygulamayı kullanırken sorun yaşıyorsanız, sık sorulan sorulara verilen bu yanıtlara göz atmayı unutmayın! Sırala + Hızlı kip + En yeni NewPipe sürümünü kullanıyorsunuz + NewPipe güncellemesi var! + %s indirmek için dokunun + 3-nokta menüsünden abonelikleri içe veya dışa aktarın + Bu seçenek yalnızca tema için %s seçildiğinde kullanılabilir + Kalıcı küçük resmin ayarını kaldır + Kart + Panoya kopyalanamadı + %d kez kopyası eklendi + Gri oynatma listeleri halihazırda bu ögeyi içeriyor. \ No newline at end of file diff --git a/app/src/main/res/values-tzm/strings.xml b/app/src/main/res/values-tzm/strings.xml index f121dadde..31d89bdd5 100644 --- a/app/src/main/res/values-tzm/strings.xml +++ b/app/src/main/res/values-tzm/strings.xml @@ -119,7 +119,6 @@ Avidyu Umelan: Tazgelt - Tiwisi Afaylu Ku dwal Sfeḍ diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index f82c3e124..a8904c05e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -16,7 +16,7 @@ Тека для завантаження відео Виберіть теку для завантаження відеофайлів Виберіть теку для завантаження аудіофайлів - Шлях до теки зі завантаженими відео + Шлях до теки із завантаженими відео Тека для завантаження аудіо Завантажені аудіофайли зберігаються тут Типова роздільність @@ -52,7 +52,7 @@ Звіт Інформація: Що сталося: - Натисніть на «лупу», щоб почати. + Торкніться лупи, щоб розпочати. Чорна Завантаження Завантаження @@ -198,7 +198,7 @@ Вільне та легке потокове програвання на Android. Які б не були ваші ідеї: переклад, дизайн, легкий чи глобальний рефакторинг — будь-яка допомога завжди у пригоді. Що більше зроблено, то ліпшим стає NewPipe! Зневадження - Нічого немає… чути лише цвіркунів + Нічого немає… чути лише цвіркунів Немає переглядів %s перегляд @@ -293,7 +293,7 @@ \n \nБажаєте продовжити\? Завантажувати ескізи - Вимкніть для запобігання завантаженню ескізів, що заощадить трафік та внутрішню пам\'ять. Зміни призведуть до очищення кешу зображень + Вимкніть для запобігання завантаженню ескізів, що заощадить трафік і внутрішню пам\'ять. Зміни призведуть до очищення кешу зображень Кеш зображень стерто Стерти кеш метаданих Видалити всі кешовані дані вебсторінок @@ -321,7 +321,7 @@ Імпортувати разом з налаштуваннями\? Політика приватності NewPipe Проєкт NewPipe дуже серйозно ставиться до вашої приватності. Тому застосунок не збирає ніяких даних без вашої згоди. -\nПолітика приватності докладно NewPipe пояснює, які дані надсилаються і зберігаються у звіті про збій програми. +\nПолітика приватності докладно NewPipe пояснює, які дані надсилаються і зберігаються у звіті про збій. Читати політику приватності З метою дотримання Загального регламенту про захист даних ЄС (General Data Protection Regulation, GDPR) ми звертаємо вашу увагу на політику приватності NewPipe. Будь ласка, прочитайте уважно. \nВи маєте прийняти її, аби надіслати нам звіт про помилку. @@ -362,8 +362,7 @@ Конференції Оновлення Автоматично - Доступне оновлення NewPipe! - Натисніть для завантаження + Доступне оновлення NewPipe! Завершено Очікує призупинено @@ -405,7 +404,7 @@ Позиції відтворення видалено Файл переміщено або видалено не можу перезаписати файл - Завантаження з такою назвою вже є в черзі + Завантаження з такою назвою вже додано в чергу NewPipe був закритий під час роботи над файлом На пристрої не залишилося вільного місця Прогрес втрачено через видалення файлу @@ -485,7 +484,6 @@ Вимкнути звук Увімкнути звук Локальне - Допомога Відео Не вдалося перевірити сервер NewPipe ще не підтримує цей вміст. @@ -580,7 +578,7 @@ Повʼязані елементи Коментарі Налаштувати повідомлення про відтворюваний наразі потік - Не розпізнано URL. Відкрити через іншу програму\? + Не розпізнано URL. Відкрити через інший застосунок\? Автоматична черга Показувати метадані Показувати описи @@ -741,4 +739,14 @@ Поширені запитання Якщо у вас виникли проблеми з використанням застосунку, обов\'язково ознайомтеся з відповідями на поширені запитання! Сортувати + Ви використовуєте найновішу версію NewPipe + Торкніться, щоб завантажити %s + Імпорт або експорт підписок з 3-крапкового меню + Швидкий режим + Ця опція доступна, лише якщо темою обрано %s + Прибрати постійну мініатюру + Картки + Не вдалося скопіювати до буфера обміну + Дублікат додано %d раз(ів) + У виділених сірим кольором добірках цей елемент уже є. \ No newline at end of file diff --git a/app/src/main/res/values-und/strings.xml b/app/src/main/res/values-und/strings.xml index 6452b31c2..f22a117c5 100644 --- a/app/src/main/res/values-und/strings.xml +++ b/app/src/main/res/values-und/strings.xml @@ -60,7 +60,6 @@ ہمیشہ نوٹ [نامعلوم] - مدد خرابی کوئی وی آڈیو سٹریماں نہیں ملیاں رپورٹ کرو @@ -95,11 +94,9 @@ روکو مٹاؤ کھاتہ بند کیتا گیا - ڈاؤنلوڈ کرن لئی دباؤ آٹو %1$s نوں جاری کیتی گئی ایس وچ کھُلھو - نیوپائیپ دا نواں ورژن اُپلبدھ اے! تیردی تصویر وچ کھُلھو سٹریم دی فائل ڈاؤن‌لوڈ کرو %s لئی نتیجے وِکھاۓ جا رہے ہن diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 2c3582209..686644fd9 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -144,7 +144,7 @@ پسندیدگی ناپسندیدگی کوئی نتائج نہیں - یہاں کچھ نہیں سوائے میرے + یہاں کچھ نہیں سوائے میرے دوبارہ ترتیب دینے کیلئے کھینچں ویڈیو آڈیو @@ -350,8 +350,7 @@ فہرست گرڈ خودکار - نیو پائپ کی تازہ کاری دستیاب! - ڈاؤن لوڈ کرنے کے لئے کلک کریں + نیو پائپ کی تازہ کاری دستیاب! ختم ملتوی توقف @@ -456,7 +455,6 @@ گِٹ ہب میں اطلاع دیں فارمیٹڈ رپورٹ کو کاپی کریں دوسرے ایپس پر نظر آنے کی اجازت دیں - مدد ان کوکیز کو صاف کریں جنہیں نیو پائپ ری کیپچا حل کرنے کے دوران جمع کرتا ہے ری کیپچا کوکیز صاف ہوئیں ری کیپچا کوکیز کو صاف کریں @@ -500,4 +498,14 @@ کے ساتھ کھولیں ویڈیو پلیئر کو کریش کریں دیکھے ہوئے کو نشان لگائیں + مقامی تلاش کی سفارشات + اطلاعات + مین پلیئر کو مکمل سکرین سے شروع کریں + غلطی کی دستاویزات کی اطلاع + غلطی کی حبر کی اطلاعات + جب ٹھیک ہو جائے تو \"Done\" دبائیں + حل کریں + زیادہ تر پوچھے گئے سوالات + اگر آپ کو یہ ایپ استعمال کرنے میں دشواری آ رہی ہو تو ان عام سوالات کے جوابات کو ضرور دیکھیں! + ویب سائٹ پر دیکھیں \ No newline at end of file diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 115c853cf..8262abcef 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -191,7 +191,7 @@ Tên tệp không được để trống Đã xảy ra lỗi: %1$s Không có luồng nào để tải về - Không có gì cả :P + Không có gì cả :P Kéo để sắp xếp lại Không có người đăng ký @@ -354,8 +354,7 @@ Danh sách Lưới Tự động - Đã có bản cập nhật mới! - Nhấn để tải về + Đã có bản cập nhật mới! Xong đã tạm dừng trong hàng đợi @@ -439,7 +438,7 @@ \nBạn có chắc không\? Video sẽ không thể hồi phục được! Xóa video đã xem\? Xóa video đã xem - Mặt định hệ thống + Mặc định hệ thống Ngôn ngữ ứng dụng \'Storage Access Framework\' cho phép tải về thẻ SD Sử dụng trình chọn thư mục của hệ thống (SAF) @@ -464,7 +463,6 @@ %s người xem Cho phép hiển thị trên các ứng dụng khác - Trợ giúp Nghệ sĩ Album Bài hát diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml index 63fc81644..817cd8f85 100644 --- a/app/src/main/res/values-w820dp/dimens.xml +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -3,4 +3,7 @@ (such as screen margins) for screens with more than 820dp of available width. This would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> 64dp + + 280dp + 160dp diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 87d85696f..06ae30657 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -41,7 +41,7 @@ 播放器 历史记录与缓存 撤销 - 全部播放 + 播放全部 总是 仅一次 添加至 @@ -59,7 +59,7 @@ 无法得知订阅人数 有新版本时,显示通知提示更新应用 网格 - NewPipe 可更新! + NewPipe 可更新! 服务器不接受多线程下载, 使用 @string/msg_threads = 1 重试 自动播放 清空数据 @@ -164,7 +164,7 @@ reCAPTCHA 验证 已请求新的 reCAPTCHA 验证 在悬浮窗中播放 - 默认分辨率(悬浮窗模式) + 悬浮窗默认分辨率 使用更高的分辨率 仅部分设备支持播放 2K 或 4K 视频 清除 @@ -196,7 +196,7 @@ NewPipe 播放器的通知 默认视频格式 行为 - 空空如也 + 空空如也 无人观看过 是否删除此条搜索历史记录? 主页面的显示内容 @@ -366,7 +366,6 @@ 更新 列表 自动 - 点击下载 处理中 生成唯一名称 覆盖 @@ -458,7 +457,6 @@ 由于 ExoPlayer 的限制,寻址间隔置为 %d 秒 静音 取消静音 - 帮助 %d 分钟 @@ -607,7 +605,7 @@ 支持 语言 年龄限制 - 私有性 + 私密性 许可 标签 类别 @@ -711,4 +709,14 @@ 如果你在使用本应用时遇到问题,请务必查看这些常见问题的答案! 在网站上查看 排序 + 快速模式 + 从三点菜单导入或导出订阅 + 你正在运行最新版的 NewPipe + 轻按下载 %s + 只有在主题中选择了 %s 该选项才可用 + 取消设置永久缩略图 + 卡片 + 无法复制到剪贴板 + 变灰的播放列表已经包含此项目。 + 重复添加了 %d 次 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index e2dac3189..42661322f 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -108,7 +108,7 @@ 關於 NewPipe 第三方版權協議 © %1$s %2$s 版權所有,根據 %3$s 嘅條款授權 - 關於 + 跋記 版權協議 喺 Android 上盡享自由輕便串流。 去 GitHub 睇下 @@ -217,7 +217,6 @@ 記低睇過嘅影片 自動播放 更新 - 說明 開啟 YouTube 嘅「嚴格篩選模式」 冇串流下載得到 畀權限去喺其他 app 上面顯示 @@ -261,7 +260,6 @@ 自動 低畫質 (細格啲) 唔顯示 - 撳一下去下載 無觀看次數 %s 個人聽緊 @@ -369,7 +367,7 @@ 更新 出咗新版本嘅時候,顯示通知提示升級個 app 手動檢查下有冇新版本 - NewPipe 出咗更新! + NewPipe 出咗更新喇! 仲等緊 恢復緊 動作被系統拒絕咗 @@ -512,7 +510,7 @@ 自動 (跟返部機嘅主題色系) 精選 廣播 - 您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,個頁面可能眨眨下,同埋啲連結會撳唔到。 + 您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,版面可能會有啲眨,同埋啲連結會撳唔到。 啟用揀選描述入面嘅文字 版權協議 分類 @@ -535,7 +533,7 @@ 攝咗做下個等陣播 點做法 影片雜湊進度嘅通知 - 大笪地 + 大笪地 抹走搜尋紀錄 刪除搜尋關鍵字嘅紀錄 係咪要全部剷走晒搜尋嘅紀錄? @@ -709,4 +707,16 @@ 未夠鐘上畫嘅項目就收埋 去網站睇下 排序 + 常見問題 + 若然您用呢個 app 有疑問,然而「亦有些難啟齒」,不妨睇下常見問題集,話唔定會發現「有場舞還未發表」! + 快速模式 + 右上角嘅選單有得匯入或匯出訂閱 + 您已經用緊最新版本嘅 NewPipe + 撳一下去下載 %s + 唔再揀定封面縮圖 + 色系揀做%s嘅時候至有得揀 + 複製唔到去剪貼簿 + 一張張 + 灰咗嘅播放清單,即係已經有呢個項目。 + 重複加入咗 %d 次 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 845ca5e0f..0b5112e18 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -125,7 +125,7 @@ NewPipe 通知 NewPipe 播放器的通知 沒有結果 - 這裡空空如也 + 這裡空空如也 無訂閱者 %s 位訂閱者 @@ -350,8 +350,7 @@ 清單 網格 自動 - 有可用的 NewPipe 更新! - 輕觸以下載 + 有可用的 NewPipe 更新! 已完成 有待處理 已暫停 @@ -458,7 +457,6 @@ 因為 ExoPlayer 的限制,搜尋持續時間設定為 %d 秒 靜音 取消靜音 - 說明 %d 分鐘 @@ -711,4 +709,14 @@ 在網站上檢視 排序 若您在使用此應用程式時遇到任何問題,請務必先看看常見問題的答案! + 您正在執行最新版本的 NewPipe + 輕點以下載 %s + 快速模式 + 從三點式選單匯入或匯出訂閱 + 此選項僅在主題選擇為 %s 時可用 + 卡片 + 取消設定永久縮圖 + 無法複製到剪貼簿 + 重複新增 %d 次 + 變灰的播放清單已經包含此項目。 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9f7e50c19..679dc05eb 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,5 +1,13 @@ + + 16dp + 8dp + 32dp + 8dp + 4dp + 2dp + 120dp 16dp @@ -30,7 +38,7 @@ 164dp 92dp - 42dp + 92dp 128dp 96dp diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index d28f794c0..09bf9080c 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -27,4 +27,5 @@ SoundCloud @string/app_name LeakCanary + %1$s-%2$s diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 9244f05c4..126818969 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -441,7 +441,9 @@ hu nl no + nn uz + or pl pt-PT pt @@ -493,7 +495,7 @@ @string/systems_language Afrikaans - Azərbaycan + Azərbaycanca Bahasa Indonesia Bahasa Malaysia Català @@ -519,7 +521,9 @@ Magyar Nederlands Norsk + Nynorsk O‘zbek + ଓଡ଼ିଆ Polski Português Português (Brasil) @@ -1127,6 +1131,7 @@ nl nl-be oc + or pa pl pt @@ -1160,7 +1165,7 @@ Basa Acèh العربية العربية (ليبيا) - Azərbaycan dili + Azərbaycanca Asturianu Беларуская ⵜⴰⵎⴰⵣⵉⵖⵜ @@ -1209,13 +1214,14 @@ Nederlands (NL) Nederlands (BE) Occitan + ଓଡ଼ିଆ ਪੰਜਾਬੀ Polski Português Português (BR) Português (PT) Română - русский язык + Pусский ᱥᱟᱱᱛᱟᱲᱤ sardu Slovenčina @@ -1261,16 +1267,19 @@ auto list grid + card @string/list_view_mode_auto_key @string/list_view_mode_list_key @string/list_view_mode_grid_key + @string/list_view_mode_card_key @string/auto @string/list @string/grid + @string/card tablet_mode diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3fa37155a..5a4ce92f2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -212,7 +212,7 @@ Deletes history of search keywords Delete entire search history? Search history deleted - Help + Fast mode Error External storage unavailable @@ -265,7 +265,8 @@ Related items Description No results - Nothing here but crickets + Nothing here but crickets + Import or export subscriptions from the 3-dot menu Drag to reorder Video Audio @@ -326,6 +327,7 @@ Calculating hash Please wait… Copied to clipboard + Failed to copy to clipboard Please define a download folder later in settings No download folder set yet, choose the default download folder now This permission is needed to\nopen in popup mode @@ -438,6 +440,7 @@ Mute Unmute Set as playlist thumbnail + Unset permanent thumbnail Bookmark Playlist Remove Bookmark Delete this playlist\? @@ -547,6 +550,7 @@ List view mode List Grid + Card Auto Seekbar thumbnail preview @@ -554,8 +558,9 @@ Low quality (smaller) Don\'t show - NewPipe update is available! - Tap to download + You are running the latest version of NewPipe + NewPipe update is available! + Tap to download %s Finished Pending paused @@ -714,6 +719,7 @@ Automatic (device theme) Select your favorite night theme — %s You can select your favorite night theme below + This option is only available if %s is selected for Theme Download has started You can now select text inside the description. Note that the page may flicker and links may not be clickable while in selection mode. Enable selecting text in the description diff --git a/app/src/test/java/org/schabi/newpipe/player/playqueue/PlayQueueTest.java b/app/src/test/java/org/schabi/newpipe/player/playqueue/PlayQueueTest.java index a130359a3..022089f37 100644 --- a/app/src/test/java/org/schabi/newpipe/player/playqueue/PlayQueueTest.java +++ b/app/src/test/java/org/schabi/newpipe/player/playqueue/PlayQueueTest.java @@ -13,7 +13,6 @@ import java.util.Objects; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; @@ -169,7 +168,8 @@ public class PlayQueueTest { final List streams = Collections.nCopies(5, item1); final PlayQueue queue1 = makePlayQueue(0, streams); final PlayQueue queue2 = makePlayQueue(0, streams); - assertEquals(queue1, queue2); + assertTrue(queue1.equalStreams(queue2)); + assertTrue(queue1.equalStreamsAndIndex(queue2)); } @Test @@ -177,7 +177,8 @@ public class PlayQueueTest { final List streams = Collections.nCopies(5, item1); final PlayQueue queue1 = makePlayQueue(1, streams); final PlayQueue queue2 = makePlayQueue(4, streams); - assertEquals(queue1, queue2); + assertTrue(queue1.equalStreams(queue2)); + assertFalse(queue1.equalStreamsAndIndex(queue2)); } @Test @@ -186,7 +187,7 @@ public class PlayQueueTest { final List streams2 = Collections.nCopies(5, item2); final PlayQueue queue1 = makePlayQueue(0, streams1); final PlayQueue queue2 = makePlayQueue(0, streams2); - assertNotEquals(queue1, queue2); + assertFalse(queue1.equalStreams(queue2)); } @Test @@ -195,7 +196,7 @@ public class PlayQueueTest { final List streams2 = Collections.nCopies(6, item2); final PlayQueue queue1 = makePlayQueue(0, streams1); final PlayQueue queue2 = makePlayQueue(0, streams2); - assertNotEquals(queue1, queue2); + assertFalse(queue1.equalStreams(queue2)); } } } diff --git a/app/src/test/java/org/schabi/newpipe/util/external_communication/TimestampExtractorTest.java b/app/src/test/java/org/schabi/newpipe/util/external_communication/TimestampExtractorTest.java index 10e23883f..47853bd7f 100644 --- a/app/src/test/java/org/schabi/newpipe/util/external_communication/TimestampExtractorTest.java +++ b/app/src/test/java/org/schabi/newpipe/util/external_communication/TimestampExtractorTest.java @@ -3,6 +3,7 @@ package org.schabi.newpipe.util.external_communication; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import org.schabi.newpipe.util.text.TimestampExtractor; import java.time.Duration; import java.util.Arrays; diff --git a/build.gradle b/build.gradle index a0c1fdf27..1384d0a9c 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:7.4.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/checkstyle/checkstyle.xml b/checkstyle/checkstyle.xml index ce378a65f..e8c9d94ca 100644 --- a/checkstyle/checkstyle.xml +++ b/checkstyle/checkstyle.xml @@ -95,7 +95,15 @@ - + + + diff --git a/fastlane/metadata/android/ar/changelogs/71.txt b/fastlane/metadata/android/ar/changelogs/71.txt index 4e01ba42e..338ab17c5 100644 --- a/fastlane/metadata/android/ar/changelogs/71.txt +++ b/fastlane/metadata/android/ar/changelogs/71.txt @@ -1,9 +1,10 @@ -تحسينات -* إضافة إشعار تحديث التطبيق لبناء جيثب (#1608 بواسطة krtkush)تحسينات مختلفة على برنامج التنزيل (# 1944 بواسطة kapodamy): -إضافة الرموز البيضاء المفقودة واستخدام طريقة hardcored لتغيير ألوان الرمز -تحقق مما إذا كان المكرر قد تمت تهيئته (إصلاحات 2031) -السماح بإعادة المحاولة مع ظهور خطأ "فشلت المعالجة اللاحقة" في muxer الجديد -MPEG-4 muxer الجديد الذي يعمل على تثبيت تدفقات الفيديو والصوت غير المتزامنة (2039) +تحسين +*إضافة إشعار تحديث التطبيق لبناء GitHub (#1608 بواسطة krtkush) +*تحسينات مختلفة على برنامج التنزيل(#1944 بواسطة kapodamy): + *إضافة الرموز البيضاء المفقودة واستخدام طريقة hardcored لتغيير ألوان الرمز + *تحقق مما إذا كان المكرر قد تمت تهيئته(إصلاحات #2031) + *السماح بإعادة المحاولة مع ظهور خطأ "فشلت المعالجة اللاحقة" في muxer الجديد + *MPEG-4 muxer جديد يعمل على تثبيت تدفقات الفيديو والصوت غير المتزامنة(#2039) -مثبت -توقف البث المباشر على YouTube عن التشغيل بعد وقت قصير (# 1996 بواسطةyausername) +تصليح +*توقف البث المباشر على يوتيوب عن التشغيل بعد وقت قصير(#1996 by @yausername) diff --git a/fastlane/metadata/android/ar/changelogs/991.txt b/fastlane/metadata/android/ar/changelogs/991.txt new file mode 100644 index 000000000..5eaebe7a9 --- /dev/null +++ b/fastlane/metadata/android/ar/changelogs/991.txt @@ -0,0 +1,13 @@ +جديد +• إضافة زر "فتح في المتصفح" على واجهة الخطأ +• إضافة خيار لعرض مجموعات القنوات على شكل قائمة +• [YouTube] ضغطة مطولة على مقاطع الدفق لمشاركة رابط URL مع الطابع الزمني +• إضافة زر قائمة انتظار التشغيل للمشغل الصغير + +تحسينات +• إضافة الترجمة الأيسلندية وتحديث العديد من الترجمات الأخرى +• العديد من التحسينات الداخلية + +تصليحات +• إصلاح أعطاب متعددة +• [YouTube] إصلاح مشكلات تحميل القنوات، وتحميل التغذية غير المخصصة، والتشغيل البديل في بعض البلدان diff --git a/fastlane/metadata/android/ar_LY/short_description.txt b/fastlane/metadata/android/ar_LY/short_description.txt index 72c4d0ee6..df70e08b1 100644 --- a/fastlane/metadata/android/ar_LY/short_description.txt +++ b/fastlane/metadata/android/ar_LY/short_description.txt @@ -1 +1 @@ -واجهة يوتيوب خفيفة الوزن مجانية للاندرويد +واجهة يوتيوب خفيفة مجانية للاندرويد diff --git a/fastlane/metadata/android/bg/short_description.txt b/fastlane/metadata/android/bg/short_description.txt new file mode 100644 index 000000000..bcbbc16cf --- /dev/null +++ b/fastlane/metadata/android/bg/short_description.txt @@ -0,0 +1 @@ +Безплатен и лек YouTube клиент за Android. diff --git a/fastlane/metadata/android/bn/changelogs/68.txt b/fastlane/metadata/android/bn/changelogs/68.txt new file mode 100644 index 000000000..8f6742e84 --- /dev/null +++ b/fastlane/metadata/android/bn/changelogs/68.txt @@ -0,0 +1 @@ +https://hosted.weblate.org/translate/newpipe/metadata/bn/?checksum=2a64aca6716bd69b diff --git a/fastlane/metadata/android/cs/changelogs/991.txt b/fastlane/metadata/android/cs/changelogs/991.txt new file mode 100644 index 000000000..c27e46cb6 --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/991.txt @@ -0,0 +1,13 @@ +Nové +• Přidáno tlačítko „Otevřít v prohlížeči“ do panelu chyb +• Přidána možnost zobrazit skupiny kanálů jako seznam +• [YouTube] Dlouhým klepnutím na segmenty streamu lze sdílet URL časového razítka +• Přidání tlačítka fronty přehrávání do minipřehrávače + +Vylepšeno +• Přidána islandská lokalizace a aktualizovány další překlady +• Mnoho interních vylepšení + +Opraveno +• Oprava několika pádů +• [YouTube] Oprava načítání kanálů, nevyhrazeného kanálu a řešení problémů s přehráváním v některých zemích diff --git a/fastlane/metadata/android/cs/changelogs/992.txt b/fastlane/metadata/android/cs/changelogs/992.txt new file mode 100644 index 000000000..b45f8f73a --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/992.txt @@ -0,0 +1,17 @@ +Novinky +• Počet odběratelů v podrobnostech videa +• Stahování z fronty +• Permanentní nastavení náhledu playlistu +• Dlouhé podržení hashtagů a odkazů +• Režim zobrazení v kartách + +Vylepšení +• Větší tlačítko k zavření minipřehrávače +• Jemnější zmenšování náhledů +• Cíl Android 13 (API 33) +• Posouvání v přehrávači jej již nezastaví + +Opravy +• Oprava překrytí s DeX/myší +• Povolení přehrávače na pozadí bez oddělených streamů zvuku +• Různé opravy YouTube a další… diff --git a/fastlane/metadata/android/de/changelogs/730.txt b/fastlane/metadata/android/de/changelogs/730.txt index 422bd31b3..12c5ffb16 100644 --- a/fastlane/metadata/android/de/changelogs/730.txt +++ b/fastlane/metadata/android/de/changelogs/730.txt @@ -1,2 +1,2 @@ -# Behoden +# Behoben - erneuter Hotfix des Entschlüsselungsfunktionsfehlers. diff --git a/fastlane/metadata/android/de/changelogs/900.txt b/fastlane/metadata/android/de/changelogs/900.txt index a4a8a1253..58fc1e05d 100644 --- a/fastlane/metadata/android/de/changelogs/900.txt +++ b/fastlane/metadata/android/de/changelogs/900.txt @@ -1,14 +1,14 @@ -Neu -- Abonnementgruppen und sortierte Feeds -- Stummschalttaste in Playern +Neu: +• Abonnementgruppen und sortierte Feeds +• Stummschalttaste in Playern -Verbessert -- Das Öffnen von music.youtube.com und media.ccc.de Links in NewPipe erlaubt -- Zwei Einstellungen wurden von "Erscheinungsbild" zu "Inhalt" verschoben -- Ausblenden der Suchoptionen 5, 15 und 25 Sekunden, wenn die ungenaue Suche aktiviert ist +Verbessert: +• Öffnen von music.youtube.com und media.ccc.de Links in NewPipe erlaubt +• Zwei Einstellungen von „Erscheinungsbild“ zu „Inhalt“ verschoben +• Ausblenden der Suchoptionen 5, 15 und 25 Sekunden, wenn die ungenaue Suche aktiviert ist -Behoben -- einige WebM-Videos sind nicht suchbar -- Datenbank-Backup auf Android P -- Absturz beim Teilen einer heruntergeladenen Datei -- YouTube-Extraktionsprobleme, ... +Behoben: +• Einige WebM-Videos sind nicht suchbar +• Datenbank-Backup auf Android P +• Absturz beim Teilen einer heruntergeladenen Datei +• YouTube-Extraktionsprobleme und mehr … diff --git a/fastlane/metadata/android/de/changelogs/910.txt b/fastlane/metadata/android/de/changelogs/910.txt index 50b46f58e..9be252c7b 100644 --- a/fastlane/metadata/android/de/changelogs/910.txt +++ b/fastlane/metadata/android/de/changelogs/910.txt @@ -1 +1 @@ -Fehler bei Datenbankmigration behoben, welche in seltenen Fällen einen Start der App verhindert. +Fehler bei Datenbankmigration behoben, welche in seltenen Fällen einen Start der App verhinderte. diff --git a/fastlane/metadata/android/de/changelogs/958.txt b/fastlane/metadata/android/de/changelogs/958.txt index 4b41f7d70..96b0629d2 100644 --- a/fastlane/metadata/android/de/changelogs/958.txt +++ b/fastlane/metadata/android/de/changelogs/958.txt @@ -1,15 +1,15 @@ -Neu+verbessert -•Option Miniansicht Ausblenden auf Sperrbildschirm wieder hinzugefügt -•Ziehen zum Feed aktualisieren -•Verbesserte Leistung beim Abruf lokaler Listen +Neu und verbessert: +• Option Vorschaubild auf Sperrbildschirm ausblenden wieder hinzugefügt +• Ziehen zum Feed aktualisieren +• Verbesserte Leistung beim Abruf lokaler Listen -Behoben -•Absturz, Start von NewPipe, nachdem es aus dem RAM entfernt wurde -•Absturz, Starten von NewPipe ohne Internetverbindung -•Einstellungen Helligkeits- und Lautstärkegesten -•[YT] Lange Wiedergabelisten +Behoben: +• Absturz, NewPipe-Start nachdem es aus dem RAM entfernt wurde +• Absturz, NewPipe-Start ohne Internetverbindung +• Einstellungen Helligkeits- und Lautstärkegesten +• [YT] Lange Wiedergabelisten -Sonstiges -•Codebereinigung, verschiedene interne Verbesserungen -•Aktualisierung Abhängigkeiten -•Aktualisierte Übersetzungen +Sonstiges: +• Codebereinigung, etliche interne Verbesserungen +• Abhängigkeiten aktualisiert +• Übersetzungen aktualisiert diff --git a/fastlane/metadata/android/de/changelogs/970.txt b/fastlane/metadata/android/de/changelogs/970.txt index 301ea1e3f..53f80fed1 100644 --- a/fastlane/metadata/android/de/changelogs/970.txt +++ b/fastlane/metadata/android/de/changelogs/970.txt @@ -1,11 +1,11 @@ -Neu -• Inhaltsmetadaten (Tags, Kategorien, Lizenz, ...) unter der Beschreibung anzeigen -• Option "Kanaldetails anzeigen" in remote (nicht lokalen) Wiedergabelisten hinzugefügt -• Option "Im Browser öffnen" zum Langdruck-Menü hinzugefügt +Neu: +• Inhaltsmetadaten (Tags, Kategorien, Lizenz, …) unter der Beschreibung anzeigen +• Option „Kanaldetails anzeigen“ in remote (nicht lokalen) Wiedergabelisten hinzugefügt +• Option „Im Browser öffnen“ zum Langdruck-Menü hinzugefügt -Behoben +Behoben: • Rotationsabsturz auf der Videodetailseite -• "Mit Kodi spielen"-Button im Player fordert immer auf, Kore zu installieren +• „Mit Kodi spielen“-Button im Player fordert immer auf, Kore zu installieren • Setzen von Import- und Exportpfaden wurde behoben und verbessert • [YouTube] Anzahl Kommentar-Likes korrigiert Und vieles mehr diff --git a/fastlane/metadata/android/de/changelogs/975.txt b/fastlane/metadata/android/de/changelogs/975.txt new file mode 100644 index 000000000..7b56b45c2 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/975.txt @@ -0,0 +1,17 @@ +Neu: +• Vorschaubild-Anzeige während der Suche +• Deaktivierte Kommentare erkennen +• Feed-Element als beobachtet markieren +• Kommentarherzen anzeigen + +Verbessert: +• Layout von Metadaten und Tags +• Dienstfarbe für UI-Komponenten + +Behoben: +• Vorschaubild im Mini-Player +• Endlose Pufferung bei doppelten Warteschlangenelementen +• Einige Player-Fixes wie Rotation und schnelleres Schließen +• ReCAPTCHA lädt im Hintergrund +• Klicks bei Feed-Aktualisierung deaktivieren +• Einige Downloader-Abstürze diff --git a/fastlane/metadata/android/de/changelogs/976.txt b/fastlane/metadata/android/de/changelogs/976.txt new file mode 100644 index 000000000..296d9ab4b --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/976.txt @@ -0,0 +1,10 @@ +• Option zum direkten Öffnen des Players im Vollbildmodus hinzugefügt +• Auswahl der anzuzeigenden Suchvorschläge möglich +• Dunkles Design nun dunkler + dunkler Splash-Screen hinzugefügt +• Verbesserte Dateiauswahl, um unerwünschte Dateien auszugrauen +• Import von YouTube-Abonnements behoben +• Das Wiederholen eines Streams erfordert ein erneutes Tippen auf die Wiedergabetaste +• Behoben: Audio-Sitzung schließen +… + +Änderungen finden Sie im Changelog (und im Blogbeitrag) auf dem Links-Tab unten. diff --git a/fastlane/metadata/android/de/changelogs/977.txt b/fastlane/metadata/android/de/changelogs/977.txt new file mode 100644 index 000000000..fffd6c9ad --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/977.txt @@ -0,0 +1,9 @@ +• Die Schaltfläche „Weiter abspielen“ wurde dem Langdruckmenü hinzugefügt +• YouTube Shorts Pfadpräfix zum Absichtsfilter hinzugefügt +• Import von Einstellungen behoben +• Position der Suchleiste mit Player-Schaltflächen im Warteschlangen-Bildschirm vertauscht +• Verschiedene Korrekturen im Zusammenhang mit MediasessionManager +• Die Suchleiste wurde nach dem Ende des Videos nicht abgeschlossen +… + +Weitere Änderungen finden Sie im Changelog (und im Blogbeitrag) auf dem Links-Tab unten. diff --git a/fastlane/metadata/android/de/changelogs/980.txt b/fastlane/metadata/android/de/changelogs/980.txt index 3e32d136b..dc69300f3 100644 --- a/fastlane/metadata/android/de/changelogs/980.txt +++ b/fastlane/metadata/android/de/changelogs/980.txt @@ -1,13 +1,13 @@ -Neu -- Option "Zur Wiedergabeliste hinzufügen" zum Freigabemenü hinzugefügt -- Unterstützung für y2u.be und PeerTube Kurzlinks hinzugefügt +Neu: +• Option „Zur Wiedergabeliste hinzufügen“ zum Freigabemenü hinzugefügt +• Unterstützung für y2u.be- und PeerTube-Kurzlinks hinzugefügt -Verbessert -- Playback-Speed-Controls kompakter gemacht -- Feed hebt jetzt neue Elemente hervor -- "Beobachtete Artikel anzeigen" Option im Feed wird nun gespeichert +Verbessert: +• Playback-Speed-Controls kompakter gemacht +• Feed hebt jetzt neue Elemente hervor +• „Beobachtete Artikel anzeigen“-Option im Feed wird nun gespeichert -Behoben -- Extraktion von YouTube Likes und Dislikes behoben -- Automatische Wiederholung nach Rückkehr aus dem Hintergrund behoben +Behoben: +• Extraktion von YouTube Likes und Dislikes behoben +• Automatische Wiederholung nach Rückkehr aus dem Hintergrund behoben Und vieles mehr diff --git a/fastlane/metadata/android/de/changelogs/986.txt b/fastlane/metadata/android/de/changelogs/986.txt new file mode 100644 index 000000000..044365eb8 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/986.txt @@ -0,0 +1,16 @@ +Neu: +• Benachrichtigungen für neue Streams +• Nahtloser Übergang zwischen Hintergrund- und Videoplayer +• Änderung der Tonhöhe um Halbtöne +• Warteschlange des Hauptplayers an Wiedergabeliste anfügen + +Verbessert: +• Geschwindigkeit/Tonhöhenschrittgröße speichern +• Anfängliche lange Videoplayer-Pufferung verringert +• Player-UI für Android TV +• Löschbestätigung für alle heruntergeladenen Dateien + +Behoben: +• Medienschaltfläche blendet die Steuerelemente des Players nicht aus +• Rücksetzung der Wiedergabe bei Änderung des Playertyps +• Drehung des Wiedergabelisten-Dialogs diff --git a/fastlane/metadata/android/de/changelogs/987.txt b/fastlane/metadata/android/de/changelogs/987.txt index a857b1caa..f7bc9bd80 100644 --- a/fastlane/metadata/android/de/changelogs/987.txt +++ b/fastlane/metadata/android/de/changelogs/987.txt @@ -1,12 +1,12 @@ -Neu -- Unterstützung anderer Übertragungsmethoden als progressives HTTP: schnellere Ladezeit der Wiedergabe, Korrekturen für PeerTube und SoundCloud, Wiedergabe von kürzlich beendeten YouTube-Livestreams -- Schaltfläche "Hinzufügen" zum Hinzufügen einer entfernten Wiedergabeliste zu einer lokalen Wiedergabeliste -- Bildvorschau im Android 10+ Teilen-Dialog +Neu: +• Unterstützung anderer Übertragungsmethoden als progressives HTTP: schnellere Ladezeit der Wiedergabe, Korrekturen für PeerTube und SoundCloud, Wiedergabe von kürzlich beendeten YouTube-Livestreams +• Schaltfläche um entfernte Wiedergabeliste einer lokalen Wiedergabeliste hinzuzufügen +• Bildvorschau im Android 10+ Teilen-Dialog -Verbesserte -- Verbesserung des Dialogs für Wiedergabewerte -- Import/Export-Schaltflächen für Abonnements in das Drei-Punkte-Menü verschieben +Verbessert: +• Wiedergabewerte-Dialog +• Import/Export-Schaltflächen für Abonnements in das Drei-Punkte-Menü verschoben -Behoben -- Fix: Entfernen vollständig angesehener Videos aus der Wiedergabeliste -- Repariert das Thema des Freigabemenüs und den Eintrag "Zur Wiedergabeliste hinzufügen" +Behoben: +• Entfernung von vollständig angesehenen Videos aus der Wiedergabeliste +• Freigabemenü-Design und „Zur Wiedergabeliste hinzufügen“-Eintrag diff --git a/fastlane/metadata/android/de/changelogs/988.txt b/fastlane/metadata/android/de/changelogs/988.txt new file mode 100644 index 000000000..bde54eda1 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/988.txt @@ -0,0 +1,2 @@ +[YouTube] Fehler „Konnte keinen Stream abrufen“ behoben beim Versuch, ein Video abzuspielen +[YouTube] "Der folgende Inhalt ist in dieser App nicht verfügbar." anstelle des angeforderten Videos behoben diff --git a/fastlane/metadata/android/de/changelogs/989.txt b/fastlane/metadata/android/de/changelogs/989.txt new file mode 100644 index 000000000..40e38f43e --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/989.txt @@ -0,0 +1,3 @@ +• [YouTube] Unendliches Laden behoben beim Versuch, ein Video abzuspielen +• [YouTube] Drosselung bei einigen Videos behoben +• Aktualisierung der jsoup-Bibliothek auf 1.15.3, die einen Sicherheitsfix enthält diff --git a/fastlane/metadata/android/de/changelogs/990.txt b/fastlane/metadata/android/de/changelogs/990.txt new file mode 100644 index 000000000..a629c8654 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/990.txt @@ -0,0 +1,15 @@ +Mit dieser Version entfällt die Unterstützung für Android 4.4 KitKat, die Mindestversion ist nun Android 5 Lollipop! + +Neu: +• Herunterladen aus dem Langdruckmenü +• Zukünftige Videos im Feed ausblenden +• Lokale Wiedergabelisten teilen + +Verbessert: +• Player-Code in kleine Komponenten refaktorisiert: weniger RAM-Verbrauch, weniger Bugs +• Skalierungsmodus für Miniaturansicht +… + +Behoben: +• Verschiedene Probleme mit Player-Benachrichtigung: veraltete/fehlende Medieninfos, verzerrte Miniaturansicht +… diff --git a/fastlane/metadata/android/de/changelogs/991.txt b/fastlane/metadata/android/de/changelogs/991.txt new file mode 100644 index 000000000..d2faadae7 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/991.txt @@ -0,0 +1,13 @@ +Neu: +• Neue Schaltfläche "Im Browser öffnen" im Fehler-Fenster +• Anzeigeoption von Kanalgruppen als Liste +• [YouTube] Langer Klick auf Streamsegmente um Zeitstempel-URL zu teilen +• Schaltfläche „Warteschlange abspielen“ im Mini-Player + +Verbessert: +• Isländische Lokalisierung hinzugefügt, viele Übersetzungen aktualisiert +• Viele interne Verbesserungen + +Behoben: +• Mehrere Abstürze behoben +• [YouTube] Fehlerbehebung für Laden von Kanälen, nicht zugeordnete Feeds und Wiedergabe in einigen Ländern diff --git a/fastlane/metadata/android/de/changelogs/992.txt b/fastlane/metadata/android/de/changelogs/992.txt new file mode 100644 index 000000000..f0993d993 --- /dev/null +++ b/fastlane/metadata/android/de/changelogs/992.txt @@ -0,0 +1,17 @@ +Neu: +• Anzahl der Abonnenten in den Videodetails +• Herunterladen aus der Warteschlange +• Dauerhaftes Einstellen einer Wiedergabelisten-Miniaturansicht +• Hashtags und Links lang drücken +• Kartenansicht-Modus + +Verbessert: +• Größere Schaltfläche um Mini-Player zu schließen +• Glattere Miniaturansicht-Skalierung +• Android 13 (API 33) +• Suchen hält den Player nicht mehr an + +Behoben: +• Overlay auf DeX/Maus +• Hintergrundplayer ohne separate Audiostreams +• YouTube-Korrekturen und mehr… diff --git a/fastlane/metadata/android/en-US/changelogs/992.txt b/fastlane/metadata/android/en-US/changelogs/992.txt new file mode 100644 index 000000000..807411d50 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/992.txt @@ -0,0 +1,17 @@ +New +• Subscriber count in video details +• Download from the queue +• Permanently set a playlist thumbnail +• Long-press hashtags and links +• Card view mode + +Improved +• Larger mini-player close button +• Smoother thumbnail downscaling +• Target Android 13 (API 33) +• Seeking no longer pauses the player + +Fixed +• Fix overlay on DeX/mouse +• Allow background player with no separate audio streams +• Various YouTube fixes and more… \ No newline at end of file diff --git a/fastlane/metadata/android/es/changelogs/991.txt b/fastlane/metadata/android/es/changelogs/991.txt new file mode 100644 index 000000000..27d9c0a36 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/991.txt @@ -0,0 +1,13 @@ +Nuevo +* Se añadió el botón "Abrir en el navegador" en el panel de error. +* Se añadió la opción de mostrar grupos de canales como lista. +* [YouTube] Haga click prolongado en un segmento del stream para compartir la URL del tiempo exacto. +* Se añadió el botón "Abrir en el navegador" en el panel de error. + +Mejorado +* Se añadió localización de Islandés y se actualizaron muchas otras traducciones. +* Muchas mejoras internas + +Arreglado +* Se arreglaron múltiples crasheos. +* [YouTube] Se arreglaron las cargas de canales, feeds no dedicados y problemas de contenido en algunos países diff --git a/fastlane/metadata/android/es/changelogs/992.txt b/fastlane/metadata/android/es/changelogs/992.txt new file mode 100644 index 000000000..bdbd0ccba --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/992.txt @@ -0,0 +1,17 @@ +Nuevo +• Número de suscriptores en los detalles del video +• Descarga desde la cola +• Establecer permanentemente una miniatura de lista de reproducción +• Hashtags y enlaces con pulsación de larga duración +• Modo de vista de tarjeta + +Mejorado +• Botón de cierre del minirreproductor más grande +• Reducción de escala de miniaturas más suave +• Objetivo Android 13 (API 33) +• Buscar ya no detiene el reproductor + +Arreglos +• Solucionar superposición en DeX/ratón +• Permitir reproductor de fondo sin transmisiones de audio separadas +• Varias correcciones de YouTube y más… diff --git a/fastlane/metadata/android/eu/changelogs/992.txt b/fastlane/metadata/android/eu/changelogs/992.txt new file mode 100644 index 000000000..5b0dd96ba --- /dev/null +++ b/fastlane/metadata/android/eu/changelogs/992.txt @@ -0,0 +1,17 @@ +Zer berri +• Harpidetza kopurua bideoen xehetasunetan +• Ilaratik deskargatu +• Erreprodukzio-zerrendei betirako izango den miniatura ezarri +• Luze sakatu traola eta estekentzako +• Txartel-bista modua + +Hobekuntzak +• Mini-erreproduzitzailearen ixteko botoi handiago bat +• Miniaturen eskala murrizketa arinagoa +• Android 13 (API 33) +• Bilaketak ez du erreprodukzioa geldiaraziko + +Konponketak +• DeX/saguaren gainezarpena konpondua +• Bigarren planoko erreprodukzioa baimendu bereizitako bi audio-jariorik gabe +• YouTube-kin zeuden arazoak konpondu eta are gehiago… diff --git a/fastlane/metadata/android/fa/changelogs/870.txt b/fastlane/metadata/android/fa/changelogs/870.txt new file mode 100644 index 000000000..04fb855a8 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/870.txt @@ -0,0 +1,2 @@ +این یک آپدیت مهمی بوده که اجازه میده از SoundCloud دیگه بدون دردسر استفاده کنید. +الان دیگه از نسخه 2 ی api ی SoundCloud استفاده شده برای استخراج و از شناسایی شدن جلوگیری شده. diff --git a/fastlane/metadata/android/fa/changelogs/910.txt b/fastlane/metadata/android/fa/changelogs/910.txt new file mode 100644 index 000000000..9ad34ba3d --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/910.txt @@ -0,0 +1 @@ +نقص بخش مهاجرت دیتابیس درونی اپ برطرف شده، که باعث بروز خطا میشد. diff --git a/fastlane/metadata/android/fil/changelogs/63.txt b/fastlane/metadata/android/fil/changelogs/63.txt index 83f5e5869..9643e7545 100644 --- a/fastlane/metadata/android/fil/changelogs/63.txt +++ b/fastlane/metadata/android/fil/changelogs/63.txt @@ -1,8 +1,8 @@ -### Mga pagpapabuti -- Pag-import/export ng mga setting #1333 -- Bawas na overdraw (nakakabuti sa performance) #1371 -- Mga pagpapaganda sa code #1375 -- Mga bagay-bagay tungkol sa GDPR #1420 +### Mga Pagpapabuti +- Mag-import/export ng mga setting #1333 +- Bawasan ang pag-overdraw (nakabubuti sa pagtakbo ng app) #1371 +- Ilan pang mga pagpapahusay #1375 +- Mga bagay tungkol sa GDPR #1420 -### Inayos -- Downloader: Ayusin ang pag-crash tuwing binubuksan ang mga .giga file na hindi pa tapos i-download #1407 +### Mga Pagsasaayos +- Pang-download: Iwasan ang pag-crash kapag pinoproseso ang mga hindi pa natatapos na download mula sa mga .giga file #1407 diff --git a/fastlane/metadata/android/fr/changelogs/740.txt b/fastlane/metadata/android/fr/changelogs/740.txt new file mode 100644 index 000000000..da4bdc2f8 --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/740.txt @@ -0,0 +1,23 @@ +

Améliorations

+
    +
  • Rendre les liens dans les commentaires cliquables, augmenter la taille du texte
  • +
  • Rechercher en cliquant sur les liens d'horodatage dans les commentaires
  • +
  • Afficher l'onglet préféré en fonction de l'état récemment sélectionné
  • +
  • Ajouter la liste de lecture à la file d'attente lors d'un clic long sur 'Arrière-plan' dans la fenêtre de la liste de lecture
  • +
  • Rechercher le texte partagé lorsqu'il ne s'agit pas d'une URL
  • +
  • Ajouter "partager à l'heure actuelle" bouton au lecteur vidéo principal lecteur vidéo principal
  • +
  • Ajouter un bouton de fermeture du lecteur principal lorsque la file d'attente vidéo est terminée
  • +
  • Ajouter "jouer directement en arrière-plan" au menu longpress pour les éléments de la liste vidéo
  • +
  • Améliorer les traductions en anglais des commandes Play/Enqueue
  • +
  • Petites améliorations des performances
  • +
  • Supprimer les fichiers inutilisés
  • +
  • Mise à jour ExoPlayer à 2.9.6
  • +
  • Ajouter le support pour les liens Invidious
  • +
+

Corrections

+
    +
  • Défilement avec les commentaires et les flux associés désactivés
  • +
  • CheckForNewAppVersionTask qui est exécuté alors qu'il ne devrait pas l'être'
  • +
  • Importation des abonnements YouTube : ignorer ceux dont l’URL est invalide et conserver ceux dont le titre est vide
  • +
  • URL YouTube invalide : le nom de la balise signature n'est pas toujours "signature", ce qui empêche le chargement des flux.
  • +
diff --git a/fastlane/metadata/android/fr/changelogs/991.txt b/fastlane/metadata/android/fr/changelogs/991.txt new file mode 100644 index 000000000..59a34f25e --- /dev/null +++ b/fastlane/metadata/android/fr/changelogs/991.txt @@ -0,0 +1,13 @@ +Nouveautés +• Ajout du bouton « Ouvrir dans un navigateur » dans le paneau d'erreur +• Ajout de la possibilité d'afficher les groupes de chaîne en liste +• [YouTube] Appuis long sur le segment d'un flux pour partager l'URL avec l'horodatage +• Ajout d'un bouton sur le lecteur reduit + +Améliorations +• Ajout de la traduction en islandais et mise à jour de d'autre langues +• De nombreuses améliorations internes + +Corrections +• Correction de plantages +• [YouTube] Correction du chargement des chaînes diff --git a/fastlane/metadata/android/hi/changelogs/64.txt b/fastlane/metadata/android/hi/changelogs/64.txt new file mode 100644 index 000000000..65e1f16a7 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/64.txt @@ -0,0 +1,8 @@ +### सुधार +- मोबाइल डेटा का उपयोग करते समय वीडियो की गुणवत्ता को सीमित करने की क्षमता को जोड़ा गया। #1339 +- सत्र # 1442 के लिए चमक याद रखें +- कमजोर सीपीयू # 1431 के लिए डाउनलोड प्रदर्शन में सुधार +- मीडिया सत्र # 1433 के लिए समर्थन जोड़ें (काम कर रहा है) + +### फिक्स +- डाउनलोड खोलने पर क्रैश ठीक करें (रिलीज बिल्ड के लिए अब उपलब्ध है) # 1441 diff --git a/fastlane/metadata/android/hi/changelogs/65.txt b/fastlane/metadata/android/hi/changelogs/65.txt new file mode 100644 index 000000000..8570a056a --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/65.txt @@ -0,0 +1,26 @@ +### Improvements + +- Disable burgermenu icon animation #1486 +- undo delete of downloads #1472 +- Download option in share menu #1498 +- Added share option to long tap menu #1454 +- Minimize main player on exit #1354 +- Library version update and database backup fix #1510 +- ExoPlayer 2.8.2 Update #1392 + - Reworked the playback speed control dialog to support different step sizes for faster speed change. + - Added a toggle to fast-forward during silences in playback speed control. This should be helpful for audiobooks and certain music genres, and can bring a true seamless experience (and can break a song with lots of silences =\\). + - Refactored media source resolution to allow passing metadata alongside media internally in the player, rather than doing so manually. Now we have a single source of metadata and is directly available when playback starts. + - Fixed remote playlist metadata not updating when new metadata is available when playlist fragment is opened. + - Various UI fixes: #1383, background player notification controls now always white, easier to shutdown popup player through flinging +- Use new extractor with refactored architecture for multiservice + +### Fixes + +- Fix #1440 Broken Video Info Layout #1491 +- View history fix #1497 + - #1495, by updating the metadata (thumbnail, title and video count) as soon as the user access the playlist. + - #1475, by registering a view in the database when the user starts a video on external player on detail fragment. +- Fix creen timeout in case of popup mode. #1463 (Fixed #640) +- Main video player fix #1509 + - [#1412] Fixed repeat mode causing player NPE when new intent is received while player activity is in background. + - Fixed minimizing player to popup does not destroy player when popup permission is not granted. diff --git a/fastlane/metadata/android/hi/changelogs/66.txt b/fastlane/metadata/android/hi/changelogs/66.txt new file mode 100644 index 000000000..30c20b0e8 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/66.txt @@ -0,0 +1,33 @@ +# Changelog of v0.13.7 + +### Fixed +- Fix sort filter issues of v0.13.6 + +# Changelog of v0.13.6 + +### Improvements + +- Disable burgermenu icon animation #1486 +- undo delete of downloads #1472 +- Download option in share menu #1498 +- Added share option to long tap menu #1454 +- Minimize main player on exit #1354 +- Library version update and database backup fix #1510 +- ExoPlayer 2.8.2 Update #1392 + - Reworked the playback speed control dialog to support different step sizes for faster speed change. + - Added a toggle to fast-forward during silences in playback speed control. This should be helpful for audiobooks and certain music genres, and can bring a true seamless experience (and can break a song with lots of silences =\\). + - Refactored media source resolution to allow passing metadata alongside media internally in the player, rather than doing so manually. Now we have a single source of metadata and is directly available when playback starts. + - Fixed remote playlist metadata not updating when new metadata is available when playlist fragment is opened. + - Various UI fixes: #1383, background player notification controls now always white, easier to shutdown popup player through flinging +- Use new extractor with refactored architecture for multiservice + +### Fixes + +- Fix #1440 Broken Video Info Layout #1491 +- View history fix #1497 + - #1495, by updating the metadata (thumbnail, title and video count) as soon as the user access the playlist. + - #1475, by registering a view in the database when the user starts a video on external player on detail fragment. +- Fix creen timeout in case of popup mode. #1463 (Fixed #640) +- Main video player fix #1509 + - [#1412] Fixed repeat mode causing player NPE when new intent is received while player activity is in background. + - Fixed minimizing player to popup does not destroy player when popup permission is not granted. diff --git a/fastlane/metadata/android/hi/changelogs/68.txt b/fastlane/metadata/android/hi/changelogs/68.txt new file mode 100644 index 000000000..238b1e0b1 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/68.txt @@ -0,0 +1,31 @@ +# changes of v0.14.1 + +### Fixed +- Fixed failed to decrypt video url #1659 +- Fixed description link not extract well #1657 + +# changes of v0.14.0 + +### New +- New Drawer design #1461 +- New customizable front page #1461 + +### Improvements +- Reworked Gesture controls #1604 +- New way to close the popup player #1597 + +### Fixed +- Fix error when subscription count is not available. Closes #1649. + - Show "Subscriber count not available" in those cases +- Fix NPE when a YouTube playlist is empty +- Quick fix for the kiosks in SoundCloud +- Refactor and bugfix #1623 + - Fix Cyclic search result #1562 + - Fix Seek bar not statically lay outed + - Fix YT Premium video are not blocked correctly + - Fix Videos sometimes not loading (due to DASH parsing) + - Fix links in video description + - Show warning when someone tries to download to external sdcard + - fix nothing shown exception triggers report + - thumbnail not shown in background player for android 8.1 [see here](https://github.com/TeamNewPipe/NewPipe/issues/943) +- Fix registering of broadcast receiver. Closes #1641. diff --git a/fastlane/metadata/android/hi/changelogs/69.txt b/fastlane/metadata/android/hi/changelogs/69.txt new file mode 100644 index 000000000..c8262d1b0 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/69.txt @@ -0,0 +1,19 @@ +### New +- Long-tap delete and share in subscriptions #1516 +- Tablet UI and grid list layout #1617 + +### Improvements +- store and reload the last used aspect ratio #1748 +- Enable linear layout in Downloads activity with full video names #1771 +- Delete and share subscriptions directly from within the subscriptions tab #1516 +- Enqueuing now triggers video playing if the play queue has already ended #1783 +- Separate settings for volume and brightness gestures #1644 +- Add support for Localization #1792 + +### Fixes +- Fix time parsing for . format, so NewPipe can be used in Finland +- Fix subscription count +- Add foreground service permission for API 28+ devices #1830 + +### Known Bugs +- Playback state can not be saved on Android P diff --git a/fastlane/metadata/android/hi/changelogs/70.txt b/fastlane/metadata/android/hi/changelogs/70.txt new file mode 100644 index 000000000..ad87a4409 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/70.txt @@ -0,0 +1,25 @@ +ATTENTION: This version probably is a bugfest, just like the last one. However due to the full shutdown since the 17. a broken version is better then no version. Right? ¯\_(ツ)_/¯ + +### Improvements +* downloaded files can now be opened with one click #1879 +* drop support for android 4.1 - 4.3 #1884 +* remove old player #1884 +* remove streams from current play queue by swiping them to the right #1915 +* remove auto queued stream when a new stream is enqueued manually #1878 +* Postprocessing for downloads and implement missing features #1759 by @kapodamy + * Post-processing infrastructure + * Proper error handling "infrastructure" (for downloader) + * Queue instead of multiple downloads + * Move serialized pending downloads (`.giga` files) to app data + * Implement max download retry + * Proper multi-thread download pausing + * Stop downloads when swicthing to mobile network (never works, see 2nd point) + * Save the thread count for next downloads + * A lot of incoherences fixed + +### Fixed +* Fix crash with default resolution set to best and limited mobile data resolution #1835 +* pop-up player crash fixed #1874 +* NPE when trying to open background player #1901 +* Fix for inserting new streams when auto queuing is enabled #1878 +* Fixed the decypering shuttown issue diff --git a/fastlane/metadata/android/hi/changelogs/71.txt b/fastlane/metadata/android/hi/changelogs/71.txt new file mode 100644 index 000000000..5facfc05f --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/71.txt @@ -0,0 +1,10 @@ +### Improvements +* Add app update notification for GitHub build (#1608 by @krtkush) +* Various improvements to the downloader (#1944 by @kapodamy): + * add missing white icons and use hardcored way for change the icon colors + * check if the iterator is initialized (fixes #2031) + * allow retry downloads with "post-processing failed" error in the new muxer + * new MPEG-4 muxer fixing non-synchronous video and audio streams (#2039) + +### Fixed +* YouTube live streams stop playing after a short time (#1996 by @yausername) diff --git a/fastlane/metadata/android/hi/changelogs/730.txt b/fastlane/metadata/android/hi/changelogs/730.txt new file mode 100644 index 000000000..e4f260cd2 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/730.txt @@ -0,0 +1,2 @@ +# हल किया गया +- हॉट फिक्स डिक्रिप्ट फ़ंक्शन त्रुटि फिर से। diff --git a/fastlane/metadata/android/hi/changelogs/740.txt b/fastlane/metadata/android/hi/changelogs/740.txt new file mode 100644 index 000000000..c795978a8 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/740.txt @@ -0,0 +1,23 @@ +

Improvements

+
    +
  • make links in comments clickable, increase text size
  • +
  • seek on clicking timestamp links in comments
  • +
  • show preferred tab based on recently selected state
  • +
  • add playlist to queue when long clicking on 'Background' in playlist window
  • +
  • search for shared text when it is not an URL
  • +
  • add "share at current time" button to the main video player
  • +
  • add close button to main player when video queue is finished
  • +
  • add "Play directly in Background" to longpress menu for video list items
  • +
  • improve English translations for Play/Enqueue commands
  • +
  • small performance improvements
  • +
  • remove unused files
  • +
  • update ExoPlayer to 2.9.6
  • +
  • add support for Invidious links
  • +
+

Fixed

+
    +
  • fixed scroll w/ comments and related streams disabled
  • +
  • fixed CheckForNewAppVersionTask being executed when it shouldn't
  • +
  • fixed youtube subscription import: ignore ones with invalid url and keep ones with empty title
  • +
  • fix invalid YouTube url: signature tag name is not always "signature" preventing streams from loading
  • +
diff --git a/fastlane/metadata/android/hi/changelogs/750.txt b/fastlane/metadata/android/hi/changelogs/750.txt new file mode 100644 index 000000000..39b77f7c3 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/750.txt @@ -0,0 +1,22 @@ +New +Playback resume #2288 +• Resume streams where you stopped last time +Downloader Enhancements #2149 +• Use Storage Access Framework to store downloads on external SD-cards +• New mp4 muxer +• Optionally change the download directory before starting a download +• Respect metered networks + + +Improved +• Removed gema strings #2295 +• Handle (auto)rotation changes during activity lifecycle #2444 +• Make long-press menus consistent #2368 + +Fixed +• Fixed selected subtitle track name not being shown #2394 +• Do not crash when check for app update fails (GitHub version) #2423 +• Fixed downloads stuck at 99.9% #2440 +• Update play queue metadata #2453 +• [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/hi/changelogs/760.txt b/fastlane/metadata/android/hi/changelogs/760.txt new file mode 100644 index 000000000..6e000f6d9 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/760.txt @@ -0,0 +1,43 @@ +Changes in 0.17.1 + +New +• Thai localization + + +Improved +• Add start playing here action in long-press menus for playlists again #2518 +• Add switch for SAF / legacy file picker #2521 + +Fixed +• Fix disappearing buttons in downloads view when switching apps #2487 +• Fix playback position is stored although watch history is disabled +• Fix reduced performance caused by playback position in list views #2517 +• [Extractor] Fix ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 +• [Extractor] [YouTube] Fix casual search error when playlists are in results TeamNewPipe/NewPipeExtractor#185 + + + +Changes in 0.17.0 + +New +Playback resume #2288 +• Resume streams where you stopped last time +Downloader Enhancements #2149 +• Use Storage Access Framework to store downloads on external SD-cards +• New mp4 muxer +• Optionally change the download directory before starting a download +• Respect metered networks + + +Improved +• Removed gema strings #2295 +• Handle (auto)rotation changes during activity lifecycle #2444 +• Make long-press menus consistent #2368 + +Fixed +• Fixed selected subtitle track name not being shown #2394 +• Do not crash when check for app update fails (GitHub version) #2423 +• Fixed downloads stuck at 99.9% #2440 +• Update play queue metadata #2453 +• [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/hi/changelogs/770.txt b/fastlane/metadata/android/hi/changelogs/770.txt new file mode 100644 index 000000000..c775d63fc --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/770.txt @@ -0,0 +1,4 @@ +0.17.2 में परिवर्तन + +फिक्स +• फिक्स कोई वीडियो उपलब्ध नहीं था diff --git a/fastlane/metadata/android/hi/changelogs/780.txt b/fastlane/metadata/android/hi/changelogs/780.txt new file mode 100644 index 000000000..9100d7335 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/780.txt @@ -0,0 +1,12 @@ +Changes in 0.17.3 + +Improved +• Added option to clear playback states #2550 +• Show hidden directories in the file picker #2591 +• Support URLs from `invidio.us` instances to be opened with NewPipe #2488 +• Add support for `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 + +Fixed +• [YouTube] Fixed 'java.lang.IllegalArgumentException #192 +• [YouTube] Fixed live streams not working TeamNewPipe/NewPipeExtractor#195 +• Fixed performance problem in android pie when downloading a stream #2592 diff --git a/fastlane/metadata/android/hi/changelogs/790.txt b/fastlane/metadata/android/hi/changelogs/790.txt new file mode 100644 index 000000000..ec77b2acb --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/790.txt @@ -0,0 +1,14 @@ +Improved +• Add more titles to improve accessibility for blind people #2655 +• Make language of download folder setting more consistent and less ambiguous #2637 + +Fixed +• Check if last byte in the block is downloaded #2646 +• Fixed scrolling in video detail fragment #2672 +• Remove double search clear box animations to one #2695 +• [SoundCloud] Fix client_id extraction #2745 + +Development +• Add missing dependencies inherited from NewPipeExtractor into NewPipe #2535 +• Migrate to AndroidX #2685 +• Update to ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/hi/changelogs/800.txt b/fastlane/metadata/android/hi/changelogs/800.txt new file mode 100644 index 000000000..332b5c994 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/800.txt @@ -0,0 +1,27 @@ +New +• PeerTube support without P2P (#2201) [Beta]: + ◦ Watch and download videos from PeerTube instances + ◦ Add instances in the settings to access the complete PeerTube world + ◦ There might be problems with SSL handshakes on Android 4.4 and 7.1 when accessing certain instances resulting in a network error. + +• Downloader (#2679): + ◦ Calculate download ETA + ◦ Download opus (webm files) as ogg + ◦ Recover expired download links to resume downloads after a long pause + +Improved +• Make the KioskFragment aware of changes in the preferred content country and improve performance of all main tabs #2742 +• Use new Localization and Downloader implementations from extractor #2713 +• Make "Default kiosk" string translatable +• Black navigation bar for black theme #2569 + +Fixed +• Fixed a bug that could not move the popup player if another finger was placed while moving the popup player #2772 +• Allow playlists missing an uploader and fix crashes related to this problem #2724, TeamNewPipe/NewPipeExtractor#219 +• Enabling TLS1.1/1.2 on Android 4.4 devices (API 19/KitKat) to fix TLS handshake with MediaCCC and some PeerTube instances #2792 +• [SoundCloud] Fixed client_id extraction TeamNewPipe/NewPipeExtractor#217 +• [SoundCloud] Fix audio stream extraction + +Development +• Update ExoPlayer to 2.10.8 #2791, #2816 +• Update Gradle to 3.5.1 and add Kotlin support #2714 diff --git a/fastlane/metadata/android/hi/changelogs/810.txt b/fastlane/metadata/android/hi/changelogs/810.txt new file mode 100644 index 000000000..c75855fd1 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/810.txt @@ -0,0 +1,19 @@ +New +• Show video thumbnail on the lock screen when playing in the background + +Improved +• Add local playlist to queue when long pressing on background / popup button +• Make main page tabs scrollable and hide when there is only a single tab +• Limit amount of notification thumbnail updates in background player +• Add dummy thumbnail for empty local playlists +• Use *.opus file extension instead of *.webm and show "opus" in format label instead of "WebM Opus" in the download dropdown +• Add button to delete downloaded files or download history in "Downloads" +• [YouTube] Add support to /c/shortened_url channel links + +Fixed +• Fixed multiple issues when sharing a video to NewPipe and downloading its streams directly +• Fixed player access out of its creation thread +• Fixed search result paging +• [YouTube] Fixed switching on null causing NPE +• [YouTube] Fixed viewing comments when opening an invidio.us url +• [SoundCloud] Updated client_id diff --git a/fastlane/metadata/android/hi/changelogs/820.txt b/fastlane/metadata/android/hi/changelogs/820.txt new file mode 100644 index 000000000..d99e5f004 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/820.txt @@ -0,0 +1 @@ +फिक्स्ड डिक्रिप्ट फ़ंक्शन नाम रेगेक्स YouTube को अनुपयोगी बना रहा। diff --git a/fastlane/metadata/android/hi/changelogs/830.txt b/fastlane/metadata/android/hi/changelogs/830.txt new file mode 100644 index 000000000..b8c338f9a --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/830.txt @@ -0,0 +1 @@ +साउंडक्लाउड समस्याओं को ठीक करने के लिए साउंडक्लाउड क्लाइंट_आईडी अपडेट किया गया। diff --git a/fastlane/metadata/android/hi/changelogs/840.txt b/fastlane/metadata/android/hi/changelogs/840.txt new file mode 100644 index 000000000..95dc80844 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/840.txt @@ -0,0 +1,22 @@ +New +• Added language selector to change the app language +• Added send to Kodi button to player collapsible menu +• Added ability to copy comments on long press + +Improved +• Fix ReCaptcha activity and correctly save obtained cookies +• Removed dot-menu in favour of drawer and hide history button when watch history is not enabled in settings +• Ask for display over other apps permission in settings correctly on Android 6 and later +• Rename local playlist by long-clicking in BookmarkFragment +• Various PeerTube improvements +• Improved several English source strings + +Fixed +• Fixed player starting again although it is paused when option "minimize on app switch" enabled and NewPipe is minimized +• Fix initial brightness value for gesture +• Fixed .srt subtitle downloads containing not all line breaks +• Fixed download to SD card failing because some Android 5 devices are not CTF compliant +• Fixed downloading on Android KitKat +• Fixed corrupt video .mp4 file being recognized as audio file +• Fixed multiple localization problems, including wrong Chinese language codes +• [YouTube] Timestamps in description are clickable again diff --git a/fastlane/metadata/android/hi/changelogs/850.txt b/fastlane/metadata/android/hi/changelogs/850.txt new file mode 100644 index 000000000..09f564614 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/850.txt @@ -0,0 +1 @@ +इस रिलीज़ में YouTube वेबसाइट संस्करण अपडेट किया गया था। पुराना वेबसाइट संस्करण मार्च में बंद होने जा रहा है और इसलिए आपको न्यूपाइप को अपग्रेड करना होगा। diff --git a/fastlane/metadata/android/hi/changelogs/860.txt b/fastlane/metadata/android/hi/changelogs/860.txt new file mode 100644 index 000000000..24a2297a7 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/860.txt @@ -0,0 +1,7 @@ +उन्नत +• सेव करें और रिस्टोर करें कि क्या पिच और टेंपो अनहुक हैं या नहीं +• प्लेयर में सपोर्ट डिस्प्ले कटआउट +• गोल दृश्य और ग्राहकों की संख्या +• कम डेटा का उपयोग करने के लिए YouTube को अनुकूलित किया गया + +इस रिलीज़ में YouTube से संबंधित 15 से अधिक बग ठीक किए गए थे। diff --git a/fastlane/metadata/android/hi/changelogs/870.txt b/fastlane/metadata/android/hi/changelogs/870.txt new file mode 100644 index 000000000..849cc317d --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/870.txt @@ -0,0 +1,2 @@ +यह एक हॉटफिक्स रिलीज़ है जो न्यूपाइप को बिना किसी बड़ी परेशानी के फिर से साउंडक्लाउड का उपयोग करने की अनुमति देता है। +साउंडक्लाउड के v2 एपीआई का उपयोग अब एक्सट्रैक्टर में किया जाता है और अमान्य क्लाइंट आईडी का पता लगाने में सुधार किया गया है। diff --git a/fastlane/metadata/android/hi/changelogs/900.txt b/fastlane/metadata/android/hi/changelogs/900.txt new file mode 100644 index 000000000..78a617e47 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/900.txt @@ -0,0 +1,14 @@ +New +• Subscription groups and sorted feeds +• Mute button in players + +Improved +• Allow opening music.youtube.com and media.ccc.de links in NewPipe +• Relocate two settings from Appearance to Content +• Hide 5, 15, 25 second seek options if inexact seek is enabled + +Fixed +• some WebM videos are not seekable +• database backup on Android P +• crash when sharing a downloaded file +• tons of YouTube extraction issue and more ... diff --git a/fastlane/metadata/android/hi/changelogs/910.txt b/fastlane/metadata/android/hi/changelogs/910.txt new file mode 100644 index 000000000..18cf51131 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/910.txt @@ -0,0 +1 @@ +फिक्स्ड डेटाबेस माइग्रेशन जो न्यूपाइप को कुछ दुर्लभ मामलों में शुरू होने से रोकता है। diff --git a/fastlane/metadata/android/hi/changelogs/920.txt b/fastlane/metadata/android/hi/changelogs/920.txt new file mode 100644 index 000000000..1484a6bd0 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/920.txt @@ -0,0 +1,9 @@ +Improved + +• Added upload date and view count on stream grid items +• Improvements for the drawer header layout + +Fixed + +• Fixed mute button causing crashes on API 19 +• Fixed downloading of long 1080p 60fps videos diff --git a/fastlane/metadata/android/hi/changelogs/930.txt b/fastlane/metadata/android/hi/changelogs/930.txt new file mode 100644 index 000000000..b23b01ea8 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/930.txt @@ -0,0 +1,19 @@ +New +• Search on YouTube Music +• Basic Android TV support + +Improved +• Added the ability to remove all watched videos from a local playlist +• Show message when content isn't supported yet instead of crashing +• Improved popup player resize with pinch gestures +• Enqueue streams on long press on background and popup buttons in channel +• Improved size handling of the drawer header title + +Fixed +• Fixed age restricted content setting not working +• Fixed certain kinds of reCAPTCHAs +• Fixed crash when opening bookmarks while playlist is `null` +• Fixed detection of network related exceptions +• Fixed visibility of group sort button in the subscriptions fragment + +and more diff --git a/fastlane/metadata/android/hi/changelogs/940.txt b/fastlane/metadata/android/hi/changelogs/940.txt new file mode 100644 index 000000000..f9530bc68 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/940.txt @@ -0,0 +1,16 @@ +New +• Add support for SoundCloud comments +• Add YouTube restricted mode setting +• Show PeerTube parent channel details + +Improved +• Show Kore button only for supported services +• Block player gestures that begin at the NavigationBar or StatusBar +• Change retry & subscribe buttons background color based on service color + +Fixed +• Fix download dialog freeze +• Open in browser button now really opens in browser +• Fix crash on opening videos and "Could not play this stream" + +and more diff --git a/fastlane/metadata/android/hi/changelogs/950.txt b/fastlane/metadata/android/hi/changelogs/950.txt new file mode 100644 index 000000000..4f47a9959 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/950.txt @@ -0,0 +1,4 @@ +यह रिलीज़ तीन छोटे सुधार लाता है: +• Android 10+ पर फिक्स्ड स्टोरेज एक्सेस +• फिक्स्ड ओपनिंग कियोस्क +• लंबे वीडियो की निश्चित अवधि पार्सिंग diff --git a/fastlane/metadata/android/hi/changelogs/951.txt b/fastlane/metadata/android/hi/changelogs/951.txt new file mode 100644 index 000000000..e933e5cbd --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/951.txt @@ -0,0 +1,17 @@ +New +• Add search for subscription picker in the feed group dialog +• Add filter to the feed group dialog to show only ungrouped subscriptions +• Add playlist tab to main page +• Fast forward/rewind in background/pop-up player queue +• Display search suggestion: did you mean & showing result for + +Improved +• Drop writing application metadata in muxed files +• Do not remove failed streams from the queue +• Update status bar color to match toolbar color + +Fixed +• Fixed audio/video desync caused by floating point cumulative errors +• [PeerTube] Handle deleted comments + +and more diff --git a/fastlane/metadata/android/hi/changelogs/952.txt b/fastlane/metadata/android/hi/changelogs/952.txt new file mode 100644 index 000000000..d228e3a2d --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/952.txt @@ -0,0 +1,7 @@ +Improved +• Auto-play is available for all services (instead of only for YouTube) + +Fixed +• Fixed related streams by supporting YouTube's new continuations +• Fixed age restricted YouTube videos +• [Android TV] Fixed lingering focus highlight overlay diff --git a/fastlane/metadata/android/hi/changelogs/953.txt b/fastlane/metadata/android/hi/changelogs/953.txt new file mode 100644 index 000000000..7863012a7 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/953.txt @@ -0,0 +1 @@ +यूट्यूब के डिक्रिप्शन फ़ंक्शन का निष्कर्षण ठीक किया गया। diff --git a/fastlane/metadata/android/hi/changelogs/954.txt b/fastlane/metadata/android/hi/changelogs/954.txt new file mode 100644 index 000000000..87df3fb9c --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/954.txt @@ -0,0 +1,9 @@ +• नए एप्लिकेशन वर्कफ़्लो: विस्तार पृष्ठ पर वीडियो चलाएं, प्लेयर को छोटा करने के लिए नीचे स्वाइप करें +• मीडियास्टाइल सूचनाएँ: सूचनाओं में अनुकूलन योग्य क्रियाएं, प्रदर्शन सुधार +• डेस्कटॉप ऐप के रूप में न्यूपाइप का उपयोग करते समय मूल आकार परिवर्तन + +• असमर्थित यूआरएल टोस्ट के मामले में खुले विकल्पों के साथ संवाद दिखाएं +• रिमोट सुझावों के अनुपलब्धता पर अनुभव में सुधार +• 720p60 (इन-ऐप प्लेयर) और 480p (पॉप-अप प्लेयर) के लिए डिफ़ॉल्ट वीडियो की गुणवत्ता वृद्धि + +• त्रुटियों में सुधार और बहुत कुछ diff --git a/fastlane/metadata/android/hi/changelogs/955.txt b/fastlane/metadata/android/hi/changelogs/955.txt index 2c38a9f32..0add0a6f6 100644 --- a/fastlane/metadata/android/hi/changelogs/955.txt +++ b/fastlane/metadata/android/hi/changelogs/955.txt @@ -1,3 +1,3 @@ -[यूट्यूब] कुछ उपयोगकर्ताओं के लिए खोज को ठीक करें -[यूट्यूब] यादृच्छिक डिक्रिप्शन अपवादों को ठीक करें -[साउंडक्लाउड] एक स्लैश के साथ समाप्त होने वाले यूआरएल अब सही ढंग से पार्स किए गए हैं +[यूट्यूब] कुछ उपयोगकर्ताओं के लिए खोज को ठीक किया गया +[यूट्यूब] यादृच्छिक डिक्रिप्शन अपवादों को ठीक किया गया +[साउंडक्लाउड] एक स्लैश के साथ समाप्त होने वाले यूआरएल अब सही ढंग से पदच्छेदन किया गया diff --git a/fastlane/metadata/android/hi/changelogs/956.txt b/fastlane/metadata/android/hi/changelogs/956.txt new file mode 100644 index 000000000..3917d4aeb --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/956.txt @@ -0,0 +1 @@ +[यूट्यूब] किसी भी वीडियो को लोड करते समय क्रैश में सुधार diff --git a/fastlane/metadata/android/hi/changelogs/957.txt b/fastlane/metadata/android/hi/changelogs/957.txt new file mode 100644 index 000000000..63c9e0c6c --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/957.txt @@ -0,0 +1,10 @@ +• एक में विशिष्ट एनक्यूई क्रियाओं को एकजुट किया +• दो उँगलियों के जेस्चर से वीडियो प्लेयर को बंद करना +• रेकॉप्टचा कूकीज को हटाने की अनुमति +• अधिसूचना को रंगीन न करने का विकल्प +• न्यूपाइप को साझा करते समय अनंत बफ़रिंग,त्रुटियां और अन्य विसंगतियों में सुधार +• यूट्यूब वीडियो को गति दें और आयु प्रतिबंधित वीडियो में सुधार +• फास्ट फॉरवर्ड / रिवाइंड पर क्रैश ठीक किया गया +• थंबनेल खींचकर सूचियों को पुनर्व्यवस्थित न करने का संशोधन +• हमेशा पॉपअप गुणों को याद रखने का संशोधन +• संताली भाषा जोड़ी गयी diff --git a/fastlane/metadata/android/hi/changelogs/958.txt b/fastlane/metadata/android/hi/changelogs/958.txt new file mode 100644 index 000000000..910882c1b --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/958.txt @@ -0,0 +1,15 @@ +नया और बेहतर: +• लॉक स्क्रीन पर थंबनेल छिपाने के लिए पुनः जोड़ा गया विकल्प +• फ़ीड ताज़ा करने के लिए खींचो +• स्थानीय सूचियों को लाने पर बेहतर प्रदर्शन + +फिक्स्ड: +• रैम से हटाए जाने के बाद न्यूपाइप शुरू करते समय क्रैश का निवारन +• इंटरनेट कनेक्शन न होने पर स्टार्टअप पर क्रैश का निवारन +• फिक्स्ड चमक- और वॉल्यूम- जेस्चर सेटिंग्स +• [यूट्यूब] फिक्स्ड लंबे प्लेलिस्ट + +अन्य: +• कोड शोधन और कई आंतरिक सुधार +• निर्भरता अद्यतन +• अनुवाद अपडेट diff --git a/fastlane/metadata/android/hi/changelogs/959.txt b/fastlane/metadata/android/hi/changelogs/959.txt new file mode 100644 index 000000000..a8879fec2 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/959.txt @@ -0,0 +1,3 @@ +त्रुटि रिपोर्टर खोलने के बाद क्रैश का निश्चित अंतहीन लूप। +पीरट्यूब इंस्टेंस सूची जो निऊपाईप द्वारा स्वचालित रूप से खोली जा सकती है। +अपडेट किए गए अनुवाद। diff --git a/fastlane/metadata/android/hi/changelogs/960.txt b/fastlane/metadata/android/hi/changelogs/960.txt new file mode 100644 index 000000000..355d831fb --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/960.txt @@ -0,0 +1,4 @@ +• सेटिंग्स में निर्यात डेटाबेस विकल्प का बेहतर विवरण। +• फिक्स्ड YouTube टिप्पणियों का पदच्छेद। +• Media.ccc.de सेवा का निश्चित प्रदर्शन नाम में सुधार। +• अपडेट किए गए अनुवाद। diff --git a/fastlane/metadata/android/hi/changelogs/961.txt b/fastlane/metadata/android/hi/changelogs/961.txt new file mode 100644 index 000000000..1e12457bd --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/961.txt @@ -0,0 +1,12 @@ +• [यूट्यूब] मिक्स सपोर्ट +• [यूट्यूब] सार्वजनिक प्रसारकों और कोविद -19 के बारे में जानकारी प्रदर्शित किया गया +• [media.ccc.de] “ताज़ा” वीडियो जोड़े गए +• सोमाली अनुवाद जोड़ा गया + +• कई आंतरिक सुधार + +• विडियो प्लेयर के भीतर शेयरिंग वीडियो में सुधार +• फिक्स्ड रिक्त रिक्प्चा वेबव्यू +• फिक्स्ड क्रैश जो एक सूची से एक धारा को हटाते समय होता था +• [पीयरट्यूब] फिक्स्ड संबंधित धाराएँ +• [यूट्यूब] निश्चित यूट्यूब संगीत खोज diff --git a/fastlane/metadata/android/hi/changelogs/962.txt b/fastlane/metadata/android/hi/changelogs/962.txt new file mode 100644 index 000000000..bdcfc4df4 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/962.txt @@ -0,0 +1,2 @@ +मीडिया.सिसिसी.डीई सेवा में "हाल के" वीडियो जोड़े गए। +मीडिया.सिसिसी.डीई सेवा में लाइव स्ट्रीम जोड़ा गया और लाइव स्ट्रीम समर्थन भी। diff --git a/fastlane/metadata/android/hi/changelogs/963.txt b/fastlane/metadata/android/hi/changelogs/963.txt new file mode 100644 index 000000000..06ca8b0e2 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/963.txt @@ -0,0 +1 @@ +• [यूट्यूब] फिक्स्ड निश्चित चैनल निरंतरता diff --git a/fastlane/metadata/android/hi/changelogs/964.txt b/fastlane/metadata/android/hi/changelogs/964.txt new file mode 100644 index 000000000..1238eb876 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/964.txt @@ -0,0 +1,8 @@ +• Added support for chapters in player controls +• [PeerTube] Added Sepia search +• Re-added share button in video detail view and moved stream description into the tab layout +• Disable restoring brightness if brightness gesture is disabled +• Added list item to play video on kodi +• Fixed crash when no default browser is set on some devices and improve share dialogs +• Toggle play/pause with hardware space button in fullscreen player +• [media.ccc.de] Various fixes and improvements diff --git a/fastlane/metadata/android/hi/changelogs/965.txt b/fastlane/metadata/android/hi/changelogs/965.txt new file mode 100644 index 000000000..eaed8c847 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/965.txt @@ -0,0 +1,6 @@ +Fixed crash which occurred when reordering channel groups. +Fixed getting more YouTube videos from channels and playlists. +Fixed getting YouTube comments. +Added support for /watch/, /v/ and /w/ subpaths in YouTube URLs. +Fixed extraction of SoundCloud client id and geo-restricted content. +Added Northern Kurdish localization. diff --git a/fastlane/metadata/android/hi/changelogs/966.txt b/fastlane/metadata/android/hi/changelogs/966.txt new file mode 100644 index 000000000..b7fdc182f --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/966.txt @@ -0,0 +1,14 @@ +New: +• Add a new service: Bandcamp + +Improved: +• Add an option to have the app follow the device theme +• Prevent some crashes by showing an improved error panel +• Show more information on why content in unavailable +• Hardware space button triggers play/pause +• Show "Download started" toast + +Fixed: +• Fix very small thumbnail in video details while playing in the background +• Fix empty title in minimized player +• Fix last resize mode not being restored correctly diff --git a/fastlane/metadata/android/hi/changelogs/967.txt b/fastlane/metadata/android/hi/changelogs/967.txt new file mode 100644 index 000000000..ba416b621 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/967.txt @@ -0,0 +1 @@ +यूरोपीय संघ में YouTube ठीक से काम नहीं कर रहा है। यह एक नई कुकी और गोपनीयता सहमति प्रणाली के कारण हुआ था जिसके लिए न्यूपाइप को एक सहमति कुकी सेट करने की आवश्यकता होती है। diff --git a/fastlane/metadata/android/hi/changelogs/968.txt b/fastlane/metadata/android/hi/changelogs/968.txt new file mode 100644 index 000000000..3972a96c1 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/968.txt @@ -0,0 +1,7 @@ +Added channel details option to long-press menu. +Added functionality to rename Playlist Name from playlist interface. +Allow the user to pause while a video is buffering. +Polished the white theme. +Fixed overlapping fonts when using a larger font size. +Fixed no video on Formuler and Zephier devices. +Fixed various crashes. diff --git a/fastlane/metadata/android/hi/changelogs/969.txt b/fastlane/metadata/android/hi/changelogs/969.txt new file mode 100644 index 000000000..59b2488e9 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/969.txt @@ -0,0 +1,8 @@ +• Allow installation on external storage +• [Bandcamp] Added support for displaying the first three comments on a stream +• Only show 'download has started' toast when download is started +• Do not set reCaptcha cookie when there is no cookie stored +• [Player] Improve cache performance +• [Player] Fixed player not automatically playing +• Dismiss previous Snackbars when deleting downloads +• Fixed trying to delete object not in list diff --git a/fastlane/metadata/android/hi/changelogs/970.txt b/fastlane/metadata/android/hi/changelogs/970.txt new file mode 100644 index 000000000..f4ff5fe34 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/970.txt @@ -0,0 +1,11 @@ +New +• Show content metadata (tags, categories, license, ...) below the description +• Added "Show channel details" option in remote (non-local) playlists +• Added "Open in browser" option to long-press menu + +Fixed +• Fixed rotation crash on video detail page +• Fixed "Play with Kodi" button in player always prompts to install Kore +• Fixed and improved setting import and export paths +• [YouTube] Fixed comment like count +And much more diff --git a/fastlane/metadata/android/hi/changelogs/971.txt b/fastlane/metadata/android/hi/changelogs/971.txt new file mode 100644 index 000000000..48e9ddaa0 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/971.txt @@ -0,0 +1,3 @@ +हॉटफिक्स +• रिबफर के बाद प्लेबैक के लिए बफर बढ़ाएं +• प्लेयर में प्ले-क्यू आइकन पर क्लिक करने पर टैबलेट और टीवी पर क्रैश ठीक किया गया diff --git a/fastlane/metadata/android/hi/changelogs/972.txt b/fastlane/metadata/android/hi/changelogs/972.txt new file mode 100644 index 000000000..318890d60 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/972.txt @@ -0,0 +1,14 @@ +New +Recognize timestamps and hashtags in description +Added manual tablet mode setting +Added ability to hide played items in a feed + +Improved +Support Storage Access Framework properly +Better error handling of unavailable and terminated channels +The Android share sheet for Android 10+ users now shows the content title. +Updated Invidious instances and support Piped links. + +Fixed +[YouTube] Age restricted content +Prevent leaked window Exception when opening choice dialog diff --git a/fastlane/metadata/android/hi/changelogs/973.txt b/fastlane/metadata/android/hi/changelogs/973.txt new file mode 100644 index 000000000..120359a24 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/973.txt @@ -0,0 +1,4 @@ +Hotfix +• Fix thumbnails and titles being trimmed in grid layout, due to a wrong calculation of how many videos can fit in one row +• Fix download dialog disappearing without doing anything if opened from the share menu +• Update a library related to opening external activities such as the Storage Access Framework file picker diff --git a/fastlane/metadata/android/hi/changelogs/974.txt b/fastlane/metadata/android/hi/changelogs/974.txt new file mode 100644 index 000000000..e028a5e0b --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/974.txt @@ -0,0 +1,5 @@ +Hotfix +• Fix buffering issues caused by YouTube throttling +• Fix YouTube comments extraction and crashes with disabled comments +• Fix YouTube music search +• Fix PeerTube livestreams diff --git a/fastlane/metadata/android/hi/changelogs/975.txt b/fastlane/metadata/android/hi/changelogs/975.txt new file mode 100644 index 000000000..8a35a7e28 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/975.txt @@ -0,0 +1,17 @@ +New +• Show a thumbnail preview while seeking +• Detect disabled comments +• Allow marking a feed item as watched +• Show comment hearts + +Improved +• Improve metadata and tags layout +• Apply service color to UI components + +Fixed +• Fix thumbnail in mini player +• Fix endless buffering on duplicate queue items +• Some player fixes like rotation and faster closing +• Fix ReCAPTCHA remaining loaded in background +• Disable clicks while refreshing feed +• Fix some downloader crashes diff --git a/fastlane/metadata/android/hi/changelogs/976.txt b/fastlane/metadata/android/hi/changelogs/976.txt new file mode 100644 index 000000000..4f868872b --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/976.txt @@ -0,0 +1,10 @@ +• Added option to directly open player in fullscreen +• Allow choosing which types of search suggestions to show +• Dark theme now darker + dark splash screen added +• Improved file picker to gray out unwanted files +• Fixed importing YouTube subscriptions +• Replaying a stream requires on tap on the replay button again +• Fixed closing audio session +• [Android TV] Fixed long seekbar jumps when using a DPad + +To see further changes, view the changelog (and blog post) from the Links tab below. diff --git a/fastlane/metadata/android/hi/changelogs/977.txt b/fastlane/metadata/android/hi/changelogs/977.txt new file mode 100644 index 000000000..df2eb6c9e --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/977.txt @@ -0,0 +1,10 @@ +• Added a "play next" button to the long press menu +• Added YouTube shorts path prefix to intent filter +• Fixed Settings import +• Swap seekbar position with player buttons in Queue screen +• Various fixes related to MediasessionManager +• Fixed seekbar not completed after video end +• Disabled media tunneling on RealtekATV +• Expanded minimized player buttons clickable area + +To see further changes, view the changelog (and blog post) from the Links tab below. diff --git a/fastlane/metadata/android/hi/changelogs/978.txt b/fastlane/metadata/android/hi/changelogs/978.txt new file mode 100644 index 000000000..bb032f753 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/978.txt @@ -0,0 +1 @@ +एक नए न्यूपाइप संस्करण के लिए चेक को ठीक किया गया। यह चेक कभी-कभी बहुत जल्दी निष्पादित किया गया था और इसलिए ऐप क्रैश हो गया। इसे अभी ठीक किया जाना चाहिए। diff --git a/fastlane/metadata/android/hi/changelogs/979.txt b/fastlane/metadata/android/hi/changelogs/979.txt new file mode 100644 index 000000000..f6cec22ce --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/979.txt @@ -0,0 +1,2 @@ +- प्लेबैक फिर से शुरू करना +- यह सुनिश्चित करने के लिए सुधार कि सेवा जो यह निर्धारित करती है कि न्यूपाइप को नए संस्करण की जांच करनी चाहिए या नहीं, पृष्ठभूमि में शुरू नहीं हुई है diff --git a/fastlane/metadata/android/hi/changelogs/980.txt b/fastlane/metadata/android/hi/changelogs/980.txt new file mode 100644 index 000000000..bd3086c68 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/980.txt @@ -0,0 +1,13 @@ +New +• Added "Add to playlist" option to share menu +• Added support for y2u.be and PeerTube short links + +Improved +• Made Playback-Speed-Controls more compact +• Feed highlights new items now +• "Show watched items" option in the feed is now saved + +Fixed +• Fixed YouTube likes and dislikes extraction +• Fixed automatic replay after returning from the background +And much more diff --git a/fastlane/metadata/android/hi/changelogs/981.txt b/fastlane/metadata/android/hi/changelogs/981.txt new file mode 100644 index 000000000..a2c1b19b2 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/981.txt @@ -0,0 +1,2 @@ +Android 11+ पर बफ़रिंग के बाद विफल प्लेबैक रिज्यूमे को ठीक करने के लिए MediaParser समर्थन को हटा दिया गया। +प्लेबैक समस्याओं को ठीक करने के लिए Philips QM16XE पर मीडिया टनलिंग अक्षम की गई। diff --git a/fastlane/metadata/android/hi/changelogs/982.txt b/fastlane/metadata/android/hi/changelogs/982.txt new file mode 100644 index 000000000..953fcd801 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/982.txt @@ -0,0 +1 @@ +फिक्स्ड YouTube कोई स्ट्रीम नहीं चला रहा है। diff --git a/fastlane/metadata/android/hi/changelogs/983.txt b/fastlane/metadata/android/hi/changelogs/983.txt new file mode 100644 index 000000000..efbd0557c --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/983.txt @@ -0,0 +1,9 @@ +Add new double-tap-to-seek UI and behaviour +Make settings searchable +Highlight pinned comments as such +Add open-with-app support for FSFE's PeerTube instance +Add error notifications +Fix replay of first queue item on player change +Wait longer when buffering during livestreams before failing +Fix order of local search results +Fix empty item fields in play queue diff --git a/fastlane/metadata/android/hi/changelogs/984.txt b/fastlane/metadata/android/hi/changelogs/984.txt new file mode 100644 index 000000000..3b18b4665 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/984.txt @@ -0,0 +1,7 @@ +Load enough initial items in lists to fill the whole screen and to fix scrolling on tablets and TVs +Fix random crashes while scrolling through lists +Have the player fast seek overlay arc go under the system UI +Revert changes to cutouts when playing in multi window, causing the misplaced player regression on some phones +Increase compileSdk from 30 to 31 +Update error reporting library +Refactor some code in the player diff --git a/fastlane/metadata/android/hi/changelogs/985.txt b/fastlane/metadata/android/hi/changelogs/985.txt new file mode 100644 index 000000000..071ab64e3 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/985.txt @@ -0,0 +1 @@ +फिक्स्ड YouTube कोई स्ट्रीम नहीं चला रहा है diff --git a/fastlane/metadata/android/hi/changelogs/986.txt b/fastlane/metadata/android/hi/changelogs/986.txt new file mode 100644 index 000000000..49f7478e6 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/986.txt @@ -0,0 +1,16 @@ +New +• Notifications for new streams +• Seamless transition between background and video players +• Change pitch by semitones +• Append the main player queue to a playlist + +Improved +• Remember speed/pitch step size +• Mitigate initial long buffering in the video player +• Improve player UI for Android TV +• Confirm before deleting all downloaded files + +Fixed +• Fix media button not hiding player controls +• Fix playback reset on player type change +• Fix rotating the playlist dialog diff --git a/fastlane/metadata/android/hi/changelogs/987.txt b/fastlane/metadata/android/hi/changelogs/987.txt new file mode 100644 index 000000000..c3404e2a2 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/987.txt @@ -0,0 +1,12 @@ +New +• Support delivery methods other than progressive HTTP: faster playback loading time, fixes for PeerTube and SoundCloud, playback of recently-ended YouTube livestreams +• Add button to add a remote playlist to a local one +• Image preview in Android 10+ share sheet + +Improved +• Improve playback parameters dialog +• Move subscription import/export buttons to three-dot menu + +Fixed +• Fix removing fully watched videos from playlist +• Fix share menu theme and "add to playlist" entry diff --git a/fastlane/metadata/android/hi/changelogs/988.txt b/fastlane/metadata/android/hi/changelogs/988.txt new file mode 100644 index 000000000..5689958ad --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/988.txt @@ -0,0 +1,2 @@ +[यूट्यूब] किसी भी वीडियो को चलाने का प्रयास करते समय "कोई स्ट्रीम नहीं मिल सका" त्रुटि को ठीक करें +[यूट्यूब] ठीक करें "निम्न सामग्री इस ऐप पर उपलब्ध नहीं है।" अनुरोधित वीडियो के बजाय दिखाया गया संदेश diff --git a/fastlane/metadata/android/hi/changelogs/989.txt b/fastlane/metadata/android/hi/changelogs/989.txt new file mode 100644 index 000000000..d868b7fa5 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/989.txt @@ -0,0 +1,3 @@ +• [यूट्यूब] किसी भी वीडियो को चलाने का प्रयास करते समय असीमित लोडिंग को ठीक करें +• [यूट्यूब] कुछ वीडियो पर थ्रॉटलिंग ठीक करें +• jsoup लाइब्रेरी को 1.15.3 में अपग्रेड करें, जिसमें सुरक्षा समाधान शामिल है diff --git a/fastlane/metadata/android/hi/changelogs/990.txt b/fastlane/metadata/android/hi/changelogs/990.txt new file mode 100644 index 000000000..e12c20ba5 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/990.txt @@ -0,0 +1,15 @@ +This release drops support for Android 4.4 KitKat, now the minimum version is Android 5 Lollipop! + +New +• Download from long-press menu +• Hide future videos in feed +• Share local playlists + +Improved +• Refactor the player code into small components: less RAM used, less bugs +• Improve thumbnails' scale mode +• Vector-ize image placeholders + +Fixed +• Fix various issues with the player notification: outdated/missing media info, distorted thumbnail +• Fix fullscreen using 1/4 of screen diff --git a/fastlane/metadata/android/hi/changelogs/991.txt b/fastlane/metadata/android/hi/changelogs/991.txt new file mode 100644 index 000000000..a365d5c44 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/991.txt @@ -0,0 +1,13 @@ +नया +• त्रुटि पैनल में "ब्राउज़र में खोलें" बटन जोड़ें +• चैनल समूहों को सूची के रूप में प्रदर्शित करने का विकल्प जोड़ें +• [यूट्यूब] टाइमस्टैम्प यूआरएल साझा करने के लिए स्ट्रीम सेगमेंट पर लंबे समय तक क्लिक करें +• मिनी प्लेयर में क्यू प्ले बटन जोड़ें + +उन्नत +• आइसलैंडिक स्थानीयकरण जोड़ें और कई अन्य अनुवादों को अपडेट करें +• कई आंतरिक सुधार + +हल किया गया +• कई सारे क्रैश को ठीक करें +• [यूट्यूब] कुछ देशों में लोडिंग चैनल, गैर-समर्पित फ़ीड और प्लेबैक समस्याओं को ठीक करें diff --git a/fastlane/metadata/android/hi/changelogs/992.txt b/fastlane/metadata/android/hi/changelogs/992.txt new file mode 100644 index 000000000..d4024fd02 --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/992.txt @@ -0,0 +1,17 @@ +नया +• वीडियो विवरण में सब्सक्राइबर गिनती +• कतार से डाउनलोड करें +• स्थायी रूप से एक प्लेलिस्ट थंबनेल सेट करें +• लंबे समय तक प्रेस हैशटैग और लिंक +• कार्ड दृश्य मोड + +बेहतर +• बड़ा मिनी-प्लेयर बंद बटन +• चिकना थंबनेल डाउनस्केलिंग +• लक्ष्य Android 13 (API 33) +• अब मांगने से खिलाड़ी रुक जाता है + +सही किए +• DeX/माउस पर ओवरले ठीक करें +• बिना किसी अलग ऑडियो स्ट्रीम के पृष्ठभूमि प्लेयर की अनुमति दें +• विभिन्न यूट्यूब फिक्स और अधिक… diff --git a/fastlane/metadata/android/hu/changelogs/991.txt b/fastlane/metadata/android/hu/changelogs/991.txt new file mode 100644 index 000000000..386cded5a --- /dev/null +++ b/fastlane/metadata/android/hu/changelogs/991.txt @@ -0,0 +1,13 @@ +Újdonság +• "Megnyitás böngészőben" gomb került a hibapanelre +• Bekerült a csatornacsoportok listaként megjeleníthetősége +• [YouTube] Nyomj hosszan a stream szegmenseire időbélyegzett URL megosztásához +• Sor lejátszása gomb került a minilejátszóra + +Javítások +• Bekerült az izlandi fordítás és sok fordítás frissítve lett +• Sok belső javítás történt + +Hibajavítások +• Többféle összeomlás lett javítva +• [YouTube] Javítva lett a csatornák betöltése, a nem dedikált feed és néhány ország visszajátszási gondjait megkerültük diff --git a/fastlane/metadata/android/id/changelogs/972.txt b/fastlane/metadata/android/id/changelogs/972.txt new file mode 100644 index 000000000..e6b705eeb --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/972.txt @@ -0,0 +1,14 @@ +Baru +Mengenali stempel waktu dan hashtag dalam deskripsi +Menambahkan pengaturan mode tablet manual +Menambahkan kemampuan untuk menyembunyikan item yang diputar di feed + +Ditingkatkan +Mendukung Kerangka Akses Penyimpanan dengan benar +Penanganan kesalahan yang lebih baik untuk saluran yang tidak tersedia dan dihentikan +Lembar berbagi Android untuk pengguna Android 10+ sekarang menampilkan judul konten. +Memperbarui instance Invidious dan mendukung tautan Piped. + +Diperbaiki +[YouTube] Konten yang dibatasi usia +Cegah jendela bocor Pengecualian saat membuka dialog pilihan diff --git a/fastlane/metadata/android/id/changelogs/973.txt b/fastlane/metadata/android/id/changelogs/973.txt new file mode 100644 index 000000000..3ba7d9f05 --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/973.txt @@ -0,0 +1,4 @@ +Perbaikan terbaru +- Memperbaiki thumbnail dan judul yang terpotong dalam tata letak grid, karena perhitungan yang salah tentang berapa banyak video yang dapat ditampung dalam satu baris +- Memperbaiki dialog unduhan yang menghilang tanpa melakukan apa pun jika dibuka dari menu berbagi +- Memperbarui pustaka yang terkait dengan membuka aktivitas eksternal seperti pemilih file Storage Access Framework diff --git a/fastlane/metadata/android/id/changelogs/992.txt b/fastlane/metadata/android/id/changelogs/992.txt new file mode 100644 index 000000000..507334743 --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/992.txt @@ -0,0 +1,17 @@ +Baru +- Jumlah pelanggan dalam detail video +- Unduh dari antrean +- Mengatur gambar mini daftar putar secara permanen +- Tekan lama tagar dan tautan +- Mode tampilan kartu + +Lebih baik +- Tombol tutup pemutar mini yang lebih besar +- Pengecilan ukuran gambar mini yang lebih halus +- Target Android 13 (API 33) +- Mencari tidak lagi menjeda pemain + +Diperbaiki +- Perbaiki overlay pada DeX/mouse +- Izinkan pemutar latar belakang tanpa aliran audio terpisah +- Berbagai perbaikan YouTube dan banyak lagi… diff --git a/fastlane/metadata/android/it/changelogs/65.txt b/fastlane/metadata/android/it/changelogs/65.txt new file mode 100644 index 000000000..e1e3994a7 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/65.txt @@ -0,0 +1,26 @@ +### Miglioramenti + +- Disattiva l'animazione dell'icona burgermenu #1486 +- annulla l'eliminazione dei download #1472 +- Opzione di download nel menu di condivisione #1498 +- Aggiunta l'opzione di condivisione al menu a lungo tap #1454 +- Riduci a icona il giocatore principale all'uscita #1354 +- Aggiornamento della versione della libreria e correzione del backup del database n. 1510 +- Aggiornamento ExoPlayer 2.8.2 n. 1392 + - Rielaborata la finestra di dialogo di controllo della velocità di riproduzione per supportare diverse dimensioni del passo per un cambio di velocità più rapido. + - Aggiunto un interruttore per l'avanzamento rapido durante i silenzi nel controllo della velocità di riproduzione. Questo dovrebbe essere utile per gli audiolibri e alcuni generi musicali e può portare un'esperienza davvero senza interruzioni (e può interrompere una canzone con molti silenzi =\\). + - Rifattorizzazione della risoluzione della sorgente multimediale per consentire il passaggio di metadati insieme ai media all'interno del lettore, anziché farlo manualmente. Ora abbiamo un'unica fonte di metadati ed è direttamente disponibile all'avvio della riproduzione. + - Risolto il problema con i metadati della playlist remota che non si aggiornavano quando sono disponibili nuovi metadati quando viene aperto il frammento della playlist. + - Varie correzioni dell'interfaccia utente: n. 1383, controlli di notifica del giocatore in background ora sempre bianchi, più facile da spegnere il lettore popup tramite lancio +- Usa il nuovo estrattore con architettura refactored per il multiservizio + +### Correzioni + +- Correzione n. 1440 Layout di informazioni video interrotto n. 1491 +- Visualizza la correzione della cronologia n. 1497 + - #1495, aggiornando i metadati (miniatura, titolo e conteggio video) non appena l'utente accede alla playlist. + - #1475, registrando una vista nel database quando l'utente avvia un video su un lettore esterno su un frammento di dettaglio. +- Risolto il timeout della schermata in caso di modalità popup. #1463 (Risolto #640) +- Correzione del lettore video principale n. 1509 + - [#1412] Risolto il problema con la modalità di ripetizione che causava NPE al giocatore quando veniva ricevuto un nuovo intento mentre l'attività del giocatore era in background. + - Risolto il problema con la riduzione a icona del giocatore in popup che non distruggeva il giocatore quando l'autorizzazione per il popup non è concessa. diff --git a/fastlane/metadata/android/it/changelogs/66.txt b/fastlane/metadata/android/it/changelogs/66.txt new file mode 100644 index 000000000..fc6407e20 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/66.txt @@ -0,0 +1,33 @@ +# Registro delle modifiche della v0.13.7 + +### Fisso +- Risolti i problemi del filtro di ordinamento della v0.13.6 + +# Registro delle modifiche della v0.13.6 + +### Miglioramenti + +- Disattiva l'animazione dell'icona burgermenu #1486 +- annulla l'eliminazione dei download #1472 +- Opzione di download nel menu di condivisione #1498 +- Aggiunta l'opzione di condivisione al menu a lungo tap #1454 +- Riduci a icona il giocatore principale all'uscita #1354 +- Aggiornamento della versione della libreria e correzione del backup del database n. 1510 +- Aggiornamento ExoPlayer 2.8.2 n. 1392 + - Rielaborata la finestra di dialogo di controllo della velocità di riproduzione per supportare diverse dimensioni del passo per un cambio di velocità più rapido. + - Aggiunto un interruttore per l'avanzamento rapido durante i silenzi nel controllo della velocità di riproduzione. Questo dovrebbe essere utile per gli audiolibri e alcuni generi musicali e può portare un'esperienza davvero senza interruzioni (e può interrompere una canzone con molti silenzi =\\). + - Rifattorizzazione della risoluzione della sorgente multimediale per consentire il passaggio di metadati insieme ai media all'interno del lettore, anziché farlo manualmente. Ora abbiamo un'unica fonte di metadati ed è direttamente disponibile all'avvio della riproduzione. + - Risolto il problema con i metadati della playlist remota che non si aggiornavano quando sono disponibili nuovi metadati quando viene aperto il frammento della playlist. + - Varie correzioni dell'interfaccia utente: n. 1383, controlli di notifica del giocatore in background ora sempre bianchi, più facile da spegnere il lettore popup tramite lancio +- Usa il nuovo estrattore con architettura refactored per il multiservizio + +### Correzioni + +- Correzione n. 1440 Layout di informazioni video interrotto n. 1491 +- Visualizza la correzione della cronologia n. 1497 + - #1495, aggiornando i metadati (miniatura, titolo e conteggio video) non appena l'utente accede alla playlist. + - #1475, registrando una vista nel database quando l'utente avvia un video su un lettore esterno su un frammento di dettaglio. +- Risolto il timeout della schermata in caso di modalità popup. #1463 (Risolto #640) +- Correzione del lettore video principale n. 1509 + - [#1412] Risolto il problema con la modalità di ripetizione che causava NPE al giocatore quando veniva ricevuto un nuovo intento mentre l'attività del giocatore era in background. + - Risolto il problema con la riduzione a icona del giocatore in popup che non distruggeva il giocatore quando l'autorizzazione per il popup non è concessa. diff --git a/fastlane/metadata/android/it/changelogs/68.txt b/fastlane/metadata/android/it/changelogs/68.txt new file mode 100644 index 000000000..5190eecf3 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/68.txt @@ -0,0 +1,31 @@ +# modifiche della v0.14.1 + +### Fisso +- Risolto il problema con la decrittografia dell'URL del video n. 1659 +- Corretto il collegamento alla descrizione che non estrae bene #1657 + +# modifiche della v0.14.0 + +### Nuovo +- Nuovo design del cassetto #1461 +- Nuova prima pagina personalizzabile #1461 + +### Miglioramenti +- Controlli dei gesti rielaborati #1604 +- Nuovo modo per chiudere il popup player #1597 + +### Fisso +- Risolto l'errore quando il conteggio delle iscrizioni non è disponibile. Chiude #1649. + - Mostra "Conteggio iscritti non disponibile" in questi casi +- Risolto NPE quando una playlist di YouTube è vuota +- Soluzione rapida per i chioschi in SoundCloud +- Refactor e correzione di bug #1623 + - Risolto il risultato della ricerca ciclica n. 1562 + - Risolto il problema con la barra di ricerca non disposta staticamente + - Risolto il problema con i video YT Premium non bloccati correttamente + - Risolto il problema con i video che a volte non venivano caricati (a causa dell'analisi DASH) + - Correggi i collegamenti nella descrizione del video + - Mostra avviso quando qualcuno tenta di scaricare su sdcard esterna + - non correggi il rapporto sui trigger di eccezione mostrati + - miniatura non mostrata nel lettore in background per Android 8.1 [vedi qui](https://github.com/TeamNewPipe/NewPipe/issues/943) +- Risolto il problema con la registrazione del ricevitore di trasmissione. Chiude #1641. diff --git a/fastlane/metadata/android/it/changelogs/69.txt b/fastlane/metadata/android/it/changelogs/69.txt new file mode 100644 index 000000000..2a2cd133b --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/69.txt @@ -0,0 +1,19 @@ +### Nuovo +- Tocca a lungo elimina e condividi gli abbonamenti #1516 +- Interfaccia utente tablet e layout elenco griglia #1617 + +### Miglioramenti +- memorizza e ricarica l'ultima proporzione utilizzata #1748 +- Abilita il layout lineare nell'attività Download con i nomi video completi #1771 +- Elimina e condividi gli abbonamenti direttamente dalla scheda abbonamenti n. 1516 +- L'accodamento ora attiva la riproduzione del video se la coda di riproduzione è già terminata #1783 +- Impostazioni separate per i gesti di volume e luminosità #1644 +- Aggiungi il supporto per la localizzazione #1792 + +### Correzioni +- Risolto il problema con l'analisi del tempo per . formato, quindi NewPipe può essere utilizzato in Finlandia +- Risolto il conteggio degli abbonamenti +- Aggiungi l'autorizzazione al servizio in primo piano per i dispositivi API 28+ #1830 + +### Bug noti +- Lo stato di riproduzione non può essere salvato su Android P diff --git a/fastlane/metadata/android/it/changelogs/70.txt b/fastlane/metadata/android/it/changelogs/70.txt new file mode 100644 index 000000000..c07eb6bed --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/70.txt @@ -0,0 +1,25 @@ +ATTENZIONE: Questa versione probabilmente è un bugfest, proprio come l'ultima. Tuttavia, a causa dell'arresto completo dalla 17. una versione non funzionante è meglio di nessuna versione. Destra? ¯\_(ツ)_/¯ + +### Miglioramenti +* i file scaricati possono ora essere aperti con un clic #1879 +* drop supporto per Android 4.1 - 4.3 #1884 +* rimuovi il vecchio giocatore #1884 +* rimuovi gli stream dalla coda di riproduzione corrente facendoli scorrere verso destra #1915 +* rimuove il flusso in coda automaticamente quando un nuovo flusso viene accodato manualmente #1878 +* Post-elaborazione per i download e implementazione delle funzionalità mancanti #1759 di @kapodamy + * Infrastruttura di post-elaborazione + * Corretta gestione degli errori "infrastruttura" (per downloader) + * Coda invece di download multipli + * Sposta i download serializzati in sospeso (file `.giga`) nei dati dell'app + * Implementare il numero massimo di tentativi di download + * Sospensione corretta del download multi-thread + * Interrompi i download quando passi alla rete mobile (non funziona mai, vedi 2° punto) + * Salva il conteggio dei thread per i prossimi download + * Risolte molte incoerenze + +### Fisso +* Risolto l'arresto anomalo con la risoluzione predefinita impostata sulla risoluzione dei dati mobili migliore e limitata #1835 +* arresto anomalo del lettore pop-up risolto #1874 +* NPE quando si tenta di aprire il giocatore in background #1901 +* Risolto il problema con l'inserimento di nuovi flussi quando l'accodamento automatico è abilitato #1878 +* Risolto il problema del decypering shuttown diff --git a/fastlane/metadata/android/it/changelogs/71.txt b/fastlane/metadata/android/it/changelogs/71.txt new file mode 100644 index 000000000..8adf4d31f --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/71.txt @@ -0,0 +1,10 @@ +### Miglioramenti +* Aggiungi la notifica di aggiornamento dell'app per la build di GitHub (#1608 di @krtkush) +* Vari miglioramenti al downloader (#1944 di @kapodamy): + * aggiungi icone bianche mancanti e usa il modo hardcore per cambiare i colori delle icone + * controlla se l'iteratore è inizializzato (correzioni #2031) + * consente di riprovare i download con l'errore "post-elaborazione non riuscita" nel nuovo muxer + * nuovo muxer MPEG-4 che corregge flussi video e audio non sincroni (#2039) + +### Fisso +* I live streaming di YouTube smettono di essere riprodotti dopo poco tempo (#1996 di @yausername) diff --git a/fastlane/metadata/android/it/changelogs/740.txt b/fastlane/metadata/android/it/changelogs/740.txt new file mode 100644 index 000000000..297ff9a3c --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/740.txt @@ -0,0 +1,23 @@ +

Miglioramenti

+
    +
  • rendi cliccabili i link nei commenti, aumenta la dimensione del testo
  • +
  • cerca facendo clic sui collegamenti timestamp nei commenti
  • +
  • mostra la scheda preferita in base allo stato selezionato di recente
  • +
  • aggiungi playlist alla coda facendo clic a lungo su 'Sfondo' nella finestra playlist
  • +
  • cerca il testo condiviso quando non è un URL
  • +
  • aggiungi il pulsante "condividi all'ora corrente" al video player principale
  • +
  • aggiungi il pulsante di chiusura al lettore principale quando la coda video è terminata
  • +
  • aggiungi "Riproduci direttamente in background" al menu a pressione lunga per gli elementi dell'elenco video
  • +
  • migliora le traduzioni in inglese per i comandi di riproduzione/accodamento
  • +
  • piccoli miglioramenti delle prestazioni
  • +
  • rimuove i file inutilizzati
  • +
  • aggiorna ExoPlayer a 2.9.6
  • +
  • aggiungi supporto per collegamenti Invidious
  • +
+

Risolto

+
    +
  • corretto lo scorrimento con commenti e relativi flussi disabilitati
  • +
  • risolto il problema con CheckForNewAppVersionTask in esecuzione quando non avrebbe dovuto't
  • +
  • corretta l'importazione dell'abbonamento YouTube: ignora quelli con URL non valido e mantieni quelli con titolo vuoto
  • +
  • correggi l'URL YouTube non valido: il nome del tag della firma non è sempre "firma" che impedisce il caricamento degli stream
  • +
diff --git a/fastlane/metadata/android/it/changelogs/750.txt b/fastlane/metadata/android/it/changelogs/750.txt new file mode 100644 index 000000000..4fd420c34 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/750.txt @@ -0,0 +1,22 @@ +Nuovo +Riprendi la riproduzione #2288 +• Riprendi gli stream dal punto in cui ti sei fermato l'ultima volta +Miglioramenti del downloader #2149 +• Utilizzare Storage Access Framework per archiviare i download su schede SD esterne +• Nuovo mixer mp4 +• Modificare facoltativamente la directory di download prima di avviare un download +• Rispettare le reti a consumo + + +Migliorato +• Rimosse le stringhe gema #2295 +• Gestire le modifiche alla rotazione (automatica) durante il ciclo di vita dell'attività #2444 +• Rendi coerenti i menu a lunga pressione #2368 + +Fisso +• Risolto il problema con il nome della traccia dei sottotitoli selezionata che non veniva mostrato #2394 +• Non arrestarsi in modo anomalo quando il controllo dell'aggiornamento dell'app non riesce (versione GitHub) #2423 +• Risolti i download bloccati al 99,9% #2440 +• Aggiorna i metadati della coda di riproduzione #2453 +• [SoundCloud] Risolto crash durante il caricamento delle playlist TeamNewPipe/NewPipeExtractor#170 +• [YouTube] La durata fissa non può essere modificata TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/it/changelogs/760.txt b/fastlane/metadata/android/it/changelogs/760.txt new file mode 100644 index 000000000..354ebdd86 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/760.txt @@ -0,0 +1,43 @@ +Modifiche in 0.17.1 + +Nuovo +• Localizzazione tailandese + + +Migliorato +• Aggiungi di nuovo l'azione inizia a giocare qui nei menu a lunga pressione per le playlist #2518 +• Aggiungi un'opzione per SAF/selettore file legacy #2521 + +Fisso +• Risolto il problema con i pulsanti che scomparivano nella visualizzazione dei download quando si cambia app #2487 +• La posizione di riproduzione fissa viene memorizzata anche se la cronologia di visualizzazione è disabilitata +• Risolto il problema con le prestazioni ridotte causate dalla posizione di riproduzione nelle visualizzazioni elenco #2517 +• [Estrattore] Correzione di ReCaptchaActivity n. 2527, TeamNewPipe/NewPipeExtractor n. 186 +• [Extractor] [YouTube] Risolto l'errore di ricerca casuale quando le playlist sono nei risultati TeamNewPipe/NewPipeExtractor#185 + + + +Modifiche in 0.17.0 + +Nuovo +Riprendi la riproduzione #2288 +• Riprendi gli stream dal punto in cui ti sei fermato l'ultima volta +Miglioramenti del downloader #2149 +• Utilizzare Storage Access Framework per archiviare i download su schede SD esterne +• Nuovo mixer mp4 +• Modificare facoltativamente la directory di download prima di avviare un download +• Rispettare le reti a consumo + + +Migliorato +• Rimosse le stringhe gema #2295 +• Gestire le modifiche alla rotazione (automatica) durante il ciclo di vita dell'attività #2444 +• Rendi coerenti i menu a lunga pressione #2368 + +Fisso +• Risolto il problema con il nome della traccia dei sottotitoli selezionata che non veniva mostrato #2394 +• Non arrestarsi in modo anomalo quando il controllo dell'aggiornamento dell'app non riesce (versione GitHub) #2423 +• Risolti i download bloccati al 99,9% #2440 +• Aggiorna i metadati della coda di riproduzione #2453 +• [SoundCloud] Risolto crash durante il caricamento delle playlist TeamNewPipe/NewPipeExtractor#170 +• [YouTube] La durata fissa non può essere modificata TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/it/changelogs/780.txt b/fastlane/metadata/android/it/changelogs/780.txt new file mode 100644 index 000000000..e5bbd9227 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/780.txt @@ -0,0 +1,12 @@ +Modifiche in 0.17.3 + +Migliorato +• Aggiunta l'opzione per cancellare gli stati di riproduzione #2550 +• Mostra le directory nascoste nel selettore di file #2591 +• Supporta gli URL delle istanze `invidio.us` da aprire con NewPipe #2488 +• Aggiunta del supporto per gli URL di `music.youtube.com` TeamNewPipe/NewPipeExtractor#194 + +Fisso +• [YouTube] Risolto 'java.lang.IllegalArgumentException #192 +• [YouTube] Risolto il problema con i live streaming che non funzionavano TeamNewPipe/NewPipeExtractor#195 +• Risolto problema di prestazioni in Android Pie durante il download di uno stream #2592 diff --git a/fastlane/metadata/android/it/changelogs/790.txt b/fastlane/metadata/android/it/changelogs/790.txt new file mode 100644 index 000000000..7ad4734bb --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/790.txt @@ -0,0 +1,14 @@ +Migliorato +• Aggiungi più titoli per migliorare l'accessibilità per i non vedenti #2655 +• Rendi la lingua dell'impostazione della cartella di download più coerente e meno ambigua #2637 + +Fisso +• Verificare se l'ultimo byte nel blocco è stato scaricato #2646 +• Corretto lo scorrimento nel frammento di dettaglio video #2672 +• Rimuovere le animazioni della casella di cancellazione della doppia ricerca in un #2695 +• [SoundCloud] Correzione dell'estrazione client_id #2745 + +Sviluppo +• Aggiungere le dipendenze mancanti ereditate da NewPipeExtractor in NewPipe #2535 +• Migra ad AndroidX #2685 +• Aggiorna a ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/it/changelogs/800.txt b/fastlane/metadata/android/it/changelogs/800.txt new file mode 100644 index 000000000..6715362b6 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/800.txt @@ -0,0 +1,27 @@ +Nuovo +• Supporto PeerTube senza P2P (#2201) [Beta]: + ◦ Guarda e scarica video da istanze PeerTube + ◦ Aggiungi istanze nelle impostazioni per accedere al mondo PeerTube completo + ◦ Potrebbero esserci problemi con gli handshake SSL su Android 4.4 e 7.1 quando si accede a determinate istanze con conseguente errore di rete. + +• Downloader (#2679): + ◦ Calcola l'ETA di download + ◦ Scarica opus (file webm) come ogg + ◦ Recupera i link di download scaduti per riprendere i download dopo una lunga pausa + +Migliorato +• Rendi il KioskFragment consapevole delle modifiche nel Paese dei contenuti preferito e migliora le prestazioni di tutte le schede principali #2742 +• Utilizzare le nuove implementazioni di localizzazione e downloader dall'estrattore #2713 +• Rendi traducibile la stringa "Chiosco predefinito". +• Barra di navigazione nera per il tema nero #2569 + +Fisso +• Risolto un bug che non poteva spostare il popup player se veniva posizionato un altro dito mentre si spostava il popup player #2772 +• Consenti alle playlist manca un caricatore e correggi gli arresti anomali relativi a questo problema #2724, TeamNewPipe/NewPipeExtractor#219 +• Abilitazione di TLS1.1/1.2 su dispositivi Android 4.4 (API 19/KitKat) per correggere l'handshake TLS con MediaCCC e alcune istanze PeerTube #2792 +• [SoundCloud] Risolto il problema con l'estrazione di client_id TeamNewPipe/NewPipeExtractor#217 +• [SoundCloud] Correzione dell'estrazione del flusso audio + +Sviluppo +• Aggiorna ExoPlayer a 2.10.8 #2791, #2816 +• Aggiorna Gradle a 3.5.1 e aggiungi il supporto Kotlin #2714 diff --git a/fastlane/metadata/android/it/changelogs/810.txt b/fastlane/metadata/android/it/changelogs/810.txt new file mode 100644 index 000000000..26e2b9a43 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/810.txt @@ -0,0 +1,19 @@ +Nuovo +• Mostra la miniatura del video sulla schermata di blocco durante la riproduzione in background + +Migliorato +• Aggiungi playlist locale alla coda premendo a lungo sul pulsante in background/popup +• Rendere scorrevoli le schede della pagina principale e nasconderle quando è presente una sola scheda +• Limita la quantità di aggiornamenti delle miniature delle notifiche nel lettore in background +• Aggiungi miniature fittizie per playlist locali vuote +• Usa l'estensione del file *.opus invece di *.webm e mostra "opus" nell'etichetta del formato invece di "WebM Opus" nel menu a discesa del download +• Pulsante Aggiungi per eliminare i file scaricati o la cronologia dei download in "Download" +• [YouTube] Aggiungi supporto ai link del canale /c/shortened_url + +Fisso +• Risolti diversi problemi durante la condivisione di un video su NewPipe e il download diretto dei suoi flussi +• Risolto il problema con l'accesso del giocatore dal suo thread di creazione +• Corretto il paging dei risultati di ricerca +• [YouTube] Risolto il problema con l'attivazione di NPE che causava NPE +• [YouTube] Risolto il problema con la visualizzazione dei commenti all'apertura di un URL invidio.us +• [SoundCloud] Client_id aggiornato diff --git a/fastlane/metadata/android/it/changelogs/820.txt b/fastlane/metadata/android/it/changelogs/820.txt new file mode 100644 index 000000000..d3f08ee24 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/820.txt @@ -0,0 +1 @@ +Risolto il problema con l'espressione regolare del nome della funzione di decrittografia che rendeva YouTube inutilizzabile. diff --git a/fastlane/metadata/android/it/changelogs/840.txt b/fastlane/metadata/android/it/changelogs/840.txt new file mode 100644 index 000000000..db5c6618d --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/840.txt @@ -0,0 +1,22 @@ +Nuovo +• Aggiunto selettore della lingua per cambiare la lingua dell'app +• Aggiunto il pulsante Invia a Kodi al menu pieghevole del giocatore +• Aggiunta la possibilità di copiare i commenti premendo a lungo + +Migliorato +• Correggi l'attività di ReCaptcha e salva correttamente i cookie ottenuti +• Rimosso il menu a punti a favore del cassetto e nascondi il pulsante della cronologia quando la cronologia delle visualizzazioni non è abilitata nelle impostazioni +• Richiedi l'autorizzazione per la visualizzazione su altre app nelle impostazioni correttamente su Android 6 e versioni successive +• Rinominare la playlist locale facendo clic a lungo in BookmarkFragment +• Vari miglioramenti a PeerTube +• Migliorate diverse stringhe di origine in inglese + +Fisso +• Risolto il problema con il riavvio del lettore anche se è stato messo in pausa quando l'opzione "riduci a icona al passaggio dell'app" è abilitata e NewPipe è ridotto a icona +• Correzione del valore di luminosità iniziale per i gesti +• Risolti i download di sottotitoli .srt contenenti non tutte le interruzioni di riga +• Risolto il problema con il download su scheda SD non riuscito perché alcuni dispositivi Android 5 non sono compatibili con CTF +• Risolto il problema con il download su Android KitKat +• Risolto il problema con il file video .mp4 danneggiato riconosciuto come file audio +• Risolti più problemi di localizzazione, inclusi codici di lingua cinese errati +• [YouTube] I timestamp nella descrizione sono nuovamente selezionabili diff --git a/fastlane/metadata/android/it/changelogs/900.txt b/fastlane/metadata/android/it/changelogs/900.txt new file mode 100644 index 000000000..48e72a75f --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/900.txt @@ -0,0 +1,14 @@ +Nuovo +• Gruppi di abbonamento e feed ordinati +• Pulsante muto nei giocatori + +Migliorato +• Consenti l'apertura di collegamenti music.youtube.com e media.ccc.de in NewPipe +• Riposizionare due impostazioni da Aspetto a Contenuto +• Nascondi le opzioni di ricerca di 5, 15, 25 secondi se è abilitata la ricerca inesatta + +Fisso +• alcuni video WebM non sono ricercabili +• backup del database su Android P +• crash durante la condivisione di un file scaricato +• tonnellate di problemi di estrazione di YouTube e altro ... diff --git a/fastlane/metadata/android/it/changelogs/920.txt b/fastlane/metadata/android/it/changelogs/920.txt new file mode 100644 index 000000000..79e9141d3 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/920.txt @@ -0,0 +1,9 @@ +Migliorato + +• Aggiunta la data di caricamento e il conteggio delle visualizzazioni sugli elementi della griglia di flusso +• Miglioramenti al layout dell'intestazione del cassetto + +Fisso + +• Risolto il problema con il pulsante muto che causava arresti anomali su API 19 +• Risolto il problema con il download di video lunghi 1080p 60fps diff --git a/fastlane/metadata/android/it/changelogs/930.txt b/fastlane/metadata/android/it/changelogs/930.txt new file mode 100644 index 000000000..ba0b9e341 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/930.txt @@ -0,0 +1,19 @@ +Nuovo +• Cerca su YouTube Music +• Supporto Android TV di base + +Migliorato +• Aggiunta la possibilità di rimuovere tutti i video guardati da una playlist locale +• Mostra il messaggio quando il contenuto non è ancora supportato invece di andare in crash +• Migliorato il ridimensionamento del lettore popup con i gesti di pizzico +• Accodare gli stream premendo a lungo sullo sfondo e sui pulsanti popup nel canale +• Gestione delle dimensioni migliorata del titolo dell'intestazione del cassetto + +Fisso +• Risolto il problema con l'impostazione del contenuto con limiti di età non funzionante +• Risolti alcuni tipi di reCAPTCHA +• Risolto crash durante l'apertura dei segnalibri mentre la playlist è `null` +• Risolto il problema con il rilevamento delle eccezioni relative alla rete +• Corretta la visibilità del pulsante di ordinamento dei gruppi nel frammento delle iscrizioni + +e altro ancora diff --git a/fastlane/metadata/android/it/changelogs/951.txt b/fastlane/metadata/android/it/changelogs/951.txt new file mode 100644 index 000000000..94745a41a --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/951.txt @@ -0,0 +1,17 @@ +Nuovo +• Aggiungi la ricerca per la selezione delle iscrizioni nella finestra di dialogo del gruppo di feed +• Aggiungi un filtro alla finestra di dialogo del gruppo di feed per mostrare solo le iscrizioni non raggruppate +• Aggiungi la scheda playlist alla pagina principale +• Avanti/indietro veloce nella coda del lettore in background/pop-up +• Mostra suggerimento di ricerca: intendevi e mostra il risultato per + +Migliorato +• Eliminare la scrittura dei metadati dell'applicazione in file confusi +• Non rimuovere i flussi non riusciti dalla coda +• Aggiorna il colore della barra di stato in modo che corrisponda al colore della barra degli strumenti + +Fisso +• Risolto il problema con la desincronizzazione audio/video causata da errori cumulativi in virgola mobile +• [PeerTube] Gestisce i commenti eliminati + +e altro ancora diff --git a/fastlane/metadata/android/it/changelogs/957.txt b/fastlane/metadata/android/it/changelogs/957.txt new file mode 100644 index 000000000..e7d01f17f --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/957.txt @@ -0,0 +1,10 @@ +• Unificare le azioni di accodamento specifiche in una +• Gesto con due dita per chiudere il lettore +• Consenti cancellazione dei cookie reCAPTCHA +• Opzione per non colorare la notifica +• Migliora il modo in cui i dettagli del video vengono aperti per correggere il buffering infinito, il comportamento buggy durante la condivisione su NewPipe e altre incoerenze +• Velocizza i video di YouTube e correggi quelli soggetti a limiti di età +• Risolto crash durante l'avanzamento/riavvolgimento veloce +• Non riordinare gli elenchi trascinando le miniature +• Ricorda sempre le proprietà dei popup +• Aggiungi la lingua Santali diff --git a/fastlane/metadata/android/it/changelogs/965.txt b/fastlane/metadata/android/it/changelogs/965.txt new file mode 100644 index 000000000..13d7ac792 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/965.txt @@ -0,0 +1,6 @@ +Risolto crash che si verificava durante il riordino dei gruppi di canali. +Risolto il problema con la ricezione di più video di YouTube da canali e playlist. +Risolto il problema con la ricezione di commenti su YouTube. +Aggiunto supporto per i sottopercorsi /watch/, /v/ e /w/ negli URL di YouTube. +Risolto il problema con l'estrazione dell'ID client SoundCloud e del contenuto con restrizioni geografiche. +Aggiunta la localizzazione del curdo settentrionale. diff --git a/fastlane/metadata/android/it/changelogs/966.txt b/fastlane/metadata/android/it/changelogs/966.txt new file mode 100644 index 000000000..5c0dd1ed8 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/966.txt @@ -0,0 +1,14 @@ +Nuovo: +• Aggiungi un nuovo servizio: Bandcamp + +Migliorato: +• Aggiungi un'opzione per fare in modo che l'app segua il tema del dispositivo +• Prevenire alcuni arresti anomali mostrando un pannello di errore migliorato +• Mostra ulteriori informazioni sul motivo per cui il contenuto non è disponibile +• Il pulsante dello spazio hardware attiva la riproduzione/pausa +• Mostra il brindisi "Download iniziato". + +Fisso: +• Correzione di miniature molto piccole nei dettagli del video durante la riproduzione in background +• Risolto il problema con il titolo vuoto nel lettore ridotto a icona +• Risolto il problema con l'ultima modalità di ridimensionamento che non veniva ripristinata correttamente diff --git a/fastlane/metadata/android/it/changelogs/967.txt b/fastlane/metadata/android/it/changelogs/967.txt new file mode 100644 index 000000000..93171c089 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/967.txt @@ -0,0 +1 @@ +Risolto il problema con YouTube che non funzionava correttamente nell'UE. Ciò è stato causato da un nuovo sistema di cookie e consenso alla privacy che richiede a NewPipe di impostare un cookie di CONSENSO. diff --git a/fastlane/metadata/android/it/changelogs/968.txt b/fastlane/metadata/android/it/changelogs/968.txt new file mode 100644 index 000000000..f4378e4ed --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/968.txt @@ -0,0 +1,7 @@ +Aggiunta l'opzione dei dettagli del canale al menu a pressione prolungata. +Aggiunta la funzionalità per rinominare il nome della playlist dall'interfaccia della playlist. +Consenti all'utente di mettere in pausa durante il buffering di un video. +Lucidato il tema bianco. +Corretti i caratteri sovrapposti quando si utilizza una dimensione del carattere più grande. +Risolto nessun video sui dispositivi Formuler e Zephier. +Risolti vari arresti anomali. diff --git a/fastlane/metadata/android/it/changelogs/969.txt b/fastlane/metadata/android/it/changelogs/969.txt new file mode 100644 index 000000000..b4518df7b --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/969.txt @@ -0,0 +1,8 @@ +• Consenti installazione su memoria esterna +• [Bandcamp] Aggiunto supporto per la visualizzazione dei primi tre commenti su uno stream +• Mostra l'avviso "download iniziato" solo all'avvio del download +• Non impostare il cookie reCaptcha quando non ci sono cookie memorizzati +• [Player] Migliora le prestazioni della cache +• [Giocatore] Risolto il problema con il giocatore che non giocava automaticamente +• Ignora le precedenti Snackbar quando si eliminano i download +• Risolto il problema con il tentativo di eliminare l'oggetto non nell'elenco diff --git a/fastlane/metadata/android/it/changelogs/970.txt b/fastlane/metadata/android/it/changelogs/970.txt new file mode 100644 index 000000000..118eee6f2 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/970.txt @@ -0,0 +1,11 @@ +Nuovo +• Mostra i metadati del contenuto (tag, categorie, licenza, ...) sotto la descrizione +• Aggiunta l'opzione "Mostra dettagli canale" nelle playlist remote (non locali). +• Aggiunta l'opzione "Apri nel browser" al menu a pressione prolungata + +Fisso +• Risolto crash di rotazione nella pagina dei dettagli del video +• Risolto il problema con il pulsante "Gioca con Kodi" nel lettore che richiedeva sempre di installare Kore +• Correzione e miglioramento dell'impostazione dei percorsi di importazione ed esportazione +• [YouTube] Risolto commento come il conteggio +E altro ancora diff --git a/fastlane/metadata/android/it/changelogs/971.txt b/fastlane/metadata/android/it/changelogs/971.txt new file mode 100644 index 000000000..3e2eadea6 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/971.txt @@ -0,0 +1,3 @@ +Correzione rapida +• Aumenta il buffer per la riproduzione dopo il rebuffer +• Risolto crash su tablet e TV quando si fa clic sull'icona della coda di riproduzione nel lettore diff --git a/fastlane/metadata/android/it/changelogs/972.txt b/fastlane/metadata/android/it/changelogs/972.txt new file mode 100644 index 000000000..88a132c6b --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/972.txt @@ -0,0 +1,14 @@ +Nuovo +Riconosci timestamp e hashtag nella descrizione +Aggiunta l'impostazione manuale della modalità tablet +Aggiunta la possibilità di nascondere gli elementi riprodotti in un feed + +Migliorato +Supporta correttamente lo Storage Access Framework +Migliore gestione degli errori dei canali non disponibili e terminati +Il foglio di condivisione Android per gli utenti Android 10+ ora mostra il titolo del contenuto. +Aggiornate le istanze Invidious e supportano i collegamenti Piped. + +Fisso +[YouTube] Contenuti soggetti a limiti di età +Prevenire la finestra trapelata Eccezione all'apertura della finestra di dialogo di scelta diff --git a/fastlane/metadata/android/it/changelogs/973.txt b/fastlane/metadata/android/it/changelogs/973.txt new file mode 100644 index 000000000..3caa1864f --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/973.txt @@ -0,0 +1,4 @@ +Correzione rapida +• Risolto il problema con le miniature e i titoli tagliati nel layout della griglia, a causa di un calcolo errato di quanti video possono stare in una riga +• Risolto il problema con la finestra di dialogo di download che scompariva senza fare nulla se aperta dal menu di condivisione +• Aggiornare una libreria relativa all'apertura di attività esterne come il selettore di file di Storage Access Framework diff --git a/fastlane/metadata/android/it/changelogs/974.txt b/fastlane/metadata/android/it/changelogs/974.txt new file mode 100644 index 000000000..0aeabf3b9 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/974.txt @@ -0,0 +1,5 @@ +Correzione rapida +• Risolvi i problemi di buffering causati dalla limitazione di YouTube +• Risolto il problema con l'estrazione dei commenti di YouTube e gli arresti anomali con i commenti disabilitati +• Correggi la ricerca di musica su YouTube +• Correggi i live streaming di PeerTube diff --git a/fastlane/metadata/android/it/changelogs/975.txt b/fastlane/metadata/android/it/changelogs/975.txt new file mode 100644 index 000000000..64b3337ef --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/975.txt @@ -0,0 +1,17 @@ +Nuovo +• Mostra un'anteprima in miniatura durante la ricerca +• Rileva commenti disabilitati +• Consenti di contrassegnare un elemento del feed come guardato +• Mostra cuori di commento + +Migliorato +• Migliora il layout dei metadati e dei tag +• Applicare il colore del servizio ai componenti dell'interfaccia utente + +Fisso +• Risolto il problema con la miniatura nel mini player +• Risolto il problema del buffering infinito sugli elementi della coda duplicati +• Alcuni giocatori correzioni come rotazione e chiusura più veloce +• Risolto il problema con ReCAPTCHA che rimaneva caricato in background +• Disattiva i clic durante l'aggiornamento del feed +• Risolti alcuni arresti anomali del downloader diff --git a/fastlane/metadata/android/it/changelogs/976.txt b/fastlane/metadata/android/it/changelogs/976.txt new file mode 100644 index 000000000..3b8023932 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/976.txt @@ -0,0 +1,10 @@ +• Aggiunta l'opzione per aprire direttamente il giocatore a schermo intero +• Consenti di scegliere quali tipi di suggerimenti di ricerca mostrare +• Tema scuro ora più scuro + aggiunta schermata iniziale scura +• Selettore file migliorato per eliminare i file indesiderati +• Risolto il problema con l'importazione degli abbonamenti YouTube +• La riproduzione di uno streaming richiede di toccare nuovamente il pulsante di riproduzione +• Risolto il problema con la chiusura della sessione audio +• [Android TV] Risolti i salti lunghi della barra di ricerca quando si utilizza un DPad + +Per vedere ulteriori modifiche, visualizza il registro delle modifiche (e il post del blog) dalla scheda Collegamenti in basso. diff --git a/fastlane/metadata/android/it/changelogs/977.txt b/fastlane/metadata/android/it/changelogs/977.txt new file mode 100644 index 000000000..723ca1ee7 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/977.txt @@ -0,0 +1,10 @@ +• Aggiunto un pulsante "play next" al menu a pressione prolungata +• Aggiunto il prefisso del percorso dei cortometraggi di YouTube al filtro dell'intento +• Importazione impostazioni fisse +• Scambia la posizione della barra di ricerca con i pulsanti del giocatore nella schermata della coda +• Varie correzioni relative a MediasessionManager +• Risolto il problema con la barra di ricerca non completata dopo la fine del video +• Tunneling multimediale disabilitato su RealtekATV +• Area cliccabile dei pulsanti del giocatore ridotta a icona espansa + +Per vedere ulteriori modifiche, visualizza il registro delle modifiche (e il post del blog) dalla scheda Collegamenti in basso. diff --git a/fastlane/metadata/android/it/changelogs/978.txt b/fastlane/metadata/android/it/changelogs/978.txt new file mode 100644 index 000000000..e68ee2cb6 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/978.txt @@ -0,0 +1 @@ +Risolto il problema con l'esecuzione del controllo per una nuova versione di NewPipe. Questo controllo è stato eseguito troppo presto a volte e quindi ha portato a un arresto anomalo dell'app. Dovrebbe essere risolto ora. diff --git a/fastlane/metadata/android/it/changelogs/979.txt b/fastlane/metadata/android/it/changelogs/979.txt new file mode 100644 index 000000000..602f0d8e4 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/979.txt @@ -0,0 +1,2 @@ +- Risolto il problema con la ripresa della riproduzione +- Miglioramenti per garantire che il servizio che determina se NewPipe deve verificare la presenza di una nuova versione controlli non sia avviato in background diff --git a/fastlane/metadata/android/it/changelogs/980.txt b/fastlane/metadata/android/it/changelogs/980.txt new file mode 100644 index 000000000..df5ef1eb6 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/980.txt @@ -0,0 +1,13 @@ +Nuovo +• Aggiunta l'opzione "Aggiungi alla playlist" per condividere il menu +• Aggiunto supporto per collegamenti brevi y2u.be e PeerTube + +Migliorato +• Resi più compatti i controlli della velocità di riproduzione +• Feed mette in evidenza nuovi elementi ora +• L'opzione "Mostra elementi osservati" nel feed è ora salvata + +Fisso +• Risolto il problema con l'estrazione di Mi piace e Non mi piace di YouTube +• Risolto il problema con la riproduzione automatica dopo il ritorno dallo sfondo +E altro ancora diff --git a/fastlane/metadata/android/it/changelogs/981.txt b/fastlane/metadata/android/it/changelogs/981.txt new file mode 100644 index 000000000..a436d5fb8 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/981.txt @@ -0,0 +1,2 @@ +Rimosso il supporto MediaParser per correggere la mancata ripresa della riproduzione dopo il buffering su Android 11+. +Tunneling multimediale disabilitato su Philips QM16XE per risolvere i problemi di riproduzione. diff --git a/fastlane/metadata/android/it/changelogs/982.txt b/fastlane/metadata/android/it/changelogs/982.txt new file mode 100644 index 000000000..41b634ed2 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/982.txt @@ -0,0 +1 @@ +Risolto il problema con YouTube che non riproduceva alcun flusso. diff --git a/fastlane/metadata/android/it/changelogs/983.txt b/fastlane/metadata/android/it/changelogs/983.txt new file mode 100644 index 000000000..b749ebe90 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/983.txt @@ -0,0 +1,9 @@ +Aggiungi nuova interfaccia utente e comportamento del doppio tocco per cercare +Rendi le impostazioni ricercabili +Evidenzia i commenti bloccati in quanto tali +Aggiungi il supporto open-with-app per l'istanza PeerTube di FSFE +Aggiungi notifiche di errore +Risolto il problema con la riproduzione del primo elemento della coda al cambio del giocatore +Attendi più tempo durante il buffering durante i live streaming prima di fallire +Correggi l'ordine dei risultati della ricerca locale +Correggi i campi degli oggetti vuoti nella coda di gioco diff --git a/fastlane/metadata/android/it/changelogs/986.txt b/fastlane/metadata/android/it/changelogs/986.txt new file mode 100644 index 000000000..9267bd0a2 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/986.txt @@ -0,0 +1,16 @@ +Nuovo +• Notifiche per nuovi flussi +• Passaggio senza interruzioni tra i lettori video e in background +• Modificare l'intonazione per semitoni +• Aggiungi la coda del giocatore principale a una playlist + +Migliorato +• Ricorda la dimensione del passo di velocità/passo +• Mitiga il lungo buffering iniziale nel video player +• Migliora l'interfaccia utente del lettore per Android TV +• Conferma prima di eliminare tutti i file scaricati + +Fisso +• Risolto il problema con il pulsante multimediale che non nascondeva i controlli del lettore +• Correzione del ripristino della riproduzione al cambio del tipo di lettore +• Risolto il problema con la rotazione della finestra di dialogo della playlist diff --git a/fastlane/metadata/android/it/changelogs/991.txt b/fastlane/metadata/android/it/changelogs/991.txt new file mode 100644 index 000000000..b527fbd2d --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/991.txt @@ -0,0 +1,13 @@ +Nuovo +• Aggiungi il pulsante "Apri nel browser" nel pannello degli errori +• Aggiunta opzione per visualizzare i gruppi di canali come elenco +• [YouTube] Fare clic a lungo sui segmenti di streaming per condividere l'URL del timestamp +• Aggiungi il pulsante della coda di riproduzione al mini player + +Migliorato +• Aggiunta della localizzazione islandese e aggiornamento di molte altre traduzioni +• Molti miglioramenti interni + +Fisso +• Correggere più arresti anomali +• [YouTube] Risolti i problemi di caricamento dei canali, feed non dedicati e soluzioni alternative di riproduzione in alcuni paesi diff --git a/fastlane/metadata/android/it/changelogs/992.txt b/fastlane/metadata/android/it/changelogs/992.txt new file mode 100644 index 000000000..b11e7249e --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/992.txt @@ -0,0 +1,17 @@ +Nuovo +• Numero di iscritti nei dettagli del video +• Scarica dalla coda +• Impostare in modo permanente una miniatura della playlist +• Premi a lungo hashtag e link +• Modalità di visualizzazione scheda + +Migliorato +• Pulsante di chiusura mini-player più grande +• Downscaling delle miniature più agevole +• Target Android 13 (API 33) +• La ricerca non mette più in pausa il lettore + +Corretto +• Corretto l'overlay su DeX/mouse +• Consenti lettore in background senza flussi audio separati +• Varie correzioni di YouTube e altro… diff --git a/fastlane/metadata/android/ka/changelogs/63.txt b/fastlane/metadata/android/ka/changelogs/63.txt new file mode 100644 index 000000000..185bfd650 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/63.txt @@ -0,0 +1,8 @@ +### გაუმჯობესებები + - იმპორტი/ექსპორტის პარამეტრები #1333 + - ზედრევის შემცირება (შესრულების გაუმჯობესება) #1371 + - მცირე კოდის გაუმჯობესება #1375 + - დაამატეთ ყველაფერი GDPR #1420-ის შესახებ + + ### გამოსწორდა + - Downloader: შეასწორეთ ავარია დაუმთავრებელი ჩამოტვირთვების ჩატვირთვისას .giga ფაილებიდან #1407 diff --git a/fastlane/metadata/android/ka/changelogs/64.txt b/fastlane/metadata/android/ka/changelogs/64.txt new file mode 100644 index 000000000..5d32b7c0d --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/64.txt @@ -0,0 +1,8 @@ +### გაუმჯობესებები + - დაემატა ვიდეოს ხარისხის შეზღუდვის შესაძლებლობა მობილური ინტერნეტის გამოყენებისას. #1339 + - დაიმახსოვრე სიკაშკაშე #1442 სესიისთვის + - გააუმჯობესეთ ჩამოტვირთვის შესრულება სუსტი CPU-ებისთვის #1431 + - დაამატეთ (სამუშაო) მხარდაჭერა მედია სესიისთვის #1433 + + ### გამოსწორება + - დააფიქსირეთ ავარია ჩამოტვირთვების გახსნისას (გამოსწორება უკვე ხელმისაწვდომია გამოშვების ბილდებისთვის) #1441 diff --git a/fastlane/metadata/android/ka/changelogs/65.txt b/fastlane/metadata/android/ka/changelogs/65.txt new file mode 100644 index 000000000..e2ca8059d --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/65.txt @@ -0,0 +1,26 @@ +### გაუმჯობესებები + + - გამორთეთ ბურგერმენუს ხატის ანიმაცია #1486 + - ჩამოტვირთვების წაშლის გაუქმება #1472 + - ჩამოტვირთვის ვარიანტი გაზიარების მენიუში #1498 + - დამატებულია გაზიარების ვარიანტი გრძელი შეხების მენიუში #1454 + - მთავარი მოთამაშის მინიმიზაცია #1354 გასასვლელზე + - ბიბლიოთეკის ვერსიის განახლება და მონაცემთა ბაზის სარეზერვო დაფიქსირება #1510 + - ExoPlayer 2.8.2 განახლება #1392 + - გადამუშავდა დაკვრის სიჩქარის კონტროლის დიალოგი, რათა მხარი დაუჭიროს სხვადასხვა ნაბიჯების ზომას უფრო სწრაფი სიჩქარის ცვლილებისთვის. + - დამატებულია გადართვა სწრაფი წინსვლისთვის დუმილის დროს დაკვრის სიჩქარის კონტროლში. ეს გამოსადეგი უნდა იყოს აუდიო წიგნებისთვის და გარკვეული მუსიკის ჟანრებისთვის და შეუძლია ნამდვილი უწყვეტი გამოცდილების მოტანა (და შეიძლება დაარღვიოს სიმღერა მრავალი დუმილით =\\). + - რეფაქტორირებული მედია წყაროს გარჩევადობა, რათა მეტამონაცემების გადაცემა მედიასთან ერთად შიგადაშიგ პლეერში, ვიდრე ხელით. ახლა ჩვენ გვაქვს მეტამონაცემების ერთი წყარო და პირდაპირ ხელმისაწვდომია დაკვრის დაწყებისას. + - დაფიქსირდა დისტანციური დასაკრავი სიის მეტამონაცემები არ განახლდება, როდესაც ახალი მეტამონაცემები ხელმისაწვდომია დასაკრავი სიის ფრაგმენტის გახსნისას. + - სხვადასხვა ინტერფეისის შესწორებები: #1383, ფონური მოთამაშის შეტყობინებების კონტროლი ახლა ყოველთვის თეთრია, უფრო ადვილია ამომხტარი მოთამაშის გამორთვა ფლანგით + - გამოიყენეთ ახალი ექსტრაქტორი რეფაქტორირებული არქიტექტურით მულტისერვისისთვის + + ### ასწორებს + + - დააფიქსირეთ #1440 გატეხილი ვიდეო ინფორმაციის განლაგება #1491 + - ნახეთ ისტორიის შესწორება #1497 + - #1495, მეტამონაცემების (მინიატურების, სათაურის და ვიდეოების რაოდენობა) განახლებით, როგორც კი მომხმარებელი წვდება დასაკრავ სიას. + - #1475, მონაცემთა ბაზაში ხედის დარეგისტრირებით, როდესაც მომხმარებელი იწყებს ვიდეოს გარე პლეერზე დეტალურ ფრაგმენტზე. + - დააფიქსირეთ ეკრანის დროის ამოწურვა ამომხტარი რეჟიმის შემთხვევაში. #1463 (დასწორებულია #640) + - მთავარი ვიდეო პლეერის დაფიქსირება #1509 + - [#1412] დაფიქსირდა გამეორების რეჟიმი, რომელიც იწვევს მოთამაშის NPE-ს, როდესაც მიიღება ახალი განზრახვა, როდესაც მოთამაშის აქტივობა ფონზეა. + - დაფიქსირებული მინიმიზაცია მოთამაშის ამომხტარ ფანჯარაში არ ანადგურებს მოთამაშეს, როდესაც ამომხტარი ნებართვა არ არის მინიჭებული. diff --git a/fastlane/metadata/android/ka/changelogs/66.txt b/fastlane/metadata/android/ka/changelogs/66.txt new file mode 100644 index 000000000..e30f99fc8 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/66.txt @@ -0,0 +1,33 @@ +v0.13.7-ის ცვლილების ჟურნალი + + ### გამოსწორდა + - დააფიქსირეთ v0.13.6-ის დახარისხების ფილტრის პრობლემები + + # ცვლილების ჟურნალი v0.13.6 + + ### გაუმჯობესებები + + - გამორთეთ ბურგერმენუს ხატის ანიმაცია #1486 + - ჩამოტვირთვების წაშლის გაუქმება #1472 + - ჩამოტვირთვის ვარიანტი გაზიარების მენიუში #1498 + - დამატებულია გაზიარების ვარიანტი გრძელი შეხების მენიუში #1454 + - მთავარი მოთამაშის მინიმიზაცია #1354 გასასვლელზე + - ბიბლიოთეკის ვერსიის განახლება და მონაცემთა ბაზის სარეზერვო დაფიქსირება #1510 + - ExoPlayer 2.8.2 განახლება #1392 + - გადამუშავდა დაკვრის სიჩქარის კონტროლის დიალოგი, რათა მხარი დაუჭიროს სხვადასხვა ნაბიჯების ზომას უფრო სწრაფი სიჩქარის ცვლილებისთვის. + - დამატებულია გადართვა სწრაფი წინსვლისთვის დუმილის დროს დაკვრის სიჩქარის კონტროლში. ეს გამოსადეგი უნდა იყოს აუდიო წიგნებისთვის და გარკვეული მუსიკის ჟანრებისთვის და შეუძლია ნამდვილი უწყვეტი გამოცდილების მოტანა (და შეიძლება დაარღვიოს სიმღერა მრავალი დუმილით =\\). + - რეფაქტორირებული მედია წყაროს გარჩევადობა, რათა მეტამონაცემების გადაცემა მედიასთან ერთად შიგადაშიგ პლეერში, ვიდრე ხელით. ახლა ჩვენ გვაქვს მეტამონაცემების ერთი წყარო და პირდაპირ ხელმისაწვდომია დაკვრის დაწყებისას. + - დაფიქსირდა დისტანციური დასაკრავი სიის მეტამონაცემები არ განახლდება, როდესაც ახალი მეტამონაცემები ხელმისაწვდომია დასაკრავი სიის ფრაგმენტის გახსნისას. + - სხვადასხვა ინტერფეისის შესწორებები: #1383, ფონური მოთამაშის შეტყობინებების კონტროლი ახლა ყოველთვის თეთრია, უფრო ადვილია ამომხტარი მოთამაშის გამორთვა ფლანგით + - გამოიყენეთ ახალი ექსტრაქტორი რეფაქტორირებული არქიტექტურით მულტისერვისისთვის + + ### ასწორებს + + - დააფიქსირეთ #1440 გატეხილი ვიდეო ინფორმაციის განლაგება #1491 + - ნახეთ ისტორიის შესწორება #1497 + - #1495, მეტამონაცემების (მინიატურების, სათაურის და ვიდეოების რაოდენობა) განახლებით, როგორც კი მომხმარებელი წვდება დასაკრავ სიას. + - #1475, მონაცემთა ბაზაში ხედის დარეგისტრირებით, როდესაც მომხმარებელი იწყებს ვიდეოს გარე პლეერზე დეტალურ ფრაგმენტზე. + - დააფიქსირეთ ეკრანის დროის ამოწურვა ამომხტარი რეჟიმის შემთხვევაში. #1463 (დასწორებულია #640) + - მთავარი ვიდეო პლეერის დაფიქსირება #1509 + - [#1412] დაფიქსირდა გამეორების რეჟიმი, რომელიც იწვევს მოთამაშის NPE-ს, როდესაც მიიღება ახალი განზრახვა, როდესაც მოთამაშის აქტივობა ფონზეა. + - დაფიქსირებული მინიმიზაცია მოთამაშის ამომხტარ ფანჯარაში არ ანადგურებს მოთამაშეს, როდესაც ამომხტარი ნებართვა არ არის მინიჭებული. diff --git a/fastlane/metadata/android/ka/changelogs/68.txt b/fastlane/metadata/android/ka/changelogs/68.txt new file mode 100644 index 000000000..1c6967bcb --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/68.txt @@ -0,0 +1,31 @@ +v0.14.1-ის ცვლილებები + + ### გამოსწორდა + - დაფიქსირდა ვიდეო url #1659-ის გაშიფვრა ვერ მოხერხდა + - დაფიქსირდა აღწერილობის ბმული კარგად არ არის ამონაწერი #1657 + + v0.14.0-ის # ცვლილებები + + ### ახალი + - ახალი უჯრის დიზაინი #1461 + - ახალი კონფიგურირებადი წინა გვერდი #1461 + + ### გაუმჯობესებები + - გადამუშავებული ჟესტების კონტროლი #1604 + - ახალი გზა ამომხტარი პლეერის დახურვის #1597 + + ### გამოსწორდა + - შეცდომის გამოსწორება, როდესაც ხელმოწერების რაოდენობა მიუწვდომელია. იხურება #1649. + - აჩვენეთ "აბონენტთა რაოდენობა მიუწვდომელია" ამ შემთხვევებში + - შეასწორეთ NPE, როდესაც YouTube დასაკრავი სია ცარიელია + - სწრაფი შესწორება კიოსკებისთვის SoundCloud-ში + - Refactor და bugfix #1623 + - დააფიქსირეთ ციკლური ძიების შედეგი #1562 + - შეასწორეთ ძიების ზოლი, რომელიც არ არის სტატიკურად განლაგებული + - გაასწორეთ YT Premium ვიდეო არ არის სწორად დაბლოკილი + - დააფიქსირეთ ვიდეოები, რომლებიც ზოგჯერ არ იტვირთება (DASH ანალიზების გამო) + - დააფიქსირეთ ბმულები ვიდეოს აღწერაში + - გაფრთხილების ჩვენება, როდესაც ვინმე ცდილობს გარე sdcard-ზე ჩამოტვირთვას + - დააფიქსირეთ არაფერი ნაჩვენები გამონაკლისის გამომწვევი ანგარიში + - ესკიზი არ არის ნაჩვენები ანდროიდ 8.1-ის ფონურ პლეერში [იხილეთ აქ](https://github.com/TeamNewPipe/NewPipe/issues/943) + - სამაუწყებლო მიმღების რეგისტრაციის დაფიქსირება. იხურება #1641. diff --git a/fastlane/metadata/android/ka/changelogs/69.txt b/fastlane/metadata/android/ka/changelogs/69.txt new file mode 100644 index 000000000..b5d54c565 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/69.txt @@ -0,0 +1,19 @@ +### ახალი + - დიდხანს შეეხეთ წაშლას და გააზიარეთ გამოწერებში #1516 + - ტაბლეტის ინტერფეისი და ბადის სიის განლაგება #1617 + + ### გაუმჯობესებები + - შეინახეთ და გადატვირთეთ ბოლო გამოყენებული ასპექტის თანაფარდობა #1748 + - ჩართეთ ხაზოვანი განლაგება ჩამოტვირთვების აქტივობაში ვიდეოს სრული სახელებით #1771 + - წაშალეთ და გააზიარეთ ხელმოწერები პირდაპირ გამოწერების ჩანართიდან #1516 + - ახლა რიგში დაყენება იწვევს ვიდეოს დაკვრას, თუ დაკვრის რიგი უკვე დასრულდა #1783 + - ცალკე პარამეტრები მოცულობისა და სიკაშკაშის ჟესტებისთვის #1644 + - დაამატეთ მხარდაჭერა ლოკალიზაციის #1792-ისთვის + + ### ასწორებს + - დააფიქსირეთ დროის ანალიზი . ფორმატში, ამიტომ NewPipe შეიძლება გამოყენებულ იქნას ფინეთში + - შეასწორეთ გამოწერების რაოდენობა + - დაამატეთ წინა პლანზე სერვისის ნებართვა API 28+ მოწყობილობებისთვის #1830 + + ### ცნობილი შეცდომები + - დაკვრის მდგომარეობის შენახვა შეუძლებელია Android P-ზე diff --git a/fastlane/metadata/android/ka/changelogs/70.txt b/fastlane/metadata/android/ka/changelogs/70.txt new file mode 100644 index 000000000..cd2bcb531 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/70.txt @@ -0,0 +1,25 @@ +ყურადღება: ეს ვერსია ალბათ არის bugfest, ისევე როგორც წინა. თუმცა 17 წლიდან სრული გათიშვის გამო გაფუჭებული ვერსია ჯობია არა ვერსიას. მართალია? ¯\_(ツ)_/¯ + + ### გაუმჯობესებები + * გადმოწერილი ფაილების გახსნა შესაძლებელია ერთი დაწკაპუნებით #1879 + * ჩამოაგდეს მხარდაჭერა ანდროიდის 4.1 - 4.3 #1884 + * წაშალეთ ძველი მოთამაშე #1884 + * წაშალეთ ნაკადები მიმდინარე სათამაშო რიგიდან მარჯვნივ #1915-ზე გადაფურცლით + * ამოიღეთ ავტომატური რიგის ნაკადი, როდესაც ახალი ნაკადი დაიდება ხელით #1878 + * ჩამოტვირთვების შემდგომი დამუშავება და დაკარგული ფუნქციების დანერგვა #1759 @kapodamy-ის მიერ + * შემდგომი დამუშავების ინფრასტრუქტურა + * "ინფრასტრუქტურის" სათანადო შეცდომის დამუშავება (ჩამომტვირთველისთვის) + * რიგი მრავალი ჩამოტვირთვის ნაცვლად + * გადაიტანეთ სერიული მომლოდინე ჩამოტვირთვები (`.giga` ფაილები) აპის მონაცემებში + * განახორციელეთ მაქსიმალური ჩამოტვირთვის ხელახალი ცდა + * სწორი მრავალძაფის ჩამოტვირთვის პაუზა + * მობილურ ქსელზე გადასვლისას ჩამოტვირთვების შეწყვეტა (არასდროს მუშაობს, იხილეთ მე-2 პუნქტი) + * შეინახეთ ძაფების რაოდენობა შემდეგი ჩამოტვირთვებისთვის + * ბევრი შეუსაბამობა დაფიქსირდა + + ### გამოსწორდა + * შეასწორეთ ავარია ნაგულისხმევი გარჩევადობით დაყენებული საუკეთესო და შეზღუდული მობილური მონაცემთა გარჩევადობით #1835 + * ამომხტარი მოთამაშის ავარია დაფიქსირდა #1874 + * NPE, როდესაც ცდილობთ გახსნათ ფონური მოთამაშე #1901 + * შეასწორეთ ახალი ნაკადების ჩასმა, როცა ავტომატური რიგი ჩართულია #1878 + * დააფიქსირა გაშიფვრის დახურვის საკითხი diff --git a/fastlane/metadata/android/ka/changelogs/71.txt b/fastlane/metadata/android/ka/changelogs/71.txt new file mode 100644 index 000000000..1b2598eb7 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/71.txt @@ -0,0 +1,10 @@ +### გაუმჯობესებები + * დაამატეთ აპლიკაციის განახლების შეტყობინება GitHub build-ისთვის (#1608 @krtkush-ის მიერ) + * ჩამოტვირთვის სხვადასხვა გაუმჯობესება (#1944 @kapodamy): + * დაამატეთ დაკარგული თეთრი ხატები და გამოიყენეთ მყარი გზა ხატის ფერების შესაცვლელად + * შეამოწმეთ, არის თუ არა იტერატორი ინიციალიზებული (ასწორებს #2031) + * დაუშვით ხელახალი ჩამოტვირთვები „დამუშავების შემდგომ წარუმატებელი“ შეცდომით ახალ muxer-ში + * ახალი MPEG-4 muxer, რომელიც აფიქსირებს არასინქრონულ ვიდეო და აუდიო ნაკადებს (#2039) + + ### გამოსწორდა + * YouTube პირდაპირი სტრიმინგები წყვეტს დაკვრას მცირე ხნის შემდეგ (#1996 @yausername-ის მიერ) diff --git a/fastlane/metadata/android/ka/changelogs/730.txt b/fastlane/metadata/android/ka/changelogs/730.txt new file mode 100644 index 000000000..35717b66f --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/730.txt @@ -0,0 +1,2 @@ +#გამოსწორდა + - ცხელი გამოსწორების გაშიფვრის ფუნქციის შეცდომა ისევ. diff --git a/fastlane/metadata/android/ka/changelogs/740.txt b/fastlane/metadata/android/ka/changelogs/740.txt new file mode 100644 index 000000000..3589197f9 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/740.txt @@ -0,0 +1,23 @@ +

გაუმჯობესებები

+
    +
  • გახადეთ კომენტარებში ბმულები დაწკაპუნებით, გაზარდეთ ტექსტის ზომა
  • +
  • მოძებნეთ კომენტარებში დროის ანაბეჭდის ბმულებზე დაწკაპუნებით
  • +
  • სასურველი ჩანართის ჩვენება ახლახან არჩეული მდგომარეობის მიხედვით
  • +
  • დაამატე დასაკრავი სია რიგში, როდესაც დიდხანს დააწკაპუნებთ 'ფონზე' დასაკრავი სიის ფანჯარაში
  • +
  • მოძებნეთ გაზიარებული ტექსტი, როდესაც ის არ არის URL
  • +
  • დაამატეთ "გაზიარება მიმდინარე დროს" ღილაკი მთავარ ვიდეო დამკვრელზე
  • +
  • დახურვის ღილაკის დამატება მთავარ დამკვრელზე, როდესაც ვიდეო რიგი დასრულდება
  • +
  • დაამატეთ "დაკვრა პირდაპირ ფონზე" ვიდეო სიის ელემენტების მენიუს ხანგრძლივი დაჭერისთვის
  • +
  • გააუმჯობესეთ ინგლისური თარგმანი Play/Enqueue ბრძანებებისთვის
  • +
  • შესრულების მცირე გაუმჯობესება
  • +
  • გამოუყენებელი ფაილების წაშლა
  • +
  • განაახლეთ ExoPlayer 2.9.6-ზე
  • +
  • დაამატეთ მხარდაჭერა Invidious ბმულებისთვის
  • +
+

გამოსწორებულია

+
    +
  • გასწორდა გადახვევა/ კომენტარები და დაკავშირებული ნაკადები გამორთულია
  • +
  • დაასწორა CheckForNewAppVersionTask შესრულებული მაშინ, როცა არ უნდა
  • +
  • გასწორდა youtube გამოწერის იმპორტი: იგნორირება გაუკეთეთ არასწორი url-ით და შეინახეთ ცარიელი სათაურით
  • +
  • შეასწორეთ არასწორი YouTube url: ხელმოწერის ტეგის სახელი ყოველთვის არ არის „ხელმოწერა“, რაც ხელს უშლის ნაკადების ჩატვირთვას
  • +
diff --git a/fastlane/metadata/android/ka/changelogs/750.txt b/fastlane/metadata/android/ka/changelogs/750.txt new file mode 100644 index 000000000..cea3507a5 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/750.txt @@ -0,0 +1,22 @@ +ახალი + დაკვრის რეზიუმე #2288 + • განაახლეთ ნაკადები, სადაც ბოლო დროს გაჩერდით + Downloader Enhancements #2149 + • გამოიყენეთ Storage Access Framework ჩამოტვირთვების შესანახად გარე SD-ბარათებზე + • ახალი mp4 muxer + • სურვილისამებრ შეცვალეთ ჩამოტვირთვის დირექტორია ჩამოტვირთვის დაწყებამდე + • პატივი ეცით მრიცხველ ქსელებს + + + გაუმჯობესებული + • ამოღებულია გემას სიმები #2295 + • გაუმკლავდეს (ავტო)როტაციის ცვლილებებს აქტივობის სასიცოცხლო ციკლის #2444 + • დააწკაპუნეთ მენიუები თანმიმდევრული #2368 + + დაფიქსირდა + • დაფიქსირდა არჩეული სუბტიტრების ტრეკის სახელი, რომელიც არ იყო ნაჩვენები #2394 + • არ გატეხოთ, როდესაც აპის განახლება ვერ ხერხდება (GitHub ვერსია) #2423 + • დაფიქსირებული ჩამოტვირთვები დარჩა 99.9% #2440 + • განაახლეთ სათამაშო რიგის მეტამონაცემები #2453 + • [SoundCloud] გამოსწორდა ავარია დასაკრავი სიების ჩატვირთვისას TeamNewPipe/NewPipeExtractor#170 + • [YouTube] ფიქსირებული ხანგრძლივობის გარჩევა შეუძლებელია TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ka/changelogs/760.txt b/fastlane/metadata/android/ka/changelogs/760.txt new file mode 100644 index 000000000..b530c09d3 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/760.txt @@ -0,0 +1,43 @@ +ცვლილებები 0.17.1-ში + + ახალი + • ტაილანდური ლოკალიზაცია + + + გაუმჯობესებული + • დაამატე აქ დაკვრის დაწყება მოქმედების ხანგრძლივი დაჭერის მენიუში დასაკრავი სიებისთვის ისევ #2518 + • დაამატეთ გადამრთველი SAF / ძველი ფაილის ამომრჩევი #2521 + + დაფიქსირდა + • დააფიქსირეთ ქრება ღილაკები ჩამოტვირთვების ხედში აპების გადართვისას #2487 + • დაკვრის პოზიციის დაფიქსირება შენახულია, თუმცა ნახვის ისტორია გამორთულია + • დააფიქსირეთ შემცირებული შესრულება, რომელიც გამოწვეულია დაკვრის პოზიციით სიის ხედებში #2517 + • [Extractor] Fix ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 + • [Extractor] [YouTube] შეასწორეთ შემთხვევითი ძიების შეცდომა, როდესაც დასაკრავი სიები შედეგებშია TeamNewPipe/NewPipeExtractor#185 + + + + ცვლილებები 0.17.0-ში + + ახალი + დაკვრის რეზიუმე #2288 + • განაახლეთ ნაკადები, სადაც ბოლო დროს გაჩერდით + Downloader Enhancements #2149 + • გამოიყენეთ Storage Access Framework ჩამოტვირთვების შესანახად გარე SD-ბარათებზე + • ახალი mp4 muxer + • სურვილისამებრ შეცვალეთ ჩამოტვირთვის დირექტორია ჩამოტვირთვის დაწყებამდე + • პატივი ეცით მრიცხველ ქსელებს + + + გაუმჯობესებული + • ამოღებულია გემას სიმები #2295 + • გაუმკლავდეს (ავტო)როტაციის ცვლილებებს აქტივობის სასიცოცხლო ციკლის #2444 + • დააწკაპუნეთ მენიუები თანმიმდევრული #2368 + + დაფიქსირდა + • დაფიქსირდა არჩეული სუბტიტრების ტრეკის სახელი, რომელიც არ იყო ნაჩვენები #2394 + • არ გატეხოთ, როდესაც აპის განახლება ვერ ხერხდება (GitHub ვერსია) #2423 + • დაფიქსირებული ჩამოტვირთვები დარჩა 99.9% #2440 + • განაახლეთ სათამაშო რიგის მეტამონაცემები #2453 + • [SoundCloud] გამოსწორდა ავარია დასაკრავი სიების ჩატვირთვისას TeamNewPipe/NewPipeExtractor#170 + • [YouTube] ფიქსირებული ხანგრძლივობის გარჩევა შეუძლებელია TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ka/changelogs/770.txt b/fastlane/metadata/android/ka/changelogs/770.txt new file mode 100644 index 000000000..92b58026c --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/770.txt @@ -0,0 +1,4 @@ +ცვლილებები 0.17.2-ში + + გაასწორდა + • გაასწორდა, რომ ვიდეო არ იყო ხელმისაწვდომი diff --git a/fastlane/metadata/android/ka/changelogs/780.txt b/fastlane/metadata/android/ka/changelogs/780.txt new file mode 100644 index 000000000..ea9ffd667 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/780.txt @@ -0,0 +1,12 @@ +ცვლილებები 0.17.3-ში + + გაუმჯობესებული + • დამატებულია ვარიანტი #2550 დაკვრის მდგომარეობის გასასუფთავებლად + • დამალული დირექტორიების ჩვენება ფაილის ამომრჩეველში #2591 + • მხარდაჭერილი URL-ები `invidio.us`-დან, რომლებიც გაიხსნება NewPipe #2488-ით + • დაამატეთ მხარდაჭერა `music.youtube.com` URL-ებისთვის TeamNewPipe/NewPipeExtractor#194 + + დაფიქსირდა + • [YouTube] გაასწორა 'java.lang.IllegalArgumentException #192 + • [YouTube] დაფიქსირდა პირდაპირი სტრიმინგები არ მუშაობს TeamNewPipe/NewPipeExtractor#195 + • დაფიქსირდა მუშაობის პრობლემა Android Pie-ში #2592 ნაკადის ჩამოტვირთვისას diff --git a/fastlane/metadata/android/ka/changelogs/790.txt b/fastlane/metadata/android/ka/changelogs/790.txt new file mode 100644 index 000000000..dc83588ee --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/790.txt @@ -0,0 +1,14 @@ +გაუმჯობესებული + • დაამატეთ მეტი სათაური უსინათლოთა ხელმისაწვდომობისᲗვის გასაუმჯობესებლად #2655 + • გახადეთ ჩამოტვირთვის საქაღალდის პარამეტრის ენა უფრო თანმიმდევრული და ნაკლებად ორაზროვანი #2637 + + დაფიქსირდა + • შეამოწმეთ არის თუ არა ბლოკში ბოლო ბაიტი ჩამოტვირთული #2646 + • დაფიქსირდა გადახვევა ვიდეო დეტალების ფრაგმენტში #2672 + • წაშალეთ ორმაგი ძიების წმინდა ყუთის ანიმაციები ერთ #2695-ზე + • [SoundCloud] გაასწორეთ client_id ამონაწერი #2745 + + განვითარება + • დაამატეთ NewPipeExtractor-დან მემკვიდრეობით მიღებული გამოტოვებული დამოკიდებულებები NewPipe #2535-ში + • მიგრაცია AndroidX #2685-ზე + • განაახლეთ ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/ka/changelogs/800.txt b/fastlane/metadata/android/ka/changelogs/800.txt new file mode 100644 index 000000000..33e3e8cbc --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/800.txt @@ -0,0 +1,27 @@ +ახალი + • PeerTube მხარდაჭერა P2P-ის გარეშე (#2201) [ბეტა]: + ◦ უყურეთ და ჩამოტვირთეთ ვიდეოები PeerTube ინსტანციებიდან + ◦ დაამატებულია ეგზემპლარები პარამეტრებში, რათა მიიღოთ PeerTube სრულ სამყაროში + ◦ შეიძლება იყოს პრობლემები SSL-ის ხელის ჩამორთმევასთან დაკავშირებით Android 4.4 და 7.1-ზე, როდესაც შედიხართ გარკვეულ ინსტანციებზე, რამაც გამოიწვია ქსელის შეცდომა. + + • Downloader (#2679): + ◦ გამოთვალეთ ჩამოტვირთვის დრო + ◦ ჩამოტვირთეთ opus (webm ფაილები) როგორც ogg + ◦ აღადგინეთ ვადაგასული ჩამოტვირთვის ბმულები, რომ განაახლოთ ჩამოტვირთვები ხანგრძლივი პაუზის შემდეგ + + გაუმჯობესებული + • აცნობეთ KioskFragment-ს სასურველი კონტენტის ქვეყანაში ცვლილებების შესახებ და გააუმჯობესეთ ყველა ძირითადი ჩანართის შესრულება #2742 + • გამოიყენეთ ახალი ლოკალიზაციისა და Downloader-ის იმპლემენტაციები ამომყვანი #2713-დან + • „ნაგულისხმევი კიოსკი“ სტრიქონის თარგმნად აქცია + • შავი ნავიგაციის ზოლი შავი თემისთვის #2569 + + დაფიქსირდა + • გამოსწორდა ხარვეზი, რომელიც ვერ ახერხებდა ამომხტარი პლეერის გადაადგილებას, თუ ამომხტარი ფლეიერის #2772 გადაადგილებისას სხვა თითი იყო განთავსებული + • დასაკრავი სიების დაშვება ამტვირთავი აკლია და შეასწორეთ ამ პრობლემასთან დაკავშირებული ავარიები #2724, TeamNewPipe/NewPipeExtractor#219 + • TLS1.1/1.2-ის ჩართვა Android 4.4 მოწყობილობებზე (API 19/KitKat) TLS ხელის ჩამორთმევის გამოსასწორებლად MediaCCC-ით და PeerTube-ის ზოგიერთი ინსტანციით #2792 + • [SoundCloud] დაფიქსირდა client_id მოპოვება TeamNewPipe/NewPipeExtractor#217 + • [SoundCloud] აუდიო ნაკადის ამოღების შესწორება + + განვითარება + • განაახლეთ ExoPlayer 2.10.8 #2791, #2816-ზე + • განაახლეთ Gradle 3.5.1-ზე და დაამატეთ Kotlin მხარდაჭერა #2714 diff --git a/fastlane/metadata/android/ka/changelogs/810.txt b/fastlane/metadata/android/ka/changelogs/810.txt new file mode 100644 index 000000000..487e28633 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/810.txt @@ -0,0 +1,19 @@ +ახალი + • ვიდეოს მინიატურების ჩვენება ჩაკეტილ ეკრანზე ფონზე დაკვრისას + + გაუმჯობესებული + • დაამატებულია ლოკალური დასაკრავი სია რიგში ფონზე / ამომხტარ ღილაკზე ხანგრძლივი დაჭერისას + • გააკეთეთ მთავარი გვერდის ჩანართები გადასახვევად და დამალეთ, როდესაც მხოლოდ ერთი ჩანართია + • შეტყობინებების მინიატურების განახლებების რაოდენობის შეზღუდვა ფონურ პლეერში + • დაამატეთ მოჩვენებითი მინიატურა ცარიელი ადგილობრივი დასაკრავი სიებისთვის + • გამოიყენეთ *.opus ფაილის გაფართოება *.webm-ის ნაცვლად და აჩვენეთ "opus" ფორმატში ლეიბლის ნაცვლად "WebM Opus" ჩამოტვირთვის ჩამოსაშლელ სიაში + • „ჩამოტვირთვებში“ ჩამოტვირთული ფაილების ან ჩამოტვირთვის ისტორიის წასაშლელად ღილაკის დამატება + • [YouTube] დაამატეთ მხარდაჭერა /c/shortened_url არხის ბმულებს + + დაფიქსირდა + • დაფიქსირდა მრავალი პრობლემა NewPipe-ში ვიდეოს გაზიარებისა და მისი ნაკადების პირდაპირ ჩამოტვირთვისას + • დააფიქსირა მოთამაშის წვდომა მისი შექმნის ძაფიდან + • დაფიქსირდა ძიების შედეგების პეიჯინგი + • [YouTube] დაფიქსირდა NPE-ის გამომწვევი null-ის ჩართვა + • [YouTube] დააფიქსირა კომენტარების ნახვა invidio.us url-ის გახსნისას + • [SoundCloud] განახლებულია client_id diff --git a/fastlane/metadata/android/ka/changelogs/820.txt b/fastlane/metadata/android/ka/changelogs/820.txt new file mode 100644 index 000000000..da86b5007 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/820.txt @@ -0,0 +1 @@ +დაფიქსირდა გაშიფვრის ფუნქციის სახელი regex, რის გამოც YouTube გამოუსადეგარი გახდა. diff --git a/fastlane/metadata/android/ka/changelogs/830.txt b/fastlane/metadata/android/ka/changelogs/830.txt new file mode 100644 index 000000000..4fb8bde1a --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/830.txt @@ -0,0 +1 @@ +განახლებულია SoundCloud client_id SoundCloud-ის პრობლემების მოსაგვარებლად. diff --git a/fastlane/metadata/android/ka/changelogs/840.txt b/fastlane/metadata/android/ka/changelogs/840.txt new file mode 100644 index 000000000..d181548ea --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/840.txt @@ -0,0 +1,22 @@ +ახალი + • დაემატა ენის ამომრჩევი აპის ენის შესაცვლელად + • დამატებულია კოდის გაგზავნის ღილაკი მოთამაშის დასაკეც მენიუში + • დამატებულია ხანგრძლივი დაჭერით კომენტარების კოპირების შესაძლებლობა + + გაუმჯობესებული + • დააფიქსირეთ ReCaptcha აქტივობა და სწორად შეინახეთ მიღებული ქუქიები + • ამოღებულია წერტილების მენიუ უჯრის სასარგებლოდ და ისტორიის დამალვის ღილაკი, როდესაც ნახვის ისტორია არ არის ჩართული პარამეტრებში + • მოითხოვეთ სხვა აპებზე ჩვენების ნებართვა სწორად პარამეტრებში Android 6-ზე და შემდეგ ვერსიაზე + • ადგილობრივი დასაკრავი სიის სახელის გადარქმევა BookmarkFragment-ზე ხანგრძლივი დაწკაპუნებით + • PeerTube-ის სხვადასხვა გაუმჯობესება + • გაუმჯობესდა რამდენიმე ინგლისური წყაროს სტრიქონი + + დაფიქსირდა + • დაფიქსირდა დამკვრელის ხელახლა გაშვება, თუმცა ის შეჩერებულია, როდესაც ჩართულია ოფცია „მინიმიზაცია აპის შეცვლაზე“ და NewPipe მინიმიზირებულია + • დააფიქსირეთ საწყისი სიკაშკაშის მნიშვნელობა ჟესტისთვის + • დაფიქსირდა .srt სუბტიტრების ჩამოტვირთვები, რომლებიც არ შეიცავს ყველა ხაზს + • დაფიქსირდა SD ბარათზე ჩამოტვირთვა ვერ მოხერხდა, რადგან ზოგიერთი Android 5 მოწყობილობა არ შეესაბამება CTF-ს + • დაფიქსირდა ჩამოტვირთვა Android KitKat-ზე + • დაფიქსირდა კორუმპირებული ვიდეო .mp4 ფაილის აუდიო ფაილად აღიარება + • დაფიქსირდა ლოკალიზაციის მრავალი პრობლემა, მათ შორის არასწორი ჩინური ენის კოდები + • [YouTube] აღწერილობაში დროის შტამპები ხელახლა შეიძლება დააწკაპუნოთ diff --git a/fastlane/metadata/android/ka/changelogs/850.txt b/fastlane/metadata/android/ka/changelogs/850.txt new file mode 100644 index 000000000..c78859a4e --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/850.txt @@ -0,0 +1 @@ +ამ გამოშვებაში განახლდა YouTube ვებსაიტის ვერსია. ვებსაიტის ძველი ვერსია შეწყდება მარტში და, შესაბამისად, თქვენ უნდა განაახლოთ NewPipe. diff --git a/fastlane/metadata/android/ka/changelogs/860.txt b/fastlane/metadata/android/ka/changelogs/860.txt new file mode 100644 index 000000000..174e5bf87 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/860.txt @@ -0,0 +1,7 @@ +გაუმჯობესებული + • შეინახეთ და აღადგინეთ სიმაღლე და ტემპი გამორთულია თუ არა + • პლეერში ეკრანის ამოჭრის მხარდაჭერა + • მრგვალი ხედვა და აბონენტების რაოდენობა + • ოპტიმიზებულია YouTube ნაკლები მონაცემების გამოსაყენებლად + + YouTube-თან დაკავშირებული 15-ზე მეტი შეცდომა დაფიქსირდა და გასწორდა ამ გამოშვებაში. diff --git a/fastlane/metadata/android/ka/changelogs/870.txt b/fastlane/metadata/android/ka/changelogs/870.txt new file mode 100644 index 000000000..5ed151a78 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/870.txt @@ -0,0 +1,2 @@ +ეს არის Hotfix-ის გამოშვება, რომელიც ახლებს NewPipe-ს, რათა შესაძლებელი გახდეს SoundCloud-ის გამოყენება კვლავ დიდი პრობლემების გარეშე. + SoundCloud-ის v2 API ახლა გამოიყენება ექსტრაქტორში და გაუმჯობესებულია კლიენტის არასწორი ID-ების გამოვლენა. diff --git a/fastlane/metadata/android/ka/changelogs/900.txt b/fastlane/metadata/android/ka/changelogs/900.txt new file mode 100644 index 000000000..4dc628a67 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/900.txt @@ -0,0 +1,14 @@ +ახალი + • გამოწერის ჯგუფები და დახარისხებული არხები + • დადუმების ღილაკი მოთამაშეებში + + გაუმჯობესებული + • დაუშვით music.youtube.com და media.ccc.de ბმულების გახსნა NewPipe-ში + • ორი პარამეტრის გადატანა გარეგნობიდან კონტენტზე + • 5, 15, 25 წამის ძიების ვარიანტების დამალვა, თუ არაზუსტი ძიება ჩართულია + + დაფიქსირდა + • ზოგიერთი WebM ვიდეოს ძებნა შეუძლებელია + • მონაცემთა ბაზის სარეზერვო ასლი Android P-ზე + • ავარია ჩამოტვირთული ფაილის გაზიარებისას + • ბევრი YouTube მოპოვების პრობლემა და სხვა ... diff --git a/fastlane/metadata/android/ka/changelogs/910.txt b/fastlane/metadata/android/ka/changelogs/910.txt new file mode 100644 index 000000000..f5b615699 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/910.txt @@ -0,0 +1 @@ +დაფიქსირდა მონაცემთა ბაზის მიგრაცია, რამაც ხელი შეუშალა NewPipe-ის დაწყებას ზოგიერთ იშვიათ შემთხვევებში. diff --git a/fastlane/metadata/android/ka/changelogs/920.txt b/fastlane/metadata/android/ka/changelogs/920.txt new file mode 100644 index 000000000..a5b7a214d --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/920.txt @@ -0,0 +1,9 @@ +გაუმჯობესებული + + • დამატებულია ატვირთვის თარიღი და ნახვების რაოდენობა ნაკადის ბადის ერთეულებზე + • უჯრის სათაურის განლაგების გაუმჯობესება + + გასწორდა + + • გასწორდა დადუმების ღილაკი, რომელიც იწვევს ავარიას API 19-ზე + • გასწორდა გრძელი 1080p 60fps ვიდეოების ჩამოტვირთვა diff --git a/fastlane/metadata/android/ka/changelogs/930.txt b/fastlane/metadata/android/ka/changelogs/930.txt new file mode 100644 index 000000000..10502743b --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/930.txt @@ -0,0 +1,19 @@ +ახალი + • ძიება YouTube Music-ზე + • Android TV-ის ძირითადი მხარდაჭერა + + გაუმჯობესებული + • დამატებულია ყველა ნანახი ვიდეოს წაშლის შესაძლებლობა ადგილობრივი დასაკრავი სიიდან + • შეტყობინებების ჩვენება, როდესაც კონტენტი ჯერ არ არის მხარდაჭერილი ავარიის ნაცვლად + • გაუმჯობესებული ამომხტარი დამკვრელის ზომის შეცვლა პინჩის ჟესტებით + • სტრიმინგების რიგში ჩასმა ფონზე ხანგრძლივი დაჭერით და არხის ამომხტარი ღილაკებით + • უჯრის სათაურის სათაურის ზომის გაუმჯობესებული დამუშავება + + დაფიქსირდა + • ფიქსირებული ასაკობრივი შეზღუდვის კონტენტის პარამეტრი არ მუშაობს + • დააფიქსირა გარკვეული სახის reCAPTCHA-ები + • დაფიქსირდა ავარია სანიშნეების გახსნისას, როდესაც დასაკრავი სია არის `null` + • ქსელთან დაკავშირებული გამონაკლისების დაფიქსირება + • დაფიქსირდა ჯგუფური დახარისხების ღილაკის ხილვადობა გამოწერების ფრაგმენტში + + და მეტი diff --git a/fastlane/metadata/android/ka/changelogs/940.txt b/fastlane/metadata/android/ka/changelogs/940.txt new file mode 100644 index 000000000..7c5f74013 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/940.txt @@ -0,0 +1,16 @@ +ახალი + • დაამატეთ მხარდაჭერა SoundCloud-ის კომენტარებისთვის + • დაამატეთ YouTube შეზღუდული რეჟიმის პარამეტრი + • PeerTube-ის მშობელი არხის დეტალების ჩვენება + + გაუმჯობესებული + • კორე ღილაკის ჩვენება მხოლოდ მხარდაჭერილი სერვისებისთვის + • დაბლოკეთ მოთამაშის ჟესტები, რომლებიც იწყება Navigation Bar-ზე ან Status Bar-ზე + • ხელახლა ცდისა და გამოწერის ღილაკების ფონის ფერის შეცვლა სერვისის ფერის მიხედვით + + დაფიქსირდა + • დააფიქსირეთ ჩამოტვირთვის დიალოგის გაყინვა + • ბრაუზერის გახსნის ღილაკი ახლა ნამდვილად იხსნება ბრაუზერში + • ვიდეოების გახსნისას ავარიის გამოსწორება და „ამ ნაკადის დაკვრა ვერ მოხერხდა“ + + და მეტი diff --git a/fastlane/metadata/android/ka/changelogs/950.txt b/fastlane/metadata/android/ka/changelogs/950.txt new file mode 100644 index 000000000..56020dc63 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/950.txt @@ -0,0 +1,4 @@ +ამ გამოშვებას მოაქვს სამი მცირე გამოსწორება: + • გასწორდა წვდომა მეხსიერებაზე Android 10+-ზე + • ფიქსირებული გახსნის კიოსკები + • ხანგრძლივი ვიდეოების ფიქსირებული ხანგრძლივობის გარჩევა diff --git a/fastlane/metadata/android/ka/changelogs/951.txt b/fastlane/metadata/android/ka/changelogs/951.txt new file mode 100644 index 000000000..689d4c63d --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/951.txt @@ -0,0 +1,17 @@ +ახალი + • დაამატეთ სააბონენტო ამომრჩევის ძიება არხის ჯგუფის დიალოგში + • დაამატეთ ფილტრი არხის ჯგუფის დიალოგში მხოლოდ დაუჯგუფებელი გამოწერების საჩვენებლად + • დასაკრავი სიის ჩანართის დამატება მთავარ გვერდზე + • სწრაფი წინ/უკან გადახვევა ფონური/გამომხტარი მოთამაშის რიგში + • ძიების შეთავაზების ჩვენება: იგულისხმეთ და აჩვენეთ შედეგი + + გაუმჯობესებული + • ჩამოაგდეთ განაცხადის მეტამონაცემების ჩაწერა შეფუთულ ფაილებში + • არ ამოიღოთ წარუმატებელი ნაკადები რიგიდან + • განაახლეთ სტატუსის ზოლის ფერი, რათა შეესაბამებოდეს ხელსაწყოთა ზოლის ფერს + + დაფიქსირდა + • დაფიქსირდა აუდიო/ვიდეო დესინქრონიზაცია, რომელიც გამოწვეული იყო მცურავი წერტილის კუმულაციური შეცდომებით + • [PeerTube] წაშლილი კომენტარების მართვა + + და მეტი diff --git a/fastlane/metadata/android/ka/changelogs/952.txt b/fastlane/metadata/android/ka/changelogs/952.txt new file mode 100644 index 000000000..4e9b8832e --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/952.txt @@ -0,0 +1,7 @@ +გაუმჯობესებული + • ავტომატური დაკვრა ხელმისაწვდომია ყველა სერვისისთვის (მხოლოდ YouTube-ის ნაცვლად) + + გასწორდა + • გაასწორა დაკავშირებული ნაკადები YouTube-ის ახალი გაგრძელების მხარდაჭერით + • ფიქსირებული ასაკობრივი შეზღუდული YouTube ვიდეოები + • [Android TV] ფიქსირებული ფოკუსის ხაზგასმის გადაფარვა diff --git a/fastlane/metadata/android/ka/changelogs/953.txt b/fastlane/metadata/android/ka/changelogs/953.txt new file mode 100644 index 000000000..75d226e00 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/953.txt @@ -0,0 +1 @@ +გაასწორეთ YouTube-ის გაშიფვრის ფუნქციის ამოღება. diff --git a/fastlane/metadata/android/ka/changelogs/954.txt b/fastlane/metadata/android/ka/changelogs/954.txt new file mode 100644 index 000000000..f033caed7 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/954.txt @@ -0,0 +1,9 @@ +ახალი აპლიკაციის სამუშაო პროცესი: დაუკარით ვიდეოები დეტალების გვერდზე, გადაფურცლეთ ქვემოთ მოთამაშის შესამცირებლად + • MediaStyle შეტყობინებები: კონფიგურირებადი მოქმედებები შეტყობინებებში, მუშაობის გაუმჯობესება + • ძირითადი ზომის შეცვლა NewPipe-ის დესკტოპის აპად გამოყენებისას + + • აჩვენეთ დიალოგი ღია ვარიანტებით მხარდაჭერილი URL-ის სადღეგრძელოს შემთხვევაში + • გააუმჯობესეთ ძიების შეთავაზებების გამოცდილება, როდესაც დისტანციური ვერსიების მიღება შეუძლებელია + • ვიდეოს ნაგულისხმევი ხარისხის გაზრდა 720p60-მდე (აპს-შიდა პლეერი) და 480p-მდე (მომხტარი პლეერი) + + • ბევრი შეცდომების გამოსწორება და სხვა diff --git a/fastlane/metadata/android/ka/changelogs/955.txt b/fastlane/metadata/android/ka/changelogs/955.txt new file mode 100644 index 000000000..a3af0c85c --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/955.txt @@ -0,0 +1,3 @@ +[YouTube] გასწორდა ძიება ზოგიერთი მომხმარებლისთვის + [YouTube] გასწორდა შემთხვევითი გაშიფვრის გამონაკლისები + [SoundCloud] URL-ები, რომლებიც მთავრდება ხაზებით, ახლა სწორად არის გაანალიზებული diff --git a/fastlane/metadata/android/ka/changelogs/956.txt b/fastlane/metadata/android/ka/changelogs/956.txt new file mode 100644 index 000000000..5beb440a9 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/956.txt @@ -0,0 +1 @@ +[YouTube] გამოსწორდა ავარია ნებისმიერი ვიდეოს ჩატვირთვისას diff --git a/fastlane/metadata/android/ka/changelogs/957.txt b/fastlane/metadata/android/ka/changelogs/957.txt new file mode 100644 index 000000000..1f478d18c --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/957.txt @@ -0,0 +1,10 @@ +• კონკრეტული რიგის მოქმედებების გაერთიანება ერთში + • ორი თითის ჟესტი მოთამაშის დახურვისთვის + • დაუშვით reCAPTCHA ქუქიების გასუფთავება + • შეტყობინების გაუფერულების ვარიანტი + • გააუმჯობესე, თუ როგორ იხსნება ვიდეოს დეტალები, რათა გამოსწორდეს უსასრულო ბუფერირება, ბუფერული ქცევა NewPipe-თან გაზიარებისას და სხვა შეუსაბამობები + • დააჩქარეთ YouTube ვიდეოები და დააფიქსირეთ ასაკობრივი შეზღუდვები + • შეასწორეთ ავარია სწრაფ წინ/უკან გადახვევაზე + • ნუ გადააწყობთ სიებს ესკიზების გადატანით + • ყოველთვის გახსოვდეთ ამომხტარი თვისებები + • დაამატეთ სანტალი ენა diff --git a/fastlane/metadata/android/ka/changelogs/958.txt b/fastlane/metadata/android/ka/changelogs/958.txt new file mode 100644 index 000000000..c987d7375 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/958.txt @@ -0,0 +1,15 @@ +ახალი და გაუმჯობესებული: + • ხელახლა დამატებულია ესკიზის დამალვის ვარიანტი ჩაკეტილ ეკრანზე + • გაიყვანეთ არხის განახლებისთვის + • გაუმჯობესებული შესრულება ადგილობრივი სიების მიღებისას + + დაფიქსირდა: + • დაფიქსირდა ავარია NewPipe-ის გაშვებისას, ოპერატიული მეხსიერებიდან ამოღების შემდეგ + • დაფიქსირდა ავარია გაშვებისას, როცა ინტერნეტი არ არის + • დაფიქსირდა სიკაშკაშის და მოცულობის ჟესტების პარამეტრები + • [YouTube] დაფიქსირდა გრძელი დასაკრავი სიები + + სხვა: + • კოდების გასუფთავება და რამდენიმე შიდა გაუმჯობესება + • დამოკიდებულების განახლებები + • თარგმანის განახლებები diff --git a/fastlane/metadata/android/ka/changelogs/959.txt b/fastlane/metadata/android/ka/changelogs/959.txt new file mode 100644 index 000000000..d68f58a68 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/959.txt @@ -0,0 +1,3 @@ +დაფიქსირდა ავარიების გაუთავებელი ციკლი შეცდომის რეპორტიორის გახსნის შემდეგ. + განახლებულია PeerTube ინსტანციების სია, რომლებიც ავტომატურად გაიხსნება NewPipe-ის მიერ. + განახლებული თარგმანები. diff --git a/fastlane/metadata/android/ka/changelogs/960.txt b/fastlane/metadata/android/ka/changelogs/960.txt new file mode 100644 index 000000000..0eb0b822f --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/960.txt @@ -0,0 +1,4 @@ +• გაუმჯობესებული აღწერა ექსპორტის მონაცემთა ბაზის პარამეტრებში. + • დაფიქსირდა YouTube კომენტარების გარჩევა. + • დაფიქსირდა media.ccc.de სერვისის საჩვენებელი სახელი. + • განახლებული თარგმანები. diff --git a/fastlane/metadata/android/ka/changelogs/961.txt b/fastlane/metadata/android/ka/changelogs/961.txt new file mode 100644 index 000000000..f70fa3d04 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/961.txt @@ -0,0 +1,12 @@ +• [YouTube] Mix მხარდაჭერა + • [YouTube] ინფორმაციის ჩვენება საზოგადოებრივი მაუწყებლებისა და Covid-19-ის შესახებ + • [media.ccc.de] დამატებულია ბოლო ვიდეოები + • დამატებულია სომალიური თარგმანი + + • ბევრი შიდა გაუმჯობესება + + • დაფიქსირდა ვიდეოების გაზიარება პლეერის შიგნიდან + • დაფიქსირდა ცარიელი ReCaptcha ვებ-ხედვა + • დაფიქსირდა ავარია, რომელიც მოხდა ნაკადის სიიდან ამოღებისას + • [PeerTube] დაფიქსირდა დაკავშირებული ნაკადები + • [YouTube] დაფიქსირდა YouTube Music ძიება diff --git a/fastlane/metadata/android/ka/changelogs/962.txt b/fastlane/metadata/android/ka/changelogs/962.txt new file mode 100644 index 000000000..21e9c6a18 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/962.txt @@ -0,0 +1,2 @@ +media.ccc.de სერვისს დაემატა "უახლესი" ვიდეოები. + დაემატა პირდაპირი სტრიმინგები media.ccc.de სერვისს და ასევე პირდაპირი სტრიმინგის მხარდაჭერას. diff --git a/fastlane/metadata/android/ka/changelogs/963.txt b/fastlane/metadata/android/ka/changelogs/963.txt new file mode 100644 index 000000000..b7f7e915a --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] გასწორდა არხის გაგრძელება diff --git a/fastlane/metadata/android/ka/changelogs/964.txt b/fastlane/metadata/android/ka/changelogs/964.txt new file mode 100644 index 000000000..c23e90b14 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/964.txt @@ -0,0 +1,8 @@ +• დამატებულია თავების მხარდაჭერა მოთამაშის კონტროლში + • [PeerTube] დაემატა სეპიას ძებნა + • ხელახლა დაემატა გაზიარების ღილაკი ვიდეოს დეტალების ხედში და ნაკადის აღწერა გადატანილია ჩანართის განლაგებაში + • გამორთეთ სიკაშკაშის აღდგენა, თუ სიკაშკაშის ჟესტი გამორთულია + • დამატებულია სიის ელემენტი კოდიზე ვიდეოს დასაკრავად + • გამოსწორდა ავარია, როდესაც ნაგულისხმევი ბრაუზერი არ არის დაყენებული ზოგიერთ მოწყობილობაზე და გააუმჯობესეთ გაზიარების დიალოგები + • გადართეთ დაკვრა/პაუზა ტექნიკის სივრცის ღილაკით სრულეკრანიან დამკვრელში + • [media.ccc.de] სხვადასხვა შესწორებები და გაუმჯობესება diff --git a/fastlane/metadata/android/ka/changelogs/965.txt b/fastlane/metadata/android/ka/changelogs/965.txt new file mode 100644 index 000000000..2f67bcc17 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/965.txt @@ -0,0 +1,6 @@ +‚გამოსწორდა ავარია, რომელიც მოხდა არხის ჯგუფების ხელახალი შეკვეთისას. + დაფიქსირდა მეტი YouTube ვიდეოს მიღება არხებიდან და დასაკრავი სიებიდან. + გამოსწორდა YouTube კომენტარების მიღება. + დაემატა მხარდაჭერა /watch/, /v/ და /w/ ქვებილიკებისთვის YouTube URL-ებში. + დაფიქსირდა SoundCloud კლიენტის ID და გეოშეზღუდული კონტენტის ამოღება. + დაემატა ჩრდილოეთ ქურთული ლოკალიზაცია. diff --git a/fastlane/metadata/android/ka/changelogs/966.txt b/fastlane/metadata/android/ka/changelogs/966.txt new file mode 100644 index 000000000..0f0b7421d --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/966.txt @@ -0,0 +1,14 @@ +ახალი: + • ახალი სერვისის დამატება: Bandcamp + + გაუმჯობესებული: + • დაამატეთ ვარიანტი, რომ აპს მიჰყვეს მოწყობილობის თემას + • ზოგიერთი ავარიის თავიდან აცილება შეცდომების გაუმჯობესებული პანელის ჩვენებით + • აჩვენეთ მეტი ინფორმაცია იმის შესახებ, თუ რატომ არის კონტენტი მიუწვდომელი + • აპარატურის სივრცის ღილაკი იწვევს დაკვრა/პაუზას + • აჩვენეთ „ჩამოტვირთვა დაიწყო“ სადღეგრძელო + + დაფიქსირდა: + • დააფიქსირეთ ძალიან მცირე მინიატურა ვიდეოს დეტალებში ფონზე დაკვრის დროს + • შეასწორეთ ცარიელი სათაური მინიმიზირებულ მოთამაშეში + • დააფიქსირეთ ბოლო ზომის შეცვლის რეჟიმი, რომელიც არ აღდგება სწორად diff --git a/fastlane/metadata/android/ka/changelogs/967.txt b/fastlane/metadata/android/ka/changelogs/967.txt new file mode 100644 index 000000000..5d1835b2e --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/967.txt @@ -0,0 +1 @@ +გაასწორა YouTube, რომელიც ევროკავშირში არ მუშაობს გამართულად. ეს გამოწვეული იყო ახალი ქუქი-ჩანაწერით და კონფიდენციალურობის თანხმობის სისტემით, რომელიც მოითხოვს NewPipe-ს დააყენოს თანხმობის ქუქი-ფაილები. diff --git a/fastlane/metadata/android/ka/changelogs/968.txt b/fastlane/metadata/android/ka/changelogs/968.txt new file mode 100644 index 000000000..ef5b5ce6f --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/968.txt @@ -0,0 +1,7 @@ +დამატებულია არხის დეტალების ვარიანტი ხანგრძლივი დაჭერის მენიუში. + დამატებულია ფუნქციონირება დასაკრავი სიის სახელის გადარქმევის მიზნით დასაკრავი სიის ინტერფეისიდან. + ნება მიეცით მომხმარებელს შეაჩეროს ვიდეო ბუფერის დროს. + გაპრიალებული თეთრი თემა. + დაფიქსირდა შრიფტების გადახურვა უფრო დიდი ზომის შრიფტის გამოყენებისას. + არ დაფიქსირდა ვიდეო Formuler და Zephier მოწყობილობებზე. + დაფიქსირდა სხვადასხვა ავარია. diff --git a/fastlane/metadata/android/ka/changelogs/969.txt b/fastlane/metadata/android/ka/changelogs/969.txt new file mode 100644 index 000000000..5b61cc7ec --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/969.txt @@ -0,0 +1,8 @@ +• დაუშვით ინსტალაცია გარე მეხსიერებაზე + • [Bandcamp] დამატებულია მხარდაჭერა ნაკადზე პირველი სამი კომენტარის ჩვენებისთვის + • აჩვენეთ „ჩამოტვირთვა დაიწყო“ სადღეგრძელო მხოლოდ ჩამოტვირთვის დაწყებისას + • არ დააყენოთ reCaptcha ქუქი, როცა არ არის შენახული ქუქი + • [Player] ქეშის მუშაობის გაუმჯობესება + • [Player] ფიქსირებული პლეერი ავტომატურად არ უკრავს + • ჩამოტვირთვების წაშლისას წინა Snackbar-ების გაუქმება + • დაფიქსირდა ობიექტის წაშლის მცდელობა, რომელიც არ არის სიაში diff --git a/fastlane/metadata/android/ka/changelogs/970.txt b/fastlane/metadata/android/ka/changelogs/970.txt new file mode 100644 index 000000000..ccc87e82e --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/970.txt @@ -0,0 +1,11 @@ +ახალი + • აჩვენეთ შინაარსის მეტამონაცემები (თეგები, კატეგორიები, ლიცენზია, ...) აღწერილობის ქვემოთ + • დამატებულია „არხის დეტალების ჩვენება“ ოფცია დისტანციურ (არალოკალურ) დასაკრავ სიებში + • მენიუს ხანგრძლივი დაჭერით დაემატა „გახსნა ბრაუზერში“. + + დაფიქსირდა + • დაფიქსირდა ბრუნვის ავარია ვიდეოს დეტალების გვერდზე + • დაფიქსირდა ღილაკი „თამაში კოდით“ პლეერში ყოველთვის მოგთხოვთ კორეს დააინსტალიროთ + • დაფიქსირდა და გაუმჯობესდა დაყენების იმპორტისა და ექსპორტის გზები + • [YouTube] დააფიქსირა მოწონებების რაოდენობა + Და უფრო მეტი diff --git a/fastlane/metadata/android/ka/changelogs/971.txt b/fastlane/metadata/android/ka/changelogs/971.txt new file mode 100644 index 000000000..7898e5ee4 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/971.txt @@ -0,0 +1,3 @@ +Hotfix + • ბუფერის გაზრდა რებუფერის შემდეგ დაკვრისთვის + • გამოსწორდა ავარია ტაბლეტებსა და ტელევიზორებზე პლეერში სათამაშო რიგის ხატულაზე დაწკაპუნებისას diff --git a/fastlane/metadata/android/ka/changelogs/972.txt b/fastlane/metadata/android/ka/changelogs/972.txt new file mode 100644 index 000000000..737bb6725 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/972.txt @@ -0,0 +1,14 @@ +ახალი + აღწერილობაში დროის შტამპების და ჰეშთეგების ამოცნობა + დამატებულია ტაბლეტის ხელით რეჟიმის პარამეტრი + დამატებულია ნათამაშები ელემენტების არხში დამალვის შესაძლებლობა + + გაუმჯობესებული + სათანადოდ მხარი დაუჭირეთ Storage Access Framework-ს + მიუწვდომელი და დასრულებული არხების შეცდომის უკეთესი მართვა + Android-ის გაზიარების ფურცელი Android 10+ მომხმარებლებისთვის ახლა აჩვენებს კონტენტის სათაურს. + განახლებულია Invidious ინსტანციები და მხარს უჭერს Piped ბმულებს. + + დაფიქსირდა + [YouTube] ასაკით შეზღუდული კონტენტი + ფანჯრის გაჟონვის თავიდან აცილება, გამონაკლისი არჩევანის დიალოგის გახსნისას diff --git a/fastlane/metadata/android/ka/changelogs/973.txt b/fastlane/metadata/android/ka/changelogs/973.txt new file mode 100644 index 000000000..75ab08edd --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/973.txt @@ -0,0 +1,4 @@ +Hotfix + • გაასწორეთ ესკიზები და სათაურები, რომლებიც ამოჭრილია ბადის განლაგებაში, არასწორი გაანგარიშების გამო, თუ რამდენი ვიდეო შეიძლება მოთავსდეს ერთ რიგში + • დააფიქსირეთ ჩამოტვირთვის დიალოგი, რომელიც გაქრება არაფრის გაკეთების გარეშე, თუ გახსნილია გაზიარების მენიუდან + • განაახლეთ ბიბლიოთეკა, რომელიც დაკავშირებულია გარე აქტივობების გახსნასთან, როგორიცაა Storage Access Framework ფაილის ამომრჩევი diff --git a/fastlane/metadata/android/ka/changelogs/974.txt b/fastlane/metadata/android/ka/changelogs/974.txt new file mode 100644 index 000000000..3e594ea57 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/974.txt @@ -0,0 +1,5 @@ +Hotfix + • მოაგვარეთ ბუფერის პრობლემები, რომლებიც გამოწვეულია YouTube-ის შეფერხებით + • შეასწორეთ YouTube კომენტარების ამოღება და ავარია გამორთული კომენტარებით + • შეასწორეთ YouTube მუსიკის ძიება + • შეასწორეთ PeerTube პირდაპირი ეთერი diff --git a/fastlane/metadata/android/ka/changelogs/975.txt b/fastlane/metadata/android/ka/changelogs/975.txt new file mode 100644 index 000000000..2bc309acc --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/975.txt @@ -0,0 +1,17 @@ +ახალი + • ძიების დროს მინიატურების გადახედვის ჩვენება + • გამორთული კომენტარების აღმოჩენა + • არხის ერთეულის ნანახად მონიშვნის დაშვება + • კომენტარების გულების ჩვენება + + გაუმჯობესებულია + • მეტამონაცემების და ტეგების განლაგების გაუმჯობესება + • სერვისის ფერის გამოყენება UI კომპონენტებზე + + დაფიქსირდა + • მინი პლეერში მინიატურების დაფიქსირება + • დააფიქსირეთ დაუსრულებელი ბუფერირება დუბლიკატი რიგის ერთეულებზე + • ზოგიერთი მოთამაშის შესწორება, როგორიცაა როტაცია და უფრო სწრაფი დახურვა + • დააფიქსირეთ ReCAPTCHA დარჩენილი ჩატვირთული ფონზე + • დაწკაპუნების გამორთვა არხის განახლებისას + • შეასწორეთ ჩამოტვირთვის ავარია diff --git a/fastlane/metadata/android/ka/changelogs/976.txt b/fastlane/metadata/android/ka/changelogs/976.txt new file mode 100644 index 000000000..069e263bc --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/976.txt @@ -0,0 +1,10 @@ +• დამატებულია პლეერის პირდაპირ გახსნის ოპცია სრულ ეკრანზე + • ნება დართეთ აირჩიოთ რომელი ტიპის საძიებო წინადადებები გამოჩნდეს + • მუქი თემა ახლა უფრო მუქი + დამატებულია მუქი დახვეწილი ეკრანი + • გაუმჯობესებული ფაილის ამომრჩევი არასასურველი ფაილების გასათეთრებლად + • დაფიქსირდა YouTube გამოწერების იმპორტი + • ნაკადის ხელახლა დაკვრა მოითხოვს ხელახლა დაჭერას გამეორების ღილაკზე + • დაფიქსირდა დახურვის აუდიო სესია + • [Android TV] დაფიქსირდა გრძელი საძიებო ზოლის ნახტომები DPad-ის გამოყენებისას + + შემდგომი ცვლილებების სანახავად, ნახეთ ცვლილებების ჟურნალი (და ბლოგის პოსტი) ქვემოთ მოცემული ბმულების ჩანართიდან. diff --git a/fastlane/metadata/android/ka/changelogs/977.txt b/fastlane/metadata/android/ka/changelogs/977.txt new file mode 100644 index 000000000..9c8767768 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/977.txt @@ -0,0 +1,10 @@ +• დამატებულია „შემდეგი დაკვრის“ ღილაკი ხანგრძლივი დაჭერის მენიუში + • განზრახვის ფილტრს დაემატა YouTube shorts ბილიკის პრეფიქსი + • ფიქსირებული პარამეტრების იმპორტი + • შეცვალეთ საძიებო ზოლის პოზიცია მოთამაშის ღილაკებით რიგის ეკრანზე + • MediasessionManager-თან დაკავშირებული სხვადასხვა შესწორებები + • დაფიქსირებული ძიების ზოლი არ დასრულებულა ვიდეოს დასრულების შემდეგ + • გამორთული მედია გვირაბი RealtekATV-ზე + • გაფართოებული მინიმირებული მოთამაშის ღილაკების დაწკაპუნებადი არე + + შემდგომი ცვლილებების სანახავად, ნახეთ ცვლილებების ჟურნალი (და ბლოგის პოსტი) ქვემოთ მოცემული ბმულების ჩანართიდან. diff --git a/fastlane/metadata/android/ka/changelogs/978.txt b/fastlane/metadata/android/ka/changelogs/978.txt new file mode 100644 index 000000000..600962d14 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/978.txt @@ -0,0 +1 @@ +დაფიქსირდა შემოწმების შესრულება NewPipe-ის ახალი ვერსიისთვის. ეს შემოწმება ხანდახან ძალიან ადრე სრულდებოდა და, შესაბამისად, იწვევს აპის ავარიას. ეს ახლა უნდა გამოსწორდეს. diff --git a/fastlane/metadata/android/ka/changelogs/979.txt b/fastlane/metadata/android/ka/changelogs/979.txt new file mode 100644 index 000000000..ba6916b3a --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/979.txt @@ -0,0 +1,2 @@ +გასწორდა დაკვრის განახლება + - გაუმჯობესებები იმის უზრუნველსაყოფად, რომ სერვისი, რომელიც განსაზღვრავს თუ არა NewPipe-მა უნდა შეამოწმოს ახალი ვერსიის შემოწმება, არ დაიწყო ფონზე diff --git a/fastlane/metadata/android/ka/changelogs/980.txt b/fastlane/metadata/android/ka/changelogs/980.txt new file mode 100644 index 000000000..34b4bb313 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/980.txt @@ -0,0 +1,13 @@ +ახალი + • მენიუს გასაზიარებლად დაემატა „დამატება დასაკრავ სიაში“ ოფცია + • დამატებულია მხარდაჭერა y2u.be და PeerTube მოკლე ბმულებისთვის + + გაუმჯობესებული + • დაკვრა-სიჩქარის კონტროლი უფრო კომპაქტური გახდა + • არხი ახლა ხაზს უსვამს ახალ ელემენტებს + • არხში "ნანახი ელემენტების ჩვენება" ოფცია ახლა შენახულია + + დაფიქსირდა + • დაფიქსირდა YouTube-ის მოწონებისა და დაწუნებების მოპოვება + • დაფიქსირდა ავტომატური გამეორება ფონიდან დაბრუნების შემდეგ + Და უფრო მეტი diff --git a/fastlane/metadata/android/ka/changelogs/981.txt b/fastlane/metadata/android/ka/changelogs/981.txt new file mode 100644 index 000000000..9bd4cfe7b --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/981.txt @@ -0,0 +1,2 @@ +წაიშალა MediaParser-ის მხარდაჭერა Android 11+-ზე ბუფერირების შემდეგ დაკვრის წარუმატებელი რეზიუმეს გამოსასწორებლად. + გამორთულია მედია გვირაბი Philips QM16XE-ზე დაკვრის პრობლემების მოსაგვარებლად. diff --git a/fastlane/metadata/android/ka/changelogs/982.txt b/fastlane/metadata/android/ka/changelogs/982.txt new file mode 100644 index 000000000..fcb0d4417 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/982.txt @@ -0,0 +1 @@ +გაასწორა YouTube არ უკრავს არცერთ ნაკადს. diff --git a/fastlane/metadata/android/ka/changelogs/983.txt b/fastlane/metadata/android/ka/changelogs/983.txt new file mode 100644 index 000000000..73351e994 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/983.txt @@ -0,0 +1,9 @@ +დაამატეთ ახალი ინტერფეისი და ქცევა ორმაგი შეხებით მოსაძებნად + გახადეთ პარამეტრები საძიებელი + მონიშნეთ ჩამაგრებული კომენტარები, როგორც ასეთი + დაამატეთ ღია აპის მხარდაჭერა FSFE-ის PeerTube ინსტანციისთვის + შეცდომის შეტყობინებების დამატება + დააფიქსირეთ პირველი რიგის ელემენტის გამეორება მოთამაშის შეცვლაზე + დაელოდეთ უფრო მეტხანს ბუფერირებისას პირდაპირი სტრიმინგების დროს, სანამ არ მოხდება + ადგილობრივი ძიების შედეგების თანმიმდევრობის დაფიქსირება + დააფიქსირეთ ცარიელი ელემენტის ველები სათამაშო რიგში diff --git a/fastlane/metadata/android/ka/changelogs/984.txt b/fastlane/metadata/android/ka/changelogs/984.txt new file mode 100644 index 000000000..1d7308ab8 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/984.txt @@ -0,0 +1,7 @@ +ჩატვირთეთ საკმარისი საწყისი ელემენტი სიებში, რათა შეავსოთ მთელი ეკრანი და დააფიქსიროთ გადახვევა ტაბლეტებსა და ტელევიზორებზე + შეასწორეთ შემთხვევითი ავარიები სიებში გადახვევისას + სთხოვეთ მოთამაშეს სწრაფად მოძებნოს გადაფარვის რკალი სისტემის ინტერფეისის ქვეშ + დააბრუნეთ ცვლილებები ამონაჭრებში მრავალ ფანჯარაში თამაშისას, რაც იწვევს მოთამაშის არასწორად რეგრესიას ზოგიერთ ტელეფონზე + გაზიზარდა compileSdk 30-დან 31-მდე + შეცდომის მოხსენების ბიბლიოთეკის განახლება + გადააკეთეთ რამდენიმე კოდი პლეერში diff --git a/fastlane/metadata/android/ka/changelogs/985.txt b/fastlane/metadata/android/ka/changelogs/985.txt new file mode 100644 index 000000000..d20512f17 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/985.txt @@ -0,0 +1 @@ +გაასწორა YouTube არ უკრავს არცერთ ნაკადს diff --git a/fastlane/metadata/android/ka/changelogs/986.txt b/fastlane/metadata/android/ka/changelogs/986.txt new file mode 100644 index 000000000..c6a064c6c --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/986.txt @@ -0,0 +1,16 @@ +ახალი + • შეტყობინებები ახალი ნაკადებისთვის + • უწყვეტი გადასვლა ფონსა და ვიდეო პლეერებს შორის + • სიმაღლის შეცვლა ნახევარტონებით + • დასაკრავ სიას დაამატე მთავარი მოთამაშის რიგი + + გაუმჯობესებული + • დაიმახსოვრე სიჩქარე/სიმაღლის ნაბიჯის ზომა + • შეამცირეთ საწყისი ხანგრძლივი ბუფერირება ვიდეო პლეერში + • გააუმჯობესეთ მოთამაშის ინტერფეისი Android TV-სთვის + • დაადასტურეთ ყველა გადმოწერილი ფაილის წაშლამდე + + დაფიქსირდა + • შეასწორეთ მედია ღილაკი, რომელიც არ მალავს მოთამაშის კონტროლს + • დააფიქსირეთ დაკვრის გადატვირთვა მოთამაშის ტიპის შეცვლაზე + • დააფიქსირეთ დასაკრავი სიის დიალოგის როტაცია diff --git a/fastlane/metadata/android/ka/changelogs/987.txt b/fastlane/metadata/android/ka/changelogs/987.txt new file mode 100644 index 000000000..ce6806a93 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/987.txt @@ -0,0 +1,12 @@ +ახალი + • პროგრესული HTTP-ის გარდა მიწოდების მეთოდების მხარდაჭერა: დაკვრის უფრო სწრაფი ჩატვირთვის დრო, PeerTube-სა და SoundCloud-ის შესწორებები, ახლახან დასრულებული YouTube-ის პირდაპირი სტრიმინგების დაკვრა + • დამატების ღილაკი დისტანციური დასაკრავი სიის ადგილობრივ სიაში დასამატებლად + • სურათის გადახედვა Android 10+ გაზიარების ფურცელში + + გაუმჯობესებული + • დაკვრის პარამეტრების გაუმჯობესება + • ხელმოწერის იმპორტი/ექსპორტის ღილაკების გადატანა სამწერტილიან მენიუში + + დაფიქსირდა + • სრულად ნანახი ვიდეოების დასაკრავი სიიდან ამოშლის შესწორება + • შეასწორეთ გაზიარების მენიუს თემა და ჩანაწერი „დაამატე დასაკრავ სიაში“. diff --git a/fastlane/metadata/android/ka/changelogs/988.txt b/fastlane/metadata/android/ka/changelogs/988.txt new file mode 100644 index 000000000..e42877c9c --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/988.txt @@ -0,0 +1,2 @@ +[YouTube] გაასწორდა შეცდომა „ვერ მივიღე ნაკადი“ რომელიმე ვიდეოს დაკვრის მცდელობისას + [YouTube] შეასწორდა „შემდეგი კონტენტი მიუწვდომელია ამ აპში“. მოთხოვნილი ვიდეოს ნაცვლად ნაჩვენები შეტყობინება diff --git a/fastlane/metadata/android/ka/changelogs/989.txt b/fastlane/metadata/android/ka/changelogs/989.txt new file mode 100644 index 000000000..481927de1 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/989.txt @@ -0,0 +1,3 @@ +• [YouTube] შეასწორდა უსასრულო ჩატვირთვა ნებისმიერი ვიდეოს დაკვრის მცდელობისას + • [YouTube] დააფიქსირეთ შეფერხება ზოგიერთ ვიდეოზე + • განაახლეთ jsoup ბიბლიოთეკა 1.15.3-მდე, რომელიც მოიცავს უსაფრთხოების შესწორებას diff --git a/fastlane/metadata/android/ka/changelogs/990.txt b/fastlane/metadata/android/ka/changelogs/990.txt new file mode 100644 index 000000000..c19e2db24 --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/990.txt @@ -0,0 +1,15 @@ +ეს გამოშვება ამცირებს Android 4.4 KitKat-ის მხარდაჭერას, ახლა მინიმალური ვერსიაა Android 5 Lollipop! + + ახალი + • ჩამოტვირთეთ ხანგრძლივი დაჭერის მენიუდან + • მომავალი ვიდეოების დამალვა არხში + • გააზიარეთ ადგილობრივი დასაკრავი სიები + + გაუმჯობესებული + • გადააკეთეთ მოთამაშის კოდი მცირე კომპონენტებად: ნაკლები ოპერატიული მეხსიერება, ნაკლები შეცდომები + • ესკიზების მასშტაბის რეჟიმის გაუმჯობესება + • Vector-ize image placeholders + + დაფიქსირდა + • მოაგვარეთ სხვადასხვა პრობლემები მოთამაშის შეტყობინებასთან დაკავშირებით: მოძველებული/გამოტოვებული მედიის ინფორმაცია, დამახინჯებული მინიატურა + • დააფიქსირეთ სრული ეკრანი ეკრანის 1/4-ის გამოყენებით diff --git a/fastlane/metadata/android/ka/changelogs/991.txt b/fastlane/metadata/android/ka/changelogs/991.txt new file mode 100644 index 000000000..010c04c8f --- /dev/null +++ b/fastlane/metadata/android/ka/changelogs/991.txt @@ -0,0 +1,13 @@ +ახალი + • შეცდომის პანელში დაამატეთ ღილაკი „გახსნა ბრაუზერში“. + • დაამატეთ ოფცია არხების ჯგუფების სიაში საჩვენებლად + • [YouTube] დიდხანს დააწკაპუნეთ ნაკადის სეგმენტებზე დროის ანაბეჭდის URL-ის გასაზიარებლად + • თამაშის რიგის ღილაკის დამატება მინი პლეერში + + გაუმჯობესებული + • დაამატეთ ისლანდიური ლოკალიზაცია და განახლებულია მრავალი სხვა თარგმანი + • ბევრი შიდა გაუმჯობესება + + დაფიქსირდა + • მრავალი ავარიის გამოსწორება + • [YouTube] ზოგიერთ ქვეყანაში არხების ჩატვირთვის, გამოუყენებელი არხის და დაკვრის პრობლემის გადაჭრის გადაჭრა diff --git a/fastlane/metadata/android/ka/full_description.txt b/fastlane/metadata/android/ka/full_description.txt new file mode 100644 index 000000000..eff57aabe --- /dev/null +++ b/fastlane/metadata/android/ka/full_description.txt @@ -0,0 +1 @@ +NewPipe არ იყენებს Google Framework ბიბლიოთეკას ან YouTube API-ს. ის მხოლოდ აანალიზებს ვებსაიტს, რათა მოიპოვოს მისთვის საჭირო ინფორმაცია. ამიტომ ამ აპლიკაციის გამოყენება შესაძლებელია მოწყობილობებზე Google სერვისების დაყენების გარეშე. გარდა ამისა, თქვენ არ გჭირდებათ YouTube ანგარიში NewPipe-ის გამოსაყენებლად და ეს არის FLOSS. diff --git a/fastlane/metadata/android/ka/short_description.txt b/fastlane/metadata/android/ka/short_description.txt new file mode 100644 index 000000000..3c12faee9 --- /dev/null +++ b/fastlane/metadata/android/ka/short_description.txt @@ -0,0 +1 @@ +უფასო მსუბუქი YouTube წინა ნაწილი Android-ისთვის. diff --git a/fastlane/metadata/android/lv/changelogs/63.txt b/fastlane/metadata/android/lv/changelogs/63.txt index 1d2f9d38f..f014fac4a 100644 --- a/fastlane/metadata/android/lv/changelogs/63.txt +++ b/fastlane/metadata/android/lv/changelogs/63.txt @@ -5,4 +5,4 @@ - Pievienot visu par GDPR #1420 ### Salabots -- Lejupielādētājs: Salabot avāriju, ielādējot nepabeigtas lejupielādes no .giga failiem #1407 +- Lejupielādētājs: Salabota aplikācijas nobrukšana, ielādējot nepabeigtas lejupielādes no .giga failiem #1407 diff --git a/fastlane/metadata/android/lv/changelogs/64.txt b/fastlane/metadata/android/lv/changelogs/64.txt index b8d58e4c8..9fd77b641 100644 --- a/fastlane/metadata/android/lv/changelogs/64.txt +++ b/fastlane/metadata/android/lv/changelogs/64.txt @@ -1,8 +1,8 @@ ### Uzlabojumi - Pievienota iespēja ierobežot video kvalitāti, ja tiek lietoti mobilie dati. #1339 -- Atcerēties spilgtumu visu sesiju #1442 -- Uzlabot lejupielāžu ātrumu vājākiem procesoriem #1431 -- +- Iegaumē spilgtuma iestatījumu visu sesijas laiku #1442 +- Uzlabots lejupielāžu ātrums uz vājākiem procesoriem #1431 +- pievienots (working) mēdiju sesijas atbalsts #1433 ### Salabots -- Salabot avāriju, kas notiek, kad atver lejupielādes () #1441 +- Salabota aplikācijas nobrukšana, kad atver lejupielādes (labojums pieejams relīzes laidienos) #1441 diff --git a/fastlane/metadata/android/nb-NO/changelogs/992.txt b/fastlane/metadata/android/nb-NO/changelogs/992.txt new file mode 100644 index 000000000..02605fc2c --- /dev/null +++ b/fastlane/metadata/android/nb-NO/changelogs/992.txt @@ -0,0 +1,17 @@ +Nytt +• Antall abonnenter i videodetaljene +• Last ned fra køen +• Sett miniatyrbilde for spilleliste +• Langtrykk på emneknagger og linker +• Kortvisningsmodus + +Forbedret +• Større lukkenapp på minispilleren +• Bedre nedskalering av miniatyrbilder +• Målversjon er nå Android 13 (API 33) +• Blafring pauser ikke lenger spilleren + +Fikset +• Fiks overlay for DeX/mus +• Tillat bakgrunnsspiller med ingen separate lydstrømmer +• Diverse YouTube-fikser, med mer … diff --git a/fastlane/metadata/android/nb-NO/full_description.txt b/fastlane/metadata/android/nb-NO/full_description.txt index 6fc7e0fbd..0ffda33f8 100644 --- a/fastlane/metadata/android/nb-NO/full_description.txt +++ b/fastlane/metadata/android/nb-NO/full_description.txt @@ -1,5 +1 @@ -Gemenhetslig fri programvare. -Bruker ingen av Google-rammeverksbibliotekene, eller YouTube-API-et. -Det tolker kun nettsiden for å hente infoen som trengs. -Derfor kan dette programmet brukes på enheter der Google-tjenestene ikke er installert. -Du trenger heller ikke en YouTube-konto for å bruke installere det. +NewPipe bruker ikke noen av Googles rammeverksbiblioteker, eller YouTube-API-et. Den bare tolker nettsiden for å hente informasjonen den trenger. Programmet kan derfor brukes på enheter uten Google-tjenester, og du trenger ikke en YouTube-konto for å bruke det. I tillegg er det er gemenfrihetslig fritt. diff --git a/fastlane/metadata/android/nb-NO/short_description.txt b/fastlane/metadata/android/nb-NO/short_description.txt index feaf8f8ba..c19a75993 100644 --- a/fastlane/metadata/android/nb-NO/short_description.txt +++ b/fastlane/metadata/android/nb-NO/short_description.txt @@ -1 +1 @@ -En fri og lett mediaplattformsavspiller. +En fri og lett YouTube-skjermflate for Android. diff --git a/fastlane/metadata/android/nl/changelogs/65.txt b/fastlane/metadata/android/nl/changelogs/65.txt new file mode 100644 index 000000000..79a6c4928 --- /dev/null +++ b/fastlane/metadata/android/nl/changelogs/65.txt @@ -0,0 +1,26 @@ +### Verbeteringen + +- Burgermenu icoon animatie uitschakelen #1486 +- Verwijderen van downloads ongedaan maken #1472 +- Downloadoptie in aandelenmenu #1498 +- Deeloptie toegevoegd aan menu met lange tikken #1454 +- Hoofdspeler minimaliseren bij afsluiten #1354 +- Bibliotheek versie update en database back-up fix #1510 +- ExoPlayer 2.8.2 Update #1392 + - De afspeelsnelheidsdialoog herwerkt om verschillende stapgrootten te ondersteunen voor snellere snelheidsverandering. + - Een schakelaar toegevoegd om snel vooruit te spoelen tijdens stiltes in de afspeelsnelheidcontrole. Dit zou handig moeten zijn voor luisterboeken en bepaalde muziekgenres, en kan een echte naadloze ervaring opleveren (en kan een nummer met veel stiltes = breken). + - Verfijnde mediabronresolutie zodat metadata naast media intern in de speler kunnen worden doorgegeven, in plaats van dit handmatig te doen. Nu hebben we een enkele bron van metadata en deze is direct beschikbaar wanneer het afspelen begint. + - Metagegevens van afspeellijst op afstand niet bijgewerkt wanneer nieuwe metagegevens beschikbaar zijn wanneer afspeellijstfragment wordt geopend. + - Diverse UI fixes: #1383, achtergrondspeler meldingselementen nu altijd wit, makkelijker uitschakelen van popup speler door gooien +- Gebruik nieuwe extractor met refactored architectuur voor multiservice + +### Fixes + +- Fix #1440 Gebroken video-info-indeling #1491 +- Geschiedenis bekijken fix #1497 + - #1495, door de metadata (thumbnail, titel en videotelling) bij te werken zodra de gebruiker de afspeellijst opent. + - #1475, door een weergave in de database te registreren wanneer de gebruiker een video start op externe speler op detailfragment. +- Fix creen timeout bij popup modus. #1463 (Fixed #640) +- Hoofd video speler fix #1509 + - #1412] Fixed repeat mode veroorzaakt speler NPE wanneer nieuwe intentie wordt ontvangen terwijl speler activiteit op de achtergrond is. + - Fixed minimaliseren van speler naar popup vernietigt speler niet wanneer popup toestemming niet is verleend. diff --git a/fastlane/metadata/android/or/full_description.txt b/fastlane/metadata/android/or/full_description.txt new file mode 100644 index 000000000..e0ae60693 --- /dev/null +++ b/fastlane/metadata/android/or/full_description.txt @@ -0,0 +1 @@ +NewPipe କୌଣସି ଗୁଗୁଲ୍ framework କରେ ନାହିଁ | ଏହା ଆବଶ୍ୟକ କରୁଥିବା ସୂଚନା ହାସଲ କରିବା ପାଇଁ ଏହା କେବଳ ୱେବସାଇଟ୍ କୁ ବିଶ୍ଳେଷଣ କରେ | ତେଣୁ ଗୁଗୁଲ୍ ସର୍ଭିସ୍ ଇନଷ୍ଟଲ୍ ହୋଇନଥିବା ଡିଭାଇସରେ ଏହି ଆପ୍ ବ୍ୟବହାର କରାଯାଇପାରିବ | ଆହୁରି ମଧ୍ୟ, NewPipe ବ୍ୟବହାର କରିବା ପାଇଁ ଆପଣଙ୍କୁ ଏକ ୟୁଟ୍ୟୁବ୍ ଆକାଉଣ୍ଟ୍ ଦରକାର ନାହିଁ, ଏବଂ ଏହା FLOSS | diff --git a/fastlane/metadata/android/pa/changelogs/65.txt b/fastlane/metadata/android/pa/changelogs/65.txt new file mode 100644 index 000000000..0fbf1147e --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/65.txt @@ -0,0 +1 @@ +### ਸੁਧਾਰ - ਬਰਗਰਮੇਨੂ ਆਈਕਨ ਐਨੀਮੇਸ਼ਨ #1486 ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ - ਡਾਉਨਲੋਡਸ #1472 ਨੂੰ ਮਿਟਾਉਣ ਨੂੰ ਅਨਡੂ ਕਰੋ - ਸ਼ੇਅਰ ਮੀਨੂ #1498 ਵਿੱਚ ਡਾਊਨਲੋਡ ਵਿਕਲਪ - ਲੰਬੇ ਟੈਪ ਮੀਨੂ #1454 ਵਿੱਚ ਸ਼ੇਅਰ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ - ਨਿਕਾਸ #1354 'ਤੇ ਮੁੱਖ ਪਲੇਅਰ ਨੂੰ ਛੋਟਾ ਕਰੋ - ਲਾਇਬ੍ਰੇਰੀ ਸੰਸਕਰਣ ਅਪਡੇਟ ਅਤੇ ਡੇਟਾਬੇਸ ਬੈਕਅਪ ਫਿਕਸ #1510 - ExoPlayer 2.8.2 ਅੱਪਡੇਟ #1392 - ਤੇਜ਼ ਗਤੀ ਤਬਦੀਲੀ ਲਈ ਵੱਖ-ਵੱਖ ਸਟੈਪ ਸਾਈਜ਼ ਦਾ ਸਮਰਥਨ ਕਰਨ ਲਈ ਪਲੇਬੈਕ ਸਪੀਡ ਕੰਟਰੋਲ ਡਾਇਲਾਗ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਇਆ ਗਿਆ। - ਪਲੇਬੈਕ ਸਪੀਡ ਨਿਯੰਤਰਣ ਵਿੱਚ ਚੁੱਪ ਦੌਰਾਨ ਫਾਸਟ-ਫਾਰਵਰਡ ਕਰਨ ਲਈ ਇੱਕ ਟੌਗਲ ਜੋੜਿਆ ਗਿਆ। ਇਹ ਆਡੀਓਬੁੱਕਾਂ ਅਤੇ ਕੁਝ ਸੰਗੀਤ ਸ਼ੈਲੀਆਂ ਲਈ ਮਦਦਗਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਸੱਚਾ ਸਹਿਜ ਅਨੁਭਵ ਲਿਆ ਸਕਦਾ ਹੈ (ਅਤੇ ਬਹੁਤ ਸਾਰੀਆਂ ਚੁੱਪ =\\ ਨਾਲ ਗੀਤ ਤੋੜ ਸਕਦਾ ਹੈ)। - ਹੱਥੀਂ ਅਜਿਹਾ ਕਰਨ ਦੀ ਬਜਾਏ, ਪਲੇਅਰ ਵਿੱਚ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ ਮੀਡੀਆ ਦੇ ਨਾਲ-ਨਾਲ ਮੈਟਾਡੇਟਾ ਪਾਸ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ ਰੀਫੈਕਟਰਡ ਮੀਡੀਆ ਸਰੋਤ ਰੈਜ਼ੋਲਿਊਸ਼ਨ। ਹੁਣ ਸਾਡੇ ਕੋਲ ਮੈਟਾਡੇਟਾ ਦਾ ਇੱਕ ਸਿੰਗਲ ਸਰੋਤ ਹੈ ਅਤੇ ਪਲੇਬੈਕ ਸ਼ੁਰੂ ਹੋਣ 'ਤੇ ਸਿੱਧਾ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ। - ਸਥਿਰ ਰਿਮੋਟ ਪਲੇਲਿਸਟ ਮੈਟਾਡੇਟਾ ਅੱਪਡੇਟ ਨਹੀਂ ਹੋ ਰਿਹਾ ਹੈ ਜਦੋਂ ਪਲੇਲਿਸਟ ਫਰੈਗਮੈਂਟ ਖੋਲ੍ਹਿਆ ਜਾਂਦਾ ਹੈ ਤਾਂ ਨਵਾਂ ਮੈਟਾਡੇਟਾ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ। - ਕਈ UI ਫਿਕਸ: #1383, ਬੈਕਗਰਾਊਂਡ ਪਲੇਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਕੰਟਰੋਲ ਹੁਣ ਹਮੇਸ਼ਾ ਸਫੈਦ, ਫਲਿੰਗਿੰਗ ਰਾਹੀਂ ਪੌਪਅੱਪ ਪਲੇਅਰ ਨੂੰ ਬੰਦ ਕਰਨਾ ਆਸਾਨ - ਮਲਟੀਸਰਵਿਸ ਲਈ ਰੀਫੈਕਟਰਡ ਆਰਕੀਟੈਕਚਰ ਦੇ ਨਾਲ ਨਵੇਂ ਐਕਸਟਰੈਕਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ ### ਫਿਕਸ - #1440 ਟੁੱਟੇ ਹੋਏ ਵੀਡੀਓ ਜਾਣਕਾਰੀ ਲੇਆਉਟ #1491 ਨੂੰ ਠੀਕ ਕਰੋ - ਇਤਿਹਾਸ ਫਿਕਸ #1497 ਦੇਖੋ - #1495, ਜਿਵੇਂ ਹੀ ਉਪਭੋਗਤਾ ਪਲੇਲਿਸਟ ਤੱਕ ਪਹੁੰਚ ਕਰਦਾ ਹੈ, ਮੈਟਾਡੇਟਾ (ਥੰਬਨੇਲ, ਸਿਰਲੇਖ ਅਤੇ ਵੀਡੀਓ ਗਿਣਤੀ) ਨੂੰ ਅਪਡੇਟ ਕਰਕੇ। - #1475, ਜਦੋਂ ਉਪਭੋਗਤਾ ਵੇਰਵੇ ਦੇ ਟੁਕੜੇ 'ਤੇ ਬਾਹਰੀ ਪਲੇਅਰ 'ਤੇ ਵੀਡੀਓ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਤਾਂ ਡੇਟਾਬੇਸ ਵਿੱਚ ਇੱਕ ਦ੍ਰਿਸ਼ ਨੂੰ ਰਜਿਸਟਰ ਕਰਕੇ। - ਪੌਪਅੱਪ ਮੋਡ ਦੇ ਮਾਮਲੇ ਵਿੱਚ ਕ੍ਰੀਨ ਟਾਈਮਆਊਟ ਫਿਕਸ ਕਰੋ। #1463 (ਸਥਿਰ #640) - ਮੁੱਖ ਵੀਡੀਓ ਪਲੇਅਰ ਫਿਕਸ #1509 - [#1412] ਫਿਕਸਡ ਰੀਪੀਟ ਮੋਡ ਜਿਸ ਨਾਲ ਪਲੇਅਰ ਐਨਪੀਈ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ ਜਦੋਂ ਪਲੇਅਰ ਦੀ ਗਤੀਵਿਧੀ ਬੈਕਗ੍ਰਾਉਂਡ ਵਿੱਚ ਹੁੰਦੀ ਹੈ ਤਾਂ ਨਵਾਂ ਇਰਾਦਾ ਪ੍ਰਾਪਤ ਹੁੰਦਾ ਹੈ। - ਪੌਪਅੱਪ ਲਈ ਫਿਕਸਡ ਮਿਨੀਮਾਈਜ਼ਿੰਗ ਪਲੇਅਰ ਪਲੇਅਰ ਨੂੰ ਨਸ਼ਟ ਨਹੀਂ ਕਰਦਾ ਹੈ ਜਦੋਂ ਪੌਪਅੱਪ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/66.txt b/fastlane/metadata/android/pa/changelogs/66.txt new file mode 100644 index 000000000..aecf80cbc --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/66.txt @@ -0,0 +1 @@ +# v0.13.7 ਦਾ ਚੇਂਜਲਾਗ ### ਸਥਿਰ - v0.13.6 ਦੇ ਕ੍ਰਮਬੱਧ ਫਿਲਟਰ ਮੁੱਦਿਆਂ ਨੂੰ ਠੀਕ ਕਰੋ # v0.13.6 ਦਾ ਚੇਂਜਲਾਗ ### ਸੁਧਾਰ - ਬਰਗਰਮੇਨੂ ਆਈਕਨ ਐਨੀਮੇਸ਼ਨ #1486 ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ - ਡਾਉਨਲੋਡਸ #1472 ਨੂੰ ਮਿਟਾਉਣ ਨੂੰ ਅਨਡੂ ਕਰੋ - ਸ਼ੇਅਰ ਮੀਨੂ #1498 ਵਿੱਚ ਡਾਊਨਲੋਡ ਵਿਕਲਪ - ਲੰਬੇ ਟੈਪ ਮੀਨੂ #1454 ਵਿੱਚ ਸ਼ੇਅਰ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ - ਨਿਕਾਸ #1354 'ਤੇ ਮੁੱਖ ਪਲੇਅਰ ਨੂੰ ਛੋਟਾ ਕਰੋ - ਲਾਇਬ੍ਰੇਰੀ ਸੰਸਕਰਣ ਅਪਡੇਟ ਅਤੇ ਡੇਟਾਬੇਸ ਬੈਕਅਪ ਫਿਕਸ #1510 - ExoPlayer 2.8.2 ਅੱਪਡੇਟ #1392 - ਤੇਜ਼ ਗਤੀ ਤਬਦੀਲੀ ਲਈ ਵੱਖ-ਵੱਖ ਸਟੈਪ ਸਾਈਜ਼ ਦਾ ਸਮਰਥਨ ਕਰਨ ਲਈ ਪਲੇਬੈਕ ਸਪੀਡ ਕੰਟਰੋਲ ਡਾਇਲਾਗ ਨੂੰ ਦੁਬਾਰਾ ਬਣਾਇਆ ਗਿਆ। - ਪਲੇਬੈਕ ਸਪੀਡ ਨਿਯੰਤਰਣ ਵਿੱਚ ਚੁੱਪ ਦੌਰਾਨ ਫਾਸਟ-ਫਾਰਵਰਡ ਕਰਨ ਲਈ ਇੱਕ ਟੌਗਲ ਜੋੜਿਆ ਗਿਆ। ਇਹ ਆਡੀਓਬੁੱਕਾਂ ਅਤੇ ਕੁਝ ਸੰਗੀਤ ਸ਼ੈਲੀਆਂ ਲਈ ਮਦਦਗਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਸੱਚਾ ਸਹਿਜ ਅਨੁਭਵ ਲਿਆ ਸਕਦਾ ਹੈ (ਅਤੇ ਬਹੁਤ ਸਾਰੀਆਂ ਚੁੱਪ =\\ ਨਾਲ ਗੀਤ ਤੋੜ ਸਕਦਾ ਹੈ)। - ਹੱਥੀਂ ਅਜਿਹਾ ਕਰਨ ਦੀ ਬਜਾਏ, ਪਲੇਅਰ ਵਿੱਚ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ ਮੀਡੀਆ ਦੇ ਨਾਲ-ਨਾਲ ਮੈਟਾਡੇਟਾ ਪਾਸ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ ਰੀਫੈਕਟਰਡ ਮੀਡੀਆ ਸਰੋਤ ਰੈਜ਼ੋਲਿਊਸ਼ਨ। ਹੁਣ ਸਾਡੇ ਕੋਲ ਮੈਟਾਡੇਟਾ ਦਾ ਇੱਕ ਸਿੰਗਲ ਸਰੋਤ ਹੈ ਅਤੇ ਪਲੇਬੈਕ ਸ਼ੁਰੂ ਹੋਣ 'ਤੇ ਸਿੱਧਾ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ। - ਸਥਿਰ ਰਿਮੋਟ ਪਲੇਲਿਸਟ ਮੈਟਾਡੇਟਾ ਅੱਪਡੇਟ ਨਹੀਂ ਹੋ ਰਿਹਾ ਹੈ ਜਦੋਂ ਪਲੇਲਿਸਟ ਫਰੈਗਮੈਂਟ ਖੋਲ੍ਹਿਆ ਜਾਂਦਾ ਹੈ ਤਾਂ ਨਵਾਂ ਮੈਟਾਡੇਟਾ ਉਪਲਬਧ ਹੁੰਦਾ ਹੈ। - ਕਈ UI ਫਿਕਸ: #1383, ਬੈਕਗਰਾਊਂਡ ਪਲੇਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਕੰਟਰੋਲ ਹੁਣ ਹਮੇਸ਼ਾ ਸਫੈਦ, ਫਲਿੰਗਿੰਗ ਰਾਹੀਂ ਪੌਪਅੱਪ ਪਲੇਅਰ ਨੂੰ ਬੰਦ ਕਰਨਾ ਆਸਾਨ - ਮਲਟੀਸਰਵਿਸ ਲਈ ਰੀਫੈਕਟਰਡ ਆਰਕੀਟੈਕਚਰ ਦੇ ਨਾਲ ਨਵੇਂ ਐਕਸਟਰੈਕਟਰ ਦੀ ਵਰਤੋਂ ਕਰੋ ### ਫਿਕਸ - #1440 ਟੁੱਟੇ ਹੋਏ ਵੀਡੀਓ ਜਾਣਕਾਰੀ ਲੇਆਉਟ #1491 ਨੂੰ ਠੀਕ ਕਰੋ - ਇਤਿਹਾਸ ਫਿਕਸ #1497 ਦੇਖੋ - #1495, ਜਿਵੇਂ ਹੀ ਉਪਭੋਗਤਾ ਪਲੇਲਿਸਟ ਤੱਕ ਪਹੁੰਚ ਕਰਦਾ ਹੈ, ਮੈਟਾਡੇਟਾ (ਥੰਬਨੇਲ, ਸਿਰਲੇਖ ਅਤੇ ਵੀਡੀਓ ਗਿਣਤੀ) ਨੂੰ ਅਪਡੇਟ ਕਰਕੇ। - #1475, ਜਦੋਂ ਉਪਭੋਗਤਾ ਵੇਰਵੇ ਦੇ ਟੁਕੜੇ 'ਤੇ ਬਾਹਰੀ ਪਲੇਅਰ 'ਤੇ ਵੀਡੀਓ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਤਾਂ ਡੇਟਾਬੇਸ ਵਿੱਚ ਇੱਕ ਦ੍ਰਿਸ਼ ਨੂੰ ਰਜਿਸਟਰ ਕਰਕੇ। - ਪੌਪਅੱਪ ਮੋਡ ਦੇ ਮਾਮਲੇ ਵਿੱਚ ਕ੍ਰੀਨ ਟਾਈਮਆਊਟ ਫਿਕਸ ਕਰੋ। #1463 (ਸਥਿਰ #640) - ਮੁੱਖ ਵੀਡੀਓ ਪਲੇਅਰ ਫਿਕਸ #1509 - [#1412] ਫਿਕਸਡ ਰੀਪੀਟ ਮੋਡ ਜਿਸ ਨਾਲ ਪਲੇਅਰ ਐਨਪੀਈ ਦਾ ਕਾਰਨ ਬਣਦਾ ਹੈ ਜਦੋਂ ਪਲੇਅਰ ਦੀ ਗਤੀਵਿਧੀ ਬੈਕਗ੍ਰਾਉਂਡ ਵਿੱਚ ਹੁੰਦੀ ਹੈ ਤਾਂ ਨਵਾਂ ਇਰਾਦਾ ਪ੍ਰਾਪਤ ਹੁੰਦਾ ਹੈ। - ਪੌਪਅੱਪ ਲਈ ਫਿਕਸਡ ਮਿਨੀਮਾਈਜ਼ਿੰਗ ਪਲੇਅਰ ਪਲੇਅਰ ਨੂੰ ਨਸ਼ਟ ਨਹੀਂ ਕਰਦਾ ਹੈ ਜਦੋਂ ਪੌਪਅੱਪ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/68.txt b/fastlane/metadata/android/pa/changelogs/68.txt new file mode 100644 index 000000000..e8e54ea4f --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/68.txt @@ -0,0 +1 @@ +v0.14.1 ਦੇ # ਬਦਲਾਅ ### ਸਥਿਰ - ਵੀਡੀਓ url #1659 ਨੂੰ ਡੀਕ੍ਰਿਪਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ - ਸਥਿਰ ਵਰਣਨ ਲਿੰਕ #1657 ਨੂੰ ਚੰਗੀ ਤਰ੍ਹਾਂ ਐਕਸਟਰੈਕਟ ਨਹੀਂ ਕਰਦਾ ਹੈ v0.14.0 ਦੀਆਂ # ਤਬਦੀਲੀਆਂ ### ਨਵਾਂ - ਨਵਾਂ ਦਰਾਜ਼ ਡਿਜ਼ਾਈਨ #1461 - ਨਵਾਂ ਅਨੁਕੂਲਿਤ ਫਰੰਟ ਪੇਜ #1461 ### ਸੁਧਾਰ - ਮੁੜ ਕੰਮ ਕੀਤਾ ਸੰਕੇਤ ਨਿਯੰਤਰਣ #1604 - ਪੌਪਅੱਪ ਪਲੇਅਰ #1597 ਨੂੰ ਬੰਦ ਕਰਨ ਦਾ ਨਵਾਂ ਤਰੀਕਾ ### ਸਥਿਰ - ਗਾਹਕੀ ਦੀ ਗਿਣਤੀ ਉਪਲਬਧ ਨਾ ਹੋਣ 'ਤੇ ਗਲਤੀ ਨੂੰ ਠੀਕ ਕਰੋ। #1649 ਬੰਦ ਹੁੰਦਾ ਹੈ। - ਉਹਨਾਂ ਮਾਮਲਿਆਂ ਵਿੱਚ "ਗਾਹਕ ਗਿਣਤੀ ਉਪਲਬਧ ਨਹੀਂ" ਦਿਖਾਓ - YouTube ਪਲੇਲਿਸਟ ਖਾਲੀ ਹੋਣ 'ਤੇ NPE ਨੂੰ ਠੀਕ ਕਰੋ - SoundCloud ਵਿੱਚ ਕਿਓਸਕ ਲਈ ਤੁਰੰਤ ਫਿਕਸ - ਰਿਫੈਕਟਰ ਅਤੇ ਬੱਗਫਿਕਸ #1623 - ਚੱਕਰੀ ਖੋਜ ਨਤੀਜੇ #1562 ਨੂੰ ਠੀਕ ਕਰੋ - ਸੀਕ ਬਾਰ ਨੂੰ ਸਥਿਰ ਤੌਰ 'ਤੇ ਬਾਹਰ ਨਾ ਕੱਢੋ - ਫਿਕਸ YT ਪ੍ਰੀਮੀਅਮ ਵੀਡੀਓ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਬਲੌਕ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ - ਕਈ ਵਾਰ ਲੋਡ ਨਾ ਹੋਣ ਵਾਲੇ ਵੀਡੀਓ ਨੂੰ ਠੀਕ ਕਰੋ (DASH ਪਾਰਸਿੰਗ ਦੇ ਕਾਰਨ) - ਵੀਡੀਓ ਵਰਣਨ ਵਿੱਚ ਲਿੰਕ ਫਿਕਸ ਕਰੋ - ਜਦੋਂ ਕੋਈ ਬਾਹਰੀ sdcard 'ਤੇ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ ਤਾਂ ਚੇਤਾਵਨੀ ਦਿਖਾਓ - ਅਪਵਾਦ ਟਰਿੱਗਰ ਰਿਪੋਰਟ ਦਿਖਾਈ ਗਈ ਕੁਝ ਵੀ ਠੀਕ ਨਾ ਕਰੋ - ਐਂਡਰਾਇਡ 8.1 ਲਈ ਬੈਕਗ੍ਰਾਉਂਡ ਪਲੇਅਰ ਵਿੱਚ ਥੰਬਨੇਲ ਨਹੀਂ ਦਿਖਾਇਆ ਗਿਆ [ਇੱਥੇ ਦੇਖੋ](https://github.com/TeamNewPipe/NewPipe/issues/943) - ਪ੍ਰਸਾਰਣ ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲੇ ਦੀ ਰਜਿਸਟਰੇਸ਼ਨ ਨੂੰ ਠੀਕ ਕਰੋ। #1641 ਬੰਦ ਹੁੰਦਾ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/69.txt b/fastlane/metadata/android/pa/changelogs/69.txt new file mode 100644 index 000000000..b6358991b --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/69.txt @@ -0,0 +1 @@ +### ਨਵਾਂ - ਮਿਟਾਓ ਅਤੇ ਸਬਸਕ੍ਰਿਪਸ਼ਨ #1516 ਵਿੱਚ ਸਾਂਝਾ ਕਰੋ - ਟੈਬਲੇਟ UI ਅਤੇ ਗਰਿੱਡ ਸੂਚੀ ਖਾਕਾ #1617 ### ਸੁਧਾਰ - ਆਖਰੀ ਵਰਤੇ ਗਏ ਆਸਪੈਕਟ ਰੇਸ਼ੋ #1748 ਨੂੰ ਸਟੋਰ ਅਤੇ ਰੀਲੋਡ ਕਰੋ - ਪੂਰੇ ਵੀਡੀਓ ਨਾਮ #1771 ਦੇ ਨਾਲ ਡਾਊਨਲੋਡ ਗਤੀਵਿਧੀ ਵਿੱਚ ਲੀਨੀਅਰ ਲੇਆਉਟ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ - ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਟੈਬ #1516 ਦੇ ਅੰਦਰੋਂ ਸਿੱਧਾ ਗਾਹਕੀਆਂ ਨੂੰ ਮਿਟਾਓ ਅਤੇ ਸਾਂਝਾ ਕਰੋ - ਜੇਕਰ ਪਲੇ ਕਤਾਰ ਪਹਿਲਾਂ ਹੀ #1783 ਖਤਮ ਹੋ ਗਈ ਹੈ ਤਾਂ ਹੁਣ ਏਨਕਿਊ ਕਰਨਾ ਵੀਡੀਓ ਚਲਾਉਣ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ - ਵਾਲੀਅਮ ਅਤੇ ਚਮਕ ਸੰਕੇਤ #1644 ਲਈ ਵੱਖਰੀ ਸੈਟਿੰਗ - ਸਥਾਨਕਕਰਨ #1792 ਲਈ ਸਮਰਥਨ ਸ਼ਾਮਲ ਕਰੋ ### ਫਿਕਸ - ਲਈ ਪਾਰਸਿੰਗ ਸਮਾਂ ਫਿਕਸ ਕਰੋ। ਫਾਰਮੈਟ, ਇਸ ਲਈ ਨਿਊ ਪਾਈਪ ਨੂੰ ਫਿਨਲੈਂਡ ਵਿੱਚ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ - ਗਾਹਕੀ ਦੀ ਗਿਣਤੀ ਨੂੰ ਠੀਕ ਕਰੋ - API 28+ ਡਿਵਾਈਸਾਂ #1830 ਲਈ ਫੋਰਗਰਾਉਂਡ ਸੇਵਾ ਅਨੁਮਤੀ ਸ਼ਾਮਲ ਕਰੋ ### ਜਾਣੇ-ਪਛਾਣੇ ਬੱਗ - ਐਂਡ੍ਰਾਇਡ ਪੀ 'ਤੇ ਪਲੇਬੈਕ ਸਟੇਟ ਨੂੰ ਸੇਵ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ diff --git a/fastlane/metadata/android/pa/changelogs/70.txt b/fastlane/metadata/android/pa/changelogs/70.txt new file mode 100644 index 000000000..97d781d4a --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/70.txt @@ -0,0 +1 @@ +ਧਿਆਨ ਦਿਓ: ਇਹ ਸੰਸਕਰਣ ਸ਼ਾਇਦ ਇੱਕ ਬੱਗਫੈਸਟ ਹੈ, ਬਿਲਕੁਲ ਪਿਛਲੇ ਇੱਕ ਵਾਂਗ। ਹਾਲਾਂਕਿ 17 ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬੰਦ ਹੋਣ ਦੇ ਕਾਰਨ. ਇੱਕ ਟੁੱਟਿਆ ਹੋਇਆ ਸੰਸਕਰਣ ਕੋਈ ਸੰਸਕਰਣ ਨਾਲੋਂ ਬਿਹਤਰ ਹੈ. ਸਹੀ? ¯\_(ツ)_/¯ ### ਸੁਧਾਰ * ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਨੂੰ ਹੁਣ ਇੱਕ ਕਲਿੱਕ ਨਾਲ ਖੋਲ੍ਹਿਆ ਜਾ ਸਕਦਾ ਹੈ #1879 * ਐਂਡਰਾਇਡ 4.1 - 4.3 #1884 ਲਈ ਸਹਾਇਤਾ ਛੱਡੋ * ਪੁਰਾਣੇ ਪਲੇਅਰ #1884 ਨੂੰ ਹਟਾਓ * ਮੌਜੂਦਾ ਪਲੇ ਕਤਾਰ ਤੋਂ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਸੱਜੇ #1915 'ਤੇ ਸਵਾਈਪ ਕਰਕੇ ਹਟਾਓ * ਆਟੋ ਕਤਾਰਬੱਧ ਸਟ੍ਰੀਮ ਨੂੰ ਹਟਾਓ ਜਦੋਂ ਇੱਕ ਨਵੀਂ ਸਟ੍ਰੀਮ ਹੱਥੀਂ ਕਤਾਰਬੱਧ ਹੁੰਦੀ ਹੈ #1878 * @kapodamy ਦੁਆਰਾ ਡਾਉਨਲੋਡ ਕਰਨ ਅਤੇ ਗੁੰਮ ਹੋਈਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ #1759 ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਪੋਸਟ ਪ੍ਰੋਸੈਸਿੰਗ * ਪੋਸਟ-ਪ੍ਰੋਸੈਸਿੰਗ ਬੁਨਿਆਦੀ ਢਾਂਚਾ * "ਬੁਨਿਆਦੀ ਢਾਂਚੇ" ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਸਹੀ ਤਰੁੱਟੀ (ਡਾਊਨਲੋਡਰ ਲਈ) * ਮਲਟੀਪਲ ਡਾਉਨਲੋਡਸ ਦੀ ਬਜਾਏ ਕਤਾਰ * ਲੜੀਬੱਧ ਲੰਬਿਤ ਡਾਉਨਲੋਡਸ (`ਗੀਗਾ` ਫਾਈਲਾਂ) ਨੂੰ ਐਪ ਡੇਟਾ ਵਿੱਚ ਮੂਵ ਕਰੋ * ਅਧਿਕਤਮ ਡਾਊਨਲੋਡ ਦੀ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਨੂੰ ਲਾਗੂ ਕਰੋ * ਉਚਿਤ ਮਲਟੀ-ਥ੍ਰੈਡ ਡਾਊਨਲੋਡ ਵਿਰਾਮ * ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ 'ਤੇ ਜਾਣ ਵੇਲੇ ਡਾਊਨਲੋਡ ਬੰਦ ਕਰੋ (ਕਦੇ ਕੰਮ ਨਹੀਂ ਕਰਦਾ, ਦੂਜਾ ਪੁਆਇੰਟ ਦੇਖੋ) * ਅਗਲੇ ਡਾਉਨਲੋਡਸ ਲਈ ਥਰਿੱਡ ਗਿਣਤੀ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ * ਬਹੁਤ ਸਾਰੀਆਂ ਅਸੰਗਤੀਆਂ ਹੱਲ ਕੀਤੀਆਂ ਗਈਆਂ ### ਸਥਿਰ * ਪੂਰਵ-ਨਿਰਧਾਰਤ ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਨਾਲ ਕਰੈਸ਼ ਨੂੰ ਬਿਹਤਰ ਅਤੇ ਸੀਮਤ ਮੋਬਾਈਲ ਡਾਟਾ ਰੈਜ਼ੋਲਿਊਸ਼ਨ #1835 'ਤੇ ਸੈੱਟ ਕਰੋ * ਪੌਪ-ਅੱਪ ਪਲੇਅਰ ਕਰੈਸ਼ ਫਿਕਸਡ #1874 * ਬੈਕਗਰਾਊਂਡ ਪਲੇਅਰ #1901 ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ NPE * ਜਦੋਂ ਆਟੋ ਕਤਾਰ ਯੋਗ ਹੁੰਦੀ ਹੈ ਤਾਂ ਨਵੀਆਂ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਸੰਮਿਲਿਤ ਕਰਨ ਲਈ ਠੀਕ ਕਰੋ #1878 * ਡੀਸਾਈਪਰਿੰਗ ਸ਼ੱਟਟਾਊਨ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕੀਤਾ ਗਿਆ diff --git a/fastlane/metadata/android/pa/changelogs/71.txt b/fastlane/metadata/android/pa/changelogs/71.txt new file mode 100644 index 000000000..bafa26f8c --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/71.txt @@ -0,0 +1 @@ +### ਸੁਧਾਰ * GitHub ਬਿਲਡ ਲਈ ਐਪ ਅਪਡੇਟ ਨੋਟੀਫਿਕੇਸ਼ਨ ਸ਼ਾਮਲ ਕਰੋ (@krtkush ਦੁਆਰਾ #1608) * ਡਾਊਨਲੋਡਰ ਵਿੱਚ ਕਈ ਸੁਧਾਰ (@kapodamy ਦੁਆਰਾ #1944): * ਗੁੰਮ ਹੋਏ ਚਿੱਟੇ ਆਈਕਨ ਸ਼ਾਮਲ ਕਰੋ ਅਤੇ ਆਈਕਨ ਦੇ ਰੰਗਾਂ ਨੂੰ ਬਦਲਣ ਲਈ ਹਾਰਡਕੋਰਡ ਤਰੀਕੇ ਦੀ ਵਰਤੋਂ ਕਰੋ * ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਇਟਰੇਟਰ ਸ਼ੁਰੂ ਕੀਤਾ ਗਿਆ ਹੈ (ਫਿਕਸ #2031) * ਨਵੇਂ ਮੁਕਸਰ ਵਿੱਚ "ਪੋਸਟ-ਪ੍ਰੋਸੈਸਿੰਗ ਫੇਲ੍ਹ" ਗਲਤੀ ਦੇ ਨਾਲ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ * ਨਵਾਂ MPEG-4 ਮੁਕਸਰ ਫਿਕਸਿੰਗ ਗੈਰ-ਸਿੰਕਰੋਨਸ ਵੀਡੀਓ ਅਤੇ ਆਡੀਓ ਸਟ੍ਰੀਮਜ਼ (#2039) ### ਸਥਿਰ * YouTube ਲਾਈਵ ਸਟ੍ਰੀਮਾਂ ਥੋੜ੍ਹੇ ਸਮੇਂ ਬਾਅਦ ਚੱਲਣੀਆਂ ਬੰਦ ਹੋ ਜਾਂਦੀਆਂ ਹਨ (@yausername ਦੁਆਰਾ #1996) diff --git a/fastlane/metadata/android/pa/changelogs/730.txt b/fastlane/metadata/android/pa/changelogs/730.txt new file mode 100644 index 000000000..56f5a7d32 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/730.txt @@ -0,0 +1,2 @@ +# ਠੀਕ ਕੀਤਾ +- ਹੌਟ ਫਿਕਸ ਦੁਬਾਰਾ ਗਲਤ ਹੋਇਆ ਡੀਕ੍ਰਿਪਟ ਫੰਕਸ਼ਨ ਠੀਕ । diff --git a/fastlane/metadata/android/pa/changelogs/740.txt b/fastlane/metadata/android/pa/changelogs/740.txt new file mode 100644 index 000000000..6a2dbdc86 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/740.txt @@ -0,0 +1 @@ +ਬਦਲਾਅ ਸੂਚੀ ਅਨੁਵਾਦ ਕਰਣਯੋਗ ਨਹੀਂ। ਬਿਲਕੁਲ ਬਕਵਾਸ diff --git a/fastlane/metadata/android/pa/changelogs/750.txt b/fastlane/metadata/android/pa/changelogs/750.txt new file mode 100644 index 000000000..0b875b705 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/750.txt @@ -0,0 +1 @@ +ਨਵਾਂ ਪਲੇਬੈਕ ਰੈਜ਼ਿਊਮੇ #2288 • ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ ਜਿੱਥੇ ਤੁਸੀਂ ਪਿਛਲੀ ਵਾਰ ਰੁਕੇ ਸੀ ਡਾਊਨਲੋਡਰ ਸੁਧਾਰ #2149 • ਬਾਹਰੀ SD-ਕਾਰਡਾਂ 'ਤੇ ਡਾਊਨਲੋਡ ਸਟੋਰ ਕਰਨ ਲਈ ਸਟੋਰੇਜ਼ ਐਕਸੈਸ ਫਰੇਮਵਰਕ ਦੀ ਵਰਤੋਂ ਕਰੋ • ਨਵਾਂ mp4 muxer • ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਵਿਕਲਪਿਕ ਤੌਰ 'ਤੇ ਡਾਉਨਲੋਡ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਬਦਲੋ • ਮੀਟਰਡ ਨੈੱਟਵਰਕਾਂ ਦਾ ਆਦਰ ਕਰੋ ਸੁਧਾਰ • gema ਸਤਰ #2295 ਨੂੰ ਹਟਾਇਆ • ਗਤੀਵਿਧੀ ਜੀਵਨ ਚੱਕਰ #2444 ਦੌਰਾਨ ਹੈਂਡਲ (ਆਟੋ) ਰੋਟੇਸ਼ਨ ਤਬਦੀਲੀਆਂ • ਲੰਬੇ-ਦਬਾਓ ਮੀਨੂ ਨੂੰ ਇਕਸਾਰ #2368 ਬਣਾਓ ਸਥਿਰ • ਫਿਕਸਡ ਚੁਣਿਆ ਹੋਇਆ ਉਪਸਿਰਲੇਖ ਟਰੈਕ ਨਾਮ #2394 ਨਹੀਂ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ • ਐਪ ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਅਸਫਲ ਹੋਣ 'ਤੇ ਕ੍ਰੈਸ਼ ਨਾ ਹੋਵੋ (GitHub ਸੰਸਕਰਣ) #2423 • ਸਥਿਰ ਡਾਊਨਲੋਡ 99.9% #2440 'ਤੇ ਅਟਕ ਗਏ • ਪਲੇ ਕਤਾਰ ਮੈਟਾਡੇਟਾ #2453 ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ • [SoundCloud] ਪਲੇਲਿਸਟਸ ਲੋਡ ਕਰਨ ਵੇਲੇ ਸਥਿਰ ਕਰੈਸ਼ TeamNewPipe/NewPipeExtractor#170 • [YouTube] ਸਥਿਰ ਅਵਧੀ ਨੂੰ ਪਾਰਸਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pa/changelogs/760.txt b/fastlane/metadata/android/pa/changelogs/760.txt new file mode 100644 index 000000000..fd4b8f2a4 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/760.txt @@ -0,0 +1 @@ +0.17.1 ਵਿੱਚ ਬਦਲਾਅ ਨਵਾਂ • ਥਾਈ ਸਥਾਨਕਕਰਨ ਸੁਧਾਰ • ਦੁਬਾਰਾ #2518 ਪਲੇਲਿਸਟਾਂ ਲਈ ਲੰਬੇ-ਦਬਾਓ ਮੀਨੂ ਵਿੱਚ ਇੱਥੇ ਪਲੇ ਸ਼ੁਰੂ ਕਰੋ ਐਕਸ਼ਨ ਸ਼ਾਮਲ ਕਰੋ • SAF / ਪੁਰਾਤਨ ਫਾਈਲ ਪਿਕਰ #2521 ਲਈ ਸਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ ਸਥਿਰ • ਐਪਸ #2487 ਨੂੰ ਬਦਲਦੇ ਸਮੇਂ ਡਾਊਨਲੋਡ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਗਾਇਬ ਹੋਣ ਵਾਲੇ ਬਟਨਾਂ ਨੂੰ ਠੀਕ ਕਰੋ • ਫਿਕਸ ਪਲੇਬੈਕ ਸਥਿਤੀ ਸਟੋਰ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਹਾਲਾਂਕਿ ਦੇਖਣ ਦਾ ਇਤਿਹਾਸ ਅਯੋਗ ਹੈ • ਸੂਚੀ ਦ੍ਰਿਸ਼ #2517 ਵਿੱਚ ਪਲੇਬੈਕ ਸਥਿਤੀ ਦੇ ਕਾਰਨ ਘਟੇ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਠੀਕ ਕਰੋ • [ਐਕਸਟ੍ਰੈਕਟਰ] ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 ਫਿਕਸ • [ਐਕਸਟ੍ਰੈਕਟਰ] [YouTube] ਜਦੋਂ ਪਲੇਲਿਸਟਾਂ ਨਤੀਜੇ ਵਿੱਚ ਹੋਣ ਤਾਂ ਆਮ ਖੋਜ ਗਲਤੀ ਨੂੰ ਠੀਕ ਕਰੋ TeamNewPipe/NewPipeExtractor#185 0.17.0 ਵਿੱਚ ਬਦਲਾਅ ਨਵਾਂ ਪਲੇਬੈਕ ਰੈਜ਼ਿਊਮੇ #2288 • ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ ਜਿੱਥੇ ਤੁਸੀਂ ਪਿਛਲੀ ਵਾਰ ਰੁਕੇ ਸੀ ਡਾਊਨਲੋਡਰ ਸੁਧਾਰ #2149 • ਬਾਹਰੀ SD-ਕਾਰਡਾਂ 'ਤੇ ਡਾਊਨਲੋਡ ਸਟੋਰ ਕਰਨ ਲਈ ਸਟੋਰੇਜ਼ ਐਕਸੈਸ ਫਰੇਮਵਰਕ ਦੀ ਵਰਤੋਂ ਕਰੋ • ਨਵਾਂ mp4 muxer • ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਵਿਕਲਪਿਕ ਤੌਰ 'ਤੇ ਡਾਉਨਲੋਡ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਬਦਲੋ • ਮੀਟਰਡ ਨੈੱਟਵਰਕਾਂ ਦਾ ਆਦਰ ਕਰੋ ਸੁਧਾਰ • gema ਸਤਰ #2295 ਨੂੰ ਹਟਾਇਆ • ਗਤੀਵਿਧੀ ਜੀਵਨ ਚੱਕਰ #2444 ਦੌਰਾਨ ਹੈਂਡਲ (ਆਟੋ) ਰੋਟੇਸ਼ਨ ਤਬਦੀਲੀਆਂ • ਲੰਬੇ-ਦਬਾਓ ਮੀਨੂ ਨੂੰ ਇਕਸਾਰ #2368 ਬਣਾਓ ਸਥਿਰ • ਫਿਕਸਡ ਚੁਣਿਆ ਹੋਇਆ ਉਪਸਿਰਲੇਖ ਟਰੈਕ ਨਾਮ #2394 ਨਹੀਂ ਦਿਖਾਇਆ ਜਾ ਰਿਹਾ ਹੈ • ਐਪ ਅੱਪਡੇਟ ਦੀ ਜਾਂਚ ਅਸਫਲ ਹੋਣ 'ਤੇ ਕ੍ਰੈਸ਼ ਨਾ ਹੋਵੋ (GitHub ਸੰਸਕਰਣ) #2423 • ਸਥਿਰ ਡਾਊਨਲੋਡ 99.9% #2440 'ਤੇ ਅਟਕ ਗਏ • ਪਲੇ ਕਤਾਰ ਮੈਟਾਡੇਟਾ #2453 ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ • [SoundCloud] ਪਲੇਲਿਸਟਸ ਲੋਡ ਕਰਨ ਵੇਲੇ ਸਥਿਰ ਕਰੈਸ਼ TeamNewPipe/NewPipeExtractor#170 • [YouTube] ਸਥਿਰ ਅਵਧੀ ਨੂੰ ਪਾਰਸਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pa/changelogs/770.txt b/fastlane/metadata/android/pa/changelogs/770.txt new file mode 100644 index 000000000..03903c011 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/770.txt @@ -0,0 +1,4 @@ +0.17.2 ਵਿੱਚ ਬਦਲਾਅ + +ਠੀਕ ਕਰੋ +• ਫਿਕਸ ਕੋਈ ਵੀ ਵੀਡੀਓ ਉਪਲਬਧ ਨਹੀਂ ਸੀ diff --git a/fastlane/metadata/android/pa/changelogs/780.txt b/fastlane/metadata/android/pa/changelogs/780.txt new file mode 100644 index 000000000..999a24468 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/780.txt @@ -0,0 +1 @@ +0.17.3 ਵਿੱਚ ਬਦਲਾਅ ਸੁਧਾਰ • ਪਲੇਬੈਕ ਸਥਿਤੀਆਂ #2550 ਨੂੰ ਸਾਫ਼ ਕਰਨ ਲਈ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ • ਫਾਈਲ ਪਿਕਰ #2591 ਵਿੱਚ ਲੁਕੀਆਂ ਹੋਈਆਂ ਡਾਇਰੈਕਟਰੀਆਂ ਦਿਖਾਓ • NewPipe #2488 ਨਾਲ ਖੋਲ੍ਹੇ ਜਾਣ ਵਾਲੇ `invidio.us` ਉਦਾਹਰਨਾਂ ਤੋਂ ਸਮਰਥਨ URL • `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 ਲਈ ਸਮਰਥਨ ਸ਼ਾਮਲ ਕਰੋ ਸਥਿਰ • [YouTube] ਸਥਿਰ 'java.lang.IllegalArgumentException #192 • [YouTube] ਸਥਿਰ ਲਾਈਵ ਸਟ੍ਰੀਮਾਂ ਕੰਮ ਨਹੀਂ ਕਰ ਰਹੀਆਂ TeamNewPipe/NewPipeExtractor#195 • ਇੱਕ ਸਟ੍ਰੀਮ #2592 ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਵੇਲੇ ਐਂਡਰੌਇਡ ਪਾਈ ਵਿੱਚ ਸਥਿਰ ਪ੍ਰਦਰਸ਼ਨ ਸਮੱਸਿਆ diff --git a/fastlane/metadata/android/pa/changelogs/790.txt b/fastlane/metadata/android/pa/changelogs/790.txt new file mode 100644 index 000000000..f841801eb --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/790.txt @@ -0,0 +1 @@ +ਸੁਧਾਰ • ਅੰਨ੍ਹੇ ਲੋਕਾਂ #2655 ਲਈ ਪਹੁੰਚਯੋਗਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਹੋਰ ਸਿਰਲੇਖ ਸ਼ਾਮਲ ਕਰੋ • ਡਾਉਨਲੋਡ ਫੋਲਡਰ ਸੈਟਿੰਗ ਦੀ ਭਾਸ਼ਾ ਨੂੰ ਵਧੇਰੇ ਇਕਸਾਰ ਅਤੇ ਘੱਟ ਅਸਪਸ਼ਟ #2637 ਬਣਾਓ ਸਥਿਰ • ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਬਲਾਕ ਵਿੱਚ ਆਖਰੀ ਬਾਈਟ #2646 ਡਾਊਨਲੋਡ ਕੀਤੀ ਗਈ ਹੈ • ਵੀਡੀਓ ਡਿਟੇਲ ਫਰੈਗਮੈਂਟ #2672 ਵਿੱਚ ਸਥਿਰ ਸਕ੍ਰੋਲਿੰਗ • ਡਬਲ ਸਰਚ ਕਲੀਅਰ ਬਾਕਸ ਐਨੀਮੇਸ਼ਨ ਨੂੰ ਇੱਕ #2695 ਵਿੱਚ ਹਟਾਓ • [SoundCloud] ਕਲਾਇਟ_ਆਈਡੀ ਐਕਸਟਰੈਕਸ਼ਨ #2745 ਨੂੰ ਠੀਕ ਕਰੋ ਵਿਕਾਸ • NewPipeExtractor ਤੋਂ ਵਿਰਾਸਤ ਵਿੱਚ ਮਿਲੀ ਗੁੰਮ ਨਿਰਭਰਤਾ ਨੂੰ NewPipe #2535 ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ • AndroidX #2685 'ਤੇ ਮਾਈਗ੍ਰੇਟ ਕਰੋ • ExoPlayer 2.10.6 #2697, #2736 ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/800.txt b/fastlane/metadata/android/pa/changelogs/800.txt new file mode 100644 index 000000000..53868c894 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/800.txt @@ -0,0 +1 @@ +ਨਵਾਂ • P2P (#2201) [ਬੀਟਾ] ਤੋਂ ਬਿਨਾਂ PeerTube ਸਮਰਥਨ: ◦ PeerTube ਉਦਾਹਰਨਾਂ ਤੋਂ ਵੀਡੀਓ ਦੇਖੋ ਅਤੇ ਡਾਊਨਲੋਡ ਕਰੋ ◦ ਪੂਰੀ PeerTube ਸੰਸਾਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਲਈ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਉਦਾਹਰਨਾਂ ਸ਼ਾਮਲ ਕਰੋ ◦ Android 4.4 ਅਤੇ 7.1 'ਤੇ SSL ਹੈਂਡਸ਼ੇਕ ਨਾਲ ਸਮੱਸਿਆਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ ਜਦੋਂ ਕੁਝ ਖਾਸ ਮੌਕਿਆਂ 'ਤੇ ਪਹੁੰਚ ਕਰਦੇ ਸਮੇਂ ਨੈੱਟਵਰਕ ਗੜਬੜ ਹੋ ਜਾਂਦੀ ਹੈ। • ਡਾਊਨਲੋਡਰ (#2679): ◦ ਡਾਊਨਲੋਡ ETA ਦੀ ਗਣਨਾ ਕਰੋ ◦ ਓਪਸ (ਵੈਬ ਫਾਈਲਾਂ) ਨੂੰ ogg ਵਜੋਂ ਡਾਊਨਲੋਡ ਕਰੋ ◦ ਲੰਬੇ ਵਿਰਾਮ ਤੋਂ ਬਾਅਦ ਡਾਊਨਲੋਡ ਮੁੜ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਮਿਆਦ ਪੁੱਗ ਚੁੱਕੇ ਡਾਊਨਲੋਡ ਲਿੰਕਾਂ ਨੂੰ ਮੁੜ-ਹਾਸਲ ਕਰੋ ਸੁਧਾਰ • ਕਿਓਸਕਫ੍ਰੈਗਮੈਂਟ ਨੂੰ ਤਰਜੀਹੀ ਸਮਗਰੀ ਵਾਲੇ ਦੇਸ਼ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਤੋਂ ਜਾਣੂ ਕਰਵਾਓ ਅਤੇ ਸਾਰੀਆਂ ਮੁੱਖ ਟੈਬਾਂ #2742 ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ। • ਐਕਸਟਰੈਕਟਰ #2713 ਤੋਂ ਨਵੇਂ ਸਥਾਨਕਕਰਨ ਅਤੇ ਡਾਉਨਲੋਡਰ ਲਾਗੂਕਰਨ ਦੀ ਵਰਤੋਂ ਕਰੋ • "ਡਿਫੌਲਟ ਕਿਓਸਕ" ਸਤਰ ਨੂੰ ਅਨੁਵਾਦਯੋਗ ਬਣਾਓ • ਬਲੈਕ ਥੀਮ #2569 ਲਈ ਬਲੈਕ ਨੈਵੀਗੇਸ਼ਨ ਪੱਟੀ ਸਥਿਰ • ਇੱਕ ਬੱਗ ਫਿਕਸ ਕੀਤਾ ਗਿਆ ਹੈ ਜੋ ਪੌਪਅੱਪ ਪਲੇਅਰ ਨੂੰ ਹਿਲਾ ਨਹੀਂ ਸਕਦਾ ਸੀ ਜੇਕਰ ਪੌਪਅੱਪ ਪਲੇਅਰ #2772 ਨੂੰ ਹਿਲਾਉਂਦੇ ਸਮੇਂ ਕੋਈ ਹੋਰ ਉਂਗਲ ਰੱਖੀ ਜਾਂਦੀ ਹੈ • ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਅਪਲੋਡਰ ਦੀ ਗੁੰਮਸ਼ੁਦਗੀ ਦੀ ਆਗਿਆ ਦਿਓ ਅਤੇ ਇਸ ਸਮੱਸਿਆ ਨਾਲ ਸਬੰਧਤ ਕ੍ਰੈਸ਼ਾਂ ਨੂੰ ਠੀਕ ਕਰੋ #2724, TeamNewPipe/NewPipeExtractor#219 • MediaCCC ਅਤੇ ਕੁਝ PeerTube ਉਦਾਹਰਨਾਂ #2792 ਨਾਲ TLS ਹੈਂਡਸ਼ੇਕ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ Android 4.4 ਡਿਵਾਈਸਾਂ (API 19/KitKat) 'ਤੇ TLS1.1/1.2 ਨੂੰ ਸਮਰੱਥ ਕਰਨਾ • [SoundCloud] ਫਿਕਸਡ ਕਲਾਈਂਟ_ਆਈਡੀ ਐਕਸਟ੍ਰੈਕਸ਼ਨ TeamNewPipe/NewPipeExtractor#217 • [SoundCloud] ਆਡੀਓ ਸਟ੍ਰੀਮ ਕੱਢਣ ਨੂੰ ਠੀਕ ਕਰੋ ਵਿਕਾਸ • ExoPlayer ਨੂੰ 2.10.8 #2791, #2816 'ਤੇ ਅੱਪਡੇਟ ਕਰੋ • Gradle ਨੂੰ 3.5.1 ਵਿੱਚ ਅੱਪਡੇਟ ਕਰੋ ਅਤੇ Kotlin ਸਹਿਯੋਗ #2714 ਸ਼ਾਮਲ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/810.txt b/fastlane/metadata/android/pa/changelogs/810.txt new file mode 100644 index 000000000..96a2b9da5 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/810.txt @@ -0,0 +1 @@ +ਨਵਾਂ • ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਦੇ ਸਮੇਂ ਲੌਕ ਸਕ੍ਰੀਨ 'ਤੇ ਵੀਡੀਓ ਥੰਬਨੇਲ ਦਿਖਾਓ ਸੁਧਾਰ • ਬੈਕਗ੍ਰਾਉਂਡ / ਪੌਪਅੱਪ ਬਟਨ 'ਤੇ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ 'ਤੇ ਕਤਾਰ ਵਿੱਚ ਸਥਾਨਕ ਪਲੇਲਿਸਟ ਸ਼ਾਮਲ ਕਰੋ • ਮੁੱਖ ਪੰਨਾ ਟੈਬਾਂ ਨੂੰ ਸਕ੍ਰੋਲ ਕਰਨ ਯੋਗ ਬਣਾਓ ਅਤੇ ਸਿਰਫ਼ ਇੱਕ ਟੈਬ ਹੋਣ 'ਤੇ ਲੁਕਾਓ • ਬੈਕਗ੍ਰਾਉਂਡ ਪਲੇਅਰ ਵਿੱਚ ਸੂਚਨਾ ਥੰਬਨੇਲ ਅੱਪਡੇਟ ਦੀ ਸੀਮਾ ਮਾਤਰਾ • ਖਾਲੀ ਸਥਾਨਕ ਪਲੇਲਿਸਟਾਂ ਲਈ ਡਮੀ ਥੰਬਨੇਲ ਸ਼ਾਮਲ ਕਰੋ • *.webm ਦੀ ਬਜਾਏ *.opus ਫਾਈਲ ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰੋ ਅਤੇ ਡਾਊਨਲੋਡ ਡ੍ਰੌਪਡਾਉਨ ਵਿੱਚ "WebM Opus" ਦੀ ਬਜਾਏ ਫਾਰਮੈਟ ਲੇਬਲ ਵਿੱਚ "opus" ਦਿਖਾਓ • "ਡਾਊਨਲੋਡ" ਵਿੱਚ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਜਾਂ ਡਾਊਨਲੋਡ ਇਤਿਹਾਸ ਨੂੰ ਮਿਟਾਉਣ ਲਈ ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ • [YouTube] /c/shortened_url ਚੈਨਲ ਲਿੰਕਾਂ ਲਈ ਸਮਰਥਨ ਸ਼ਾਮਲ ਕਰੋ ਸਥਿਰ • NewPipe ਨਾਲ ਵੀਡੀਓ ਸਾਂਝਾ ਕਰਨ ਅਤੇ ਇਸ ਦੀਆਂ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਸਿੱਧੇ ਡਾਊਨਲੋਡ ਕਰਨ ਵੇਲੇ ਕਈ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕੀਤਾ ਗਿਆ • ਇਸ ਦੇ ਸਿਰਜਣ ਥ੍ਰੈਡ ਤੋਂ ਬਾਹਰ ਸਥਿਰ ਪਲੇਅਰ ਪਹੁੰਚ • ਸਥਿਰ ਖੋਜ ਨਤੀਜੇ ਪੇਜਿੰਗ • [YouTube] ਨਿਸ਼ਚਤ ਸਵਿਚਿੰਗ ਚਾਲੂ ਕਰਨ ਨਾਲ NPE ਹੁੰਦਾ ਹੈ • [YouTube] ਇੱਕ invidio.us url ਖੋਲ੍ਹਣ ਵੇਲੇ ਟਿੱਪਣੀਆਂ ਦੇਖਣ ਲਈ ਸਥਿਰ • [SoundCloud] ਅੱਪਡੇਟ ਕੀਤਾ client_id diff --git a/fastlane/metadata/android/pa/changelogs/820.txt b/fastlane/metadata/android/pa/changelogs/820.txt new file mode 100644 index 000000000..aa3554698 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/820.txt @@ -0,0 +1 @@ +ਸਥਿਰ ਡੀਕ੍ਰਿਪਟ ਫੰਕਸ਼ਨ ਨਾਮ regex YouTube ਨੂੰ ਵਰਤੋਂਯੋਗ ਨਹੀਂ ਬਣਾਉਂਦਾ। diff --git a/fastlane/metadata/android/pa/changelogs/830.txt b/fastlane/metadata/android/pa/changelogs/830.txt new file mode 100644 index 000000000..6bd990808 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/830.txt @@ -0,0 +1 @@ +SoundCloud ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ SoundCloud client_id ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ। diff --git a/fastlane/metadata/android/pa/changelogs/840.txt b/fastlane/metadata/android/pa/changelogs/840.txt new file mode 100644 index 000000000..745098496 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/840.txt @@ -0,0 +1 @@ +ਨਵਾਂ • ਐਪ ਦੀ ਭਾਸ਼ਾ ਬਦਲਣ ਲਈ ਭਾਸ਼ਾ ਚੋਣਕਾਰ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ • ਪਲੇਅਰ ਸਮੇਟਣਯੋਗ ਮੀਨੂ ਵਿੱਚ ਕੋਡੀ ਬਟਨ 'ਤੇ ਭੇਜੋ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ • ਲੰਬੀ ਪ੍ਰੈਸ 'ਤੇ ਟਿੱਪਣੀਆਂ ਨੂੰ ਕਾਪੀ ਕਰਨ ਦੀ ਸਮਰੱਥਾ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ ਹੈ ਸੁਧਾਰ • ਰੀਕੈਪਚਾ ਗਤੀਵਿਧੀ ਨੂੰ ਠੀਕ ਕਰੋ ਅਤੇ ਪ੍ਰਾਪਤ ਕੀਤੀਆਂ ਕੂਕੀਜ਼ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸੁਰੱਖਿਅਤ ਕਰੋ • ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਦੇਖਣ ਦਾ ਇਤਿਹਾਸ ਚਾਲੂ ਨਾ ਹੋਣ 'ਤੇ ਦਰਾਜ਼ ਦੇ ਹੱਕ ਵਿੱਚ ਡਾਟ-ਮੀਨੂ ਨੂੰ ਹਟਾਇਆ ਗਿਆ ਅਤੇ ਇਤਿਹਾਸ ਨੂੰ ਲੁਕਾਓ ਬਟਨ • Android 6 ਅਤੇ ਬਾਅਦ ਵਾਲੇ 'ਤੇ ਸਹੀ ਢੰਗ ਨਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਹੋਰ ਐਪਾਂ ਦੀ ਇਜਾਜ਼ਤ ਦੇ ਉੱਪਰ ਡਿਸਪਲੇ ਲਈ ਪੁੱਛੋ • BookmarkFragment ਵਿੱਚ ਲੰਮਾ-ਕਲਿੱਕ ਕਰਕੇ ਸਥਾਨਕ ਪਲੇਲਿਸਟ ਦਾ ਨਾਮ ਬਦਲੋ • ਕਈ PeerTube ਸੁਧਾਰ • ਕਈ ਅੰਗਰੇਜ਼ੀ ਸਰੋਤ ਸਤਰਾਂ ਨੂੰ ਸੁਧਾਰਿਆ ਗਿਆ ਹੈ ਸਥਿਰ • ਫਿਕਸਡ ਪਲੇਅਰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਹੋ ਰਿਹਾ ਹੈ ਹਾਲਾਂਕਿ ਇਹ ਉਦੋਂ ਰੋਕਿਆ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਵਿਕਲਪ "ਐਪ ਸਵਿੱਚ 'ਤੇ ਛੋਟਾ ਕਰੋ" ਯੋਗ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਨਿਊ ਪਾਈਪ ਨੂੰ ਛੋਟਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ • ਸੰਕੇਤ ਲਈ ਸ਼ੁਰੂਆਤੀ ਚਮਕ ਮੁੱਲ ਨੂੰ ਠੀਕ ਕਰੋ • ਸਥਿਰ .srt ਉਪਸਿਰਲੇਖ ਡਾਉਨਲੋਡ ਜਿਸ ਵਿੱਚ ਸਾਰੇ ਲਾਈਨ ਬ੍ਰੇਕ ਨਹੀਂ ਹਨ • SD ਕਾਰਡ 'ਤੇ ਸਥਿਰ ਡਾਊਨਲੋਡ ਅਸਫਲ ਹੋ ਰਿਹਾ ਹੈ ਕਿਉਂਕਿ ਕੁਝ Android 5 ਡਿਵਾਈਸਾਂ CTF ਅਨੁਕੂਲ ਨਹੀਂ ਹਨ • Android KitKat 'ਤੇ ਸਥਿਰ ਡਾਊਨਲੋਡਿੰਗ • ਸਥਿਰ ਭ੍ਰਿਸ਼ਟ ਵੀਡੀਓ .mp4 ਫਾਈਲ ਨੂੰ ਆਡੀਓ ਫਾਈਲ ਵਜੋਂ ਮਾਨਤਾ ਦਿੱਤੀ ਜਾ ਰਹੀ ਹੈ • ਗਲਤ ਚੀਨੀ ਭਾਸ਼ਾ ਕੋਡ ਸਮੇਤ, ਮਲਟੀਪਲ ਸਥਾਨੀਕਰਨ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕੀਤਾ ਗਿਆ ਹੈ • [YouTube] ਵਰਣਨ ਵਿੱਚ ਟਾਈਮਸਟੈਂਪ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕਰਨ ਯੋਗ ਹਨ diff --git a/fastlane/metadata/android/pa/changelogs/850.txt b/fastlane/metadata/android/pa/changelogs/850.txt new file mode 100644 index 000000000..561cdec62 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/850.txt @@ -0,0 +1 @@ +ਇਸ ਰੀਲੀਜ਼ ਵਿੱਚ YouTube ਵੈੱਬਸਾਈਟ ਸੰਸਕਰਣ ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ ਸੀ। ਪੁਰਾਣਾ ਵੈੱਬਸਾਈਟ ਸੰਸਕਰਣ ਮਾਰਚ ਵਿੱਚ ਬੰਦ ਹੋਣ ਜਾ ਰਿਹਾ ਹੈ ਅਤੇ ਇਸ ਲਈ ਤੁਹਾਨੂੰ ਨਿਊ ਪਾਈਪ ਨੂੰ ਅਪਗ੍ਰੇਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/860.txt b/fastlane/metadata/android/pa/changelogs/860.txt new file mode 100644 index 000000000..900671ab8 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/860.txt @@ -0,0 +1 @@ +ਸੁਧਾਰ • ਸੇਵ ਕਰੋ ਅਤੇ ਰੀਸਟੋਰ ਕਰੋ ਕਿ ਕੀ ਪਿੱਚ ਅਤੇ ਟੈਂਪੋ ਅਣਹੁੱਕ ਹਨ ਜਾਂ ਨਹੀਂ • ਪਲੇਅਰ ਵਿੱਚ ਡਿਸਪਲੇ ਕੱਟਆਊਟ ਦਾ ਸਮਰਥਨ ਕਰੋ • ਗੋਲ ਦ੍ਰਿਸ਼ ਅਤੇ ਗਾਹਕਾਂ ਦੀ ਗਿਣਤੀ • ਘੱਟ ਡਾਟਾ ਵਰਤਣ ਲਈ YouTube ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਇਆ ਗਿਆ ਇਸ ਰੀਲੀਜ਼ ਵਿੱਚ 15 ਤੋਂ ਵੱਧ YouTube-ਸਬੰਧਤ ਬੱਗ ਫਿਕਸ ਕੀਤੇ ਗਏ ਸਨ। diff --git a/fastlane/metadata/android/pa/changelogs/870.txt b/fastlane/metadata/android/pa/changelogs/870.txt new file mode 100644 index 000000000..3656c86fc --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/870.txt @@ -0,0 +1,2 @@ +ਇਹ ਇੱਕ ਹੌਟਫਿਕਸ ਰੀਲੀਜ਼ ਹੈ ਜੋ ਨਿਊਪਾਈਪ ਨੂੰ ਅੱਪਡੇਟ ਕਰ ਰਿਹਾ ਹੈ ਤਾਂ ਜੋ ਦੁਬਾਰਾ ਵੱਡੀਆਂ ਮੁਸ਼ਕਲਾਂ ਤੋਂ ਬਿਨਾਂ ਸਾਉਂਡ ਕਲਾਉਡ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੱਤੀ ਜਾ ਸਕੇ। +SoundCloud ਦਾ v2 API ਹੁਣ ਐਕਸਟਰੈਕਟਰ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਅਵੈਧ ਕਲਾਇੰਟ ਆਈਡੀ ਦੀ ਖੋਜ ਵਿੱਚ ਸੁਧਾਰ ਕੀਤਾ ਗਿਆ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/900.txt b/fastlane/metadata/android/pa/changelogs/900.txt new file mode 100644 index 000000000..f9a004a0d --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/900.txt @@ -0,0 +1 @@ +ਨਵਾਂ • ਗਾਹਕੀ ਸਮੂਹ ਅਤੇ ਕ੍ਰਮਬੱਧ ਫੀਡ • ਖਿਡਾਰੀਆਂ ਵਿੱਚ ਮਿਊਟ ਬਟਨ ਸੁਧਾਰ • NewPipe ਵਿੱਚ music.youtube.com ਅਤੇ media.ccc.de ਲਿੰਕ ਖੋਲ੍ਹਣ ਦਿਓ • ਦਿੱਖ ਤੋਂ ਸਮੱਗਰੀ ਤੱਕ ਦੋ ਸੈਟਿੰਗਾਂ ਨੂੰ ਮੁੜ-ਸਥਾਪਿਤ ਕਰੋ • 5, 15, 25 ਸਕਿੰਟ ਦੇ ਸੀਕ ਵਿਕਲਪਾਂ ਨੂੰ ਲੁਕਾਓ ਜੇਕਰ ਅਢੁੱਕਵੀਂ ਖੋਜ ਸਮਰਥਿਤ ਹੈ ਸਥਿਰ • ਕੁਝ WebM ਵੀਡੀਓ ਖੋਜਣ ਯੋਗ ਨਹੀਂ ਹਨ • Android P 'ਤੇ ਡਾਟਾਬੇਸ ਬੈਕਅੱਪ • ਡਾਉਨਲੋਡ ਕੀਤੀ ਫਾਈਲ ਨੂੰ ਸਾਂਝਾ ਕਰਦੇ ਸਮੇਂ ਕਰੈਸ਼ • ਬਹੁਤ ਸਾਰੇ YouTube ਐਕਸਟਰੈਕਸ਼ਨ ਮੁੱਦੇ ਅਤੇ ਹੋਰ... diff --git a/fastlane/metadata/android/pa/changelogs/910.txt b/fastlane/metadata/android/pa/changelogs/910.txt new file mode 100644 index 000000000..1cc2a1432 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/910.txt @@ -0,0 +1 @@ +ਸਥਿਰ ਡੇਟਾਬੇਸ ਮਾਈਗ੍ਰੇਸ਼ਨ ਜਿਸ ਨੇ ਕੁਝ ਦੁਰਲੱਭ ਮਾਮਲਿਆਂ ਵਿੱਚ ਨਿਊਪਾਈਪ ਨੂੰ ਸ਼ੁਰੂ ਹੋਣ ਤੋਂ ਰੋਕਿਆ। diff --git a/fastlane/metadata/android/pa/changelogs/920.txt b/fastlane/metadata/android/pa/changelogs/920.txt new file mode 100644 index 000000000..04fc07937 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/920.txt @@ -0,0 +1 @@ +ਸੁਧਾਰ • ਸਟ੍ਰੀਮ ਗਰਿੱਡ ਆਈਟਮਾਂ 'ਤੇ ਅੱਪਲੋਡ ਦੀ ਮਿਤੀ ਅਤੇ ਦੇਖਣ ਦੀ ਗਿਣਤੀ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ • ਦਰਾਜ਼ ਹੈਡਰ ਲੇਆਉਟ ਲਈ ਸੁਧਾਰ ਸਥਿਰ • ਏਪੀਆਈ 19 'ਤੇ ਕ੍ਰੈਸ਼ ਹੋਣ ਕਾਰਨ ਫਿਕਸਡ ਮਿਊਟ ਬਟਨ • ਲੰਬੇ 1080p 60fps ਵੀਡੀਓ ਦੀ ਸਥਿਰ ਡਾਊਨਲੋਡਿੰਗ diff --git a/fastlane/metadata/android/pa/changelogs/930.txt b/fastlane/metadata/android/pa/changelogs/930.txt new file mode 100644 index 000000000..a067bfb58 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/930.txt @@ -0,0 +1 @@ +ਨਵਾਂ • YouTube ਸੰਗੀਤ 'ਤੇ ਖੋਜੋ • ਬੁਨਿਆਦੀ Android TV ਸਮਰਥਨ ਸੁਧਾਰ • ਇੱਕ ਸਥਾਨਕ ਪਲੇਲਿਸਟ ਤੋਂ ਸਾਰੇ ਦੇਖੇ ਗਏ ਵੀਡੀਓ ਨੂੰ ਹਟਾਉਣ ਦੀ ਯੋਗਤਾ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ ਹੈ • ਕ੍ਰੈਸ਼ ਹੋਣ ਦੀ ਬਜਾਏ ਜਦੋਂ ਸਮੱਗਰੀ ਅਜੇ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ ਤਾਂ ਸੁਨੇਹਾ ਦਿਖਾਓ • ਚੁਟਕੀ ਇਸ਼ਾਰਿਆਂ ਨਾਲ ਪੌਪਅੱਪ ਪਲੇਅਰ ਦਾ ਆਕਾਰ ਬਦਲਿਆ ਗਿਆ ਹੈ • ਬੈਕਗ੍ਰਾਊਂਡ 'ਤੇ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ ਅਤੇ ਚੈਨਲ ਵਿੱਚ ਪੌਪਅੱਪ ਬਟਨਾਂ 'ਤੇ ਸਟ੍ਰੀਮ ਨੂੰ ਐਨਕਿਊ ਕਰੋ • ਦਰਾਜ਼ ਸਿਰਲੇਖ ਦੇ ਸਿਰਲੇਖ ਦੇ ਆਕਾਰ ਨੂੰ ਸੰਭਾਲਣ ਵਿੱਚ ਸੁਧਾਰ ਕੀਤਾ ਗਿਆ ਹੈ ਸਥਿਰ • ਨਿਸ਼ਚਿਤ ਉਮਰ ਪ੍ਰਤਿਬੰਧਿਤ ਸਮੱਗਰੀ ਸੈਟਿੰਗ ਕੰਮ ਨਹੀਂ ਕਰ ਰਹੀ • ਕੁਝ ਖਾਸ ਕਿਸਮ ਦੇ reCAPTCHA ਫਿਕਸ ਕੀਤੇ ਗਏ ਹਨ • ਪਲੇਲਿਸਟ `ਨੱਲ` ਹੋਣ 'ਤੇ ਬੁੱਕਮਾਰਕ ਖੋਲ੍ਹਣ ਵੇਲੇ ਸਥਿਰ ਕਰੈਸ਼ • ਨੈੱਟਵਰਕ ਸੰਬੰਧੀ ਅਪਵਾਦਾਂ ਦੀ ਸਥਿਰ ਖੋਜ • ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਫਰੈਗਮੈਂਟ ਵਿੱਚ ਗਰੁੱਪ ਸੌਰਟ ਬਟਨ ਦੀ ਸਥਿਰ ਦਿੱਖ ਅਤੇ ਹੋਰ diff --git a/fastlane/metadata/android/pa/changelogs/940.txt b/fastlane/metadata/android/pa/changelogs/940.txt new file mode 100644 index 000000000..b9d9b3fdf --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/940.txt @@ -0,0 +1 @@ +ਨਵਾਂ • SoundCloud ਟਿੱਪਣੀਆਂ ਲਈ ਸਮਰਥਨ ਸ਼ਾਮਲ ਕਰੋ • YouTube ਪ੍ਰਤਿਬੰਧਿਤ ਮੋਡ ਸੈਟਿੰਗ ਸ਼ਾਮਲ ਕਰੋ • PeerTube ਮੂਲ ਚੈਨਲ ਦੇ ਵੇਰਵੇ ਦਿਖਾਓ ਸੁਧਾਰ • ਸਿਰਫ਼ ਸਮਰਥਿਤ ਸੇਵਾਵਾਂ ਲਈ ਕੋਰ ਬਟਨ ਦਿਖਾਓ • ਨੈਵੀਗੇਸ਼ਨਬਾਰ ਜਾਂ ਸਟੇਟਸਬਾਰ ਤੋਂ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਪਲੇਅਰ ਸੰਕੇਤਾਂ ਨੂੰ ਬਲਾਕ ਕਰੋ • ਸੇਵਾ ਦੇ ਰੰਗ ਦੇ ਆਧਾਰ 'ਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਅਤੇ ਗਾਹਕ ਬਣੋ ਬਟਨਾਂ ਦਾ ਪਿਛੋਕੜ ਰੰਗ ਬਦਲੋ ਸਥਿਰ • ਡਾਉਨਲੋਡ ਡਾਇਲਾਗ ਫ੍ਰੀਜ਼ ਨੂੰ ਠੀਕ ਕਰੋ • ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਖੋਲ੍ਹੋ ਬਟਨ ਹੁਣ ਅਸਲ ਵਿੱਚ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਖੁੱਲ੍ਹਦਾ ਹੈ • ਵੀਡੀਓ ਖੋਲ੍ਹਣ 'ਤੇ ਕ੍ਰੈਸ਼ ਨੂੰ ਠੀਕ ਕਰੋ ਅਤੇ "ਇਸ ਸਟ੍ਰੀਮ ਨੂੰ ਚਲਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ" ਅਤੇ ਹੋਰ diff --git a/fastlane/metadata/android/pa/changelogs/950.txt b/fastlane/metadata/android/pa/changelogs/950.txt new file mode 100644 index 000000000..454a34bd4 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/950.txt @@ -0,0 +1,4 @@ +ਇਹ ਰੀਲੀਜ਼ ਤਿੰਨ ਛੋਟੇ ਫਿਕਸ ਲਿਆਉਂਦਾ ਹੈ: +• Adroid 10+ 'ਤੇ ਸਥਿਰ ਸਟੋਰੇਜ ਪਹੁੰਚ +• ਫਿਕਸਡ ਓਪਨਿੰਗ ਕਿਓਸਕ +• ਲੰਬੇ ਵੀਡੀਓਜ਼ ਦੀ ਸਥਿਰ ਮਿਆਦ ਪਾਰਸਿੰਗ diff --git a/fastlane/metadata/android/pa/changelogs/951.txt b/fastlane/metadata/android/pa/changelogs/951.txt new file mode 100644 index 000000000..2b1cd7933 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/951.txt @@ -0,0 +1,13 @@ +ਨਵਾਂ +• ਫੀਡ ਗਰੁੱਪ ਡਾਇਲਾਗ ਵਿੱਚ ਗਾਹਕੀ ਚੋਣਕਾਰ ਲਈ ਖੋਜ ਸ਼ਾਮਲ ਕਰੋ +• ਸਿਰਫ਼ ਗੈਰ-ਗਰੁੱਪ ਕੀਤੀਆਂ ਗਾਹਕੀਆਂ ਨੂੰ ਦਿਖਾਉਣ ਲਈ ਫੀਡ ਗਰੁੱਪ ਡਾਇਲਾਗ ਵਿੱਚ ਫਿਲਟਰ ਸ਼ਾਮਲ ਕਰੋ +• ਪਲੇਲਿਸਟ ਟੈਬ ਨੂੰ ਮੁੱਖ ਪੰਨੇ 'ਤੇ ਸ਼ਾਮਲ ਕਰੋ +• ਬੈਕਗ੍ਰਾਊਂਡ/ਪੌਪ-ਅੱਪ ਪਲੇਅਰ ਕਤਾਰ ਵਿੱਚ ਤੇਜ਼ੀ ਨਾਲ ਅੱਗੇ/ਰਿਵਾਈਂਡ ਕਰੋ +• ਖੋਜ ਸੁਝਾਅ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ: ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਹੈ ਅਤੇ ਇਸ ਲਈ ਨਤੀਜਾ ਦਿਖਾ ਰਿਹਾ ਹੈ +ਸੁਧਾਰ +• ਮਿਕਸਡ ਫਾਈਲਾਂ ਵਿੱਚ ਐਪਲੀਕੇਸ਼ਨ ਮੈਟਾਡੇਟਾ ਲਿਖਣਾ ਛੱਡੋ • ਕਤਾਰ ਤੋਂ ਅਸਫਲ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਨਾ ਹਟਾਓ +• ਟੂਲਬਾਰ ਦੇ ਰੰਗ ਨਾਲ ਮੇਲ ਕਰਨ ਲਈ ਸਥਿਤੀ ਪੱਟੀ ਦਾ ਰੰਗ ਅੱਪਡੇਟ ਕਰੋ + +ਠੀਕ ਕੀਤਾ +• ਫਲੋਟਿੰਗ ਪੁਆਇੰਟ ਸੰਚਤ ਤਰੁੱਟੀਆਂ ਦੇ ਕਾਰਨ ਫਿਕਸਡ ਆਡੀਓ/ਵੀਡੀਓ ਡੀਸਿੰਕ +• [PeerTube] ਮਿਟਾਈਆਂ ਗਈਆਂ ਟਿੱਪਣੀਆਂ ਨੂੰ ਸੰਭਾਲੋ ਅਤੇ ਹੋਰ diff --git a/fastlane/metadata/android/pa/changelogs/952.txt b/fastlane/metadata/android/pa/changelogs/952.txt new file mode 100644 index 000000000..dda91ee55 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/952.txt @@ -0,0 +1,7 @@ +ਸੁਧਾਰ +• ਆਟੋ-ਪਲੇ ਸਾਰੀਆਂ ਸੇਵਾਵਾਂ ਲਈ ਉਪਲਬਧ ਹੈ (ਸਿਰਫ਼ YouTube ਦੀ ਬਜਾਏ) + +ਠੀਕ ਕੀਤਾ +• YouTube ਦੀਆਂ ਨਵੀਆਂ ਨਿਰੰਤਰਤਾਵਾਂ ਦਾ ਸਮਰਥਨ ਕਰਕੇ ਸੰਬੰਧਿਤ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਸਥਿਰ ਕੀਤਾ ਗਿਆ +• ਨਿਸ਼ਚਿਤ ਉਮਰ ਪ੍ਰਤਿਬੰਧਿਤ YouTube ਵੀਡੀਓ +• [Android TV] ਸਥਿਰ ਲੰਮੀ ਫੋਕਸ ਹਾਈਲਾਈਟ ਓਵਰਲੇ diff --git a/fastlane/metadata/android/pa/changelogs/953.txt b/fastlane/metadata/android/pa/changelogs/953.txt new file mode 100644 index 000000000..5d5672ad2 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/953.txt @@ -0,0 +1 @@ +YouTube ਦੇ ਡੀਕ੍ਰਿਪਸ਼ਨ ਫੰਕਸ਼ਨ ਦੇ ਐਕਸਟਰੈਕਸ਼ਨ ਨੂੰ ਠੀਕ ਕਰੋ। diff --git a/fastlane/metadata/android/pa/changelogs/954.txt b/fastlane/metadata/android/pa/changelogs/954.txt new file mode 100644 index 000000000..3eb8dd68b --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/954.txt @@ -0,0 +1,8 @@ +• ਨਵਾਂ ਐਪਲੀਕੇਸ਼ਨ ਵਰਕਫਲੋ: ਵੇਰਵੇ ਵਾਲੇ ਪੰਨੇ 'ਤੇ ਵੀਡੀਓ ਚਲਾਓ, ਪਲੇਅਰ ਨੂੰ ਛੋਟਾ ਕਰਨ ਲਈ ਹੇਠਾਂ ਵੱਲ ਸਵਾਈਪ ਕਰੋ +• ਮੀਡੀਆ ਸਟਾਈਲ ਸੂਚਨਾਵਾਂ: ਸੂਚਨਾਵਾਂ ਵਿੱਚ ਅਨੁਕੂਲਿਤ ਕਾਰਵਾਈਆਂ, ਪ੍ਰਦਰਸ਼ਨ ਸੁਧਾਰ +• ਡੈਸਕਟੌਪ ਐਪ ਦੇ ਤੌਰ 'ਤੇ NewPipe ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਮੂਲ ਰੀਸਾਈਜ਼ ਕਰਨਾ + +• ਇੱਕ ਅਸਮਰਥਿਤ URL ਟੋਸਟ ਦੇ ਮਾਮਲੇ ਵਿੱਚ ਖੁੱਲੇ ਵਿਕਲਪਾਂ ਨਾਲ ਡਾਇਲਾਗ ਦਿਖਾਓ +• ਜਦੋਂ ਰਿਮੋਟ ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਤਾਂ ਖੋਜ ਸੁਝਾਅ ਅਨੁਭਵ ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ +• ਡਿਫ਼ਾਲਟ ਵੀਡੀਓ ਗੁਣਵੱਤਾ ਨੂੰ 720p60 (ਇਨ-ਐਪ ਪਲੇਅਰ) ਅਤੇ 480p (ਪੌਪ-ਅੱਪ ਪਲੇਅਰ) ਤੱਕ ਵਧਾ ਦਿੱਤਾ ਗਿਆ ਹੈ +• ਬਹੁਤ ਸਾਰੇ ਬੱਗ ਫਿਕਸ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ diff --git a/fastlane/metadata/android/pa/changelogs/955.txt b/fastlane/metadata/android/pa/changelogs/955.txt new file mode 100644 index 000000000..ea480cb5a --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/955.txt @@ -0,0 +1,3 @@ +[YouTube] ਕੁਝ ਉਪਭੋਗਤਾਵਾਂ ਲਈ ਖੋਜ ਨੂੰ ਠੀਕ ਕਰੋ +[YouTube] ਬੇਤਰਤੀਬੇ ਡੀਕ੍ਰਿਪਸ਼ਨ ਅਪਵਾਦਾਂ ਨੂੰ ਠੀਕ ਕਰੋ +[SoundCloud] ਸਲੈਸ਼ ਨਾਲ ਖਤਮ ਹੋਣ ਵਾਲੇ URL ਹੁਣ ਸਹੀ ਤਰ੍ਹਾਂ ਪਾਰਸ ਕੀਤੇ ਗਏ ਹਨ diff --git a/fastlane/metadata/android/pa/changelogs/956.txt b/fastlane/metadata/android/pa/changelogs/956.txt new file mode 100644 index 000000000..897a5bf2a --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/956.txt @@ -0,0 +1 @@ +[YouTube] ਕਿਸੇ ਵੀ ਵੀਡੀਓ ਨੂੰ ਲੋਡ ਕਰਨ ਵੇਲੇ ਸਥਿਰ ਕਰੈਸ਼ diff --git a/fastlane/metadata/android/pa/changelogs/957.txt b/fastlane/metadata/android/pa/changelogs/957.txt new file mode 100644 index 000000000..eb66dacbc --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/957.txt @@ -0,0 +1,10 @@ +• ਖਾਸ ਐਨਕਿਊ ਕਿਰਿਆਵਾਂ ਨੂੰ ਇੱਕ ਵਿੱਚ ਜੋੜੋ +• ਪਲੇਅਰ ਨੂੰ ਬੰਦ ਕਰਨ ਲਈ ਦੋ ਉਂਗਲਾਂ ਦੇ ਸੰਕੇਤ +• reCAPTCHA ਕੂਕੀਜ਼ ਨੂੰ ਕਲੀਅਰ ਕਰਨ ਦਿਓ +• ਨੋਟੀਫਿਕੇਸ਼ਨ ਨੂੰ ਰੰਗ ਨਾ ਕਰਨ ਦਾ ਵਿਕਲਪ +• ਅਨੰਤ ਬਫਰਿੰਗ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਵਿਡੀਓ ਵੇਰਵਿਆਂ ਨੂੰ ਕਿਵੇਂ ਖੋਲ੍ਹਿਆ ਜਾਂਦਾ ਹੈ ਇਸ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ, ਨਿਊਪਾਈਪ ਨਾਲ ਸਾਂਝਾ ਕਰਨ ਵੇਲੇ ਬੱਗੀ ਵਿਵਹਾਰ ਅਤੇ ਹੋਰ ਅਸੰਗਤਤਾਵਾਂ +• YouTube ਵੀਡੀਓਜ਼ ਦੀ ਗਤੀ ਵਧਾਓ ਅਤੇ ਉਮਰ ਪ੍ਰਤੀਬੰਧਿਤ ਵੀਡੀਓ ਨੂੰ ਠੀਕ ਕਰੋ +• ਫਾਸਟ ਫਾਰਵਰਡ/ਰਿਵਾਇੰਡ 'ਤੇ ਕਰੈਸ਼ ਨੂੰ ਠੀਕ ਕਰੋ +• ਥੰਬਨੇਲ ਖਿੱਚ ਕੇ ਸੂਚੀਆਂ ਨੂੰ ਮੁੜ ਵਿਵਸਥਿਤ ਨਾ ਕਰੋ +• ਪੌਪਅੱਪ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਹਮੇਸ਼ਾ ਯਾਦ ਰੱਖੋ +• ਸੰਤਾਲੀ ਭਾਸ਼ਾ ਸ਼ਾਮਲ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/958.txt b/fastlane/metadata/android/pa/changelogs/958.txt new file mode 100644 index 000000000..66c2ae763 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/958.txt @@ -0,0 +1 @@ +ਨਵਾਂ ਅਤੇ ਸੁਧਾਰਿਆ ਗਿਆ: • ਲੌਕ ਸਕ੍ਰੀਨ 'ਤੇ ਥੰਬਨੇਲ ਨੂੰ ਲੁਕਾਉਣ ਲਈ ਮੁੜ-ਜੋੜਿਆ ਗਿਆ ਵਿਕਲਪ • ਫੀਡ ਨੂੰ ਤਾਜ਼ਾ ਕਰਨ ਲਈ ਖਿੱਚੋ • ਸਥਾਨਕ ਸੂਚੀਆਂ ਪ੍ਰਾਪਤ ਕਰਨ ਵੇਲੇ ਬਿਹਤਰ ਕਾਰਗੁਜ਼ਾਰੀ ਸਥਿਰ: • ਰੈਮ ਤੋਂ ਹਟਾਏ ਜਾਣ ਤੋਂ ਬਾਅਦ ਨਿਊਪਾਈਪ ਨੂੰ ਚਾਲੂ ਕਰਨ ਵੇਲੇ ਸਥਿਰ ਕਰੈਸ਼ • ਕੋਈ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਾ ਹੋਣ 'ਤੇ ਸਟਾਰਟਅਪ 'ਤੇ ਸਥਿਰ ਕਰੈਸ਼ • ਚਮਕ- ਅਤੇ ਵੌਲਯੂਮ-ਇਸ਼ਾਰਾ ਸੈਟਿੰਗਾਂ ਦਾ ਆਦਰ ਕਰਦੇ ਹੋਏ ਸਥਿਰ • [YouTube] ਸਥਿਰ ਲੰਬੀਆਂ ਪਲੇਲਿਸਟਾਂ ਹੋਰ: • ਕੋਡ ਕਲੀਨਅੱਪ ਅਤੇ ਕਈ ਅੰਦਰੂਨੀ ਸੁਧਾਰ • ਨਿਰਭਰਤਾ ਅੱਪਡੇਟ • ਅਨੁਵਾਦ ਅੱਪਡੇਟ diff --git a/fastlane/metadata/android/pa/changelogs/959.txt b/fastlane/metadata/android/pa/changelogs/959.txt new file mode 100644 index 000000000..5ababff32 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/959.txt @@ -0,0 +1,3 @@ +ਗਲਤੀ ਰਿਪੋਰਟਰ ਨੂੰ ਖੋਲ੍ਹਣ ਤੋਂ ਬਾਅਦ ਕਰੈਸ਼ਾਂ ਦਾ ਬੇਅੰਤ ਲੂਪ ਸਥਿਰ ਕੀਤਾ ਗਿਆ। +PeerTube ਉਦਾਹਰਨਾਂ ਦੀ ਅੱਪਡੇਟ ਕੀਤੀ ਸੂਚੀ ਜੋ +NewPipe ਦੁਆਰਾ ਆਪਣੇ ਆਪ ਖੋਲ੍ਹੀ ਜਾ ਸਕਦੀ ਹੈ। ਅੱਪਡੇਟ ਕੀਤੇ ਅਨੁਵਾਦ। diff --git a/fastlane/metadata/android/pa/changelogs/960.txt b/fastlane/metadata/android/pa/changelogs/960.txt new file mode 100644 index 000000000..8527ebd2d --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/960.txt @@ -0,0 +1,4 @@ +• ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਨਿਰਯਾਤ ਡੇਟਾਬੇਸ ਵਿਕਲਪ ਦਾ ਸੁਧਾਰਿਆ ਗਿਆ ਵਰਣਨ। +• ਸਥਿਰ YouTube ਟਿੱਪਣੀਆਂ ਪਾਰਸਿੰਗ। +• media.ccc.de ਸੇਵਾ ਦਾ ਸਥਿਰ ਡਿਸਪਲੇ ਨਾਮ। +• ਅੱਪਡੇਟ ਕੀਤੇ ਅਨੁਵਾਦ। diff --git a/fastlane/metadata/android/pa/changelogs/961.txt b/fastlane/metadata/android/pa/changelogs/961.txt new file mode 100644 index 000000000..069b08239 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/961.txt @@ -0,0 +1 @@ +• [YouTube] ਮਿਕਸ ਸਮਰਥਨ • [YouTube] ਜਨਤਕ ਪ੍ਰਸਾਰਕਾਂ ਅਤੇ ਕੋਵਿਡ-19 ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ • [media.ccc.de] ਜੋੜੇ ਗਏ ਹਾਲੀਆ ਵੀਡੀਓ • ਸੋਮਾਲੀ ਅਨੁਵਾਦ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ • ਬਹੁਤ ਸਾਰੇ ਅੰਦਰੂਨੀ ਸੁਧਾਰ • ਪਲੇਅਰ ਦੇ ਅੰਦਰੋਂ ਸਥਿਰ ਸ਼ੇਅਰਿੰਗ ਵੀਡੀਓ • ਸਥਿਰ ਖਾਲੀ ReCaptcha ਵੈਬਵਿਊ • ਇੱਕ ਸੂਚੀ ਵਿੱਚੋਂ ਇੱਕ ਸਟ੍ਰੀਮ ਨੂੰ ਹਟਾਉਣ ਵੇਲੇ ਆਈ ਕ੍ਰੈਸ਼ ਦਾ ਹੱਲ • [PeerTube] ਸਥਿਰ ਸੰਬੰਧਿਤ ਸਟ੍ਰੀਮਾਂ • [YouTube] ਸਥਿਰ YouTube ਸੰਗੀਤ ਖੋਜ diff --git a/fastlane/metadata/android/pa/changelogs/962.txt b/fastlane/metadata/android/pa/changelogs/962.txt new file mode 100644 index 000000000..3676cf31b --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/962.txt @@ -0,0 +1,2 @@ +media.ccc.de ਸੇਵਾ ਵਿੱਚ "ਹਾਲੀਆ" ਵਿਡੀਓਜ਼ ਸ਼ਾਮਲ ਕੀਤੇ ਗਏ। +media.ccc.de ਸੇਵਾ ਵਿੱਚ ਲਾਈਵ ਸਟ੍ਰੀਮਾਂ ਸ਼ਾਮਲ ਕੀਤੀਆਂ ਗਈਆਂ ਅਤੇ ਲਾਈਵ ਸਟ੍ਰੀਮ ਸਮਰਥਨ ਵੀ। diff --git a/fastlane/metadata/android/pa/changelogs/963.txt b/fastlane/metadata/android/pa/changelogs/963.txt new file mode 100644 index 000000000..f0bc9b09c --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] ਸਥਿਰ ਚੈਨਲ ਨਿਰੰਤਰਤਾ diff --git a/fastlane/metadata/android/pa/changelogs/964.txt b/fastlane/metadata/android/pa/changelogs/964.txt new file mode 100644 index 000000000..85dc2c151 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/964.txt @@ -0,0 +1 @@ +• ਪਲੇਅਰ ਨਿਯੰਤਰਣ ਵਿੱਚ ਅਧਿਆਵਾਂ ਲਈ ਸਮਰਥਨ ਜੋੜਿਆ ਗਿਆ • [PeerTube] ਸੇਪੀਆ ਖੋਜ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ • ਵੀਡੀਓ ਵੇਰਵੇ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਸ਼ੇਅਰ ਬਟਨ ਨੂੰ ਮੁੜ-ਜੋੜਿਆ ਗਿਆ ਅਤੇ ਟੈਬ ਲੇਆਉਟ ਵਿੱਚ ਸਟ੍ਰੀਮ ਵਰਣਨ ਨੂੰ ਤਬਦੀਲ ਕੀਤਾ ਗਿਆ • ਜੇਕਰ ਚਮਕ ਦਾ ਸੰਕੇਤ ਅਸਮਰੱਥ ਹੈ ਤਾਂ ਚਮਕ ਨੂੰ ਬਹਾਲ ਕਰਨਾ ਬੰਦ ਕਰੋ • ਕੋਡੀ 'ਤੇ ਵੀਡੀਓ ਚਲਾਉਣ ਲਈ ਸੂਚੀ ਆਈਟਮ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ • ਕੁਝ ਡਿਵਾਈਸਾਂ 'ਤੇ ਕੋਈ ਡਿਫੌਲਟ ਬ੍ਰਾਊਜ਼ਰ ਸੈੱਟ ਨਾ ਹੋਣ 'ਤੇ ਕ੍ਰੈਸ਼ ਦਾ ਹੱਲ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਸ਼ੇਅਰ ਡਾਇਲਾਗਸ ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ • ਫੁੱਲਸਕ੍ਰੀਨ ਪਲੇਅਰ ਵਿੱਚ ਹਾਰਡਵੇਅਰ ਸਪੇਸ ਬਟਨ ਨਾਲ ਪਲੇ/ਪੌਜ਼ ਨੂੰ ਟੌਗਲ ਕਰੋ • [media.ccc.de] ਕਈ ਫਿਕਸ ਅਤੇ ਸੁਧਾਰ diff --git a/fastlane/metadata/android/pa/changelogs/965.txt b/fastlane/metadata/android/pa/changelogs/965.txt new file mode 100644 index 000000000..83e28b707 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/965.txt @@ -0,0 +1 @@ +ਸਥਿਰ ਕਰੈਸ਼ ਜੋ ਚੈਨਲ ਸਮੂਹਾਂ ਨੂੰ ਮੁੜ ਕ੍ਰਮਬੱਧ ਕਰਨ ਵੇਲੇ ਵਾਪਰਿਆ ਸੀ। ਚੈਨਲਾਂ ਅਤੇ ਪਲੇਲਿਸਟਾਂ ਤੋਂ ਹੋਰ YouTube ਵੀਡੀਓ ਪ੍ਰਾਪਤ ਕਰਨਾ ਸਥਿਰ ਕੀਤਾ ਗਿਆ ਹੈ। YouTube ਟਿੱਪਣੀਆਂ ਪ੍ਰਾਪਤ ਕਰਨਾ ਸਥਿਰ ਹੈ। YouTube URL ਵਿੱਚ /watch/, /v/ ਅਤੇ /w/ ਸਬਪਾਥ ਲਈ ਸਮਰਥਨ ਜੋੜਿਆ ਗਿਆ। SoundCloud ਕਲਾਇੰਟ ਆਈਡੀ ਅਤੇ ਭੂ-ਪ੍ਰਤੀਬੰਧਿਤ ਸਮਗਰੀ ਦਾ ਸਥਿਰ ਐਕਸਟਰੈਕਸ਼ਨ। ਉੱਤਰੀ ਕੁਰਦਿਸ਼ ਸਥਾਨਕਕਰਨ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ। diff --git a/fastlane/metadata/android/pa/changelogs/966.txt b/fastlane/metadata/android/pa/changelogs/966.txt new file mode 100644 index 000000000..61afac503 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/966.txt @@ -0,0 +1 @@ +ਨਵਾਂ: • ਇੱਕ ਨਵੀਂ ਸੇਵਾ ਸ਼ਾਮਲ ਕਰੋ: Bandcamp ਸੁਧਾਰ: • ਐਪ ਨੂੰ ਡਿਵਾਈਸ ਥੀਮ ਦਾ ਅਨੁਸਰਣ ਕਰਨ ਲਈ ਇੱਕ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕਰੋ • ਇੱਕ ਸੁਧਾਰਿਆ ਹੋਇਆ ਗਲਤੀ ਪੈਨਲ ਦਿਖਾ ਕੇ ਕੁਝ ਕਰੈਸ਼ਾਂ ਨੂੰ ਰੋਕੋ • ਇਸ ਬਾਰੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦਿਖਾਓ ਕਿ ਸਮੱਗਰੀ ਕਿਉਂ ਉਪਲਬਧ ਨਹੀਂ ਹੈ • ਹਾਰਡਵੇਅਰ ਸਪੇਸ ਬਟਨ ਪਲੇ/ਪੌਜ਼ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ • "ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ" ਟੋਸਟ ਦਿਖਾਓ ਸਥਿਰ: • ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਦੇ ਸਮੇਂ ਵੀਡੀਓ ਵੇਰਵਿਆਂ ਵਿੱਚ ਬਹੁਤ ਛੋਟੇ ਥੰਬਨੇਲ ਨੂੰ ਠੀਕ ਕਰੋ • ਨਿਊਨਤਮ ਪਲੇਅਰ ਵਿੱਚ ਖਾਲੀ ਸਿਰਲੇਖ ਨੂੰ ਠੀਕ ਕਰੋ • ਪਿਛਲੇ ਰੀਸਾਈਜ਼ ਮੋਡ ਨੂੰ ਠੀਕ ਤਰ੍ਹਾਂ ਰੀਸਟੋਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ diff --git a/fastlane/metadata/android/pa/changelogs/967.txt b/fastlane/metadata/android/pa/changelogs/967.txt new file mode 100644 index 000000000..8b63f43e7 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/967.txt @@ -0,0 +1 @@ +ਸਥਿਰ YouTube EU ਵਿੱਚ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ। ਇਹ ਇੱਕ ਨਵੀਂ ਕੂਕੀ ਅਤੇ ਗੋਪਨੀਯਤਾ ਸਹਿਮਤੀ ਪ੍ਰਣਾਲੀ ਦੇ ਕਾਰਨ ਹੋਇਆ ਸੀ ਜਿਸ ਲਈ ਇੱਕ CONSENT ਕੂਕੀ ਸੈੱਟ ਕਰਨ ਲਈ NewPipe ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/968.txt b/fastlane/metadata/android/pa/changelogs/968.txt new file mode 100644 index 000000000..3e3909022 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/968.txt @@ -0,0 +1 @@ +ਲੰਬੇ ਸਮੇਂ ਲਈ ਦਬਾਓ ਮੀਨੂ ਵਿੱਚ ਚੈਨਲ ਵੇਰਵੇ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ। ਪਲੇਲਿਸਟ ਇੰਟਰਫੇਸ ਤੋਂ ਪਲੇਲਿਸਟ ਨਾਮ ਦਾ ਨਾਮ ਬਦਲਣ ਲਈ ਕਾਰਜਸ਼ੀਲਤਾ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ। ਵੀਡੀਓ ਬਫਰਿੰਗ ਹੋਣ 'ਤੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਰੁਕਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ। ਚਿੱਟੇ ਥੀਮ ਨੂੰ ਪਾਲਿਸ਼ ਕੀਤਾ। ਇੱਕ ਵੱਡੇ ਫੌਂਟ ਆਕਾਰ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਓਵਰਲੈਪਿੰਗ ਫੌਂਟਾਂ ਨੂੰ ਸਥਿਰ ਕੀਤਾ ਗਿਆ ਹੈ। ਫਾਰਮੂਲਰ ਅਤੇ ਜ਼ੇਫੀਅਰ ਡਿਵਾਈਸਾਂ 'ਤੇ ਕੋਈ ਵੀਡੀਓ ਫਿਕਸ ਨਹੀਂ ਕੀਤਾ ਗਿਆ। ਵੱਖ-ਵੱਖ ਕਰੈਸ਼ਾਂ ਨੂੰ ਸਥਿਰ ਕੀਤਾ। diff --git a/fastlane/metadata/android/pa/changelogs/969.txt b/fastlane/metadata/android/pa/changelogs/969.txt new file mode 100644 index 000000000..4708c4a13 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/969.txt @@ -0,0 +1 @@ +• ਬਾਹਰੀ ਸਟੋਰੇਜ 'ਤੇ ਇੰਸਟਾਲੇਸ਼ਨ ਦੀ ਆਗਿਆ ਦਿਓ • [ਬੈਂਡਕੈਂਪ] ਇੱਕ ਸਟ੍ਰੀਮ 'ਤੇ ਪਹਿਲੀਆਂ ਤਿੰਨ ਟਿੱਪਣੀਆਂ ਨੂੰ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਲਈ ਸਮਰਥਨ ਜੋੜਿਆ ਗਿਆ • ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ ਹੋਣ 'ਤੇ ਸਿਰਫ਼ 'ਡਾਊਨਲੋਡ ਸ਼ੁਰੂ ਹੋ ਗਿਆ ਹੈ' ਟੋਸਟ ਦਿਖਾਓ • ਜਦੋਂ ਕੋਈ ਕੂਕੀ ਸਟੋਰ ਨਾ ਹੋਵੇ ਤਾਂ ਰੀਕੈਪਚਾ ਕੂਕੀ ਸੈਟ ਨਾ ਕਰੋ • [ਖਿਡਾਰੀ] ਕੈਸ਼ ਪ੍ਰਦਰਸ਼ਨ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ • [ਖਿਡਾਰੀ] ਫਿਕਸਡ ਪਲੇਅਰ ਆਟੋਮੈਟਿਕ ਨਹੀਂ ਚੱਲ ਰਿਹਾ • ਡਾਊਨਲੋਡਾਂ ਨੂੰ ਮਿਟਾਉਣ ਵੇਲੇ ਪਿਛਲੀਆਂ ਸਨੈਕਬਾਰਾਂ ਨੂੰ ਖਾਰਜ ਕਰੋ • ਸੂਚੀ ਵਿੱਚ ਨਾ ਹੋਣ ਵਾਲੀ ਵਸਤੂ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ diff --git a/fastlane/metadata/android/pa/changelogs/970.txt b/fastlane/metadata/android/pa/changelogs/970.txt new file mode 100644 index 000000000..679c9dae3 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/970.txt @@ -0,0 +1 @@ +ਨਵਾਂ • ਵਰਣਨ ਦੇ ਹੇਠਾਂ ਸਮੱਗਰੀ ਮੈਟਾਡੇਟਾ (ਟੈਗ, ਸ਼੍ਰੇਣੀਆਂ, ਲਾਇਸੰਸ, ...) ਦਿਖਾਓ • ਰਿਮੋਟ (ਗੈਰ-ਸਥਾਨਕ) ਪਲੇਲਿਸਟਾਂ ਵਿੱਚ "ਚੈਨਲ ਵੇਰਵੇ ਦਿਖਾਓ" ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ • ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ ਵਾਲੇ ਮੀਨੂ ਵਿੱਚ "ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਖੋਲ੍ਹੋ" ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ ਸਥਿਰ • ਵੀਡੀਓ ਵੇਰਵੇ ਪੰਨੇ 'ਤੇ ਸਥਿਰ ਰੋਟੇਸ਼ਨ ਕਰੈਸ਼ • ਪਲੇਅਰ ਵਿੱਚ ਸਥਿਰ "ਕੋਡੀ ਨਾਲ ਖੇਡੋ" ਬਟਨ ਹਮੇਸ਼ਾ ਕੋਰ ਨੂੰ ਸਥਾਪਤ ਕਰਨ ਲਈ ਪ੍ਰੇਰਦਾ ਹੈ • ਸਥਿਰ ਅਤੇ ਸੁਧਾਰੀ ਸੈਟਿੰਗ ਆਯਾਤ ਅਤੇ ਨਿਰਯਾਤ ਮਾਰਗ • [YouTube] ਸਥਿਰ ਟਿੱਪਣੀ ਪਸੰਦ ਗਿਣਤੀ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ diff --git a/fastlane/metadata/android/pa/changelogs/971.txt b/fastlane/metadata/android/pa/changelogs/971.txt new file mode 100644 index 000000000..d3dbe862f --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/971.txt @@ -0,0 +1,3 @@ +ਹੌਟਫਿਕਸ +• ਰੀਬਫਰ ਤੋਂ ਬਾਅਦ ਪਲੇਬੈਕ ਲਈ ਬਫਰ ਵਧਾਓ +• ਪਲੇਅਰ ਵਿੱਚ ਪਲੇ-ਕਿਊ ਆਈਕਨ 'ਤੇ ਕਲਿੱਕ ਕਰਨ ਵੇਲੇ ਟੈਬਲੈੱਟਾਂ ਅਤੇ ਟੀਵੀ 'ਤੇ ਸਥਿਰ ਕਰੈਸ਼ diff --git a/fastlane/metadata/android/pa/changelogs/972.txt b/fastlane/metadata/android/pa/changelogs/972.txt new file mode 100644 index 000000000..9cf290198 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/972.txt @@ -0,0 +1,13 @@ +ਨਵਾਂ +ਵਰਣਨ ਵਿੱਚ ਟਾਈਮਸਟੈਂਪਾਂ ਅਤੇ ਹੈਸ਼ਟੈਗਾਂ ਨੂੰ ਪਛਾਣੋ +ਮੈਨੂਅਲ ਟੈਬਲੇਟ ਮੋਡ ਸੈਟਿੰਗ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ +ਇੱਕ ਫੀਡ ਵਿੱਚ ਖੇਡੀਆਂ ਗਈਆਂ ਆਈਟਮਾਂ ਨੂੰ ਲੁਕਾਉਣ ਦੀ ਸਮਰੱਥਾ ਸ਼ਾਮਲ ਕੀਤੀ ਗਈ + +ਸੁਧਾਰ +ਸਟੋਰੇਜ਼ ਐਕਸੈਸ ਫਰੇਮਵਰਕ ਦਾ ਸਹੀ ਢੰਗ ਨਾਲ ਸਮਰਥਨ ਕਰੋ +ਅਣਉਪਲਬਧ ਅਤੇ ਬੰਦ ਕੀਤੇ ਚੈਨਲਾਂ ਦੀ ਬਿਹਤਰ ਗਲਤੀ ਹੈਂਡਲਿੰਗ +Android 10+ ਉਪਭੋਗਤਾਵਾਂ ਲਈ Android ਸ਼ੇਅਰ ਸ਼ੀਟ ਹੁਣ ਸਮੱਗਰੀ ਦਾ ਸਿਰਲੇਖ ਦਿਖਾਉਂਦੀ ਹੈ। +ਅੱਪਡੇਟ ਕੀਤਾ Invidious ਮੌਕੇ ਅਤੇ ਸਹਿਯੋਗ ਪਾਈਪ ਲਿੰਕ. + +ਠੀਕ ਕੀਤਾ +[YouTube] ਉਮਰ ਪ੍ਰਤਿਬੰਧਿਤ ਸਮੱਗਰੀ ਚੋਣ ਡਾਇਲਾਗ ਖੋਲ੍ਹਣ ਵੇਲੇ ਲੀਕ ਵਿੰਡੋ ਅਪਵਾਦ ਨੂੰ ਰੋਕੋ diff --git a/fastlane/metadata/android/pa/changelogs/973.txt b/fastlane/metadata/android/pa/changelogs/973.txt new file mode 100644 index 000000000..3afd456da --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/973.txt @@ -0,0 +1,4 @@ +ਹੌਟਫਿਕਸ +• ਇੱਕ ਕਤਾਰ ਵਿੱਚ ਕਿੰਨੇ ਵਿਡੀਓ ਫਿੱਟ ਹੋ ਸਕਦੇ ਹਨ ਦੀ ਗਲਤ ਗਣਨਾ ਕਰਕੇ, ਗਰਿੱਡ ਲੇਆਉਟ ਵਿੱਚ ਕੱਟੇ ਜਾ ਰਹੇ ਥੰਬਨੇਲ ਅਤੇ ਸਿਰਲੇਖਾਂ ਨੂੰ ਠੀਕ ਕਰੋ +• ਸ਼ੇਅਰ ਮੀਨੂ ਤੋਂ ਖੋਲ੍ਹੇ ਜਾਣ 'ਤੇ ਬਿਨਾਂ ਕੁਝ ਕੀਤੇ ਗਾਇਬ ਹੋ ਰਹੇ ਡਾਉਨਲੋਡ ਡਾਇਲੌਗ ਨੂੰ ਠੀਕ ਕਰੋ +• ਬਾਹਰੀ ਗਤੀਵਿਧੀਆਂ ਜਿਵੇਂ ਕਿ ਸਟੋਰੇਜ਼ ਐਕਸੈਸ ਫਰੇਮਵਰਕ ਫਾਈਲ ਪਿਕਰ ਖੋਲ੍ਹਣ ਨਾਲ ਸਬੰਧਤ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/974.txt b/fastlane/metadata/android/pa/changelogs/974.txt new file mode 100644 index 000000000..563a9768a --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/974.txt @@ -0,0 +1,5 @@ +ਹੌਟਫਿਕਸ +• YouTube ਥ੍ਰੋਟਲਿੰਗ ਦੇ ਕਾਰਨ ਬਫਰਿੰਗ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਠੀਕ ਕਰੋ +• ਬੰਦ ਕੀਤੀਆਂ ਟਿੱਪਣੀਆਂ ਨਾਲ ਕ੍ਰੈਸ਼ਾਂ ਨੂੰ ਠੀਕ ਕਰੋ ਅਤੇ YouTube ਟਿੱਪਣੀਆਂ ਕੱਢਣ +• YouTube ਸੰਗੀਤ ਖੋਜ ਨੂੰ ਠੀਕ ਕਰੋ +• PeerTube ਲਾਈਵਸਟ੍ਰੀਮਾਂ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/975.txt b/fastlane/metadata/android/pa/changelogs/975.txt new file mode 100644 index 000000000..c866df1e2 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/975.txt @@ -0,0 +1,16 @@ +ਨਵਾਂ +• ਸੀਕ ਕਰਨ ਵੇਲੇ ਇੱਕ ਥੰਮਨੇਲ ਪੂਰਵਦਰਸ਼ਨ ਦਿਖਾਓ +• ਅਯੋਗ ਟਿੱਪਣੀਆਂ ਦਾ ਪਤਾ ਲਗਾਓ +• ਫੀਡ ਆਈਟਮ ਨੂੰ ਦੇਖੇ ਗਏ ਵਜੋਂ ਨਿਸ਼ਾਨਬੱਧ ਕਰਨ ਦਿਓ +• ਟਿੱਪਣੀ ਦਿਲ ਦਿਖਾਓ + +ਸੁਧਾਰ +• ਮੈਟਾਡੇਟਾ ਅਤੇ ਟੈਗਸ ਲੇਆਉਟ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• UI ਭਾਗਾਂ 'ਤੇ ਸੇਵਾ ਰੰਗ ਲਾਗੂ ਕਰੋ +ਠੀਕ ਕੀਤਾ +• ਮਿੰਨੀ ਪਲੇਅਰ ਵਿੱਚ ਥੰਬਨੇਲ ਠੀਕ ਕਰੋ +• ਡੁਪਲੀਕੇਟ ਕਤਾਰ ਆਈਟਮਾਂ 'ਤੇ ਬੇਅੰਤ ਬਫਰਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ +• ਕੁਝ ਪਲੇਅਰ ਫਿਕਸ ਜਿਵੇਂ ਰੋਟੇਸ਼ਨ ਅਤੇ ਤੇਜ਼ੀ ਨਾਲ ਬੰਦ ਹੋਣਾ +• ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਲੋਡ ਕੀਤੇ ਬਾਕੀ ਬਚੇ ReCAPTCHA ਨੂੰ ਠੀਕ ਕਰੋ +• ਫੀਡ ਨੂੰ ਤਾਜ਼ਾ ਕਰਨ ਵੇਲੇ ਕਲਿੱਕਾਂ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ +• ਕੁਝ ਡਾਊਨਲੋਡਰ ਕਰੈਸ਼ਾਂ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/976.txt b/fastlane/metadata/android/pa/changelogs/976.txt new file mode 100644 index 000000000..a1a1354ca --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/976.txt @@ -0,0 +1,10 @@ +• ਪੂਰੀ ਸਕ੍ਰੀਨ ਵਿੱਚ ਪਲੇਅਰ ਨੂੰ ਸਿੱਧਾ ਖੋਲ੍ਹਣ ਲਈ ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ +• ਇਹ ਚੁਣਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ ਕਿ ਕਿਸ ਕਿਸਮ ਦੇ ਖੋਜ ਸੁਝਾਅ ਦਿਖਾਉਣੇ ਹਨ +• ਗੂੜ੍ਹਾ ਥੀਮ ਹੁਣ ਗਹਿਰਾ ਗੂੜ੍ਹਾ + ਗੂੜ੍ਹਾ ਸਪਲੈਸ਼ ਸਕ੍ਰੀਨ ਜੋੜਿਆ ਗਿਆ ਹੈ +• ਅਣਚਾਹੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਸਲੇਟੀ ਕਰਨ ਲਈ ਬਿਹਤਰ ਫ਼ਾਈਲ ਚੋਣਕਾਰ +• ਸਥਿਰ YouTube ਗਾਹਕੀ ਆਯਾਤ + +• ਇੱਕ ਸਟ੍ਰੀਮ ਨੂੰ ਮੁੜ ਚਲਾਉਣ ਲਈ ਮੁੜ-ਪਲੇਅ ਬਟਨ 'ਤੇ ਟੈਪ ਕਰਨ ਦੀ ਲੋੜ ਹੈ +• ਸਥਿਰ ਸਮਾਪਤੀ ਆਡੀਓ ਸੈਸ਼ਨ +• [Android TV] DPad ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ ਸਥਿਰ ਲੰਬੀ ਸੀਕਬਾਰ ਜੰਪ +ਹੋਰ ਤਬਦੀਲੀਆਂ ਦੇਖਣ ਲਈ, ਹੇਠਾਂ ਦਿੱਤੇ ਲਿੰਕ ਟੈਬ ਤੋਂ ਚੇਂਜਲੌਗ (ਅਤੇ ਬਲੌਗ ਪੋਸਟ) ਦੇਖੋ। diff --git a/fastlane/metadata/android/pa/changelogs/977.txt b/fastlane/metadata/android/pa/changelogs/977.txt new file mode 100644 index 000000000..95d779a80 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/977.txt @@ -0,0 +1,10 @@ +• ਲੰਬੇ ਪ੍ਰੈਸ ਮੀਨੂ ਵਿੱਚ "ਅਗਲਾ ਚਲਾਓ" ਬਟਨ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ +• ਇੰਟੈਂਟ ਫਿਲਟਰ ਵਿੱਚ YouTube ਸ਼ਾਰਟਸ ਪਾਥ ਪ੍ਰੀਫਿਕਸ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ +• ਸਥਿਰ ਸੈਟਿੰਗਾਂ ਆਯਾਤ +• ਕਤਾਰ ਸਕ੍ਰੀਨ ਵਿੱਚ ਪਲੇਅਰ ਬਟਨਾਂ ਨਾਲ ਸੀਕਬਾਰ ਸਥਿਤੀ ਨੂੰ ਸਵੈਪ ਕਰੋ +• MediasessionManager ਨਾਲ ਸੰਬੰਧਿਤ ਕਈ ਫਿਕਸ +• ਵੀਡੀਓ ਖਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ ਸਥਿਰ ਸੀਕਬਾਰ ਪੂਰਾ ਨਹੀਂ ਹੋਇਆ +• RealtekATV 'ਤੇ ਅਯੋਗ ਮੀਡੀਆ ਟਨਲਿੰਗ +• ਵਿਸਤ੍ਰਿਤ ਨਿਊਨਤਮ ਪਲੇਅਰ ਬਟਨ ਕਲਿੱਕ ਕਰਨ ਯੋਗ ਖੇਤਰ + +ਹੋਰ ਤਬਦੀਲੀਆਂ ਦੇਖਣ ਲਈ, ਹੇਠਾਂ ਦਿੱਤੇ ਲਿੰਕ ਟੈਬ ਤੋਂ ਚੇਂਜਲੌਗ (ਅਤੇ ਬਲੌਗ ਪੋਸਟ) ਦੇਖੋ। diff --git a/fastlane/metadata/android/pa/changelogs/978.txt b/fastlane/metadata/android/pa/changelogs/978.txt new file mode 100644 index 000000000..683f43ecc --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/978.txt @@ -0,0 +1 @@ +ਇੱਕ ਨਵੇਂ ਨਿਊਪਾਈਪ ਸੰਸਕਰਣ ਲਈ ਜਾਂਚ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਸਥਿਰ ਹੈ। ਇਹ ਜਾਂਚ ਕਈ ਵਾਰ ਬਹੁਤ ਜਲਦੀ ਕੀਤੀ ਗਈ ਸੀ ਅਤੇ ਇਸਲਈ ਐਪ ਕਰੈਸ਼ ਹੋ ਜਾਂਦੀ ਹੈ। ਇਸ ਨੂੰ ਹੁਣ ਠੀਕ ਕੀਤਾ ਜਾਣਾ ਗਿਆ ਹੈ। diff --git a/fastlane/metadata/android/pa/changelogs/979.txt b/fastlane/metadata/android/pa/changelogs/979.txt new file mode 100644 index 000000000..61a432f20 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/979.txt @@ -0,0 +1,2 @@ +- ਠੀਕ ਕੀਤਾ ਪਲੇਬੈਕ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰਨਾ +- ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਸੁਧਾਰ ਕੀਤੇ ਗਏ ਹਨ ਕਿ ਸੇਵਾ ਜੋ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੀ ਹੈ ਕਿ ਕੀ NewPipe ਨੂੰ ਨਵੇਂ ਸੰਸਕਰਣ ਦੀ ਜਾਂਚ ਲਈ ਜਾਂਚ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਬੈਕਗ੍ਰਾਉਂਡ ਵਿੱਚ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋਈ ਹੈ diff --git a/fastlane/metadata/android/pa/changelogs/980.txt b/fastlane/metadata/android/pa/changelogs/980.txt new file mode 100644 index 000000000..cc1b47f26 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/980.txt @@ -0,0 +1,12 @@ +ਨਵਾਂ +• ਸ਼ੇਅਰ ਮੀਨੂ ਲਈ "ਪਲੇਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ" ਵਿਕਲਪ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ +• y2u.be ਅਤੇ PeerTube ਛੋਟੇ ਲਿੰਕਾਂ ਲਈ ਸਮਰਥਨ ਜੋੜਿਆ ਗਿਆ + +ਸੁਧਾਰ +• ਪਲੇਬੈਕ-ਸਪੀਡ-ਕੰਟਰੋਲਾਂ ਨੂੰ ਵਧੇਰੇ ਸੰਖੇਪ ਬਣਾਇਆ ਗਿਆ ਹੈ +• ਫੀਡ ਹੁਣ ਨਵੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਉਜਾਗਰ ਕਰਦੀ ਹੈ +• ਫੀਡ ਵਿੱਚ "ਦੇਖੀਆਂ ਆਈਟਮਾਂ ਦਿਖਾਓ" ਵਿਕਲਪ ਹੁਣ ਸੁਰੱਖਿਅਤ ਹੈ + +ਠੀਕ ਕੀਤਾ +• ਸਥਿਰ YouTube ਪਸੰਦਾਂ ਅਤੇ ਨਾਪਸੰਦਾਂ ਨੂੰ ਕੱਢਣਾ +• ਬੈਕਗ੍ਰਾਊਂਡ ਤੋਂ ਵਾਪਸ ਆਉਣ ਤੋਂ ਬਾਅਦ ਸਥਿਰ ਆਟੋਮੈਟਿਕ ਰੀਪਲੇਅ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ diff --git a/fastlane/metadata/android/pa/changelogs/981.txt b/fastlane/metadata/android/pa/changelogs/981.txt new file mode 100644 index 000000000..36f141586 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/981.txt @@ -0,0 +1,2 @@ +ਐਂਡਰਾਇਡ 11+ 'ਤੇ ਬਫਰਿੰਗ ਤੋਂ ਬਾਅਦ ਅਸਫਲ ਪਲੇਬੈਕ ਰੀਜ਼ਿਊਮ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਮੀਡੀਆ ਪਾਰਸਰ ਸਮਰਥਨ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ। +ਪਲੇਬੈਕ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਫਿਲਿਪਸ QM16XE 'ਤੇ ਮੀਡੀਆ ਟਨਲਿੰਗ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ। diff --git a/fastlane/metadata/android/pa/changelogs/982.txt b/fastlane/metadata/android/pa/changelogs/982.txt new file mode 100644 index 000000000..829c85851 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/982.txt @@ -0,0 +1 @@ +ਸਥਿਰ YouTube ਕੋਈ ਸਟ੍ਰੀਮ ਨਹੀਂ ਚਲਾ ਰਿਹਾ। diff --git a/fastlane/metadata/android/pa/changelogs/983.txt b/fastlane/metadata/android/pa/changelogs/983.txt new file mode 100644 index 000000000..c3797c649 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/983.txt @@ -0,0 +1,9 @@ +ਨਵਾਂ ਡਬਲ-ਟੈਪ-ਟੂ-ਸੀਕ UI ਅਤੇ ਵਿਵਹਾਰ ਸ਼ਾਮਲ ਕਰੋ +ਸੈਟਿੰਗਾਂ ਨੂੰ ਖੋਜਣਯੋਗ ਬਣਾਓ +ਪਿੰਨ ਕੀਤੀਆਂ ਟਿੱਪਣੀਆਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਹਾਈਲਾਈਟ ਕਰੋ +FSFE ਦੇ PeerTube ਉਦਾਹਰਨ ਲਈ ਓਪਨ-ਵਿਦ-ਐਪ ਸਮਰਥਨ ਸ਼ਾਮਲ ਕਰੋ +ਗਲਤੀ ਸੂਚਨਾਵਾਂ ਸ਼ਾਮਲ ਕਰੋ +ਪਲੇਅਰ ਬਦਲਣ 'ਤੇ ਪਹਿਲੀ ਕਤਾਰ ਆਈਟਮ ਦੇ ਰੀਪਲੇਅ ਨੂੰ ਠੀਕ ਕਰੋ +ਫੇਲ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਲਾਈਵਸਟ੍ਰੀਮ ਦੇ ਦੌਰਾਨ ਬਫਰਿੰਗ ਕਰਦੇ ਸਮੇਂ ਜ਼ਿਆਦਾ ਉਡੀਕ ਕਰੋ +ਸਥਾਨਕ ਖੋਜ ਨਤੀਜਿਆਂ ਦਾ ਕ੍ਰਮ ਠੀਕ ਕਰੋ +ਪਲੇ ਕਤਾਰ ਵਿੱਚ ਖਾਲੀ ਆਈਟਮ ਖੇਤਰਾਂ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/984.txt b/fastlane/metadata/android/pa/changelogs/984.txt new file mode 100644 index 000000000..068d56d59 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/984.txt @@ -0,0 +1,7 @@ +ਪੂਰੀ ਸਕ੍ਰੀਨ ਨੂੰ ਭਰਨ ਅਤੇ ਟੈਬਲੇਟਾਂ ਅਤੇ ਟੀਵੀ 'ਤੇ ਸਕ੍ਰੋਲਿੰਗ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਸੂਚੀਆਂ ਵਿੱਚ ਲੋੜੀਂਦੀਆਂ ਸ਼ੁਰੂਆਤੀ ਆਈਟਮਾਂ ਲੋਡ ਕਰੋ +ਸੂਚੀਆਂ ਰਾਹੀਂ ਸਕ੍ਰੋਲ ਕਰਦੇ ਸਮੇਂ ਬੇਤਰਤੀਬੇ ਕਰੈਸ਼ਾਂ ਨੂੰ ਠੀਕ ਕਰੋ +ਪਲੇਅਰ ਨੂੰ ਸਿਸਟਮ UI ਦੇ ਅਧੀਨ ਤੇਜ਼ੀ ਨਾਲ ਸੀਕ ਓਵਰਲੇ ਆਰਕ ਜਾਣ ਦਿਓ +ਮਲਟੀ ਵਿੰਡੋ ਵਿੱਚ ਖੇਡਦੇ ਸਮੇਂ ਕਟਆਊਟਾਂ ਵਿੱਚ ਬਦਲਾਵ ਵਾਪਸ ਲਿਆਓ, ਜਿਸ ਨਾਲ ਕੁਝ ਫ਼ੋਨਾਂ 'ਤੇ ਪਲੇਅਰ ਰੀਗਰੈਸ਼ਨ ਦਾ ਕਾਰਨ ਬਣਦੇ ਹਨ। +compileSdk ਨੂੰ 30 ਤੋਂ 31 ਤੱਕ ਵਧਾਓ +ਅਸ਼ੁੱਧੀ ਰਿਪੋਰਟਿੰਗ ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ +ਪਲੇਅਰ ਵਿੱਚ ਕੁਝ ਕੋਡ ਰੀਫੈਕਟਰ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/985.txt b/fastlane/metadata/android/pa/changelogs/985.txt new file mode 100644 index 000000000..fe62a1330 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/985.txt @@ -0,0 +1 @@ +ਸਥਿਰ YouTube ਕੋਈ ਸਟ੍ਰੀਮ ਨਹੀਂ ਚਲਾ ਰਿਹਾ diff --git a/fastlane/metadata/android/pa/changelogs/986.txt b/fastlane/metadata/android/pa/changelogs/986.txt new file mode 100644 index 000000000..c9ab694a4 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/986.txt @@ -0,0 +1,15 @@ +ਨਵਾਂ +• ਨਵੀਆਂ ਸਟ੍ਰੀਮਾਂ ਲਈ ਸੂਚਨਾਵਾਂ +• ਬੈਕਗ੍ਰਾਊਂਡ ਅਤੇ ਵੀਡੀਓ ਪਲੇਅਰਾਂ ਵਿਚਕਾਰ ਅਰਾਮ ਨਾਲ ਤਬਦੀਲੀ +• ਸੈਮੀਟੋਨਸ ਦੁਆਰਾ ਪਿੱਚ ਬਦਲੋ +• ਇੱਕ ਪਲੇਲਿਸਟ ਵਿੱਚ ਮੁੱਖ ਪਲੇਅਰ ਕਤਾਰ ਜੋੜੋ + +ਸੁਧਾਰ +• ਸਪੀਡ/ਪਿਚ ਸਟੈਪ ਦਾ ਆਕਾਰ ਯਾਦ ਰੱਖੋ +• ਵੀਡੀਓ ਪਲੇਅਰ ਵਿੱਚ ਸ਼ੁਰੂਆਤੀ ਲੰਬੇ ਬਫਰਿੰਗ ਨੂੰ ਘੱਟ ਕਰੋ • Android TV ਲਈ ਪਲੇਅਰ UI ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• ਸਾਰੀਆਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ + +ਠੀਕ ਕੀਤਾ +• ਮੀਡੀਆ ਬਟਨ ਨੂੰ ਫਿਕਸ ਕਰੋ ਜੋ ਪਲੇਅਰ ਨਿਯੰਤਰਣਾਂ ਨੂੰ ਨਹੀਂ ਲੁਕਾਉਂਦਾ ਹੈ +• ਪਲੇਅਰ ਦੀ ਕਿਸਮ ਬਦਲਣ 'ਤੇ ਪਲੇਬੈਕ ਰੀਸੈਟ ਨੂੰ ਠੀਕ ਕਰੋ +• ਪਲੇਲਿਸਟ ਡਾਇਲਾਗ ਨੂੰ ਘੁੰਮਾਉਣ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/987.txt b/fastlane/metadata/android/pa/changelogs/987.txt new file mode 100644 index 000000000..93fc77a77 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/987.txt @@ -0,0 +1,11 @@ +ਨਵਾਂ +• ਪ੍ਰਗਤੀਸ਼ੀਲ HTTP ਤੋਂ ਇਲਾਵਾ ਸਪੋਰਟ ਡਿਲੀਵਰੀ ਵਿਧੀਆਂ: ਤੇਜ਼ ਪਲੇਬੈਕ ਲੋਡ ਹੋਣ ਦਾ ਸਮਾਂ, PeerTube ਅਤੇ SoundCloud ਲਈ ਫਿਕਸ, ਹਾਲ ਹੀ ਵਿੱਚ ਖਤਮ ਹੋਈਆਂ YouTube ਲਾਈਵਸਟ੍ਰੀਮਾਂ ਦਾ ਪਲੇਬੈਕ +• ਇੱਕ ਸਥਾਨਕ ਪਲੇਲਿਸਟ ਵਿੱਚ ਰਿਮੋਟ ਪਲੇਲਿਸਟ ਜੋੜਨ ਲਈ ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ +• Android 10+ ਸ਼ੇਅਰ ਸ਼ੀਟ ਵਿੱਚ ਚਿੱਤਰ ਦੀ ਪੂਰਵ-ਝਲਕ + + ਸੁਧਾਰ +• ਪਲੇਬੈਕ ਪੈਰਾਮੀਟਰ ਡਾਇਲਾਗ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• ਗਾਹਕੀ ਆਯਾਤ/ਨਿਰਯਾਤ ਬਟਨਾਂ ਨੂੰ ਤਿੰਨ-ਬਿੰਦੀਆਂ ਵਾਲੇ ਮੀਨੂ ਵਿੱਚ ਲੈ ਜਾਓ + +ਠੀਕ ਕੀਤਾ +• ਪਲੇਲਿਸਟ ਤੋਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਦੇਖੇ ਗਏ ਵੀਡੀਓ ਨੂੰ ਹਟਾਉਣਾ ਠੀਕ ਕਰੋ • ਸ਼ੇਅਰ ਮੀਨੂ ਥੀਮ ਅਤੇ "ਪਲੇਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ" ਐਂਟਰੀ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/988.txt b/fastlane/metadata/android/pa/changelogs/988.txt new file mode 100644 index 000000000..a50bcc144 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/988.txt @@ -0,0 +1,2 @@ +[YouTube] ਕਿਸੇ ਵੀ ਵੀਡੀਓ ਨੂੰ ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ "ਕੋਈ ਸਟ੍ਰੀਮ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰ ਸਕਿਆ" ਗਲਤੀ ਨੂੰ ਠੀਕ ਕਰੋ +[YouTube] ਫਿਕਸ "ਹੇਠ ਦਿੱਤੀ ਸਮੱਗਰੀ ਇਸ ਐਪ 'ਤੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।" ਬੇਨਤੀ ਕੀਤੀ ਵੀਡੀਓ ਦੀ ਬਜਾਏ ਸੁਨੇਹਾ ਵਿਖਾਇਆ ਗਿਆ diff --git a/fastlane/metadata/android/pa/changelogs/989.txt b/fastlane/metadata/android/pa/changelogs/989.txt new file mode 100644 index 000000000..9c00f845d --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/989.txt @@ -0,0 +1,3 @@ +• [YouTube] ਕਿਸੇ ਵੀ ਵੀਡੀਓ ਨੂੰ ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਅਨੰਤ ਲੋਡਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ +• [YouTube] ਕੁਝ ਵੀਡੀਓਜ਼ 'ਤੇ ਥ੍ਰੋਟਲਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ +• jsoup ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ 1.15.3 ਵਿੱਚ ਅੱਪਗ੍ਰੇਡ ਕਰੋ, ਜਿਸ ਵਿੱਚ ਸੁਰੱਖਿਆ ਫਿਕਸ ਸ਼ਾਮਲ ਹੈ diff --git a/fastlane/metadata/android/pa/changelogs/990.txt b/fastlane/metadata/android/pa/changelogs/990.txt new file mode 100644 index 000000000..ce82cbdd6 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/990.txt @@ -0,0 +1,13 @@ +ਇਹ ਰੀਲੀਜ਼ Android 4.4 ਕਿਟਕੈਟ ਲਈ ਸਮਰਥਨ ਛੱਡਦੀ ਹੈ, ਹੁਣ ਘੱਟੋ-ਘੱਟ ਸੰਸਕਰਣ Android 5 Lollipop ਹੈ! +ਨਵਾਂ +• ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ ਵਾਲੇ ਮੀਨੂ ਤੋਂ ਡਾਊਨਲੋਡ ਕਰੋ +• ਫੀਡ ਵਿੱਚ ਭਵਿੱਖ ਦੇ ਵੀਡੀਓ ਲੁਕਾਓ +• ਸਥਾਨਕ ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ +ਸੁਧਾਰ +• ਪਲੇਅਰ ਕੋਡ ਨੂੰ ਛੋਟੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਰੀਫੈਕਟਰ ਕਰੋ: ਘੱਟ RAM ਵਰਤੀ ਗਈ, ਘੱਟ ਬੱਗ +• ਥੰਮਨੇਲ ਦੇ ਸਕੇਲ ਮੋਡ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• ਚਿੱਤਰ ਪਲੇਸਹੋਲਡਰ ਨੂੰ ਵੈਕਟਰਾਈਜ਼ ਕਰੋ + +ਠੀਕ ਕੀਤਾ +• ਪਲੇਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਨਾਲ ਵੱਖ-ਵੱਖ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰੋ: ਪੁਰਾਣੀ/ਗੁੰਮ ਮੀਡੀਆ ਜਾਣਕਾਰੀ, ਵਿਗੜਿਆ ਥੰਮਨੇਲ +• ਪੂਰੀ ਸਕ੍ਰੀਨ ਦੀ ਥਾਂ ਉਸਦੇ 1/4 ਹਿੱਸੇ ਦੀ ਵਰਤੋਂ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/991.txt b/fastlane/metadata/android/pa/changelogs/991.txt new file mode 100644 index 000000000..cdd3f14da --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/991.txt @@ -0,0 +1,13 @@ +ਨਵਾਂ +• "ਬ੍ਰਾਊਜ਼ਰ 'ਚ ਖੋਲੋ" ਬਟਨ ਤਰੁੱਟੀ ਪੈਨਲ ਵਿੱਚ ਜੋੜਿਆ +• ਚੈਨਲ ਗਰੁੱਪਾਂ ਨੂੰ ਲਿਸਟ ਦੇ ਰੂਪ 'ਚ ਵੇਖਣ ਦਾ ਵਿਕਲਪ ਜੋੜਿਆ ਗਿਆ +• [ਯੂਟਿਊਬ] ਸਟ੍ਰੀਮ ਸੈਗਮੈਟਾਂ ਨੂੰ ਲੰਮਾ ਦਬਾ ਕੇ ਟਾਈਮ ਸਟੈਂਪਡ Url ਖੋਲਣ ਦੀ ਸਹੂਲਤ ਜੋੜੀ ਗਈ +• ਮਿੰਨੀ ਪਲੇਅਰ ਵਿੱਚ ਬੈਕਗ੍ਰਾਉਂਡ ਪਲੇਅਰ ਖੋਲਣ ਵਾਲਾ ਬਟਨ ਜੋੜਿਆ ਗਿਆ + +ਸੁਧਾਰ +• ਨਵੀਂ ਆਈਸਲੈਂਡਿਕ, ਪੰਜਾਬੀ (ਪਾਕਿਸਤਾਨ) ਭਾਸ਼ਾ ਅਤੇ ਹੋਰ ਕਈ ਭਾਸ਼ਾਵਾਂ [ਸਮੇਤ ਪੰਜਾਬੀ (ਭਾਰਤ] ਦੇ ਅਨੁਵਾਦ ਸੁਧਾਰ ਕਰਕੇ ਜੋੜੇ ਗਏ +• ਹੋਰ ਅੰਦਰੂਨੀ ਸੁਧਾਰ + +ਸਹੀ ਕੀਤੇ +• ਕਈ ਤਰਾਂ ਦੇ ਕਰੈਸ਼ ਦਰੁੱਸਤ ਕੀਤੇ ਗਏ +• [ਯੂਟਿਊਬ] ਚੈਨਲ ਦੇ ਵੀਡੀਓ ਵਿਖਣੇ ਅਤੇ ਫੀਡ ਵਿੱਚ ਵਿਖਣੇ ਸਹੀ ਕੀਤੇ ਗਏ diff --git a/fastlane/metadata/android/pa/changelogs/992.txt b/fastlane/metadata/android/pa/changelogs/992.txt new file mode 100644 index 000000000..de71db154 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/992.txt @@ -0,0 +1,15 @@ +ਨਵਾਂ +• ਵੀਡੀਓ ਵੇਰਵਿਆਂ ਵਿੱਚ ਗਾਹਕਾਂ ਦੀ ਗਿਣਤੀ +• ਕਤਾਰ ਤੋਂ ਡਾਊਨਲੋਡ ਕਰੋ +• ਇੱਕ ਪਲੇਅਲਿਸਟ ਥੰਮਨੇਲ ਪੱਕੇ ਤੌਰ 'ਤੇ ਸੈੱਟ ਕਰੋ +• ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਪ੍ਰੈੱਸ ਕਰਨ ਵਾਲੇ ਹੈਸ਼ਟੈਗ ਅਤੇ ਲਿੰਕ +• ਕਾਰਡ ਦ੍ਰਿਸ਼ ਮੋਡ + +ਸੁਧਾਰ +• ਵੱਡਾ ਮਿੰਨੀ-ਪਲੇਅਰ ਬੰਦ ਬਟਨ +• ਮੁਲਾਇਮ ਥੰਮਨੇਲ ਡਾਊਨਸਕੇਲਿੰਗ +• ਟਾਰਗੇਟ ਐਂਡਰਾਇਡ 13 (ਏਪੀਆਈ 33) +• ਹੁਣ ਪਲੇਅਰ ਸੀਕ ਕਰਨ ਤੇ ਰੁਕਦਾ ਨਹੀਂ +• DeX/ਮਾਊਸ 'ਤੇ ਓਵਰਲੇਅ ਨੂੰ ਫਿਕਸ ਕਰੋ +• ਬਿਨਾਂ ਕਿਸੇ ਵੱਖਰੇ ਆਡੀਓ ਸਟ੍ਰੀਮ ਦੇ ਬੈਕਗ੍ਰਾਉਂਡ ਪਲੇਅਰ ਨੂੰ ਚਲਾਉਣ ਦਿਓ +• ਵੱਖ-ਵੱਖ ਯੂਟਿਊਬ ਫਿਕਸ ਅਤੇ ਹੋਰ… diff --git a/fastlane/metadata/android/pl/changelogs/992.txt b/fastlane/metadata/android/pl/changelogs/992.txt new file mode 100644 index 000000000..98d0d1773 --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/992.txt @@ -0,0 +1,17 @@ +Nowe +• Liczba subskrybentów w szczegółach wideo +• Pobieranie z kolejki +• Ustawianie stałej miniatury playlisty +• Długie naciśnięcie hashtagów i linków +• Tryb widoku karty + +Ulepszone +• Większy przycisk zamykania miniodtwarzacza +• Płynniejsze zmniejszanie miniatur +• Docelowy system Android 13 (API 33) +• Przewijanie nie wstrzymuje już odtwarzacza + +Naprawione +• Nakładka dla DeX/myszy +• Zezwalanie na odtwarzanie w tle bez oddzielnych strumieni audio +• Różne poprawki YouTube i więcej… diff --git a/fastlane/metadata/android/pt-BR/changelogs/770.txt b/fastlane/metadata/android/pt-BR/changelogs/770.txt new file mode 100644 index 000000000..d53963daa --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/770.txt @@ -0,0 +1,4 @@ +Mudanças no 0.47.2 + +Consertado +• Consertado, nenhum vídeo estava disponível diff --git a/fastlane/metadata/android/pt-PT/changelogs/990.txt b/fastlane/metadata/android/pt-PT/changelogs/990.txt new file mode 100644 index 000000000..63c3c3d19 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/990.txt @@ -0,0 +1,14 @@ +Esta versão deixa de suportar o Android 4.4 KitKat, agora a versão mínima é o Android 5 Lollipop! + +Novo +• Descarregar a partir do menu de toque longo +• Ocultar vídeos futuros no feed +• Partilhar listas de reprodução locais + +Melhorado +• Refatorizado o código do reprodutor: menos RAM, menos erros +• Melhorada a escala de miniaturas + +Corrigido +• Vários problemas com a notificação do reprodutor: informações de média desatualizadas/ausentes, miniatura distorcida +• Ecrã cheio usando 1/4 do ecrã diff --git a/fastlane/metadata/android/pt-PT/changelogs/991.txt b/fastlane/metadata/android/pt-PT/changelogs/991.txt new file mode 100644 index 000000000..2331d0c35 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/991.txt @@ -0,0 +1,13 @@ +Novo +•Botão "Abrir no navegador" no painel de erros +•Opção para mostrar grupos de canais como lista +•[YouTube] Clique longo nos segmentos de transmissão para partilhar o URL com a data/hora +•Botão de fila de reprodução no mini reprodutor + +Melhorado +•Nova localização em islandês e outras traduções atualizadas +•Muitas melhorias internas + +Corrigido +•Várias falhas +•[YouTube] Correção no carregamento de canais, feeds não dedicados e solução alternativa de problemas de reprodução em alguns países diff --git a/fastlane/metadata/android/pt-PT/changelogs/992.txt b/fastlane/metadata/android/pt-PT/changelogs/992.txt new file mode 100644 index 000000000..2da819beb --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/992.txt @@ -0,0 +1,17 @@ +Novo +- Contagem de subscritores em detalhes de vídeo +- Descarregar da fila +- Uma miniatura permanente de listas de reprodução +- Hashtags e ligações de imprensa longa +- Modo de visualização de cartões + +Melhorado +- Botão de fecho de mini-reprodutor maior +- Redução mais suave das miniaturas +- Alvo Android 13 (API 33) +- Procurar não pausa o reprodutor + +Fixa +- Corrigido sobreposições no DeX/rato +- Permitir um leitor de fundo sem fluxo de áudio separados +- Várias correções do YouTube… diff --git a/fastlane/metadata/android/pt/changelogs/65.txt b/fastlane/metadata/android/pt/changelogs/65.txt index 89a006829..92b3dd535 100644 --- a/fastlane/metadata/android/pt/changelogs/65.txt +++ b/fastlane/metadata/android/pt/changelogs/65.txt @@ -8,7 +8,7 @@ - Atualização da versão da biblioteca e correção de cópia de segurança da base de dados #1510 - ExoPlayer 2.8.2 Atualização #1392 - Retrabalhado a caixa de diálogo de controlo de velocidade de reprodução para suportar diferentes tamanhos de etapa para uma mudança de velocidade mais rápida. -- Adicionado uma alternância para avanço rápido durante silêncios no controle de velocidade de reprodução. Isso deve ser útil para audiolivros e certos géneros musicais, e pode trazer uma experiência verdadeiramente perfeita (e pode quebrar uma música com muitos silêncios =\\). +- Adicionado uma alternância para avanço rápido durante silêncios no controle de velocidade de reprodução. Isso deve ser útil para audiolivros e certos gêneros musicais, e pode trazer uma experiência verdadeiramente perfeita (e pode quebrar uma música com muitos silêncios =\\). - Resolução de fonte de média ré fatorada para permitir a passagem de metadados junto com a média internamente no reprodutor, em vez de fazê-lo manualmente. Agora temos uma única fonte de metadados e está disponível diretamente quando a reprodução é iniciada. - Correção de metadados de listas de reprodução remotas que não são atualizadas quando novos metadados estão disponíveis quando o fragmento da lista de reprodução é aberta. - Várias correções de interface do utilizador : #1383, controles de notificação do reprodutor em segundo plano agora sempre brancos, mais fácil de desligar o reprodutor pop-up por meio de arremesso diff --git a/fastlane/metadata/android/pt/changelogs/951.txt b/fastlane/metadata/android/pt/changelogs/951.txt index c391aa519..deb97a0ee 100644 --- a/fastlane/metadata/android/pt/changelogs/951.txt +++ b/fastlane/metadata/android/pt/changelogs/951.txt @@ -13,3 +13,5 @@ Melhorado Fixo • Desync de áudio/vídeo • [PeerTube] Gerir comentários apagados + +e mais diff --git a/fastlane/metadata/android/pt/changelogs/991.txt b/fastlane/metadata/android/pt/changelogs/991.txt new file mode 100644 index 000000000..2331d0c35 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/991.txt @@ -0,0 +1,13 @@ +Novo +•Botão "Abrir no navegador" no painel de erros +•Opção para mostrar grupos de canais como lista +•[YouTube] Clique longo nos segmentos de transmissão para partilhar o URL com a data/hora +•Botão de fila de reprodução no mini reprodutor + +Melhorado +•Nova localização em islandês e outras traduções atualizadas +•Muitas melhorias internas + +Corrigido +•Várias falhas +•[YouTube] Correção no carregamento de canais, feeds não dedicados e solução alternativa de problemas de reprodução em alguns países diff --git a/fastlane/metadata/android/pt/changelogs/992.txt b/fastlane/metadata/android/pt/changelogs/992.txt new file mode 100644 index 000000000..2da819beb --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/992.txt @@ -0,0 +1,17 @@ +Novo +- Contagem de subscritores em detalhes de vídeo +- Descarregar da fila +- Uma miniatura permanente de listas de reprodução +- Hashtags e ligações de imprensa longa +- Modo de visualização de cartões + +Melhorado +- Botão de fecho de mini-reprodutor maior +- Redução mais suave das miniaturas +- Alvo Android 13 (API 33) +- Procurar não pausa o reprodutor + +Fixa +- Corrigido sobreposições no DeX/rato +- Permitir um leitor de fundo sem fluxo de áudio separados +- Várias correções do YouTube… diff --git a/fastlane/metadata/android/ru/changelogs/730.txt b/fastlane/metadata/android/ru/changelogs/730.txt new file mode 100644 index 000000000..c721a163f --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/730.txt @@ -0,0 +1,2 @@ +# Исправлено +- Повторно исправлено ошибку функции расшифровки. diff --git a/fastlane/metadata/android/ru/changelogs/740.txt b/fastlane/metadata/android/ru/changelogs/740.txt new file mode 100644 index 000000000..a89174aeb --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/740.txt @@ -0,0 +1,23 @@ +

Улучшения

+
    +
  • сделана возможность нажимать на ссылки в комментариях, увеличен размер текста
  • +
  • поиск по нажатию на временные отметки в комментариях
  • +
  • показывать предпочитаемую вкладку, на основании состояния недавно выбраных
  • +
  • добавить плейлист в очередь при длинном нажатии на 'Фон' в окне плейлиста
  • +
  • поиск по тексту переданному приложению, если это не ссылка
  • +
  • добавить "поделиться на этом моменте" кнопку в основной видео-проигрыватель
  • +
  • добавить кнопку закрытия в основной видео-проигрыватель, когда очередь проигрывания закончилась
  • +
  • добавить "Воспроизвести на фоне" в меню длинного нажатия для предметов из видео-листа
  • +
  • улучшить английский перевод для команд Воспроизвести/Добавить в очередь
  • +
  • мелкие улучшения работы приложения
  • +
  • уюрать неиспользованные файлы
  • +
  • обновить ExoPlayer до 2.9.6
  • +
  • добавить поддержку ссылок Invidious
  • +
+

Исправлено

+
    +
  • исправлено пролистывание с выключенными комментариями и похожими трансляциями
  • +
  • исправлено запуск CheckForNewAppVersionTask когда это не нужно't
  • +
  • исправлено импорт подписок с youtube: игнорирование подписок с неправильными ссылками и сохранение тех, у которых пустые названия
  • +
  • исправить неправильные YouTube ссылки: название метки подписи не всегда "signature", что не даёт загружаться трансляциям
  • +
diff --git a/fastlane/metadata/android/ru/changelogs/750.txt b/fastlane/metadata/android/ru/changelogs/750.txt new file mode 100644 index 000000000..aac46059a --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/750.txt @@ -0,0 +1,22 @@ +Новое +Продолжить проигрывание #2288 +• Продолжать трансляции с того момента, где вы остановились +Улучшения загрузчика #2149 +• Использовать Storage Access Framework для хранения загрузок на SD-картах +• Новый mp4 микшер +• Выборочно меняйте путь загрузки перед тем, как начать скачивание +• Учитывать сети с измеряемым трафиком + + +Улучшено +• Убрано gema строчки #2295 +• Работа с изменениями (авто)поворота во время цикла использования #2444 +• Сделать меню длинного нажатия постоянными #2368 + +Исправлено +• Исправлено не показывающееся название выбранной дорожки субтитров #2394 +• Не вылетать при провальной проверке обновлений приложения (GitHub версия) #2423 +• Исправлено вечную загрузку при достижении 99.9% #2440 +• Обновление метаданных очереди проигрывания #2453 +• [SoundCloud] Исправлен вылет при загрузке плейлистов TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Исправлена ошибка парсинга времени проигрывания TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ru/changelogs/780.txt b/fastlane/metadata/android/ru/changelogs/780.txt index 24cfa6e7f..4b09a23bd 100644 --- a/fastlane/metadata/android/ru/changelogs/780.txt +++ b/fastlane/metadata/android/ru/changelogs/780.txt @@ -3,7 +3,7 @@ Улучшено • Добавлена возможность очистки состояний воспроизведения #2550 • Показ скрытых каталогов в средстве выбора файлов #2591 -• Поддержка URL-адресов из экземпляров `invidio.us`, открываемых с помощью NewPipe #2488 +• Поддержка URL-адресов из экземпляров `invidio.us`, открываемых с помощью NewPipe #2488 • Добавлена поддержка URL-адресов `music.youtube.com` TeamNewPipe/NewPipeExtractor #194 Исправлено diff --git a/fastlane/metadata/android/ru/changelogs/820.txt b/fastlane/metadata/android/ru/changelogs/820.txt new file mode 100644 index 000000000..a426ed393 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/820.txt @@ -0,0 +1 @@ +Исправлено расшифровку названия функции regex, из-за чего YouTube нельзя было использовать. diff --git a/fastlane/metadata/android/ru/changelogs/830.txt b/fastlane/metadata/android/ru/changelogs/830.txt new file mode 100644 index 000000000..ffa9dfa68 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/830.txt @@ -0,0 +1 @@ +Обновлено SoundCloud client_id, чтобы исправить проблемы с SoundCloud. diff --git a/fastlane/metadata/android/ru/changelogs/850.txt b/fastlane/metadata/android/ru/changelogs/850.txt new file mode 100644 index 000000000..3a81f4aef --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/850.txt @@ -0,0 +1 @@ +В этом релизе обновлена версия сайта YouTube. Старая версия сайта больше не будет поддерживаться начиная с Марта, поэтому вам нужно обновить NewPipe. diff --git a/fastlane/metadata/android/ru/changelogs/910.txt b/fastlane/metadata/android/ru/changelogs/910.txt new file mode 100644 index 000000000..883c347f5 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/910.txt @@ -0,0 +1 @@ +Исправлено перенесение баз данных, что мешало загрузке NewPipe в редких случаях. diff --git a/fastlane/metadata/android/ru/changelogs/963.txt b/fastlane/metadata/android/ru/changelogs/963.txt new file mode 100644 index 000000000..06da13b42 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/963.txt @@ -0,0 +1 @@ +• [YouTube] Исправлено продолжение канала diff --git a/fastlane/metadata/android/sl/changelogs/991.txt b/fastlane/metadata/android/sl/changelogs/991.txt new file mode 100644 index 000000000..14f174a5a --- /dev/null +++ b/fastlane/metadata/android/sl/changelogs/991.txt @@ -0,0 +1,13 @@ +Novo +- Dodajanje gumba "Odpri v brskalniku" v podoknu z napakami +- Dodana možnost za prikaz skupin kanalov kot seznam +- [YouTube] Dolgi pritisk na segmente video pretoka za deljenje časovnega žiga URL-ja +- Dodajte gumb za predvajanje v vrsti v mini predvajalnik + +Izboljšave +- Dodana islandska lokalizacija ter posodobitev številnih drugih prevodov +- Številne notranje izboljšave + +Popravki +- Odprava večih sesutij +- [YouTube] Odprava težave z nalaganjem kanalov, nenamenskimi viri ter predvajanjem v nekaterih državah diff --git a/fastlane/metadata/android/sl/short_description.txt b/fastlane/metadata/android/sl/short_description.txt new file mode 100644 index 000000000..8826524fc --- /dev/null +++ b/fastlane/metadata/android/sl/short_description.txt @@ -0,0 +1 @@ +Brezplačen in enostaven YouTube "frontend" za Android. diff --git a/fastlane/metadata/android/te/changelogs/65.txt b/fastlane/metadata/android/te/changelogs/65.txt new file mode 100644 index 000000000..34d16b0eb --- /dev/null +++ b/fastlane/metadata/android/te/changelogs/65.txt @@ -0,0 +1,26 @@ +### మెరుగుదలలు + +- బర్గర్‌మెను ఐకాన్ యానిమేషన్ #1486ని నిలిపివేయండి +- డౌన్‌లోడ్‌ల తొలగింపును రద్దు చేయండి #1472 +- షేర్ మెను #1498లో డౌన్‌లోడ్ ఎంపిక +- లాంగ్ ట్యాప్ మెనూ #1454కి షేర్ ఆప్షన్ జోడించబడింది +- నిష్క్రమణ #1354లో ప్రధాన ప్లేయర్‌ని తగ్గించండి +- లైబ్రరీ వెర్షన్ అప్‌డేట్ మరియు డేటాబేస్ బ్యాకప్ ఫిక్స్ #1510 +- ExoPlayer 2.8.2 నవీకరణ #1392 + - వేగవంతమైన స్పీడ్ మార్పు కోసం వివిధ దశల పరిమాణాలకు మద్దతు ఇవ్వడానికి ప్లేబ్యాక్ స్పీడ్ కంట్రోల్ డైలాగ్‌ని మళ్లీ రూపొందించారు. + - ప్లేబ్యాక్ స్పీడ్ కంట్రోల్‌లో నిశ్శబ్దం సమయంలో ఫాస్ట్-ఫార్వర్డ్ చేయడానికి టోగుల్ జోడించబడింది. ఇది ఆడియోబుక్‌లు మరియు నిర్దిష్ట సంగీత శైలులకు సహాయకరంగా ఉండాలి మరియు నిజమైన అతుకులు లేని అనుభవాన్ని అందించగలదు (మరియు అనేక నిశ్శబ్దాలతో పాటను విచ్ఛిన్నం చేయవచ్చు =\\). + - మాన్యువల్‌గా కాకుండా ప్లేయర్‌లో అంతర్గతంగా మీడియాతో పాటు మెటాడేటాను పాస్ చేయడానికి రీఫ్యాక్టర్డ్ మీడియా సోర్స్ రిజల్యూషన్. ఇప్పుడు మేము మెటాడేటా యొక్క ఒకే మూలాన్ని కలిగి ఉన్నాము మరియు ప్లేబ్యాక్ ప్రారంభమైనప్పుడు నేరుగా అందుబాటులో ఉంటుంది. + - ప్లేజాబితా భాగాన్ని తెరిచినప్పుడు కొత్త మెటాడేటా అందుబాటులో ఉన్నప్పుడు స్థిర రిమోట్ ప్లేజాబితా మెటాడేటా నవీకరించబడదు. + - వివిధ UI పరిష్కారాలు: #1383, బ్యాక్‌గ్రౌండ్ ప్లేయర్ నోటిఫికేషన్ నియంత్రణలు ఇప్పుడు ఎల్లప్పుడూ తెల్లగా ఉంటాయి, ఫ్లింగ్ ద్వారా పాప్‌అప్ ప్లేయర్‌ని షట్‌డౌన్ చేయడం సులభం +- మల్టీసర్వీస్ కోసం రీఫ్యాక్టర్డ్ ఆర్కిటెక్చర్‌తో కొత్త ఎక్స్‌ట్రాక్టర్‌ని ఉపయోగించండి + +### పరిష్కారాలు + +- #1440 బ్రోకెన్ వీడియో ఇన్ఫో లేఅవుట్ #1491ని పరిష్కరించండి +- చరిత్ర పరిష్కారాన్ని వీక్షించండి #1497 + - #1495, యూజర్ ప్లేజాబితాను యాక్సెస్ చేసిన వెంటనే మెటాడేటా (థంబ్‌నెయిల్, టైటిల్ మరియు వీడియో కౌంట్) అప్‌డేట్ చేయడం ద్వారా. + - #1475, వినియోగదారు వివరాలు ఫ్రాగ్‌మెంట్‌పై బాహ్య ప్లేయర్‌లో వీడియోను ప్రారంభించినప్పుడు డేటాబేస్‌లో వీక్షణను నమోదు చేయడం ద్వారా. +- పాప్అప్ మోడ్ విషయంలో స్క్రీన్ సమయం ముగియడాన్ని పరిష్కరించండి. #1463 (స్థిర #640) +- ప్రధాన వీడియో ప్లేయర్ ఫిక్స్ #1509 + - [#1412] ప్లేయర్ యాక్టివిటీ బ్యాక్‌గ్రౌండ్‌లో ఉన్నప్పుడు కొత్త ఉద్దేశం వచ్చినప్పుడు ప్లేయర్ NPEకి కారణమయ్యే ఫిక్స్డ్ రిపీట్ మోడ్. + - పాప్‌అప్‌కి ప్లేయర్‌ని కనిష్టీకరించడం అనేది పాప్‌అప్ అనుమతి ఇవ్వనప్పుడు ప్లేయర్‌ను నాశనం చేయదు. diff --git a/fastlane/metadata/android/uk/changelogs/951.txt b/fastlane/metadata/android/uk/changelogs/951.txt index 1cd68b0b8..37ebfd318 100644 --- a/fastlane/metadata/android/uk/changelogs/951.txt +++ b/fastlane/metadata/android/uk/changelogs/951.txt @@ -5,7 +5,7 @@ •Швид.перемот.вперед/назад у фоні/вікні програв.черги •Показ порад пошуку: мали на увазі й показ результ. для Покр. -•Вил.запис метадан.програми в зміш.файли +•Вил.запис метадан.застосунку в зміш.файли •Не вилуч.невдалі потоки з черги •Оновл.колір пан.стану відповідно до коль.пан.засобів Випр. diff --git a/fastlane/metadata/android/uk/changelogs/992.txt b/fastlane/metadata/android/uk/changelogs/992.txt new file mode 100644 index 000000000..4efccccb4 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/992.txt @@ -0,0 +1,17 @@ +Нове +• Кількість підписників у поробицях відео +• Завантаження з черги +• Постійна мініатюра добірки +• Затискання хештегів і посилань +• Картковий режим перегляду + +Удосконалено +• Більша кнопка закриття мініпрогравача +• Плавніше зменшення масштабу мініатюр +• Цільова версія Android 13 (API 33) +• Пошук більше не призупиняє програвач + +Виправлено +• Виправлено накладання на DeX/миша +• Дозволено фоновий програвач без окремих аудіопотоків +• Різні виправлення YouTube тощо… diff --git a/fastlane/metadata/android/zh-Hant/changelogs/991.txt b/fastlane/metadata/android/zh-Hant/changelogs/991.txt new file mode 100644 index 000000000..76e94f6b2 --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/991.txt @@ -0,0 +1,13 @@ +新增 +• 錯誤面板中「以瀏覽器開啟」按鈕 +• 頻道群組以清單顯示選項 +• [YouTube] 長按串流片段以分享時間戳記 URL +• 迷你播放器的「新增至播放佇列」按鈕 + +改進 +• 新增冰島文語系並更新許多其他翻譯 +• 許多內部改進 + +修正 +• 修正多項閃退 +• [YouTube] 修正頻道載入、非專屬摘要並應對部分國家播放問題 diff --git a/fastlane/metadata/android/zh-Hant/changelogs/992.txt b/fastlane/metadata/android/zh-Hant/changelogs/992.txt new file mode 100644 index 000000000..97bc793b2 --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/992.txt @@ -0,0 +1,17 @@ +新增 +• 影片詳細資訊的訂閱者人數 +• 佇列功能表的下載按鈕 +• 永久設定播放清單的縮圖 +• 主題標籤和連結的長按動作 +• 卡片檢視模式 + +改進 +• 迷你播放器的關閉按鈕略為放大 +• 縮圖縮小時較順滑 +• 目標版本現為 Android 13 (API 33) +• 快轉時不再暫停播放器 + +修正 +• 修正 DeX/滑鼠的覆蓋 +• 背景播放器允許無獨立音訊串流 +• 若干 YouTube 修正及其他… diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/991.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/991.txt new file mode 100644 index 000000000..e025512a5 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/991.txt @@ -0,0 +1,13 @@ +新嘢 +• 加埋「喺瀏覽器開啟」個掣落問題版面 +• 頻道成軍有得揀一行行列陣 +• [YouTube] 撳實串流片段去分享時間點 URL +• 袖珍播放器加埋排隊播個掣 + +進步 +• 新加冰島文翻譯,更新唔少其他文 +• 內部祁宴氛:圍內吶喊返嚟喇 + +執漏 +• 整返好若干彈 app 問題 +• [YouTube] 修正頻道載入同埋非特設摘要,應對部份國家播放問題 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/992.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/992.txt new file mode 100644 index 000000000..bfe34c021 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/992.txt @@ -0,0 +1,17 @@ +新嘢 +• 影片詳情騷埋訂閱人數 +• 排隊播整埋個下載掣 +• 自選播放清單封面縮圖 +• 撳實主題標籤同連結有得複製 +• 有得以一張張白紙舉起一條條片 + +進步 +• 袖珍播放器個閂埋掣大粒啲 +• 縮圖縮細時幼細啲 +• 編譯目標版本訂為 Android 13 (API 33) +• 條片快轉時唔再暫停播放器 + +執漏 +• 修正三星 DeX/滑鼠覆蓋 +• 無獨立聲音串流都有得幕後播 +• 若干 YouTube 修正、等等…