From eb3363d4dd76a69a14777390023c159f42daf2dc Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Tue, 10 Jan 2023 20:55:18 +0100 Subject: [PATCH 01/54] Created the first draft. --- .../playlist/dao/PlaylistStreamDAO.java | 11 ++++++++++ .../local/playlist/LocalPlaylistFragment.java | 20 +++++++++++++++++++ .../local/playlist/LocalPlaylistManager.java | 6 ++++++ app/src/main/res/menu/menu_local_playlist.xml | 6 ++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 44 insertions(+) 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..594df5c25 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 @@ -83,4 +83,15 @@ public interface PlaylistStreamDAO extends BasicDAO { + " GROUP BY " + JOIN_PLAYLIST_ID + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") Flowable> getPlaylistMetadata(); + + @Transaction + @Query("DELETE FROM " + PLAYLIST_STREAM_JOIN_TABLE + + " WHERE " + JOIN_PLAYLIST_ID + "=:playlistId" + + " AND " + JOIN_STREAM_ID + " IN (" + + " SELECT " + JOIN_STREAM_ID + + " FROM " + PLAYLIST_STREAM_JOIN_TABLE + + " WHERE " + JOIN_PLAYLIST_ID + "=:playlistId" + + " GROUP BY " + JOIN_STREAM_ID + + " HAVING COUNT(*) > 1 )" ) + Flowable> removeDuplicates(long playlistId); } 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..a5fb67576 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 @@ -367,6 +367,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment { + removeDuplicatesInPlaylist(); + }) + .setNeutralButton(R.string.cancel, null); + + builder.create().show(); + } + + private void removeDuplicatesInPlaylist() { + + } + private void deleteItem(final PlaylistStreamEntry item) { if (itemListAdapter == null) { return; 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..0752ab49d 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 @@ -86,6 +86,12 @@ public class LocalPlaylistManager { return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io()); } + public Flowable> removeDuplicateStreams() { + // TODO: Delete Duplicates and rebuild the index + // TODO: Rebuild the index + return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io()); + } + public Flowable> getPlaylistStreams(final long playlistId) { return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io()); } diff --git a/app/src/main/res/menu/menu_local_playlist.xml b/app/src/main/res/menu/menu_local_playlist.xml index 0ff182b48..c57e8ad95 100644 --- a/app/src/main/res/menu/menu_local_playlist.xml +++ b/app/src/main/res/menu/menu_local_playlist.xml @@ -12,8 +12,14 @@ android:id="@+id/menu_item_rename_playlist" android:title="@string/rename_playlist" app:showAsAction="never" /> + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4e6889304..5d8ddb692 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -626,6 +626,7 @@ System default Remove watched Remove watched videos? + Remove duplicates Videos that have been watched before and after being added to the playlist will be removed. \nAre you sure\? This cannot be undone! Yes, and partially watched videos From 135fc082126529c0cc0dea2e3128d9fbaa86890a Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Fri, 13 Jan 2023 21:35:22 +0100 Subject: [PATCH 02/54] Implemented the "remove duplicates" feature. --- .../playlist/dao/PlaylistStreamDAO.java | 24 ++++++++++++------- .../local/playlist/LocalPlaylistFragment.java | 17 +++++++++++-- .../local/playlist/LocalPlaylistManager.java | 7 +++--- app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 36 insertions(+), 14 deletions(-) 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 594df5c25..015a77002 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 @@ -84,14 +84,22 @@ public interface PlaylistStreamDAO extends BasicDAO { + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") Flowable> getPlaylistMetadata(); + @RewriteQueriesToDropUnusedColumns @Transaction - @Query("DELETE FROM " + PLAYLIST_STREAM_JOIN_TABLE - + " WHERE " + JOIN_PLAYLIST_ID + "=:playlistId" - + " AND " + JOIN_STREAM_ID + " IN (" - + " SELECT " + JOIN_STREAM_ID + @Query("SELECT *, MIN(" + JOIN_INDEX + ") FROM " + STREAM_TABLE + " INNER JOIN " + + "(SELECT " + JOIN_STREAM_ID + "," + JOIN_INDEX + " FROM " + PLAYLIST_STREAM_JOIN_TABLE - + " WHERE " + JOIN_PLAYLIST_ID + "=:playlistId" - + " GROUP BY " + JOIN_STREAM_ID - + " HAVING COUNT(*) > 1 )" ) - Flowable> removeDuplicates(long playlistId); + + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId)" + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID + + " LEFT JOIN " + + "(SELECT " + JOIN_STREAM_ID + " AS " + JOIN_STREAM_ID_ALIAS + ", " + + STREAM_PROGRESS_MILLIS + + " FROM " + STREAM_STATE_TABLE + " )" + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID_ALIAS + + " GROUP BY " + STREAM_ID + + " ORDER BY " + JOIN_INDEX + " ASC") + Flowable> getStreamsWithoutDuplicates(long playlistId); + + + } 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 a5fb67576..9881a0a20 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 @@ -627,8 +627,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment { removeDuplicatesInPlaylist(); }) @@ -638,7 +638,20 @@ public class LocalPlaylistFragment extends BaseLocalListFragment itemsToKeep = playlistManager + .getDistinctPlaylistStreams(playlistId).blockingFirst(); + itemListAdapter.clearStreamItemList(); + itemListAdapter.addItems(itemsToKeep); + saveChanges(); + + final long videoCount = itemListAdapter.getItemsList().size(); + setVideoCount(videoCount); + if (videoCount == 0) { + showEmptyState(); + } + //TODO: Do we have to show loading? + //hideLoading(); } private void deleteItem(final PlaylistStreamEntry 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 0752ab49d..f397be0df 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 @@ -86,10 +86,9 @@ public class LocalPlaylistManager { return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io()); } - public Flowable> removeDuplicateStreams() { - // TODO: Delete Duplicates and rebuild the index - // TODO: Rebuild the index - return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io()); + public Flowable> getDistinctPlaylistStreams(final long playlistId) { + return playlistStreamTable + .getStreamsWithoutDuplicates(playlistId).subscribeOn(Schedulers.io()); } public Flowable> getPlaylistStreams(final long playlistId) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d8ddb692..cdde2e5ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -627,6 +627,8 @@ Remove watched Remove watched videos? Remove duplicates + Remove duplicates? + Do you want to remove all duplicate streams in this playlist? Videos that have been watched before and after being added to the playlist will be removed. \nAre you sure\? This cannot be undone! Yes, and partially watched videos From fdfeac081ad9fe6094582d29a8df72d00e7d2271 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Mon, 5 Dec 2022 00:15:05 +0100 Subject: [PATCH 03/54] Implemented a warning before adding duplicate to playlist. --- .../playlist/dao/PlaylistStreamDAO.java | 11 +++++++ .../local/dialog/PlaylistAppendDialog.java | 32 ++++++++++++++++++- .../local/playlist/LocalPlaylistManager.java | 4 +++ app/src/main/res/values/strings.xml | 3 ++ 4 files changed, 49 insertions(+), 1 deletion(-) 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 2036dc205..911baf7f3 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 @@ -26,6 +26,7 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PL 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.StreamEntity.STREAM_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; @@ -49,6 +50,16 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") void deleteBatch(long playlistId); + @Query("SELECT COALESCE(COUNT(*), 0)" + + " FROM " + STREAM_TABLE + + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID + + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId " + + " AND " + STREAM_URL + " = :streamURL" + ) + Flowable getDuplicates(long playlistId, String streamURL); + + @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" + " FROM " + PLAYLIST_STREAM_JOIN_TABLE + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") 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 88dec3911..c80e919bf 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 @@ -1,5 +1,6 @@ package org.schabi.newpipe.local.dialog; +import android.app.AlertDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -128,6 +129,19 @@ public final class PlaylistAppendDialog extends PlaylistDialog { private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager, @NonNull final PlaylistMetadataEntry playlist, @NonNull final List streams) { + + final int numOfDuplicates = manager.getPlaylistDuplicates(playlist.uid, + streams.get(0).getUrl()).blockingFirst(); + if (numOfDuplicates > 0) { + createDuplicateDialog(numOfDuplicates, manager, playlist, streams); + } else { + addStreamToPlaylist(manager, playlist, streams); + } + } + + private void addStreamToPlaylist(@NonNull final LocalPlaylistManager manager, + @NonNull final PlaylistMetadataEntry playlist, + @NonNull final List streams) { final Toast successToast = Toast.makeText(getContext(), R.string.playlist_add_stream_success, Toast.LENGTH_SHORT); @@ -142,7 +156,23 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ignored -> successToast.show())); - requireDialog().dismiss(); } + + private void createDuplicateDialog(final int duplicates, + @NonNull final LocalPlaylistManager manager, + @NonNull final PlaylistMetadataEntry playlist, + @NonNull final List streams) { + //TODO: change color + final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); + builder.setTitle(R.string.duplicate_stream_in_playlist_title); + builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description, + duplicates)); + + builder.setPositiveButton(android.R.string.yes, (dialog, i) -> { + addStreamToPlaylist(manager, playlist, streams); + }); + builder.setNeutralButton(R.string.cancel, null); + builder.create().show(); + } } 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 4007d0e09..807c3c051 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 @@ -91,6 +91,10 @@ public class LocalPlaylistManager { return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io()); } + public Flowable getPlaylistDuplicates(final long playlistId, final String streamURL) { + return playlistStreamTable.getDuplicates(playlistId, streamURL); + } + public Single deletePlaylist(final long playlistId) { return Single.fromCallable(() -> playlistTable.deletePlaylist(playlistId)) .subscribeOn(Schedulers.io()); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c9e0bb492..5b398abd1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -447,6 +447,9 @@ Playlisted Playlist thumbnail changed. Auto-generated (no uploader found) + Duplicated Video Found + The playlist contains this stream + already %d time(s).\nDo you want to add it one more time? No Captions Fit From ac15339911a86399903c9bd974d6632c2b3088b6 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Sat, 10 Dec 2022 13:15:49 +0100 Subject: [PATCH 04/54] Started working on a way to show that items are already in a playlist --- .../playlist/dao/PlaylistStreamDAO.java | 8 +++++ .../newpipe/local/LocalItemListAdapter.java | 11 +++++++ .../local/dialog/PlaylistAppendDialog.java | 32 ++++++++++++++++++- .../local/playlist/LocalPlaylistManager.java | 4 +++ .../res/layout/list_playlist_mini_item.xml | 12 +++++++ 5 files changed, 66 insertions(+), 1 deletion(-) 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 911baf7f3..a9719c9fa 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 @@ -59,6 +59,14 @@ public interface PlaylistStreamDAO extends BasicDAO { ) Flowable getDuplicates(long playlistId, String streamURL); + @Query("SELECT " + JOIN_PLAYLIST_ID + + " FROM " + STREAM_TABLE + + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID + + " WHERE " + STREAM_URL + " = :streamURL" + ) + Flowable> getDuplicatePlaylists(String streamURL); + @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" + " FROM " + PLAYLIST_STREAM_JOIN_TABLE 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..93ea12b97 100644 --- a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.schabi.newpipe.database.LocalItem; +import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.stream.model.StreamStateEntity; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.holder.LocalItemHolder; @@ -344,6 +345,16 @@ public class LocalItemListAdapter extends RecyclerView.Adapter { final List entities = getStreamEntities(); if (selectedItem instanceof PlaylistMetadataEntry && entities != null) { @@ -123,6 +125,35 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistAdapter.clearStreamItemList(); playlistAdapter.addItems(playlists); playlistRecyclerView.setVisibility(View.VISIBLE); + + final LocalPlaylistManager playlistManager = + new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); + final List duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities() + .get(0).getUrl()).blockingFirst(); + + final HashMap map = new HashMap<>(); + for (int i = 0; i < playlists.size(); i++) { + map.put(i, playlists.get(i).uid); + } + + playlistRecyclerView.postDelayed(new Runnable() { + @Override + public void run() { + if (playlistRecyclerView.getAdapter() == null) { + return; + } + final int count = playlistRecyclerView.getAdapter().getItemCount(); + System.out.println(" kasjdflkalk" + playlistRecyclerView.getAdapter() + .getItemId(0)); + for (int i = 0; i < count; i++) { + if (playlistRecyclerView.findViewHolderForAdapterPosition(i) != null + && duplicateIds.contains(playlistAdapter.getItemId(i))) { + playlistRecyclerView.findViewHolderForAdapterPosition(i).itemView + .findViewById(R.id.checkmark2).setVisibility(View.VISIBLE); + } + } + } + }, 1000); } } @@ -163,7 +194,6 @@ public final class PlaylistAppendDialog extends PlaylistDialog { @NonNull final LocalPlaylistManager manager, @NonNull final PlaylistMetadataEntry playlist, @NonNull final List streams) { - //TODO: change color final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); builder.setTitle(R.string.duplicate_stream_in_playlist_title); builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description, 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 807c3c051..d017eac6c 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 @@ -95,6 +95,10 @@ public class LocalPlaylistManager { return playlistStreamTable.getDuplicates(playlistId, streamURL); } + public Flowable> getDuplicatePlaylist(final String streamURL) { + return playlistStreamTable.getDuplicatePlaylists(streamURL); + } + public Single deletePlaylist(final long playlistId) { return Single.fromCallable(() -> playlistTable.deletePlaylist(playlistId)) .subscribeOn(Schedulers.io()); diff --git a/app/src/main/res/layout/list_playlist_mini_item.xml b/app/src/main/res/layout/list_playlist_mini_item.xml index a1f70144d..1b7065f23 100644 --- a/app/src/main/res/layout/list_playlist_mini_item.xml +++ b/app/src/main/res/layout/list_playlist_mini_item.xml @@ -1,5 +1,6 @@ + + + Date: Sat, 10 Dec 2022 16:54:46 +0100 Subject: [PATCH 05/54] Continued working on a way to show that items are already in a playlist --- .../newpipe/local/LocalItemListAdapter.java | 2 +- .../local/dialog/PlaylistAppendDialog.java | 62 +++++++++++-------- 2 files changed, 37 insertions(+), 27 deletions(-) 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 93ea12b97..ea7bc290d 100644 --- a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java @@ -347,7 +347,7 @@ public class LocalItemListAdapter extends RecyclerView.Adapter duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities() - .get(0).getUrl()).blockingFirst(); + playlistRecyclerView.addOnScrollListener(new DefaultItemListOnScrolledDownListener()); + initDuplicateIndicators(playlistRecyclerView); + } + } - final HashMap map = new HashMap<>(); - for (int i = 0; i < playlists.size(); i++) { - map.put(i, playlists.get(i).uid); + public class DefaultItemListOnScrolledDownListener extends OnScrollBelowItemsListener { + @Override + public void onScrolledDown(final RecyclerView recyclerView) { + showDuplicateIndicators(recyclerView); + } + } + + public void initDuplicateIndicators(@NonNull final RecyclerView view) { + view.postDelayed(new Runnable() { + @Override + public void run() { + showDuplicateIndicators(view); } + }, 50); + } - playlistRecyclerView.postDelayed(new Runnable() { - @Override - public void run() { - if (playlistRecyclerView.getAdapter() == null) { - return; - } - final int count = playlistRecyclerView.getAdapter().getItemCount(); - System.out.println(" kasjdflkalk" + playlistRecyclerView.getAdapter() - .getItemId(0)); - for (int i = 0; i < count; i++) { - if (playlistRecyclerView.findViewHolderForAdapterPosition(i) != null - && duplicateIds.contains(playlistAdapter.getItemId(i))) { - playlistRecyclerView.findViewHolderForAdapterPosition(i).itemView - .findViewById(R.id.checkmark2).setVisibility(View.VISIBLE); - } - } - } - }, 1000); + public void showDuplicateIndicators(final RecyclerView view) { + final LocalPlaylistManager playlistManager = + new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); + final List duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities() + .get(0).getUrl()).blockingFirst(); + + if (view.getAdapter() == null) { + return; + } + + final int count = view.getAdapter().getItemCount(); + for (int i = 0; i < count; i++) { + if (view.findViewHolderForAdapterPosition(i) != null + && duplicateIds.contains(playlistAdapter.getItemId(i))) { + view.findViewHolderForAdapterPosition(i).itemView + .findViewById(R.id.checkmark2).setVisibility(View.VISIBLE); + } } } From 8b6e110635a0404a1faea8bba252823fffa49f31 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Mon, 12 Dec 2022 20:12:06 +0100 Subject: [PATCH 06/54] Fixed the functionality, improved performance & general code cleanup --- .../playlist/dao/PlaylistStreamDAO.java | 3 +- .../local/dialog/PlaylistAppendDialog.java | 68 +++++++++++-------- .../local/playlist/LocalPlaylistManager.java | 7 +- app/src/main/res/layout/dialog_playlists.xml | 17 ++++- .../res/layout/list_playlist_mini_item.xml | 12 ---- app/src/main/res/values/strings.xml | 1 + 6 files changed, 60 insertions(+), 48 deletions(-) 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 a9719c9fa..27eb34b90 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 @@ -57,7 +57,7 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId " + " AND " + STREAM_URL + " = :streamURL" ) - Flowable getDuplicates(long playlistId, String streamURL); + Flowable getDuplicateCount(long playlistId, String streamURL); @Query("SELECT " + JOIN_PLAYLIST_ID + " FROM " + STREAM_TABLE @@ -67,7 +67,6 @@ public interface PlaylistStreamDAO extends BasicDAO { ) Flowable> getDuplicatePlaylists(String streamURL); - @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" + " FROM " + PLAYLIST_STREAM_JOIN_TABLE + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") 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 9616b06b3..5767d6163 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 @@ -16,7 +16,6 @@ import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.R; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.stream.model.StreamEntity; -import org.schabi.newpipe.fragments.OnScrollBelowItemsListener; import org.schabi.newpipe.local.LocalItemListAdapter; import org.schabi.newpipe.local.playlist.LocalPlaylistManager; @@ -28,8 +27,12 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable; public final class PlaylistAppendDialog extends PlaylistDialog { private static final String TAG = PlaylistAppendDialog.class.getCanonicalName(); + private static final float DEFAULT_ALPHA = 1f; + private static final float GRAYED_OUT_ALPHA = 0.3f; + private RecyclerView playlistRecyclerView; private LocalItemListAdapter playlistAdapter; + private List duplicateIds; private final CompositeDisposable playlistDisposables = new CompositeDisposable(); @@ -62,6 +65,9 @@ public final class PlaylistAppendDialog extends PlaylistDialog { final LocalPlaylistManager playlistManager = new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); + duplicateIds = playlistManager.getDuplicatePlaylists(getStreamEntities().get(0).getUrl()) + .blockingFirst(); + playlistAdapter = new LocalItemListAdapter(getActivity()); playlistAdapter.setHasStableIds(true); playlistAdapter.setSelectedListener(selectedItem -> { @@ -126,43 +132,43 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistAdapter.addItems(playlists); playlistRecyclerView.setVisibility(View.VISIBLE); - playlistRecyclerView.addOnScrollListener(new DefaultItemListOnScrolledDownListener()); + playlistRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx, + final int dy) { + showDuplicateIndicators(recyclerView); + } + }); initDuplicateIndicators(playlistRecyclerView); } } - public class DefaultItemListOnScrolledDownListener extends OnScrollBelowItemsListener { - @Override - public void onScrolledDown(final RecyclerView recyclerView) { - showDuplicateIndicators(recyclerView); + public void initDuplicateIndicators(@NonNull final RecyclerView view) { + showDuplicateIndicators(view); + + if (!duplicateIds.isEmpty()) { + final View indicatorExplanation = getView() + .findViewById(R.id.playlist_duplicate); + indicatorExplanation.setVisibility(View.VISIBLE); } } - public void initDuplicateIndicators(@NonNull final RecyclerView view) { - view.postDelayed(new Runnable() { - @Override - public void run() { - showDuplicateIndicators(view); - } - }, 50); - } - - public void showDuplicateIndicators(final RecyclerView view) { - final LocalPlaylistManager playlistManager = - new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); - final List duplicateIds = playlistManager.getDuplicatePlaylist(getStreamEntities() - .get(0).getUrl()).blockingFirst(); - + public void showDuplicateIndicators(@NonNull final RecyclerView view) { if (view.getAdapter() == null) { return; } final int count = view.getAdapter().getItemCount(); for (int i = 0; i < count; i++) { - if (view.findViewHolderForAdapterPosition(i) != null - && duplicateIds.contains(playlistAdapter.getItemId(i))) { - view.findViewHolderForAdapterPosition(i).itemView - .findViewById(R.id.checkmark2).setVisibility(View.VISIBLE); + + final RecyclerView.ViewHolder viewHolder = view.findViewHolderForAdapterPosition(i); + if (viewHolder != null) { + if (duplicateIds.contains(view.getAdapter().getItemId(i))) { + viewHolder.itemView.setAlpha(GRAYED_OUT_ALPHA); + } else { + viewHolder.itemView.setAlpha(DEFAULT_ALPHA); + } + } } } @@ -171,10 +177,10 @@ public final class PlaylistAppendDialog extends PlaylistDialog { @NonNull final PlaylistMetadataEntry playlist, @NonNull final List streams) { - final int numOfDuplicates = manager.getPlaylistDuplicates(playlist.uid, + final int numberOfDuplicates = manager.getPlaylistDuplicateCount(playlist.uid, streams.get(0).getUrl()).blockingFirst(); - if (numOfDuplicates > 0) { - createDuplicateDialog(numOfDuplicates, manager, playlist, streams); + if (numberOfDuplicates > 0) { + createDuplicateDialog(numberOfDuplicates, manager, playlist, streams); } else { addStreamToPlaylist(manager, playlist, streams); } @@ -197,22 +203,24 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams) .observeOn(AndroidSchedulers.mainThread()) .subscribe(ignored -> successToast.show())); + requireDialog().dismiss(); } - private void createDuplicateDialog(final int duplicates, + private void createDuplicateDialog(final int numberOfDuplicates, @NonNull final LocalPlaylistManager manager, @NonNull final PlaylistMetadataEntry playlist, @NonNull final List streams) { final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); builder.setTitle(R.string.duplicate_stream_in_playlist_title); builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description, - duplicates)); + numberOfDuplicates)); builder.setPositiveButton(android.R.string.yes, (dialog, i) -> { addStreamToPlaylist(manager, playlist, streams); }); builder.setNeutralButton(R.string.cancel, null); + builder.create().show(); } } 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 d017eac6c..eaccb1e71 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 @@ -91,11 +91,12 @@ public class LocalPlaylistManager { return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io()); } - public Flowable getPlaylistDuplicates(final long playlistId, final String streamURL) { - return playlistStreamTable.getDuplicates(playlistId, streamURL); + public Flowable getPlaylistDuplicateCount(final long playlistId, + final String streamURL) { + return playlistStreamTable.getDuplicateCount(playlistId, streamURL); } - public Flowable> getDuplicatePlaylist(final String streamURL) { + public Flowable> getDuplicatePlaylists(final String streamURL) { return playlistStreamTable.getDuplicatePlaylists(streamURL); } diff --git a/app/src/main/res/layout/dialog_playlists.xml b/app/src/main/res/layout/dialog_playlists.xml index 18b08d93c..5771b400f 100644 --- a/app/src/main/res/layout/dialog_playlists.xml +++ b/app/src/main/res/layout/dialog_playlists.xml @@ -34,11 +34,26 @@ tools:ignore="RtlHardcoded" /> + + diff --git a/app/src/main/res/layout/list_playlist_mini_item.xml b/app/src/main/res/layout/list_playlist_mini_item.xml index 1b7065f23..a1f70144d 100644 --- a/app/src/main/res/layout/list_playlist_mini_item.xml +++ b/app/src/main/res/layout/list_playlist_mini_item.xml @@ -1,6 +1,5 @@ - - - "Loading requested content" New Playlist + The playlists that are grayed out already contain this item. Rename Name Add to playlist From 5fb7b3266b965cd725b0b4f72cb43e3f4427f3d6 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Fri, 16 Dec 2022 00:29:22 +0100 Subject: [PATCH 07/54] Removed the duplicate dialog and added another toast option --- .../local/dialog/PlaylistAppendDialog.java | 39 ++++--------------- app/src/main/res/values/strings.xml | 4 +- 2 files changed, 9 insertions(+), 34 deletions(-) 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 5767d6163..3414d95ab 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 @@ -1,6 +1,5 @@ package org.schabi.newpipe.local.dialog; -import android.app.AlertDialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -177,20 +176,15 @@ public final class PlaylistAppendDialog extends PlaylistDialog { @NonNull final PlaylistMetadataEntry playlist, @NonNull final List streams) { - final int numberOfDuplicates = manager.getPlaylistDuplicateCount(playlist.uid, - streams.get(0).getUrl()).blockingFirst(); - if (numberOfDuplicates > 0) { - createDuplicateDialog(numberOfDuplicates, manager, playlist, streams); - } else { - addStreamToPlaylist(manager, playlist, streams); - } - } + final int numOfDuplicates = manager.getPlaylistDuplicateCount(playlist.uid, + streams.get(0).getUrl()).blockingFirst(); + String toastText = getString(R.string.playlist_add_stream_success); - private void addStreamToPlaylist(@NonNull final LocalPlaylistManager manager, - @NonNull final PlaylistMetadataEntry playlist, - @NonNull final List streams) { - final Toast successToast = Toast.makeText(getContext(), - R.string.playlist_add_stream_success, Toast.LENGTH_SHORT); + if (numOfDuplicates > 0) { + toastText = getString(R.string.playlist_add_stream_success_duplicate); + } + + final Toast successToast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT); if (playlist.thumbnailUrl .equals("drawable://" + R.drawable.placeholder_thumbnail_playlist)) { @@ -206,21 +200,4 @@ public final class PlaylistAppendDialog extends PlaylistDialog { requireDialog().dismiss(); } - - private void createDuplicateDialog(final int numberOfDuplicates, - @NonNull final LocalPlaylistManager manager, - @NonNull final PlaylistMetadataEntry playlist, - @NonNull final List streams) { - final AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); - builder.setTitle(R.string.duplicate_stream_in_playlist_title); - builder.setMessage(getString(R.string.duplicate_stream_in_playlist_description, - numberOfDuplicates)); - - builder.setPositiveButton(android.R.string.yes, (dialog, i) -> { - addStreamToPlaylist(manager, playlist, streams); - }); - builder.setNeutralButton(R.string.cancel, null); - - builder.create().show(); - } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70687b8f4..4067381f4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -446,11 +446,9 @@ Delete this playlist\? Playlist created Playlisted + Playlisted duplicate Playlist thumbnail changed. Auto-generated (no uploader found) - Duplicated Video Found - The playlist contains this stream - already %d time(s).\nDo you want to add it one more time? No Captions Fit From b3554a6a49206f35197341308aab26380667af96 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Fri, 30 Dec 2022 16:36:33 +0100 Subject: [PATCH 08/54] Added the number of duplicates to the toast text. --- .../org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 3414d95ab..85bce7784 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 @@ -181,7 +181,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog { String toastText = getString(R.string.playlist_add_stream_success); if (numOfDuplicates > 0) { - toastText = getString(R.string.playlist_add_stream_success_duplicate); + toastText = getString(R.string.playlist_add_stream_success_duplicate, numOfDuplicates); } final Toast successToast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4067381f4..cf4039262 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -446,7 +446,7 @@ Delete this playlist\? Playlist created Playlisted - Playlisted duplicate + Duplicate added %d time(s) Playlist thumbnail changed. Auto-generated (no uploader found) From ef4a6238c88f26e50ba794caa071432a08da66e7 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 14 Jan 2023 18:00:40 +0100 Subject: [PATCH 09/54] See if playlists already contain a stream from db --- .../playlist/PlaylistDuplicatesEntry.java | 24 +++++++ .../playlist/dao/PlaylistStreamDAO.java | 39 +++++----- .../local/dialog/PlaylistAppendDialog.java | 72 ++++--------------- .../local/holder/LocalPlaylistItemHolder.java | 11 +++ .../local/playlist/LocalPlaylistManager.java | 22 +++--- 5 files changed, 84 insertions(+), 84 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java new file mode 100644 index 000000000..0fcb4ced4 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java @@ -0,0 +1,24 @@ +package org.schabi.newpipe.database.playlist; + +import androidx.room.ColumnInfo; + +/** + * This class adds a field to {@link PlaylistMetadataEntry} that contains an integer representing + * how many times a specific stream is already contained inside a local playlist. Used to be able + * to grey out playlists which already contain the current stream in the playlist append dialog. + * @see org.schabi.newpipe.local.playlist.LocalPlaylistManager#getPlaylistDuplicates(String) + */ +public class PlaylistDuplicatesEntry extends PlaylistMetadataEntry { + public static final String PLAYLIST_TIMES_STREAM_IS_CONTAINED = "timesStreamIsContained"; + @ColumnInfo(name = PLAYLIST_TIMES_STREAM_IS_CONTAINED) + public final long timesStreamIsContained; + + public PlaylistDuplicatesEntry(final long uid, + final String name, + final String thumbnailUrl, + final long streamCount, + final long timesStreamIsContained) { + super(uid, name, thumbnailUrl, streamCount); + this.timesStreamIsContained = timesStreamIsContained; + } +} 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 27eb34b90..f173ab0bc 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 @@ -6,6 +6,7 @@ import androidx.room.RewriteQueriesToDropUnusedColumns; import androidx.room.Transaction; import org.schabi.newpipe.database.BasicDAO; +import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity; @@ -14,6 +15,7 @@ import java.util.List; import io.reactivex.rxjava3.core.Flowable; +import static org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry.PLAYLIST_TIMES_STREAM_IS_CONTAINED; import static org.schabi.newpipe.database.playlist.PlaylistMetadataEntry.PLAYLIST_STREAM_COUNT; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_ID; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME; @@ -50,23 +52,6 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") void deleteBatch(long playlistId); - @Query("SELECT COALESCE(COUNT(*), 0)" - + " FROM " + STREAM_TABLE - + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE - + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID - + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId " - + " AND " + STREAM_URL + " = :streamURL" - ) - Flowable getDuplicateCount(long playlistId, String streamURL); - - @Query("SELECT " + JOIN_PLAYLIST_ID - + " FROM " + STREAM_TABLE - + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE - + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID - + " WHERE " + STREAM_URL + " = :streamURL" - ) - Flowable> getDuplicatePlaylists(String streamURL); - @Query("SELECT COALESCE(MAX(" + JOIN_INDEX + "), -1)" + " FROM " + PLAYLIST_STREAM_JOIN_TABLE + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") @@ -111,4 +96,24 @@ public interface PlaylistStreamDAO extends BasicDAO { + " GROUP BY " + PLAYLIST_ID + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") Flowable> getPlaylistMetadata(); + + @Transaction + @Query("SELECT " + PLAYLIST_TABLE + "." + PLAYLIST_ID + ", " + + PLAYLIST_NAME + ", " + + PLAYLIST_TABLE + "." + PLAYLIST_THUMBNAIL_URL + ", " + + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", " + + "COALESCE(SUM(" + STREAM_URL + " = :streamUrl), 0) AS " + + PLAYLIST_TIMES_STREAM_IS_CONTAINED + + + " FROM " + PLAYLIST_TABLE + + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE + + " ON " + PLAYLIST_TABLE + "." + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID + + + " LEFT JOIN " + STREAM_TABLE + + " ON " + STREAM_TABLE + "." + STREAM_ID + " = " + JOIN_STREAM_ID + + " AND :streamUrl = :streamUrl" + + + " GROUP BY " + JOIN_PLAYLIST_ID + + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") + Flowable> getPlaylistDuplicatesMetadata(String streamUrl); } 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 85bce7784..79a355f52 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 @@ -13,7 +13,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.schabi.newpipe.NewPipeDatabase; import org.schabi.newpipe.R; -import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; +import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry; import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.local.LocalItemListAdapter; import org.schabi.newpipe.local.playlist.LocalPlaylistManager; @@ -26,12 +26,8 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable; public final class PlaylistAppendDialog extends PlaylistDialog { private static final String TAG = PlaylistAppendDialog.class.getCanonicalName(); - private static final float DEFAULT_ALPHA = 1f; - private static final float GRAYED_OUT_ALPHA = 0.3f; - private RecyclerView playlistRecyclerView; private LocalItemListAdapter playlistAdapter; - private List duplicateIds; private final CompositeDisposable playlistDisposables = new CompositeDisposable(); @@ -64,15 +60,13 @@ public final class PlaylistAppendDialog extends PlaylistDialog { final LocalPlaylistManager playlistManager = new LocalPlaylistManager(NewPipeDatabase.getInstance(requireContext())); - duplicateIds = playlistManager.getDuplicatePlaylists(getStreamEntities().get(0).getUrl()) - .blockingFirst(); - playlistAdapter = new LocalItemListAdapter(getActivity()); playlistAdapter.setHasStableIds(true); playlistAdapter.setSelectedListener(selectedItem -> { final List entities = getStreamEntities(); - if (selectedItem instanceof PlaylistMetadataEntry && entities != null) { - onPlaylistSelected(playlistManager, (PlaylistMetadataEntry) selectedItem, entities); + if (selectedItem instanceof PlaylistDuplicatesEntry && entities != null) { + onPlaylistSelected(playlistManager, + (PlaylistDuplicatesEntry) selectedItem, entities); } }); @@ -83,7 +77,8 @@ public final class PlaylistAppendDialog extends PlaylistDialog { final View newPlaylistButton = view.findViewById(R.id.newPlaylist); newPlaylistButton.setOnClickListener(ignored -> openCreatePlaylistDialog()); - playlistDisposables.add(playlistManager.getPlaylists() + playlistDisposables.add(playlistManager + .getPlaylistDuplicates(getStreamEntities().get(0).getUrl()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(this::onPlaylistsReceived)); } @@ -125,63 +120,24 @@ public final class PlaylistAppendDialog extends PlaylistDialog { requireDialog().dismiss(); } - private void onPlaylistsReceived(@NonNull final List playlists) { + private void onPlaylistsReceived(@NonNull final List playlists) { if (playlistAdapter != null && playlistRecyclerView != null) { playlistAdapter.clearStreamItemList(); playlistAdapter.addItems(playlists); playlistRecyclerView.setVisibility(View.VISIBLE); - - playlistRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx, - final int dy) { - showDuplicateIndicators(recyclerView); - } - }); - initDuplicateIndicators(playlistRecyclerView); - } - } - - public void initDuplicateIndicators(@NonNull final RecyclerView view) { - showDuplicateIndicators(view); - - if (!duplicateIds.isEmpty()) { - final View indicatorExplanation = getView() - .findViewById(R.id.playlist_duplicate); - indicatorExplanation.setVisibility(View.VISIBLE); - } - } - - public void showDuplicateIndicators(@NonNull final RecyclerView view) { - if (view.getAdapter() == null) { - return; - } - - final int count = view.getAdapter().getItemCount(); - for (int i = 0; i < count; i++) { - - final RecyclerView.ViewHolder viewHolder = view.findViewHolderForAdapterPosition(i); - if (viewHolder != null) { - if (duplicateIds.contains(view.getAdapter().getItemId(i))) { - viewHolder.itemView.setAlpha(GRAYED_OUT_ALPHA); - } else { - viewHolder.itemView.setAlpha(DEFAULT_ALPHA); - } - - } } } private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager, - @NonNull final PlaylistMetadataEntry playlist, + @NonNull final PlaylistDuplicatesEntry playlist, @NonNull final List streams) { - final int numOfDuplicates = manager.getPlaylistDuplicateCount(playlist.uid, - streams.get(0).getUrl()).blockingFirst(); - String toastText = getString(R.string.playlist_add_stream_success); - - if (numOfDuplicates > 0) { - toastText = getString(R.string.playlist_add_stream_success_duplicate, numOfDuplicates); + final String toastText; + if (playlist.timesStreamIsContained > 0) { + toastText = getString(R.string.playlist_add_stream_success_duplicate, + playlist.timesStreamIsContained); + } else { + toastText = getString(R.string.playlist_add_stream_success); } final Toast successToast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT); diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java index f8c5176ec..240ca0462 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java @@ -4,6 +4,7 @@ import android.view.View; import android.view.ViewGroup; import org.schabi.newpipe.database.LocalItem; +import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.local.LocalItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; @@ -13,6 +14,9 @@ import org.schabi.newpipe.util.Localization; import java.time.format.DateTimeFormatter; public class LocalPlaylistItemHolder extends PlaylistItemHolder { + + private static final float GRAYED_OUT_ALPHA = 0.6f; + public LocalPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final ViewGroup parent) { super(infoItemBuilder, parent); } @@ -38,6 +42,13 @@ public class LocalPlaylistItemHolder extends PlaylistItemHolder { PicassoHelper.loadPlaylistThumbnail(item.thumbnailUrl).into(itemThumbnailView); + if (item instanceof PlaylistDuplicatesEntry + && ((PlaylistDuplicatesEntry) item).timesStreamIsContained > 0) { + itemView.setAlpha(GRAYED_OUT_ALPHA); + } else { + itemView.setAlpha(1.0f); + } + super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter); } } 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 eaccb1e71..8ea64f343 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 @@ -4,6 +4,7 @@ import androidx.annotation.Nullable; import org.schabi.newpipe.R; import org.schabi.newpipe.database.AppDatabase; +import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; import org.schabi.newpipe.database.playlist.dao.PlaylistDAO; @@ -87,19 +88,22 @@ public class LocalPlaylistManager { return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io()); } + /** + * Get playlists with attached information about how many times the provided stream is already + * contained in each playlist. + * + * @param streamUrl the stream url for which to check for duplicates + * @return a list of {@link PlaylistDuplicatesEntry} + */ + public Flowable> getPlaylistDuplicates(final String streamUrl) { + return playlistStreamTable.getPlaylistDuplicatesMetadata(streamUrl) + .subscribeOn(Schedulers.io()); + } + public Flowable> getPlaylistStreams(final long playlistId) { return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io()); } - public Flowable getPlaylistDuplicateCount(final long playlistId, - final String streamURL) { - return playlistStreamTable.getDuplicateCount(playlistId, streamURL); - } - - public Flowable> getDuplicatePlaylists(final String streamURL) { - return playlistStreamTable.getDuplicatePlaylists(streamURL); - } - public Single deletePlaylist(final long playlistId) { return Single.fromCallable(() -> playlistTable.deletePlaylist(playlistId)) .subscribeOn(Schedulers.io()); From 9ecd5dff09d98aaa70ef71dc9bdb8c24ccf8313c Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 16 Jan 2023 13:56:45 +0100 Subject: [PATCH 10/54] Orientation is locked if there is no sensor for it --- .../java/org/schabi/newpipe/player/helper/PlayerHelper.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index abde7c3d1..8d8e0414e 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -14,6 +14,7 @@ import static java.lang.annotation.RetentionPolicy.SOURCE; import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.provider.Settings; import android.view.accessibility.CaptioningManager; @@ -382,8 +383,11 @@ public final class PlayerHelper { public static boolean globalScreenOrientationLocked(final Context context) { // 1: Screen orientation changes using accelerometer // 0: Screen orientation is locked + // if the accelerometer sensor is missing completely, assume locked orientation return android.provider.Settings.System.getInt( - context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 0; + context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0) == 0 + || !context.getPackageManager() + .hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER); } public static int getProgressiveLoadIntervalBytes(@NonNull final Context context) { From e26c03856589c1552ee5ec98a31b6b8ef5c1274a Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Fri, 20 Jan 2023 11:55:50 +0100 Subject: [PATCH 11/54] Made some small adjustments --- .../newpipe/local/playlist/LocalPlaylistFragment.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) 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 9881a0a20..36544a6a9 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 @@ -643,15 +643,9 @@ public class LocalPlaylistFragment extends BaseLocalListFragment Date: Fri, 20 Jan 2023 18:39:16 +0100 Subject: [PATCH 12/54] Add snippet to ensure baseline.profm file is sorted Thanks to obfusk, see https://issuetracker.google.com/issues/231837768 and #6486 --- app/build.gradle | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 79e07a190..2c0f03e38 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,3 +1,7 @@ +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" @@ -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, "") + } + } + } + } +} From c70ce791dbfb659cd45d4a91a5de5a23e9eaa9ac Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Fri, 27 Jan 2023 15:37:33 +0100 Subject: [PATCH 13/54] Added the duplicate indicator explanation & removed some unnecessary functions --- .../schabi/newpipe/local/LocalItemListAdapter.java | 11 ----------- .../newpipe/local/dialog/PlaylistAppendDialog.java | 13 ++++++++++++- 2 files changed, 12 insertions(+), 12 deletions(-) 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 ea7bc290d..05e2fdac0 100644 --- a/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/local/LocalItemListAdapter.java @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.schabi.newpipe.database.LocalItem; -import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.stream.model.StreamStateEntity; import org.schabi.newpipe.local.history.HistoryRecordManager; import org.schabi.newpipe.local.holder.LocalItemHolder; @@ -345,16 +344,6 @@ public class LocalItemListAdapter extends RecyclerView.Adapter { final List entities = getStreamEntities(); if (selectedItem instanceof PlaylistDuplicatesEntry && entities != null) { @@ -125,8 +124,20 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistAdapter.clearStreamItemList(); playlistAdapter.addItems(playlists); playlistRecyclerView.setVisibility(View.VISIBLE); + setDuplicateIndicatorExplanation(playlists); } } + private void setDuplicateIndicatorExplanation(final List playlists) { + for (final PlaylistDuplicatesEntry entry : playlists) { + if (entry.timesStreamIsContained > 0) { + final View indicatorExplanation = getView() + .findViewById(R.id.playlist_duplicate); + indicatorExplanation.setVisibility(View.VISIBLE); + return; + } + } + + } private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager, @NonNull final PlaylistDuplicatesEntry playlist, From 102975aeb3fabb18f2a87811d51aef463b30c5a0 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 29 Jan 2023 10:32:32 +0100 Subject: [PATCH 14/54] Improve handling playlist duplicate indicator --- .../local/dialog/PlaylistAppendDialog.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) 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 b45f6bd9c..5aeca06ed 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 @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; @@ -28,6 +29,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog { private RecyclerView playlistRecyclerView; private LocalItemListAdapter playlistAdapter; + private TextView playlistDuplicateIndicator; private final CompositeDisposable playlistDisposables = new CompositeDisposable(); @@ -73,6 +75,8 @@ public final class PlaylistAppendDialog extends PlaylistDialog { playlistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext())); playlistRecyclerView.setAdapter(playlistAdapter); + playlistDuplicateIndicator = view.findViewById(R.id.playlist_duplicate); + final View newPlaylistButton = view.findViewById(R.id.newPlaylist); newPlaylistButton.setOnClickListener(ignored -> openCreatePlaylistDialog()); @@ -120,23 +124,20 @@ public final class PlaylistAppendDialog extends PlaylistDialog { } private void onPlaylistsReceived(@NonNull final List playlists) { - if (playlistAdapter != null && playlistRecyclerView != null) { + if (playlistAdapter != null + && playlistRecyclerView != null + && playlistDuplicateIndicator != null) { playlistAdapter.clearStreamItemList(); playlistAdapter.addItems(playlists); playlistRecyclerView.setVisibility(View.VISIBLE); - setDuplicateIndicatorExplanation(playlists); + playlistDuplicateIndicator.setVisibility( + anyPlaylistContainsDuplicates(playlists) ? View.VISIBLE : View.GONE); } } - private void setDuplicateIndicatorExplanation(final List playlists) { - for (final PlaylistDuplicatesEntry entry : playlists) { - if (entry.timesStreamIsContained > 0) { - final View indicatorExplanation = getView() - .findViewById(R.id.playlist_duplicate); - indicatorExplanation.setVisibility(View.VISIBLE); - return; - } - } + private boolean anyPlaylistContainsDuplicates(final List playlists) { + return playlists.stream() + .anyMatch(playlist -> playlist.timesStreamIsContained > 0); } private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager, From 711345eff7c46269797de66e61f030cfbc72fa1c Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 29 Jan 2023 10:32:44 +0100 Subject: [PATCH 15/54] Improve playlist duplicate indicator layout --- app/src/main/res/layout/dialog_playlists.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/layout/dialog_playlists.xml b/app/src/main/res/layout/dialog_playlists.xml index 5771b400f..ab4691fa9 100644 --- a/app/src/main/res/layout/dialog_playlists.xml +++ b/app/src/main/res/layout/dialog_playlists.xml @@ -37,17 +37,17 @@ + android:gravity="center" + android:text="@string/duplicate_in_playlist" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textSize="13sp" + android:visibility="gone" + tools:text="@tools:sample/lorem[20]" + tools:visibility="visible" /> Date: Mon, 30 Jan 2023 22:37:24 +0100 Subject: [PATCH 16/54] First draft of the new feature --- .../newpipe/database/feed/dao/FeedDAO.kt | 9 ++++ .../stream/model/StreamStateEntity.java | 2 +- .../newpipe/local/feed/FeedDatabaseManager.kt | 2 + .../schabi/newpipe/local/feed/FeedFragment.kt | 34 ++++++------ .../newpipe/local/feed/FeedViewModel.kt | 54 +++++++++++++------ app/src/main/res/menu/menu_feed_fragment.xml | 21 ++++++-- app/src/main/res/values/settings_keys.xml | 2 +- app/src/main/res/values/strings.xml | 6 ++- gradle/wrapper/gradle-wrapper.properties | 1 - 9 files changed, 87 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt index 968d0c88f..4faafb2ea 100644 --- a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt @@ -32,6 +32,7 @@ abstract class FeedDAO { * @return the feed streams filtered according to the conditions provided in the parameters * @see StreamStateEntity.isFinished() * @see StreamStateEntity.PLAYBACK_FINISHED_END_MILLISECONDS + * @see StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS */ @Query( """ @@ -66,6 +67,13 @@ abstract class FeedDAO { OR s.stream_type = 'LIVE_STREAM' OR s.stream_type = 'AUDIO_LIVE_STREAM' ) + AND ( + :includePartiallyPlayed + OR sh.stream_id IS NULL + OR sst.stream_id IS NULL + OR (sst.progress_time < ${StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS} + AND sst.progress_time < s.duration * 1000 / 4) + ) AND ( :uploadDateBefore IS NULL OR s.upload_date IS NULL @@ -79,6 +87,7 @@ abstract class FeedDAO { abstract fun getStreams( groupId: Long, includePlayed: Boolean, + includePartiallyPlayed: Boolean, uploadDateBefore: OffsetDateTime? ): Maybe> diff --git a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java index 75766850f..627acea45 100644 --- a/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java +++ b/app/src/main/java/org/schabi/newpipe/database/stream/model/StreamStateEntity.java @@ -30,7 +30,7 @@ public class StreamStateEntity { /** * Playback state will not be saved, if playback time is less than this threshold (5000ms = 5s). */ - private static final long PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS = 5000; + public static final long PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS = 5000; /** * Stream will be considered finished if the playback time left exceeds this threshold diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedDatabaseManager.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedDatabaseManager.kt index 07edb0499..ed65d4048 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedDatabaseManager.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedDatabaseManager.kt @@ -43,11 +43,13 @@ class FeedDatabaseManager(context: Context) { fun getStreams( groupId: Long, includePlayedStreams: Boolean, + includePartiallyPlayedStreams: Boolean, includeFutureStreams: Boolean ): Maybe> { return feedTable.getStreams( groupId, includePlayedStreams, + includePartiallyPlayedStreams, if (includeFutureStreams) null else OffsetDateTime.now() ) } 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 2bb2f9986..07421a8ea 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 @@ -100,7 +100,7 @@ class FeedFragment : BaseStateFragment() { private var oldestSubscriptionUpdate: OffsetDateTime? = null private lateinit var groupAdapter: GroupieAdapter - @State @JvmField var showPlayedItems: Boolean = true + @State @JvmField var showPlayedItems: ShowItems = ShowItems.DEFAULT @State @JvmField var showFutureItems: Boolean = true private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null @@ -140,7 +140,7 @@ class FeedFragment : BaseStateFragment() { val factory = FeedViewModel.getFactory(requireContext(), groupId) viewModel = ViewModelProvider(this, factory)[FeedViewModel::class.java] - showPlayedItems = viewModel.getShowPlayedItemsFromPreferences() + showPlayedItems = viewModel.getItemsVisibilityFromPreferences() showFutureItems = viewModel.getShowFutureItemsFromPreferences() viewModel.stateLiveData.observe(viewLifecycleOwner) { it?.let(::handleResult) } @@ -242,11 +242,12 @@ class FeedFragment : BaseStateFragment() { .create() .show() return true - } else if (item.itemId == R.id.menu_item_feed_toggle_played_items) { - showPlayedItems = !item.isChecked - updateTogglePlayedItemsButton(item) - viewModel.togglePlayedItems(showPlayedItems) - viewModel.saveShowPlayedItemsToPreferences(showPlayedItems) + } else if (item.itemId == R.id.menu_item_feed_toggle_show_all_items) { + setShowPlayedItemsMethod(item, ShowItems.DEFAULT) + } else if (item.itemId == R.id.menu_item_feed_toggle_show_played_items) { + setShowPlayedItemsMethod(item, ShowItems.WATCHED) + } else if (item.itemId == R.id.menu_item_feed_toggle_partially_played_items) { + setShowPlayedItemsMethod(item, ShowItems.PARTIALLY_WATCHED) } else if (item.itemId == R.id.menu_item_feed_toggle_future_items) { showFutureItems = !item.isChecked updateToggleFutureItemsButton(item) @@ -257,6 +258,13 @@ class FeedFragment : BaseStateFragment() { return super.onOptionsItemSelected(item) } + private fun setShowPlayedItemsMethod(item: MenuItem, showItems: ShowItems) { + showPlayedItems = showItems + viewModel.togglePlayedItems(showPlayedItems) + updateTogglePlayedItemsButton(item) + viewModel.saveShowPlayedItemsToPreferences(showPlayedItems) + } + override fun onDestroyOptionsMenu() { super.onDestroyOptionsMenu() activity?.supportActionBar?.subtitle = null @@ -284,19 +292,9 @@ class FeedFragment : BaseStateFragment() { } private fun updateTogglePlayedItemsButton(menuItem: MenuItem) { - menuItem.isChecked = showPlayedItems - menuItem.icon = AppCompatResources.getDrawable( - requireContext(), - if (showPlayedItems) R.drawable.ic_visibility_on else R.drawable.ic_visibility_off - ) MenuItemCompat.setTooltipText( menuItem, - getString( - if (showPlayedItems) - R.string.feed_toggle_hide_played_items - else - R.string.feed_toggle_show_played_items - ) + getString(R.string.feed_toggle_show_hide_played_items) ) } diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 76d5e9d63..5785c8e3f 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -28,15 +28,18 @@ import org.schabi.newpipe.util.DEFAULT_THROTTLE_TIMEOUT import java.time.OffsetDateTime import java.util.concurrent.TimeUnit +enum class ShowItems { + WATCHED, PARTIALLY_WATCHED, DEFAULT +} class FeedViewModel( private val application: Application, groupId: Long = FeedGroupEntity.GROUP_ALL_ID, - initialShowPlayedItems: Boolean = true, + initialShowPlayedItems: ShowItems = ShowItems.DEFAULT, initialShowFutureItems: Boolean = true ) : ViewModel() { private val feedDatabaseManager = FeedDatabaseManager(application) - private val toggleShowPlayedItems = BehaviorProcessor.create() + private val toggleShowPlayedItems = BehaviorProcessor.create() private val toggleShowPlayedItemsFlowable = toggleShowPlayedItems .startWithItem(initialShowPlayedItems) .distinctUntilChanged() @@ -57,7 +60,7 @@ class FeedViewModel( feedDatabaseManager.notLoadedCount(groupId), feedDatabaseManager.oldestSubscriptionUpdate(groupId), - Function5 { t1: FeedEventManager.Event, t2: Boolean, t3: Boolean, + Function5 { t1: FeedEventManager.Event, t2: ShowItems, t3: Boolean, t4: Long, t5: List -> return@Function5 CombineResultEventHolder(t1, t2, t3, t4, t5.firstOrNull()) } @@ -66,12 +69,21 @@ class FeedViewModel( .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) .map { (event, showPlayedItems, showFutureItems, notLoadedCount, oldestUpdate) -> - val streamItems = if (event is SuccessResultEvent || event is IdleEvent) + val streamItems = if (event is SuccessResultEvent || event is IdleEvent) { feedDatabaseManager - .getStreams(groupId, showPlayedItems, showFutureItems) + .getStreams( + groupId, + !( + showPlayedItems == ShowItems.WATCHED || + showPlayedItems == ShowItems.PARTIALLY_WATCHED + ), + showPlayedItems != ShowItems.PARTIALLY_WATCHED, + showFutureItems + ) .blockingGet(arrayListOf()) - else + } else { arrayListOf() + } CombineResultDataHolder(event, streamItems, notLoadedCount, oldestUpdate) } @@ -98,7 +110,7 @@ class FeedViewModel( private data class CombineResultEventHolder( val t1: FeedEventManager.Event, - val t2: Boolean, + val t2: ShowItems, val t3: Boolean, val t4: Long, val t5: OffsetDateTime? @@ -111,17 +123,20 @@ class FeedViewModel( val t4: OffsetDateTime? ) - fun togglePlayedItems(showPlayedItems: Boolean) { - toggleShowPlayedItems.onNext(showPlayedItems) + fun togglePlayedItems(showItems: ShowItems) { + toggleShowPlayedItems.onNext(showItems) } - fun saveShowPlayedItemsToPreferences(showPlayedItems: Boolean) = + fun saveShowPlayedItemsToPreferences(showItems: ShowItems) = PreferenceManager.getDefaultSharedPreferences(application).edit { - this.putBoolean(application.getString(R.string.feed_show_played_items_key), showPlayedItems) + this.putString( + application.getString(R.string.feed_show_played_items_key), + showItems.toString() + ) this.apply() } - fun getShowPlayedItemsFromPreferences() = getShowPlayedItemsFromPreferences(application) + fun getItemsVisibilityFromPreferences() = getItemsVisibilityFromPreferences(application) fun toggleFutureItems(showFutureItems: Boolean) { toggleShowFutureItems.onNext(showFutureItems) @@ -136,9 +151,16 @@ class FeedViewModel( fun getShowFutureItemsFromPreferences() = getShowFutureItemsFromPreferences(application) companion object { - private fun getShowPlayedItemsFromPreferences(context: Context) = - PreferenceManager.getDefaultSharedPreferences(context) - .getBoolean(context.getString(R.string.feed_show_played_items_key), true) + + private fun getItemsVisibilityFromPreferences(context: Context): ShowItems { + val s = PreferenceManager.getDefaultSharedPreferences(context) + .getString( + context.getString(R.string.feed_show_played_items_key), + ShowItems.DEFAULT.toString() + ) ?: ShowItems.DEFAULT.toString() + return ShowItems.valueOf(s) + } + private fun getShowFutureItemsFromPreferences(context: Context) = PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(context.getString(R.string.feed_show_future_items_key), true) @@ -148,7 +170,7 @@ class FeedViewModel( App.getApp(), groupId, // Read initial value from preferences - getShowPlayedItemsFromPreferences(context.applicationContext), + getItemsVisibilityFromPreferences(context.applicationContext), getShowFutureItemsFromPreferences(context.applicationContext) ) } diff --git a/app/src/main/res/menu/menu_feed_fragment.xml b/app/src/main/res/menu/menu_feed_fragment.xml index 9e5cc862e..fc371b2fe 100644 --- a/app/src/main/res/menu/menu_feed_fragment.xml +++ b/app/src/main/res/menu/menu_feed_fragment.xml @@ -4,12 +4,23 @@ + android:title="@string/feed_toggle_show_hide_played_items" + app:showAsAction="ifRoom"> + + + + + + feed_update_threshold_key 300 - feed_show_played_items + feed_show_items feed_show_future_items show_thumbnail_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a4ce92f2..46a3cad74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -691,8 +691,7 @@ \nYouTube is an example of a service that offers this fast method with its RSS feed. \n \nSo the choice boils down to what you prefer: speed or precise information. - Show watched items - Hide watched items + Show/hide watched items This content is not yet supported by NewPipe.\n\nIt will hopefully be supported in a future version. Channel\'s avatar thumbnail Created by %s @@ -760,5 +759,8 @@ Unknown quality Show future items Hide future items + Hide Watched and Partially Watched + Hide Watched + Show All Sort \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5116c5b18..ae04661ee 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip -distributionSha256Sum=f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 3d36eb5bafb5945f3a649746d437358f22701f81 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Mon, 30 Jan 2023 22:39:16 +0100 Subject: [PATCH 17/54] Fixed a small commit mistake --- gradle/wrapper/gradle-wrapper.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661ee..5116c5b18 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionSha256Sum=f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 9c82441c1911a3c0e45020464bbaca8005599764 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Wed, 1 Feb 2023 23:10:31 +0100 Subject: [PATCH 18/54] Implemented the feature and fixed some small issues --- .../newpipe/database/feed/dao/FeedDAO.kt | 4 +- .../schabi/newpipe/local/feed/FeedFragment.kt | 56 ++++++++++++++----- .../newpipe/local/feed/FeedViewModel.kt | 47 ++++++++-------- .../local/feed/StreamVisibilityStatus.kt | 5 ++ .../local/history/HistoryRecordManager.java | 2 +- app/src/main/res/menu/menu_feed_fragment.xml | 8 +-- app/src/main/res/values/settings_keys.xml | 2 +- app/src/main/res/values/strings.xml | 8 +-- 8 files changed, 82 insertions(+), 50 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt diff --git a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt index 4faafb2ea..a53e5cac1 100644 --- a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt @@ -71,8 +71,8 @@ abstract class FeedDAO { :includePartiallyPlayed OR sh.stream_id IS NULL OR sst.stream_id IS NULL - OR (sst.progress_time < ${StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS} - AND sst.progress_time < s.duration * 1000 / 4) + OR (sst.progress_time <= ${StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS} + AND sst.progress_time <= s.duration * 1000 / 4) ) AND ( :uploadDateBefore IS NULL 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 07421a8ea..9358c1654 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 @@ -100,9 +100,13 @@ class FeedFragment : BaseStateFragment() { private var oldestSubscriptionUpdate: OffsetDateTime? = null private lateinit var groupAdapter: GroupieAdapter - @State @JvmField var showPlayedItems: ShowItems = ShowItems.DEFAULT + @State @JvmField var feedVisibilityStatus: StreamVisibilityStatus = StreamVisibilityStatus.DEFAULT @State @JvmField var showFutureItems: Boolean = true + private lateinit var showAllMenuItem: MenuItem + private lateinit var hideWatchedMenuItem: MenuItem + private lateinit var hidePartiallyWatchedMenuItem: MenuItem + private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null private var updateListViewModeOnResume = false private var isRefreshing = false @@ -140,7 +144,7 @@ class FeedFragment : BaseStateFragment() { val factory = FeedViewModel.getFactory(requireContext(), groupId) viewModel = ViewModelProvider(this, factory)[FeedViewModel::class.java] - showPlayedItems = viewModel.getItemsVisibilityFromPreferences() + feedVisibilityStatus = viewModel.getItemsVisibilityFromPreferences() showFutureItems = viewModel.getShowFutureItemsFromPreferences() viewModel.stateLiveData.observe(viewLifecycleOwner) { it?.let(::handleResult) } @@ -216,7 +220,15 @@ class FeedFragment : BaseStateFragment() { activity.supportActionBar?.subtitle = groupName inflater.inflate(R.menu.menu_feed_fragment, menu) - updateTogglePlayedItemsButton(menu.findItem(R.id.menu_item_feed_toggle_played_items)) + + val itemVisibilityMenu = menu.findItem(R.id.menu_item_feed_toggle_played_items).subMenu + if (itemVisibilityMenu != null) { + showAllMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_show_all_items) + hideWatchedMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_show_played_items) + hidePartiallyWatchedMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_partially_played_items) + } + + updateItemVisibilityMenu(menu.findItem(R.id.menu_item_feed_toggle_played_items)) updateToggleFutureItemsButton(menu.findItem(R.id.menu_item_feed_toggle_future_items)) } @@ -243,11 +255,11 @@ class FeedFragment : BaseStateFragment() { .show() return true } else if (item.itemId == R.id.menu_item_feed_toggle_show_all_items) { - setShowPlayedItemsMethod(item, ShowItems.DEFAULT) + changeItemsVisibilityStatus(item, StreamVisibilityStatus.DEFAULT) } else if (item.itemId == R.id.menu_item_feed_toggle_show_played_items) { - setShowPlayedItemsMethod(item, ShowItems.WATCHED) + changeItemsVisibilityStatus(item, StreamVisibilityStatus.HIDE_WATCHED) } else if (item.itemId == R.id.menu_item_feed_toggle_partially_played_items) { - setShowPlayedItemsMethod(item, ShowItems.PARTIALLY_WATCHED) + changeItemsVisibilityStatus(item, StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED) } else if (item.itemId == R.id.menu_item_feed_toggle_future_items) { showFutureItems = !item.isChecked updateToggleFutureItemsButton(item) @@ -258,11 +270,11 @@ class FeedFragment : BaseStateFragment() { return super.onOptionsItemSelected(item) } - private fun setShowPlayedItemsMethod(item: MenuItem, showItems: ShowItems) { - showPlayedItems = showItems - viewModel.togglePlayedItems(showPlayedItems) - updateTogglePlayedItemsButton(item) - viewModel.saveShowPlayedItemsToPreferences(showPlayedItems) + private fun changeItemsVisibilityStatus(item: MenuItem, streamVisibilityStatus: StreamVisibilityStatus) { + feedVisibilityStatus = streamVisibilityStatus + viewModel.changeVisibilityState(feedVisibilityStatus) + updateItemVisibilityMenu(item) + viewModel.saveStreamVisibilityStateToPreferences(feedVisibilityStatus) } override fun onDestroyOptionsMenu() { @@ -291,10 +303,28 @@ class FeedFragment : BaseStateFragment() { super.onDestroyView() } - private fun updateTogglePlayedItemsButton(menuItem: MenuItem) { + private fun updateItemVisibilityMenu(menuItem: MenuItem) { + when (feedVisibilityStatus) { + StreamVisibilityStatus.DEFAULT -> { + showAllMenuItem.isVisible = false + hideWatchedMenuItem.isVisible = true + hidePartiallyWatchedMenuItem.isVisible = true + } + StreamVisibilityStatus.HIDE_WATCHED -> { + showAllMenuItem.isVisible = true + hideWatchedMenuItem.isVisible = false + hidePartiallyWatchedMenuItem.isVisible = true + } + else -> { + showAllMenuItem.isVisible = true + hideWatchedMenuItem.isVisible = true + hidePartiallyWatchedMenuItem.isVisible = false + } + } + MenuItemCompat.setTooltipText( menuItem, - getString(R.string.feed_toggle_show_hide_played_items) + getString(R.string.feed_change_stream_visibility_state) ) } diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 5785c8e3f..46c3443a8 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -28,20 +28,17 @@ import org.schabi.newpipe.util.DEFAULT_THROTTLE_TIMEOUT import java.time.OffsetDateTime import java.util.concurrent.TimeUnit -enum class ShowItems { - WATCHED, PARTIALLY_WATCHED, DEFAULT -} class FeedViewModel( private val application: Application, groupId: Long = FeedGroupEntity.GROUP_ALL_ID, - initialShowPlayedItems: ShowItems = ShowItems.DEFAULT, + initialStreamVisibility: StreamVisibilityStatus = StreamVisibilityStatus.DEFAULT, initialShowFutureItems: Boolean = true ) : ViewModel() { private val feedDatabaseManager = FeedDatabaseManager(application) - private val toggleShowPlayedItems = BehaviorProcessor.create() - private val toggleShowPlayedItemsFlowable = toggleShowPlayedItems - .startWithItem(initialShowPlayedItems) + private val streamVisibilityState = BehaviorProcessor.create() + private val streamVisibilityStateFlowable = streamVisibilityState + .startWithItem(initialStreamVisibility) .distinctUntilChanged() private val toggleShowFutureItems = BehaviorProcessor.create() @@ -55,12 +52,12 @@ class FeedViewModel( private var combineDisposable = Flowable .combineLatest( FeedEventManager.events(), - toggleShowPlayedItemsFlowable, + streamVisibilityStateFlowable, toggleShowFutureItemsFlowable, feedDatabaseManager.notLoadedCount(groupId), feedDatabaseManager.oldestSubscriptionUpdate(groupId), - Function5 { t1: FeedEventManager.Event, t2: ShowItems, t3: Boolean, + Function5 { t1: FeedEventManager.Event, t2: StreamVisibilityStatus, t3: Boolean, t4: Long, t5: List -> return@Function5 CombineResultEventHolder(t1, t2, t3, t4, t5.firstOrNull()) } @@ -74,10 +71,10 @@ class FeedViewModel( .getStreams( groupId, !( - showPlayedItems == ShowItems.WATCHED || - showPlayedItems == ShowItems.PARTIALLY_WATCHED + showPlayedItems == StreamVisibilityStatus.HIDE_WATCHED || + showPlayedItems == StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED ), - showPlayedItems != ShowItems.PARTIALLY_WATCHED, + showPlayedItems != StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED, showFutureItems ) .blockingGet(arrayListOf()) @@ -110,7 +107,7 @@ class FeedViewModel( private data class CombineResultEventHolder( val t1: FeedEventManager.Event, - val t2: ShowItems, + val t2: StreamVisibilityStatus, val t3: Boolean, val t4: Long, val t5: OffsetDateTime? @@ -123,20 +120,20 @@ class FeedViewModel( val t4: OffsetDateTime? ) - fun togglePlayedItems(showItems: ShowItems) { - toggleShowPlayedItems.onNext(showItems) + fun changeVisibilityState(streamVisibilityStatus: StreamVisibilityStatus) { + streamVisibilityState.onNext(streamVisibilityStatus) } - fun saveShowPlayedItemsToPreferences(showItems: ShowItems) = + fun saveStreamVisibilityStateToPreferences(streamVisibilityStatus: StreamVisibilityStatus) = PreferenceManager.getDefaultSharedPreferences(application).edit { this.putString( - application.getString(R.string.feed_show_played_items_key), - showItems.toString() + application.getString(R.string.feed_stream_visibility_state_key), + streamVisibilityStatus.toString() ) this.apply() } - fun getItemsVisibilityFromPreferences() = getItemsVisibilityFromPreferences(application) + fun getItemsVisibilityFromPreferences() = getStreamVisibilityStateFromPreferences(application) fun toggleFutureItems(showFutureItems: Boolean) { toggleShowFutureItems.onNext(showFutureItems) @@ -152,13 +149,13 @@ class FeedViewModel( companion object { - private fun getItemsVisibilityFromPreferences(context: Context): ShowItems { + private fun getStreamVisibilityStateFromPreferences(context: Context): StreamVisibilityStatus { val s = PreferenceManager.getDefaultSharedPreferences(context) .getString( - context.getString(R.string.feed_show_played_items_key), - ShowItems.DEFAULT.toString() - ) ?: ShowItems.DEFAULT.toString() - return ShowItems.valueOf(s) + context.getString(R.string.feed_stream_visibility_state_key), + StreamVisibilityStatus.DEFAULT.toString() + ) ?: StreamVisibilityStatus.DEFAULT.toString() + return StreamVisibilityStatus.valueOf(s) } private fun getShowFutureItemsFromPreferences(context: Context) = @@ -170,7 +167,7 @@ class FeedViewModel( App.getApp(), groupId, // Read initial value from preferences - getItemsVisibilityFromPreferences(context.applicationContext), + getStreamVisibilityStateFromPreferences(context.applicationContext), getShowFutureItemsFromPreferences(context.applicationContext) ) } diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt b/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt new file mode 100644 index 000000000..956594ef3 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt @@ -0,0 +1,5 @@ +package org.schabi.newpipe.local.feed + +enum class StreamVisibilityStatus { + DEFAULT, HIDE_WATCHED, HIDE_PARTIALLY_WATCHED +} diff --git a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java index b8d2eae2d..be3ab3674 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java @@ -87,7 +87,7 @@ public class HistoryRecordManager { * Marks a stream item as watched such that it is hidden from the feed if watched videos are * hidden. Adds a history entry and updates the stream progress to 100%. * - * @see FeedViewModel#togglePlayedItems + * @see FeedViewModel#changeVisibilityState * @param info the item to mark as watched * @return a Maybe containing the ID of the item if successful */ diff --git a/app/src/main/res/menu/menu_feed_fragment.xml b/app/src/main/res/menu/menu_feed_fragment.xml index fc371b2fe..303d27b6b 100644 --- a/app/src/main/res/menu/menu_feed_fragment.xml +++ b/app/src/main/res/menu/menu_feed_fragment.xml @@ -7,18 +7,18 @@ android:checkable="false" android:checked="false" android:icon="@drawable/ic_visibility_on" - android:title="@string/feed_toggle_show_hide_played_items" + android:title="@string/feed_change_stream_visibility_state" app:showAsAction="ifRoom"> + android:title="@string/feed_stream_visibility_show_all"/> + android:title="@string/feed_stream_visibility_hide_watched"/> + android:title="@string/feed_stream_visibility_hide_partially_watched"/> diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 83f85b934..0bb9b21c2 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -283,7 +283,7 @@ feed_update_threshold_key 300 - feed_show_items + feed_stream_visibility_state feed_show_future_items show_thumbnail_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 46a3cad74..854e0db54 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -691,7 +691,7 @@ \nYouTube is an example of a service that offers this fast method with its RSS feed. \n \nSo the choice boils down to what you prefer: speed or precise information. - Show/hide watched items + Show/hide watched streams This content is not yet supported by NewPipe.\n\nIt will hopefully be supported in a future version. Channel\'s avatar thumbnail Created by %s @@ -759,8 +759,8 @@ Unknown quality Show future items Hide future items - Hide Watched and Partially Watched - Hide Watched - Show All + Hide Watched + Hide Fully Watched + Show All Sort \ No newline at end of file From cd8d57040cfaeea1cc97ad4dba9023ff599e16bb Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Sat, 4 Feb 2023 18:48:27 +0100 Subject: [PATCH 19/54] Implemented the feature using multiple checkboxes --- .../newpipe/database/feed/dao/FeedDAO.kt | 2 + .../schabi/newpipe/local/feed/FeedFragment.kt | 116 +++++++----------- .../newpipe/local/feed/FeedViewModel.kt | 102 +++++++-------- .../local/feed/StreamVisibilityStatus.kt | 5 - .../local/history/HistoryRecordManager.java | 2 +- app/src/main/res/menu/menu_feed_fragment.xml | 26 +--- app/src/main/res/values/settings_keys.xml | 3 +- app/src/main/res/values/strings.xml | 9 +- 8 files changed, 107 insertions(+), 158 deletions(-) delete mode 100644 app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt diff --git a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt index a53e5cac1..42a248ca5 100644 --- a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt @@ -73,6 +73,8 @@ abstract class FeedDAO { OR sst.stream_id IS NULL OR (sst.progress_time <= ${StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS} AND sst.progress_time <= s.duration * 1000 / 4) + OR (sst.progress_time >= s.duration * 1000 - ${StreamStateEntity.PLAYBACK_FINISHED_END_MILLISECONDS} + OR sst.progress_time >= s.duration * 1000 * 3 / 4) ) AND ( :uploadDateBefore IS NULL 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 9358c1654..d2c361662 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 @@ -37,7 +37,6 @@ import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.appcompat.app.AlertDialog -import androidx.appcompat.content.res.AppCompatResources import androidx.core.content.edit import androidx.core.math.MathUtils import androidx.core.os.bundleOf @@ -100,13 +99,10 @@ class FeedFragment : BaseStateFragment() { private var oldestSubscriptionUpdate: OffsetDateTime? = null private lateinit var groupAdapter: GroupieAdapter - @State @JvmField var feedVisibilityStatus: StreamVisibilityStatus = StreamVisibilityStatus.DEFAULT + @State @JvmField var showPlayedItems: Boolean = true + @State @JvmField var showPartiallyPlayedItems: Boolean = true @State @JvmField var showFutureItems: Boolean = true - private lateinit var showAllMenuItem: MenuItem - private lateinit var hideWatchedMenuItem: MenuItem - private lateinit var hidePartiallyWatchedMenuItem: MenuItem - private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null private var updateListViewModeOnResume = false private var isRefreshing = false @@ -144,7 +140,8 @@ class FeedFragment : BaseStateFragment() { val factory = FeedViewModel.getFactory(requireContext(), groupId) viewModel = ViewModelProvider(this, factory)[FeedViewModel::class.java] - feedVisibilityStatus = viewModel.getItemsVisibilityFromPreferences() + showPlayedItems = viewModel.getShowPlayedItemsFromPreferences() + showPartiallyPlayedItems = viewModel.getShowPartiallyPlayedItemsFromPreferences() showFutureItems = viewModel.getShowFutureItemsFromPreferences() viewModel.stateLiveData.observe(viewLifecycleOwner) { it?.let(::handleResult) } @@ -220,16 +217,10 @@ class FeedFragment : BaseStateFragment() { activity.supportActionBar?.subtitle = groupName inflater.inflate(R.menu.menu_feed_fragment, menu) - - val itemVisibilityMenu = menu.findItem(R.id.menu_item_feed_toggle_played_items).subMenu - if (itemVisibilityMenu != null) { - showAllMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_show_all_items) - hideWatchedMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_show_played_items) - hidePartiallyWatchedMenuItem = itemVisibilityMenu.findItem(R.id.menu_item_feed_toggle_partially_played_items) - } - - updateItemVisibilityMenu(menu.findItem(R.id.menu_item_feed_toggle_played_items)) - updateToggleFutureItemsButton(menu.findItem(R.id.menu_item_feed_toggle_future_items)) + MenuItemCompat.setTooltipText( + menu.findItem(R.id.menu_item_feed_toggle_played_items), + getString(R.string.feed_show_hide_streams) + ) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -254,27 +245,44 @@ class FeedFragment : BaseStateFragment() { .create() .show() return true - } else if (item.itemId == R.id.menu_item_feed_toggle_show_all_items) { - changeItemsVisibilityStatus(item, StreamVisibilityStatus.DEFAULT) - } else if (item.itemId == R.id.menu_item_feed_toggle_show_played_items) { - changeItemsVisibilityStatus(item, StreamVisibilityStatus.HIDE_WATCHED) - } else if (item.itemId == R.id.menu_item_feed_toggle_partially_played_items) { - changeItemsVisibilityStatus(item, StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED) - } else if (item.itemId == R.id.menu_item_feed_toggle_future_items) { - showFutureItems = !item.isChecked - updateToggleFutureItemsButton(item) - viewModel.toggleFutureItems(showFutureItems) - viewModel.saveShowFutureItemsToPreferences(showFutureItems) + } else if (item.itemId == R.id.menu_item_feed_toggle_played_items) { + showStreamVisibilityDialog() } return super.onOptionsItemSelected(item) } - private fun changeItemsVisibilityStatus(item: MenuItem, streamVisibilityStatus: StreamVisibilityStatus) { - feedVisibilityStatus = streamVisibilityStatus - viewModel.changeVisibilityState(feedVisibilityStatus) - updateItemVisibilityMenu(item) - viewModel.saveStreamVisibilityStateToPreferences(feedVisibilityStatus) + private fun showStreamVisibilityDialog() { + val dialogItems = arrayOf( + getString(R.string.feed_show_watched), + getString(R.string.feed_show_partially_watched), + getString(R.string.feed_show_upcoming) + ) + + val checkedDialogItems = booleanArrayOf(!showPlayedItems, !showPartiallyPlayedItems, !showFutureItems) + + val builder = AlertDialog.Builder(context!!) + builder.setTitle(R.string.feed_hide_streams_title) + builder.setMultiChoiceItems(dialogItems, checkedDialogItems) { _, which, isChecked -> + checkedDialogItems[which] = isChecked + } + + builder.setPositiveButton(R.string.ok) { _, _ -> + showPlayedItems = !checkedDialogItems[0] + viewModel.setShowPlayedItems(showPlayedItems) + viewModel.saveShowPlayedItemsToPreferences(showPlayedItems) + + showPartiallyPlayedItems = !checkedDialogItems[1] + viewModel.setShowPartiallyPlayedItems(showPartiallyPlayedItems) + viewModel.saveShowPartiallyPlayedItemsToPreferences(showPartiallyPlayedItems) + + showFutureItems = !checkedDialogItems[2] + viewModel.setShowFutureItems(showFutureItems) + viewModel.saveShowFutureItemsToPreferences(showFutureItems) + } + builder.setNegativeButton(R.string.cancel, null) + + builder.create().show() } override fun onDestroyOptionsMenu() { @@ -303,48 +311,6 @@ class FeedFragment : BaseStateFragment() { super.onDestroyView() } - private fun updateItemVisibilityMenu(menuItem: MenuItem) { - when (feedVisibilityStatus) { - StreamVisibilityStatus.DEFAULT -> { - showAllMenuItem.isVisible = false - hideWatchedMenuItem.isVisible = true - hidePartiallyWatchedMenuItem.isVisible = true - } - StreamVisibilityStatus.HIDE_WATCHED -> { - showAllMenuItem.isVisible = true - hideWatchedMenuItem.isVisible = false - hidePartiallyWatchedMenuItem.isVisible = true - } - else -> { - showAllMenuItem.isVisible = true - hideWatchedMenuItem.isVisible = true - hidePartiallyWatchedMenuItem.isVisible = false - } - } - - MenuItemCompat.setTooltipText( - menuItem, - getString(R.string.feed_change_stream_visibility_state) - ) - } - - private fun updateToggleFutureItemsButton(menuItem: MenuItem) { - menuItem.isChecked = showFutureItems - menuItem.icon = AppCompatResources.getDrawable( - requireContext(), - if (showFutureItems) R.drawable.ic_history_future else R.drawable.ic_history - ) - MenuItemCompat.setTooltipText( - menuItem, - getString( - if (showFutureItems) - R.string.feed_toggle_hide_future_items - else - R.string.feed_toggle_show_future_items - ) - ) - } - // ////////////////////////////////////////////////////////////////////////// // Handling // ////////////////////////////////////////////////////////////////////////// diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 46c3443a8..2e85a65cb 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -11,7 +11,7 @@ import androidx.lifecycle.viewmodel.viewModelFactory import androidx.preference.PreferenceManager import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Flowable -import io.reactivex.rxjava3.functions.Function5 +import io.reactivex.rxjava3.functions.Function6 import io.reactivex.rxjava3.processors.BehaviorProcessor import io.reactivex.rxjava3.schedulers.Schedulers import org.schabi.newpipe.App @@ -31,18 +31,24 @@ import java.util.concurrent.TimeUnit class FeedViewModel( private val application: Application, groupId: Long = FeedGroupEntity.GROUP_ALL_ID, - initialStreamVisibility: StreamVisibilityStatus = StreamVisibilityStatus.DEFAULT, + initialShowPlayedItems: Boolean = true, + initialShowPartiallyPlayedItems: Boolean = true, initialShowFutureItems: Boolean = true ) : ViewModel() { private val feedDatabaseManager = FeedDatabaseManager(application) - private val streamVisibilityState = BehaviorProcessor.create() - private val streamVisibilityStateFlowable = streamVisibilityState - .startWithItem(initialStreamVisibility) + private val showPlayedItems = BehaviorProcessor.create() + private val showPlayedItemsFlowable = showPlayedItems + .startWithItem(initialShowPlayedItems) .distinctUntilChanged() - private val toggleShowFutureItems = BehaviorProcessor.create() - private val toggleShowFutureItemsFlowable = toggleShowFutureItems + private val showPartiallyPlayedItems = BehaviorProcessor.create() + private val showPartiallyPlayedItemsFlowable = showPartiallyPlayedItems + .startWithItem(initialShowPartiallyPlayedItems) + .distinctUntilChanged() + + private val showFutureItems = BehaviorProcessor.create() + private val showFutureItemsFlowable = showFutureItems .startWithItem(initialShowFutureItems) .distinctUntilChanged() @@ -52,35 +58,27 @@ class FeedViewModel( private var combineDisposable = Flowable .combineLatest( FeedEventManager.events(), - streamVisibilityStateFlowable, - toggleShowFutureItemsFlowable, + showPlayedItemsFlowable, + showPartiallyPlayedItemsFlowable, + showFutureItemsFlowable, feedDatabaseManager.notLoadedCount(groupId), feedDatabaseManager.oldestSubscriptionUpdate(groupId), - Function5 { t1: FeedEventManager.Event, t2: StreamVisibilityStatus, t3: Boolean, - t4: Long, t5: List -> - return@Function5 CombineResultEventHolder(t1, t2, t3, t4, t5.firstOrNull()) + Function6 { t1: FeedEventManager.Event, t2: Boolean, t3: Boolean, t4: Boolean, + t5: Long, t6: List -> + return@Function6 CombineResultEventHolder(t1, t2, t3, t4, t5, t6.firstOrNull()) } ) .throttleLatest(DEFAULT_THROTTLE_TIMEOUT, TimeUnit.MILLISECONDS) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) - .map { (event, showPlayedItems, showFutureItems, notLoadedCount, oldestUpdate) -> - val streamItems = if (event is SuccessResultEvent || event is IdleEvent) { + .map { (event, showPlayedItems, showPartiallyPlayedItems, showFutureItems, notLoadedCount, oldestUpdate) -> + val streamItems = if (event is SuccessResultEvent || event is IdleEvent) feedDatabaseManager - .getStreams( - groupId, - !( - showPlayedItems == StreamVisibilityStatus.HIDE_WATCHED || - showPlayedItems == StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED - ), - showPlayedItems != StreamVisibilityStatus.HIDE_PARTIALLY_WATCHED, - showFutureItems - ) + .getStreams(groupId, showPlayedItems, showPartiallyPlayedItems, showFutureItems) .blockingGet(arrayListOf()) - } else { + else arrayListOf() - } CombineResultDataHolder(event, streamItems, notLoadedCount, oldestUpdate) } @@ -107,10 +105,11 @@ class FeedViewModel( private data class CombineResultEventHolder( val t1: FeedEventManager.Event, - val t2: StreamVisibilityStatus, + val t2: Boolean, val t3: Boolean, - val t4: Long, - val t5: OffsetDateTime? + val t4: Boolean, + val t5: Long, + val t6: OffsetDateTime? ) private data class CombineResultDataHolder( @@ -120,23 +119,32 @@ class FeedViewModel( val t4: OffsetDateTime? ) - fun changeVisibilityState(streamVisibilityStatus: StreamVisibilityStatus) { - streamVisibilityState.onNext(streamVisibilityStatus) + fun setShowPlayedItems(showPlayedItems: Boolean) { + this.showPlayedItems.onNext(showPlayedItems) } - fun saveStreamVisibilityStateToPreferences(streamVisibilityStatus: StreamVisibilityStatus) = + fun saveShowPlayedItemsToPreferences(showPlayedItems: Boolean) = PreferenceManager.getDefaultSharedPreferences(application).edit { - this.putString( - application.getString(R.string.feed_stream_visibility_state_key), - streamVisibilityStatus.toString() - ) + this.putBoolean(application.getString(R.string.feed_show_watched_items_key), showPlayedItems) this.apply() } - fun getItemsVisibilityFromPreferences() = getStreamVisibilityStateFromPreferences(application) + fun getShowPlayedItemsFromPreferences() = getShowPlayedItemsFromPreferences(application) - fun toggleFutureItems(showFutureItems: Boolean) { - toggleShowFutureItems.onNext(showFutureItems) + fun setShowPartiallyPlayedItems(showPartiallyPlayedItems: Boolean) { + this.showPartiallyPlayedItems.onNext(showPartiallyPlayedItems) + } + + fun saveShowPartiallyPlayedItemsToPreferences(showPartiallyPlayedItems: Boolean) = + PreferenceManager.getDefaultSharedPreferences(application).edit { + this.putBoolean(application.getString(R.string.feed_show_partially_watched_items_key), showPartiallyPlayedItems) + this.apply() + } + + fun getShowPartiallyPlayedItemsFromPreferences() = getShowPartiallyPlayedItemsFromPreferences(application) + + fun setShowFutureItems(showFutureItems: Boolean) { + this.showFutureItems.onNext(showFutureItems) } fun saveShowFutureItemsToPreferences(showFutureItems: Boolean) = @@ -148,16 +156,13 @@ class FeedViewModel( fun getShowFutureItemsFromPreferences() = getShowFutureItemsFromPreferences(application) companion object { + private fun getShowPlayedItemsFromPreferences(context: Context) = + PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.feed_show_watched_items_key), true) - private fun getStreamVisibilityStateFromPreferences(context: Context): StreamVisibilityStatus { - val s = PreferenceManager.getDefaultSharedPreferences(context) - .getString( - context.getString(R.string.feed_stream_visibility_state_key), - StreamVisibilityStatus.DEFAULT.toString() - ) ?: StreamVisibilityStatus.DEFAULT.toString() - return StreamVisibilityStatus.valueOf(s) - } - + private fun getShowPartiallyPlayedItemsFromPreferences(context: Context) = + PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(context.getString(R.string.feed_show_partially_watched_items_key), true) private fun getShowFutureItemsFromPreferences(context: Context) = PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(context.getString(R.string.feed_show_future_items_key), true) @@ -167,7 +172,8 @@ class FeedViewModel( App.getApp(), groupId, // Read initial value from preferences - getStreamVisibilityStateFromPreferences(context.applicationContext), + getShowPlayedItemsFromPreferences(context.applicationContext), + getShowPartiallyPlayedItemsFromPreferences(context.applicationContext), getShowFutureItemsFromPreferences(context.applicationContext) ) } diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt b/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt deleted file mode 100644 index 956594ef3..000000000 --- a/app/src/main/java/org/schabi/newpipe/local/feed/StreamVisibilityStatus.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.schabi.newpipe.local.feed - -enum class StreamVisibilityStatus { - DEFAULT, HIDE_WATCHED, HIDE_PARTIALLY_WATCHED -} diff --git a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java index be3ab3674..340b22278 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java @@ -87,7 +87,7 @@ public class HistoryRecordManager { * Marks a stream item as watched such that it is hidden from the feed if watched videos are * hidden. Adds a history entry and updates the stream progress to 100%. * - * @see FeedViewModel#changeVisibilityState + * @see FeedViewModel#setShowPlayedItems * @param info the item to mark as watched * @return a Maybe containing the ID of the item if successful */ diff --git a/app/src/main/res/menu/menu_feed_fragment.xml b/app/src/main/res/menu/menu_feed_fragment.xml index 303d27b6b..2365c30e4 100644 --- a/app/src/main/res/menu/menu_feed_fragment.xml +++ b/app/src/main/res/menu/menu_feed_fragment.xml @@ -4,31 +4,9 @@ - - - - - - - - feed_update_threshold_key 300 - feed_stream_visibility_state + feed_show_watched_items + feed_show_partially_watched_items feed_show_future_items show_thumbnail_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 854e0db54..e01d3ed72 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -691,7 +691,8 @@ \nYouTube is an example of a service that offers this fast method with its RSS feed. \n \nSo the choice boils down to what you prefer: speed or precise information. - Show/hide watched streams + Hide the following streams + Show/Hide streams This content is not yet supported by NewPipe.\n\nIt will hopefully be supported in a future version. Channel\'s avatar thumbnail Created by %s @@ -759,8 +760,8 @@ Unknown quality Show future items Hide future items - Hide Watched - Hide Fully Watched - Show All + Fully Watched + Partially Watched + Upcoming Sort \ No newline at end of file From 68097568d505ec3fc3a2208780d596f1aa318d65 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Sun, 5 Feb 2023 20:32:34 +0100 Subject: [PATCH 20/54] Fixed the bug by replacing the thumbnail_url with the thumbnail_stream_id --- .../7.json | 737 ++++++++++++++++++ .../newpipe/database/DatabaseMigrationTest.kt | 7 + .../org/schabi/newpipe/NewPipeDatabase.java | 3 +- .../schabi/newpipe/database/AppDatabase.java | 4 +- .../schabi/newpipe/database/Migrations.java | 42 + .../playlist/dao/PlaylistStreamDAO.java | 20 +- .../playlist/model/PlaylistEntity.java | 26 +- .../local/bookmark/BookmarkFragment.java | 6 +- .../local/dialog/PlaylistAppendDialog.java | 21 +- .../local/playlist/LocalPlaylistFragment.java | 31 +- .../local/playlist/LocalPlaylistManager.java | 57 +- 11 files changed, 885 insertions(+), 69 deletions(-) create mode 100644 app/schemas/org.schabi.newpipe.database.AppDatabase/7.json diff --git a/app/schemas/org.schabi.newpipe.database.AppDatabase/7.json b/app/schemas/org.schabi.newpipe.database.AppDatabase/7.json new file mode 100644 index 000000000..a14f8b9a8 --- /dev/null +++ b/app/schemas/org.schabi.newpipe.database.AppDatabase/7.json @@ -0,0 +1,737 @@ +{ + "formatVersion": 1, + "database": { + "version": 7, + "identityHash": "012fc8e7ad3333f1597347f34e76a513", + "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, `is_thumbnail_permanent` INTEGER NOT NULL, `thumbnail_stream_id` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isThumbnailPermanent", + "columnName": "is_thumbnail_permanent", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "thumbnailStreamId", + "columnName": "thumbnail_stream_id", + "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, '012fc8e7ad3333f1597347f34e76a513')" + ] + } +} \ 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 be95c8e27..5e9fc6d9e 100644 --- a/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt +++ b/app/src/androidTest/java/org/schabi/newpipe/database/DatabaseMigrationTest.kt @@ -101,6 +101,13 @@ class DatabaseMigrationTest { Migrations.MIGRATION_5_6 ) + testHelper.runMigrationsAndValidate( + AppDatabase.DATABASE_NAME, + Migrations.DB_VER_7, + true, + Migrations.MIGRATION_6_7 + ) + val migratedDatabaseV3 = getMigratedDatabase() val listFromDB = migratedDatabaseV3.streamDAO().all.blockingFirst() diff --git a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java index fc3423994..856fbff8b 100644 --- a/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java +++ b/app/src/main/java/org/schabi/newpipe/NewPipeDatabase.java @@ -6,6 +6,7 @@ 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 static org.schabi.newpipe.database.Migrations.MIGRATION_6_7; import android.content.Context; import android.database.Cursor; @@ -26,7 +27,7 @@ public final class NewPipeDatabase { return Room .databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME) .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4, MIGRATION_4_5, - MIGRATION_5_6) + MIGRATION_5_6, MIGRATION_6_7) .build(); } 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 563e80b17..03e39cd43 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_6; +import static org.schabi.newpipe.database.Migrations.DB_VER_7; 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_6 + version = DB_VER_7 ) 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 e301e3f1f..e995fdd6c 100644 --- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java +++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java @@ -24,6 +24,7 @@ public final class Migrations { public static final int DB_VER_4 = 4; public static final int DB_VER_5 = 5; public static final int DB_VER_6 = 6; + public static final int DB_VER_7 = 7; private static final String TAG = Migrations.class.getName(); public static final boolean DEBUG = MainActivity.DEBUG; @@ -197,6 +198,47 @@ public final class Migrations { } }; + public static final Migration MIGRATION_6_7 = new Migration(DB_VER_6, DB_VER_7) { + @Override + public void migrate(@NonNull final SupportSQLiteDatabase database) { + // Create a new column thumbnail_stream_id + database.execSQL("ALTER TABLE `playlists` ADD COLUMN `thumbnail_stream_id` " + + "INTEGER NOT NULL DEFAULT -1"); + + // Migrate the thumbnail_url to the thumbnail_stream_id + database.execSQL("CREATE TEMPORARY TABLE temporary_table AS" + + " SELECT p.uid AS playlist_uid, s.uid AS stream_uid" + + " FROM playlists p" + + " LEFT JOIN playlist_stream_join ps ON p.uid = ps.playlist_id" + + " LEFT JOIN streams s ON s.uid = ps.stream_id" + + " WHERE s.thumbnail_url = p.thumbnail_url"); + + database.execSQL("UPDATE playlists SET thumbnail_stream_id = (" + + "SELECT CASE WHEN COUNT(*) != 0 then stream_uid ELSE -1 END " + + "FROM temporary_table " + + "WHERE playlist_uid = playlists.uid)"); + + database.execSQL("DROP TABLE temporary_table"); + + // Remove the thumbnail_url field in the playlist table + database.execSQL("CREATE TABLE IF NOT EXISTS `playlists_new`" + + "(uid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + + "name TEXT, " + + "is_thumbnail_permanent INTEGER NOT NULL, " + + "thumbnail_stream_id INTEGER NOT NULL)"); + + database.execSQL("INSERT INTO playlists_new" + + " SELECT uid, name, is_thumbnail_permanent, thumbnail_stream_id " + + " FROM playlists"); + + + database.execSQL("DROP TABLE playlists"); + database.execSQL("ALTER TABLE playlists_new RENAME TO playlists"); + database.execSQL("CREATE INDEX IF NOT EXISTS " + + "`index_playlists_name` ON `playlists` (`name`)"); + } + }; + 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 2036dc205..3412e1303 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 @@ -15,9 +15,11 @@ import java.util.List; import io.reactivex.rxjava3.core.Flowable; import static org.schabi.newpipe.database.playlist.PlaylistMetadataEntry.PLAYLIST_STREAM_COUNT; +import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.DEFAULT_THUMBNAIL; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_ID; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE; +import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_THUMBNAIL_STREAM_ID; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_THUMBNAIL_URL; import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.JOIN_INDEX; import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.JOIN_PLAYLIST_ID; @@ -54,14 +56,14 @@ 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" + @Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_ID + " ELSE -1 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); + Flowable getAutomaticThumbnailUrl(long playlistId); @RewriteQueriesToDropUnusedColumns @Transaction @@ -84,12 +86,20 @@ public interface PlaylistStreamDAO extends BasicDAO { Flowable> getOrderedStreamsOf(long playlistId); @Transaction - @Query("SELECT " + PLAYLIST_ID + ", " + PLAYLIST_NAME + ", " + PLAYLIST_THUMBNAIL_URL + ", " - + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + @Query("SELECT " + PLAYLIST_ID + ", " + PLAYLIST_NAME + "," + + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = -1" + + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + + " ELSE (SELECT " + STREAM_THUMBNAIL_URL + + " FROM " + STREAM_TABLE + + " WHERE " + STREAM_TABLE + "." + STREAM_ID + " = " + PLAYLIST_THUMBNAIL_STREAM_ID + + " ) END AS " + PLAYLIST_THUMBNAIL_URL + ", " + + + PLAYLIST_NAME + ", " + + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + " FROM " + PLAYLIST_TABLE + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE - + " ON " + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID + + " ON " + PLAYLIST_TABLE + "." + PLAYLIST_ID + " = " + 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 086362da2..6c1d96d41 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 @@ -8,14 +8,20 @@ import androidx.room.PrimaryKey; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_NAME; import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_TABLE; +import org.schabi.newpipe.R; + @Entity(tableName = PLAYLIST_TABLE, indices = {@Index(value = {PLAYLIST_NAME})}) public class PlaylistEntity { + + public static final String DEFAULT_THUMBNAIL = "drawable://" + + R.drawable.placeholder_thumbnail_playlist; public static final String PLAYLIST_TABLE = "playlists"; 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"; + public static final String PLAYLIST_THUMBNAIL_STREAM_ID = "thumbnail_stream_id"; @PrimaryKey(autoGenerate = true) @ColumnInfo(name = PLAYLIST_ID) @@ -24,17 +30,17 @@ public class PlaylistEntity { @ColumnInfo(name = PLAYLIST_NAME) private String name; - @ColumnInfo(name = PLAYLIST_THUMBNAIL_URL) - private String thumbnailUrl; - @ColumnInfo(name = PLAYLIST_THUMBNAIL_PERMANENT) private boolean isThumbnailPermanent; - public PlaylistEntity(final String name, final String thumbnailUrl, - final boolean isThumbnailPermanent) { + @ColumnInfo(name = PLAYLIST_THUMBNAIL_STREAM_ID) + private long thumbnailStreamId; + + public PlaylistEntity(final String name, final boolean isThumbnailPermanent, + final long thumbnailStreamId) { this.name = name; - this.thumbnailUrl = thumbnailUrl; this.isThumbnailPermanent = isThumbnailPermanent; + this.thumbnailStreamId = thumbnailStreamId; } public long getUid() { @@ -53,12 +59,12 @@ public class PlaylistEntity { this.name = name; } - public String getThumbnailUrl() { - return thumbnailUrl; + public long getThumbnailStreamId() { + return thumbnailStreamId; } - public void setThumbnailUrl(final String thumbnailUrl) { - this.thumbnailUrl = thumbnailUrl; + public void setThumbnailStreamId(final long thumbnailStreamId) { + this.thumbnailStreamId = thumbnailStreamId; } public boolean getIsThumbnailPermanent() { diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java index e2f493a8a..0969dbfcc 100644 --- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java @@ -280,10 +280,10 @@ public final class BookmarkFragment extends BaseLocalListFragment successToast.show())); - } - playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(ignored -> successToast.show())); + .subscribe(ignored -> { + successToast.show(); + + if (playlist.thumbnailUrl.equals(PlaylistEntity.DEFAULT_THUMBNAIL)) { + playlistDisposables.add(manager + .changePlaylistThumbnail(playlist.uid, streams.get(0).getUid(), + false) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(ignore -> successToast.show())); + } + })); requireDialog().dismiss(); } 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 68a35e72b..a3648c3c2 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 @@ -70,6 +70,8 @@ import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.subjects.PublishSubject; public class LocalPlaylistFragment extends BaseLocalListFragment, Void> { + public static final long DEFAULT_THUMBNAIL_ID = -1; + public static final long NO_THUMBNAIL_ID = -2; // Save the list 10 seconds after the last change occurred private static final long SAVE_DEBOUNCE_MILLIS = 10000; private static final int MINIMUM_INITIAL_DRAG_VELOCITY = 12; @@ -417,8 +419,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment successToast.show(), throwable -> showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK, @@ -616,16 +618,16 @@ public class LocalPlaylistFragment extends BaseLocalListFragment - changeThumbnailUrl(item.getStreamEntity().getThumbnailUrl(), + changeThumbnailStreamId(item.getStreamEntity().getUid(), true)) .setAction( StreamDialogDefaultEntry.DELETE, 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 4007d0e09..abf9c77b2 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,7 +2,6 @@ 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; @@ -42,28 +41,34 @@ public class LocalPlaylistManager { } final StreamEntity defaultStream = streams.get(0); final PlaylistEntity newPlaylist = - new PlaylistEntity(name, defaultStream.getThumbnailUrl(), false); + new PlaylistEntity(name, false, defaultStream.getUid()); - return Maybe.fromCallable(() -> database.runInTransaction(() -> - upsertStreams(playlistTable.insert(newPlaylist), streams, 0)) - ).subscribeOn(Schedulers.io()); + return Maybe.fromCallable(() -> database.runInTransaction(() -> { + final List streamIds = streamTable.upsertAll(streams); + newPlaylist.setThumbnailStreamId(streamIds.get(0)); + + return insertJoinEntities(playlistTable.insert(newPlaylist), + streamIds, 0); + } + )).subscribeOn(Schedulers.io()); } public Maybe> appendToPlaylist(final long playlistId, final List streams) { return playlistStreamTable.getMaximumIndexOf(playlistId) .firstElement() - .map(maxJoinIndex -> database.runInTransaction(() -> - upsertStreams(playlistId, streams, maxJoinIndex + 1)) - ).subscribeOn(Schedulers.io()); + .map(maxJoinIndex -> database.runInTransaction(() -> { + final List streamIds = streamTable.upsertAll(streams); + return insertJoinEntities(playlistId, streamIds, maxJoinIndex + 1); + } + )).subscribeOn(Schedulers.io()); } - private List upsertStreams(final long playlistId, - final List streams, - final int indexOffset) { + private List insertJoinEntities(final long playlistId, final List streamIds, + final int indexOffset) { + + final List joinEntities = new ArrayList<>(streamIds.size()); - final List joinEntities = new ArrayList<>(streams.size()); - final List streamIds = streamTable.upsertAll(streams); for (int index = 0; index < streamIds.size(); index++) { joinEntities.add(new PlaylistStreamEntity(playlistId, streamIds.get(index), index + indexOffset)); @@ -97,17 +102,17 @@ public class LocalPlaylistManager { } public Maybe renamePlaylist(final long playlistId, final String name) { - return modifyPlaylist(playlistId, name, null, false); + return modifyPlaylist(playlistId, name, LocalPlaylistFragment.NO_THUMBNAIL_ID, false); } public Maybe changePlaylistThumbnail(final long playlistId, - final String thumbnailUrl, + final long thumbnailStreamId, final boolean isPermanent) { - return modifyPlaylist(playlistId, null, thumbnailUrl, isPermanent); + return modifyPlaylist(playlistId, null, thumbnailStreamId, isPermanent); } - public String getPlaylistThumbnail(final long playlistId) { - return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getThumbnailUrl(); + public long getPlaylistThumbnailStreamId(final long playlistId) { + return playlistTable.getPlaylist(playlistId).blockingFirst().get(0).getThumbnailStreamId(); } public boolean getIsPlaylistThumbnailPermanent(final long playlistId) { @@ -115,14 +120,18 @@ public class LocalPlaylistManager { .getIsThumbnailPermanent(); } - public String getAutomaticPlaylistThumbnail(final long playlistId) { - final String def = "drawable://" + R.drawable.placeholder_thumbnail_playlist; - return playlistStreamTable.getAutomaticThumbnailUrl(playlistId, def).blockingFirst(); + public long getAutomaticPlaylistThumbnailStreamId(final long playlistId) { + final long streamId = playlistStreamTable.getAutomaticThumbnailUrl(playlistId) + .blockingFirst(); + if (streamId < 0) { + return LocalPlaylistFragment.DEFAULT_THUMBNAIL_ID; + } + return streamId; } private Maybe modifyPlaylist(final long playlistId, @Nullable final String name, - @Nullable final String thumbnailUrl, + final long thumbnailStreamId, final boolean isPermanent) { return playlistTable.getPlaylist(playlistId) .firstElement() @@ -132,8 +141,8 @@ public class LocalPlaylistManager { if (name != null) { playlist.setName(name); } - if (thumbnailUrl != null) { - playlist.setThumbnailUrl(thumbnailUrl); + if (thumbnailStreamId != LocalPlaylistFragment.NO_THUMBNAIL_ID) { + playlist.setThumbnailStreamId(thumbnailStreamId); playlist.setIsThumbnailPermanent(isPermanent); } return playlistTable.update(playlist); From 5d3955854ef5e09f83b1103d7dd07670933ad498 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Sun, 5 Feb 2023 21:21:02 +0100 Subject: [PATCH 21/54] Fixed the merge conflict --- .../database/playlist/dao/PlaylistStreamDAO.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 459959d99..2915e7bd3 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 @@ -110,8 +110,15 @@ public interface PlaylistStreamDAO extends BasicDAO { @Transaction @Query("SELECT " + PLAYLIST_TABLE + "." + PLAYLIST_ID + ", " + PLAYLIST_NAME + ", " - + PLAYLIST_TABLE + "." + PLAYLIST_THUMBNAIL_URL + ", " - + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", " + + + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = -1" + + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + + " ELSE (SELECT " + STREAM_THUMBNAIL_URL + + " FROM " + STREAM_TABLE + + " WHERE " + STREAM_TABLE + "." + STREAM_ID + " = " + PLAYLIST_THUMBNAIL_STREAM_ID + + " ) END AS " + PLAYLIST_THUMBNAIL_URL + + + ", COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", " + "COALESCE(SUM(" + STREAM_URL + " = :streamUrl), 0) AS " + PLAYLIST_TIMES_STREAM_IS_CONTAINED From e947e86eae1af11027d8f57e64fa3b9433dcc8e5 Mon Sep 17 00:00:00 2001 From: Trust_04zh Date: Tue, 12 Apr 2022 15:45:35 +0800 Subject: [PATCH 22/54] Make positions in list depend on watch history, remove confusing animations The following is the list of all commits squashed together: Regain function for option `Positions in lists` use option `Resume playback` to control display of progress info in VideoDetailFragment, remove this (extra) function from option `Positions in lists`. remove extra check for live streams, live streams updates just as non-live streams. fix #8176 by eliminating exit delay Regain function for option `Positions in lists` update code with developer's comments apply static import to methods in util class DependentPreferenceHelper Regain function for option `Positions in lists` use option `Resume playback` to control display of progress info in VideoDetailFragment, remove this (extra) function from option `Positions in lists`. remove extra check for live streams, live streams updates just as non-live streams. fix behavior for displaying progress bar when autoplay off but video resume on not to retrieve unnecessary states when position in lists disabled fix mistake in code simplify conditional logic update doc comment and remove unused method Fix not showing duration if position indicators disabled Positions in lists only depends on watch history --- .../fragments/detail/VideoDetailFragment.java | 66 ++++++------------- .../holder/StreamMiniInfoItemHolder.java | 18 +++-- .../holder/LocalPlaylistStreamItemHolder.java | 7 +- .../LocalStatisticStreamItemHolder.java | 7 +- .../org/schabi/newpipe/player/Player.java | 4 +- .../newpipe/player/helper/PlayerHelper.java | 7 -- .../util/DependentPreferenceHelper.java | 51 ++++++++++++++ app/src/main/res/xml/history_settings.xml | 1 + 8 files changed, 98 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java 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 917d89e09..d6de6dfca 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 @@ -7,7 +7,7 @@ import static org.schabi.newpipe.ktx.ViewUtils.animate; import static org.schabi.newpipe.ktx.ViewUtils.animateRotation; import static org.schabi.newpipe.player.helper.PlayerHelper.globalScreenOrientationLocked; import static org.schabi.newpipe.player.helper.PlayerHelper.isClearingQueueConfirmationRequired; -import static org.schabi.newpipe.player.playqueue.PlayQueueItem.RECOVERY_UNSET; +import static org.schabi.newpipe.util.DependentPreferenceHelper.getResumePlaybackEnabled; import static org.schabi.newpipe.util.ExtractorHelper.showMetaInfoInTextView; import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; import static org.schabi.newpipe.util.NavigationHelper.openPlayQueue; @@ -1456,8 +1456,8 @@ public final class VideoDetailFragment animate(binding.detailThumbnailPlayButton, false, 50); animate(binding.detailDurationView, false, 100); - animate(binding.detailPositionView, false, 100); - animate(binding.positionView, false, 50); + binding.detailPositionView.setVisibility(View.GONE); + binding.positionView.setVisibility(View.GONE); binding.detailVideoTitleView.setText(title); binding.detailVideoTitleView.setMaxLines(1); @@ -1574,7 +1574,7 @@ public final class VideoDetailFragment binding.detailToggleSecondaryControlsView.setVisibility(View.VISIBLE); binding.detailSecondaryControlPanel.setVisibility(View.GONE); - updateProgressInfo(info); + checkUpdateProgressInfo(info); initThumbnailViews(info); showMetaInfoInTextView(info.getMetaInfo(), binding.detailMetaInfoTextView, binding.detailMetaInfoSeparator, disposables); @@ -1673,67 +1673,43 @@ public final class VideoDetailFragment // Stream Results //////////////////////////////////////////////////////////////////////////*/ - private void updateProgressInfo(@NonNull final StreamInfo info) { + private void checkUpdateProgressInfo(@NonNull final StreamInfo info) { if (positionSubscriber != null) { positionSubscriber.dispose(); } - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); - final boolean playbackResumeEnabled = prefs - .getBoolean(activity.getString(R.string.enable_watch_history_key), true) - && prefs.getBoolean(activity.getString(R.string.enable_playback_resume_key), true); - final boolean showPlaybackPosition = prefs.getBoolean( - activity.getString(R.string.enable_playback_state_lists_key), true); - if (!playbackResumeEnabled) { - if (playQueue == null || playQueue.getStreams().isEmpty() - || playQueue.getItem().getRecoveryPosition() == RECOVERY_UNSET - || !showPlaybackPosition) { - binding.positionView.setVisibility(View.INVISIBLE); - binding.detailPositionView.setVisibility(View.GONE); - // TODO: Remove this check when separation of concerns is done. - // (live streams weren't getting updated because they are mixed) - if (!StreamTypeUtil.isLiveStream(info.getStreamType())) { - return; - } - } else { - // Show saved position from backStack if user allows it - showPlaybackProgress(playQueue.getItem().getRecoveryPosition(), - playQueue.getItem().getDuration() * 1000); - animate(binding.positionView, true, 500); - animate(binding.detailPositionView, true, 500); - } + if (!getResumePlaybackEnabled(activity)) { + binding.positionView.setVisibility(View.GONE); + binding.detailPositionView.setVisibility(View.GONE); return; } final HistoryRecordManager recordManager = new HistoryRecordManager(requireContext()); - - // TODO: Separate concerns when updating database data. - // (move the updating part to when the loading happens) positionSubscriber = recordManager.loadStreamState(info) .subscribeOn(Schedulers.io()) .onErrorComplete() .observeOn(AndroidSchedulers.mainThread()) .subscribe(state -> { - showPlaybackProgress(state.getProgressMillis(), info.getDuration() * 1000); - animate(binding.positionView, true, 500); - animate(binding.detailPositionView, true, 500); + updatePlaybackProgress( + state.getProgressMillis(), info.getDuration() * 1000); }, e -> { - if (DEBUG) { - e.printStackTrace(); - } + // impossible since the onErrorComplete() }, () -> { binding.positionView.setVisibility(View.GONE); binding.detailPositionView.setVisibility(View.GONE); }); } - private void showPlaybackProgress(final long progress, final long duration) { + private void updatePlaybackProgress(final long progress, final long duration) { + if (!getResumePlaybackEnabled(activity)) { + return; + } final int progressSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(progress); final int durationSeconds = (int) TimeUnit.MILLISECONDS.toSeconds(duration); - // If the old and the new progress values have a big difference then use - // animation. Otherwise don't because it affects CPU - final boolean shouldAnimate = Math.abs(binding.positionView.getProgress() - - progressSeconds) > 2; + // If the old and the new progress values have a big difference then use animation. + // Otherwise don't because it affects CPU + final int progressDifference = Math.abs(binding.positionView.getProgress() + - progressSeconds); binding.positionView.setMax(durationSeconds); - if (shouldAnimate) { + if (progressDifference > 2) { binding.positionView.setProgressAnimated(progressSeconds); } else { binding.positionView.setProgress(progressSeconds); @@ -1828,7 +1804,7 @@ public final class VideoDetailFragment } if (player.getPlayQueue().getItem().getUrl().equals(url)) { - showPlaybackProgress(currentProgress, duration); + updatePlaybackProgress(currentProgress, duration); } } diff --git a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java index 8d17017d2..6dd06e47f 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/holder/StreamMiniInfoItemHolder.java @@ -14,6 +14,7 @@ import org.schabi.newpipe.extractor.stream.StreamInfoItem; import org.schabi.newpipe.info_list.InfoItemBuilder; import org.schabi.newpipe.ktx.ViewUtils; import org.schabi.newpipe.local.history.HistoryRecordManager; +import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.StreamTypeUtil; @@ -60,8 +61,12 @@ public class StreamMiniInfoItemHolder extends InfoItemHolder { R.color.duration_background_color)); itemDurationView.setVisibility(View.VISIBLE); - final StreamStateEntity state2 = historyRecordManager.loadStreamState(infoItem) - .blockingGet()[0]; + StreamStateEntity state2 = null; + if (DependentPreferenceHelper + .getPositionsInListsEnabled(itemProgressView.getContext())) { + state2 = historyRecordManager.loadStreamState(infoItem) + .blockingGet()[0]; + } if (state2 != null) { itemProgressView.setVisibility(View.VISIBLE); itemProgressView.setMax((int) item.getDuration()); @@ -111,9 +116,12 @@ public class StreamMiniInfoItemHolder extends InfoItemHolder { final HistoryRecordManager historyRecordManager) { final StreamInfoItem item = (StreamInfoItem) infoItem; - final StreamStateEntity state = historyRecordManager - .loadStreamState(infoItem) - .blockingGet()[0]; + StreamStateEntity state = null; + if (DependentPreferenceHelper.getPositionsInListsEnabled(itemProgressView.getContext())) { + state = historyRecordManager + .loadStreamState(infoItem) + .blockingGet()[0]; + } if (state != null && item.getDuration() > 0 && !StreamTypeUtil.isLiveStream(item.getStreamType())) { itemProgressView.setMax((int) item.getDuration()); diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java index d39758326..c98a8b60b 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistStreamItemHolder.java @@ -14,6 +14,7 @@ import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; import org.schabi.newpipe.ktx.ViewUtils; import org.schabi.newpipe.local.LocalItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; +import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; @@ -68,7 +69,8 @@ public class LocalPlaylistStreamItemHolder extends LocalItemHolder { R.color.duration_background_color)); itemDurationView.setVisibility(View.VISIBLE); - if (item.getProgressMillis() > 0) { + if (DependentPreferenceHelper.getPositionsInListsEnabled(itemProgressView.getContext()) + && item.getProgressMillis() > 0) { itemProgressView.setVisibility(View.VISIBLE); itemProgressView.setMax((int) item.getStreamEntity().getDuration()); itemProgressView.setProgress((int) TimeUnit.MILLISECONDS @@ -109,7 +111,8 @@ public class LocalPlaylistStreamItemHolder extends LocalItemHolder { } final PlaylistStreamEntry item = (PlaylistStreamEntry) localItem; - if (item.getProgressMillis() > 0 && item.getStreamEntity().getDuration() > 0) { + if (DependentPreferenceHelper.getPositionsInListsEnabled(itemProgressView.getContext()) + && item.getProgressMillis() > 0 && item.getStreamEntity().getDuration() > 0) { itemProgressView.setMax((int) item.getStreamEntity().getDuration()); if (itemProgressView.getVisibility() == View.VISIBLE) { itemProgressView.setProgressAnimated((int) TimeUnit.MILLISECONDS diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java index 0d88eecba..41f2df1d0 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalStatisticStreamItemHolder.java @@ -14,6 +14,7 @@ import org.schabi.newpipe.database.stream.StreamStatisticsEntry; import org.schabi.newpipe.ktx.ViewUtils; import org.schabi.newpipe.local.LocalItemBuilder; import org.schabi.newpipe.local.history.HistoryRecordManager; +import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.Localization; import org.schabi.newpipe.util.PicassoHelper; import org.schabi.newpipe.util.ServiceHelper; @@ -97,7 +98,8 @@ public class LocalStatisticStreamItemHolder extends LocalItemHolder { R.color.duration_background_color)); itemDurationView.setVisibility(View.VISIBLE); - if (item.getProgressMillis() > 0) { + if (DependentPreferenceHelper.getPositionsInListsEnabled(itemProgressView.getContext()) + && item.getProgressMillis() > 0) { itemProgressView.setVisibility(View.VISIBLE); itemProgressView.setMax((int) item.getStreamEntity().getDuration()); itemProgressView.setProgress((int) TimeUnit.MILLISECONDS @@ -141,7 +143,8 @@ public class LocalStatisticStreamItemHolder extends LocalItemHolder { } final StreamStatisticsEntry item = (StreamStatisticsEntry) localItem; - if (item.getProgressMillis() > 0 && item.getStreamEntity().getDuration() > 0) { + if (DependentPreferenceHelper.getPositionsInListsEnabled(itemProgressView.getContext()) + && item.getProgressMillis() > 0 && item.getStreamEntity().getDuration() > 0) { itemProgressView.setMax((int) item.getStreamEntity().getDuration()); if (itemProgressView.getVisibility() == View.VISIBLE) { itemProgressView.setProgressAnimated((int) TimeUnit.MILLISECONDS 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 b6098a1ef..dcbebaedf 100644 --- a/app/src/main/java/org/schabi/newpipe/player/Player.java +++ b/app/src/main/java/org/schabi/newpipe/player/Player.java @@ -29,7 +29,6 @@ import static com.google.android.exoplayer2.Player.REPEAT_MODE_ONE; import static com.google.android.exoplayer2.Player.RepeatMode; import static org.schabi.newpipe.extractor.ServiceList.YouTube; import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; -import static org.schabi.newpipe.player.helper.PlayerHelper.isPlaybackResumeEnabled; import static org.schabi.newpipe.player.helper.PlayerHelper.nextRepeatMode; import static org.schabi.newpipe.player.helper.PlayerHelper.retrievePlaybackParametersFromPrefs; import static org.schabi.newpipe.player.helper.PlayerHelper.retrieveSeekDurationFromPreferences; @@ -115,6 +114,7 @@ import org.schabi.newpipe.player.ui.PlayerUi; import org.schabi.newpipe.player.ui.PlayerUiList; import org.schabi.newpipe.player.ui.PopupPlayerUi; import org.schabi.newpipe.player.ui.VideoPlayerUi; +import org.schabi.newpipe.util.DependentPreferenceHelper; import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.ListHelper; import org.schabi.newpipe.util.NavigationHelper; @@ -391,7 +391,7 @@ public final class Player implements PlaybackListener, Listener { simpleExoPlayer.setPlayWhenReady(playWhenReady); } else if (intent.getBooleanExtra(RESUME_PLAYBACK, false) - && isPlaybackResumeEnabled(this) + && DependentPreferenceHelper.getResumePlaybackEnabled(context) && !samePlayQueue && !newQueue.isEmpty() && newQueue.getItem() != null diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java index abde7c3d1..67089e425 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/PlayerHelper.java @@ -425,13 +425,6 @@ public final class PlayerHelper { // Utils used by player //////////////////////////////////////////////////////////////////////////// - public static boolean isPlaybackResumeEnabled(final Player player) { - return player.getPrefs().getBoolean( - player.getContext().getString(R.string.enable_watch_history_key), true) - && player.getPrefs().getBoolean( - player.getContext().getString(R.string.enable_playback_resume_key), true); - } - @RepeatMode public static int nextRepeatMode(@RepeatMode final int repeatMode) { switch (repeatMode) { diff --git a/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java b/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java new file mode 100644 index 000000000..9591beddb --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/util/DependentPreferenceHelper.java @@ -0,0 +1,51 @@ +package org.schabi.newpipe.util; + +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.preference.PreferenceManager; + +import org.schabi.newpipe.R; + +/** + * For preferences with dependencies and multiple use case, + * this class can be used to reduce the lines of code. + */ +public final class DependentPreferenceHelper { + + private DependentPreferenceHelper() { + // no instance + } + + /** + * Option `Resume playback` depends on `Watch history`, this method can be used to retrieve if + * `Resume playback` and its dependencies are all enabled. + * + * @param context the Android context + * @return returns true if `Resume playback` and `Watch history` are both enabled + */ + public static boolean getResumePlaybackEnabled(final Context context) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + return prefs.getBoolean(context.getString( + R.string.enable_watch_history_key), true) + && prefs.getBoolean(context.getString( + R.string.enable_playback_resume_key), true); + } + + /** + * Option `Position in lists` depends on `Watch history`, this method can be used to retrieve if + * `Position in lists` and its dependencies are all enabled. + * + * @param context the Android context + * @return returns true if `Positions in lists` and `Watch history` are both enabled + */ + public static boolean getPositionsInListsEnabled(final Context context) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + return prefs.getBoolean(context.getString( + R.string.enable_watch_history_key), true) + && prefs.getBoolean(context.getString( + R.string.enable_playback_state_lists_key), true); + } +} diff --git a/app/src/main/res/xml/history_settings.xml b/app/src/main/res/xml/history_settings.xml index b6126b10a..46111635c 100644 --- a/app/src/main/res/xml/history_settings.xml +++ b/app/src/main/res/xml/history_settings.xml @@ -23,6 +23,7 @@ Date: Sun, 29 Jan 2023 17:44:46 +0530 Subject: [PATCH 23/54] Larger channel cards in search results - Thumbnail larger (100dp) than the usual (92dp) throughout the app - Description lint count is 8 (normally 3) --- app/sampledata/channels.json | 19 +++++ .../newpipe/info_list/InfoListAdapter.java | 8 +- .../holder/ChannelCardInfoItemHolder.java | 22 ++++++ .../holder/ChannelMiniInfoItemHolder.java | 16 +++- .../subscription/SubscriptionFragment.kt | 11 ++- .../subscription/SubscriptionViewModel.kt | 28 ++++++- .../res/layout/list_channel_card_item.xml | 74 +++++++++++++++++++ app/src/main/res/values/dimens.xml | 2 + 8 files changed, 170 insertions(+), 10 deletions(-) create mode 100644 app/sampledata/channels.json create mode 100644 app/src/main/java/org/schabi/newpipe/info_list/holder/ChannelCardInfoItemHolder.java create mode 100644 app/src/main/res/layout/list_channel_card_item.xml diff --git a/app/sampledata/channels.json b/app/sampledata/channels.json new file mode 100644 index 000000000..207d78597 --- /dev/null +++ b/app/sampledata/channels.json @@ -0,0 +1,19 @@ +{ + "data": [ + { + "name": "BBC", + "additional": "12K subscribers•233 videos", + "description": "The BBC is the world’s leading public service broadcaster. We’re impartial and independent, and every day we create distinctive, world-class programmes and content which inform, educate and entertain millions of people in the UK and around the world. SUBSCRIBE to our YouTube channel to get the best of BBC entertainment and comedy programmes, stories from science and nature documentaries, and much more! https://bit.ly/2IXqEIn Get ALL your fresh TV, and sofa-hugging box sets on iPlayer https://bbc.in/2J18jYJ" + }, + { + "name": "Linus Tech Tips", + "additional": "1M subscribers•233 videos", + "description": "Looking for a Tech YouTuber?\n\nLinus Tech Tips is a passionate team of \"professionally curious\" experts in consumer technology and video production which aims to inform and educate people of all ages through our entertaining videos. We create product reviews, step-by-step computer build guides, and a variety of other tech-focused content.\n\nSchedule:\nNew videos every Saturday to Thursday @ 10:00am Pacific\nLive WAN Show podcasts every Friday @ ~5:00pm Pacific" + }, + { + "name": "Marques Brownlee", + "additional": "13 subscribers•12K videos", + "description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!\n\nbusiness@MKBHD.com\n\nNYC" + } + ] +} \ No newline at end of file diff --git a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java index d69db945d..a13f0e5aa 100644 --- a/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/info_list/InfoListAdapter.java @@ -17,6 +17,7 @@ import org.schabi.newpipe.extractor.channel.ChannelInfoItem; import org.schabi.newpipe.extractor.comments.CommentsInfoItem; import org.schabi.newpipe.extractor.playlist.PlaylistInfoItem; import org.schabi.newpipe.extractor.stream.StreamInfoItem; +import org.schabi.newpipe.info_list.holder.ChannelCardInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelGridInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelInfoItemHolder; import org.schabi.newpipe.info_list.holder.ChannelMiniInfoItemHolder; @@ -73,6 +74,7 @@ public class InfoListAdapter extends RecyclerView.Adapter= 0 && item.getSubscriberCount() >= 0) { 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 7146a18d6..bc2f96f73 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 @@ -60,7 +60,6 @@ import org.schabi.newpipe.util.NavigationHelper import org.schabi.newpipe.util.OnClickGesture import org.schabi.newpipe.util.ServiceHelper import org.schabi.newpipe.util.ThemeHelper.getGridSpanCountChannels -import org.schabi.newpipe.util.ThemeHelper.shouldUseGridLayout import org.schabi.newpipe.util.external_communication.ShareUtils import java.text.SimpleDateFormat import java.util.Date @@ -245,7 +244,7 @@ class SubscriptionFragment : BaseStateFragment() { super.initViews(rootView, savedInstanceState) _binding = FragmentSubscriptionBinding.bind(rootView) - groupAdapter.spanCount = if (shouldUseGridLayout(context)) getGridSpanCountChannels(context) else 1 + groupAdapter.spanCount = if (SubscriptionViewModel.shouldUseGridForSubscription(requireContext())) getGridSpanCountChannels(context) else 1 binding.itemsList.layoutManager = GridLayoutManager(requireContext(), groupAdapter.spanCount).apply { spanSizeLookup = groupAdapter.spanSizeLookup } @@ -380,15 +379,15 @@ class SubscriptionFragment : BaseStateFragment() { override fun handleResult(result: SubscriptionState) { super.handleResult(result) - val shouldUseGridLayout = shouldUseGridLayout(context) when (result) { is SubscriptionState.LoadedState -> { result.subscriptions.forEach { if (it is ChannelItem) { it.gesturesListener = listenerChannelItem - it.itemVersion = when { - shouldUseGridLayout -> ChannelItem.ItemVersion.GRID - else -> ChannelItem.ItemVersion.MINI + it.itemVersion = if (SubscriptionViewModel.shouldUseGridForSubscription(requireContext())) { + ChannelItem.ItemVersion.GRID + } else { + ChannelItem.ItemVersion.MINI } } } diff --git a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionViewModel.kt index 914299c78..dfad60c3f 100644 --- a/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionViewModel.kt @@ -1,6 +1,7 @@ package org.schabi.newpipe.local.subscription import android.app.Application +import android.content.Context import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -8,12 +9,13 @@ import com.xwray.groupie.Group import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.processors.BehaviorProcessor import io.reactivex.rxjava3.schedulers.Schedulers +import org.schabi.newpipe.info_list.ItemViewMode import org.schabi.newpipe.local.feed.FeedDatabaseManager import org.schabi.newpipe.local.subscription.item.ChannelItem import org.schabi.newpipe.local.subscription.item.FeedGroupCardGridItem import org.schabi.newpipe.local.subscription.item.FeedGroupCardItem import org.schabi.newpipe.util.DEFAULT_THROTTLE_TIMEOUT -import org.schabi.newpipe.util.ThemeHelper +import org.schabi.newpipe.util.ThemeHelper.getItemViewMode import java.util.concurrent.TimeUnit class SubscriptionViewModel(application: Application) : AndroidViewModel(application) { @@ -22,7 +24,7 @@ class SubscriptionViewModel(application: Application) : AndroidViewModel(applica // true -> list view, false -> grid view private val listViewMode = BehaviorProcessor.createDefault( - !ThemeHelper.shouldUseGridLayout(application) + !shouldUseGridForSubscription(application) ) private val listViewModeFlowable = listViewMode.distinctUntilChanged() @@ -77,4 +79,26 @@ class SubscriptionViewModel(application: Application) : AndroidViewModel(applica data class LoadedState(val subscriptions: List) : SubscriptionState() data class ErrorState(val error: Throwable? = null) : SubscriptionState() } + + companion object { + + /** + * Returns whether to use GridLayout mode for Subscription Fragment. + * + * ### Current mapping: + * + * | ItemViewMode | ItemVersion | Span count | + * |---|---|---| + * | AUTO | MINI | 1 | + * | LIST | MINI | 1 | + * | CARD | GRID | > 1 (ThemeHelper defined) | + * | GRID | GRID | > 1 (ThemeHelper defined) | + * + * @see [SubscriptionViewModel.shouldUseGridForSubscription] to modify Layout Manager + */ + fun shouldUseGridForSubscription(context: Context): Boolean { + val itemViewMode = getItemViewMode(context) + return itemViewMode == ItemViewMode.GRID || itemViewMode == ItemViewMode.CARD + } + } } diff --git a/app/src/main/res/layout/list_channel_card_item.xml b/app/src/main/res/layout/list_channel_card_item.xml new file mode 100644 index 000000000..09696ff38 --- /dev/null +++ b/app/src/main/res/layout/list_channel_card_item.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 679dc05eb..e35b3c2e5 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -4,6 +4,7 @@ 16dp 8dp 32dp + 12dp 8dp 4dp 2dp @@ -38,6 +39,7 @@ 164dp 92dp + 100dp 92dp 128dp From f0307b1b48de548baefa8b2befc021fbd6f34050 Mon Sep 17 00:00:00 2001 From: pratyaksh1610 Date: Thu, 9 Feb 2023 21:38:02 +0530 Subject: [PATCH 24/54] fix progress bar scaling in card view --- app/src/main/res/layout/list_stream_playlist_card_item.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index 9cc6b326c..581a9d72e 100644 --- a/app/src/main/res/layout/list_stream_playlist_card_item.xml +++ b/app/src/main/res/layout/list_stream_playlist_card_item.xml @@ -86,7 +86,7 @@ Date: Thu, 9 Feb 2023 20:41:22 +0100 Subject: [PATCH 25/54] Made some small adjustments to the database query --- .../newpipe/database/playlist/dao/PlaylistStreamDAO.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 015a77002..54fa2d53b 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 @@ -86,8 +86,9 @@ public interface PlaylistStreamDAO extends BasicDAO { @RewriteQueriesToDropUnusedColumns @Transaction - @Query("SELECT *, MIN(" + JOIN_INDEX + ") FROM " + STREAM_TABLE + " INNER JOIN " - + "(SELECT " + JOIN_STREAM_ID + "," + JOIN_INDEX + @Query("SELECT *, MIN(" + JOIN_INDEX + ")" + + " FROM " + STREAM_TABLE + " INNER JOIN" + + " (SELECT " + JOIN_STREAM_ID + "," + JOIN_INDEX + " FROM " + PLAYLIST_STREAM_JOIN_TABLE + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId)" + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID @@ -97,7 +98,7 @@ public interface PlaylistStreamDAO extends BasicDAO { + " FROM " + STREAM_STATE_TABLE + " )" + " ON " + STREAM_ID + " = " + JOIN_STREAM_ID_ALIAS + " GROUP BY " + STREAM_ID - + " ORDER BY " + JOIN_INDEX + " ASC") + + " ORDER BY MIN(" + JOIN_INDEX + ") ASC") Flowable> getStreamsWithoutDuplicates(long playlistId); From bc29f40d6940f0bea180d7cb948350202193d48d Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Thu, 9 Feb 2023 21:18:21 +0100 Subject: [PATCH 26/54] Implemented the suggested changes --- .../newpipe/database/feed/dao/FeedDAO.kt | 2 +- .../schabi/newpipe/local/feed/FeedFragment.kt | 17 ++++++------- .../newpipe/local/feed/FeedViewModel.kt | 24 +++++++------------ .../local/history/HistoryRecordManager.java | 2 +- app/src/main/res/values/strings.xml | 6 ++--- 5 files changed, 21 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt index 42a248ca5..6947f66af 100644 --- a/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt +++ b/app/src/main/java/org/schabi/newpipe/database/feed/dao/FeedDAO.kt @@ -74,7 +74,7 @@ abstract class FeedDAO { OR (sst.progress_time <= ${StreamStateEntity.PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS} AND sst.progress_time <= s.duration * 1000 / 4) OR (sst.progress_time >= s.duration * 1000 - ${StreamStateEntity.PLAYBACK_FINISHED_END_MILLISECONDS} - OR sst.progress_time >= s.duration * 1000 * 3 / 4) + AND sst.progress_time >= s.duration * 1000 * 3 / 4) ) AND ( :uploadDateBefore IS NULL 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 d2c361662..3ca3bd320 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 @@ -259,7 +259,7 @@ class FeedFragment : BaseStateFragment() { getString(R.string.feed_show_upcoming) ) - val checkedDialogItems = booleanArrayOf(!showPlayedItems, !showPartiallyPlayedItems, !showFutureItems) + val checkedDialogItems = booleanArrayOf(showPlayedItems, showPartiallyPlayedItems, showFutureItems) val builder = AlertDialog.Builder(context!!) builder.setTitle(R.string.feed_hide_streams_title) @@ -268,17 +268,14 @@ class FeedFragment : BaseStateFragment() { } builder.setPositiveButton(R.string.ok) { _, _ -> - showPlayedItems = !checkedDialogItems[0] - viewModel.setShowPlayedItems(showPlayedItems) - viewModel.saveShowPlayedItemsToPreferences(showPlayedItems) + showPlayedItems = checkedDialogItems[0] + viewModel.setSaveShowPlayedItems(showPlayedItems) - showPartiallyPlayedItems = !checkedDialogItems[1] - viewModel.setShowPartiallyPlayedItems(showPartiallyPlayedItems) - viewModel.saveShowPartiallyPlayedItemsToPreferences(showPartiallyPlayedItems) + showPartiallyPlayedItems = checkedDialogItems[1] + viewModel.setSaveShowPartiallyPlayedItems(showPartiallyPlayedItems) - showFutureItems = !checkedDialogItems[2] - viewModel.setShowFutureItems(showFutureItems) - viewModel.saveShowFutureItemsToPreferences(showFutureItems) + showFutureItems = checkedDialogItems[2] + viewModel.setSaveShowFutureItems(showFutureItems) } builder.setNegativeButton(R.string.cancel, null) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 2e85a65cb..015b72160 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -31,9 +31,9 @@ import java.util.concurrent.TimeUnit class FeedViewModel( private val application: Application, groupId: Long = FeedGroupEntity.GROUP_ALL_ID, - initialShowPlayedItems: Boolean = true, - initialShowPartiallyPlayedItems: Boolean = true, - initialShowFutureItems: Boolean = true + initialShowPlayedItems: Boolean, + initialShowPartiallyPlayedItems: Boolean, + initialShowFutureItems: Boolean ) : ViewModel() { private val feedDatabaseManager = FeedDatabaseManager(application) @@ -119,39 +119,33 @@ class FeedViewModel( val t4: OffsetDateTime? ) - fun setShowPlayedItems(showPlayedItems: Boolean) { + fun setSaveShowPlayedItems(showPlayedItems: Boolean) { this.showPlayedItems.onNext(showPlayedItems) - } - - fun saveShowPlayedItemsToPreferences(showPlayedItems: Boolean) = PreferenceManager.getDefaultSharedPreferences(application).edit { this.putBoolean(application.getString(R.string.feed_show_watched_items_key), showPlayedItems) this.apply() } + } fun getShowPlayedItemsFromPreferences() = getShowPlayedItemsFromPreferences(application) - fun setShowPartiallyPlayedItems(showPartiallyPlayedItems: Boolean) { + fun setSaveShowPartiallyPlayedItems(showPartiallyPlayedItems: Boolean) { this.showPartiallyPlayedItems.onNext(showPartiallyPlayedItems) - } - - fun saveShowPartiallyPlayedItemsToPreferences(showPartiallyPlayedItems: Boolean) = PreferenceManager.getDefaultSharedPreferences(application).edit { this.putBoolean(application.getString(R.string.feed_show_partially_watched_items_key), showPartiallyPlayedItems) this.apply() } + } fun getShowPartiallyPlayedItemsFromPreferences() = getShowPartiallyPlayedItemsFromPreferences(application) - fun setShowFutureItems(showFutureItems: Boolean) { + fun setSaveShowFutureItems(showFutureItems: Boolean) { this.showFutureItems.onNext(showFutureItems) - } - - fun saveShowFutureItemsToPreferences(showFutureItems: Boolean) = PreferenceManager.getDefaultSharedPreferences(application).edit { this.putBoolean(application.getString(R.string.feed_show_future_items_key), showFutureItems) this.apply() } + } fun getShowFutureItemsFromPreferences() = getShowFutureItemsFromPreferences(application) diff --git a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java index 340b22278..ed3cf548f 100644 --- a/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/history/HistoryRecordManager.java @@ -87,7 +87,7 @@ public class HistoryRecordManager { * Marks a stream item as watched such that it is hidden from the feed if watched videos are * hidden. Adds a history entry and updates the stream progress to 100%. * - * @see FeedViewModel#setShowPlayedItems + * @see FeedViewModel#setSaveShowPlayedItems * @param info the item to mark as watched * @return a Maybe containing the ID of the item if successful */ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e01d3ed72..ee388ce13 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -691,7 +691,7 @@ \nYouTube is an example of a service that offers this fast method with its RSS feed. \n \nSo the choice boils down to what you prefer: speed or precise information. - Hide the following streams + Show the following streams Show/Hide streams This content is not yet supported by NewPipe.\n\nIt will hopefully be supported in a future version. Channel\'s avatar thumbnail @@ -760,8 +760,8 @@ Unknown quality Show future items Hide future items - Fully Watched - Partially Watched + Fully watched + Partially watched Upcoming Sort \ No newline at end of file From 68ea99d6e6cd932095ed61e2cadc0d6e661409a0 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Thu, 9 Feb 2023 23:17:36 +0100 Subject: [PATCH 27/54] Made some small code improvements --- .../schabi/newpipe/database/Migrations.java | 14 +++++--------- .../playlist/dao/PlaylistStreamDAO.java | 19 ++++++++++--------- .../playlist/model/PlaylistEntity.java | 2 ++ .../local/playlist/LocalPlaylistFragment.java | 5 ++--- .../local/playlist/LocalPlaylistManager.java | 10 ++++++---- 5 files changed, 25 insertions(+), 25 deletions(-) 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 e995fdd6c..1886b87c2 100644 --- a/app/src/main/java/org/schabi/newpipe/database/Migrations.java +++ b/app/src/main/java/org/schabi/newpipe/database/Migrations.java @@ -206,19 +206,15 @@ public final class Migrations { + "INTEGER NOT NULL DEFAULT -1"); // Migrate the thumbnail_url to the thumbnail_stream_id - database.execSQL("CREATE TEMPORARY TABLE temporary_table AS" + database.execSQL("UPDATE playlists SET thumbnail_stream_id = (" + + " SELECT CASE WHEN COUNT(*) != 0 then stream_uid ELSE -1 END" + + " FROM (" + " SELECT p.uid AS playlist_uid, s.uid AS stream_uid" + " FROM playlists p" + " LEFT JOIN playlist_stream_join ps ON p.uid = ps.playlist_id" + " LEFT JOIN streams s ON s.uid = ps.stream_id" - + " WHERE s.thumbnail_url = p.thumbnail_url"); - - database.execSQL("UPDATE playlists SET thumbnail_stream_id = (" - + "SELECT CASE WHEN COUNT(*) != 0 then stream_uid ELSE -1 END " - + "FROM temporary_table " - + "WHERE playlist_uid = playlists.uid)"); - - database.execSQL("DROP TABLE temporary_table"); + + " WHERE s.thumbnail_url = p.thumbnail_url) AS temporary_table" + + " WHERE playlist_uid = playlists.uid)"); // Remove the thumbnail_url field in the playlist table database.execSQL("CREATE TABLE IF NOT EXISTS `playlists_new`" 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 2915e7bd3..89b89b2fe 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 @@ -9,6 +9,7 @@ import org.schabi.newpipe.database.BasicDAO; import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry; import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; +import org.schabi.newpipe.database.playlist.model.PlaylistEntity; import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity; import java.util.List; @@ -59,14 +60,15 @@ public interface PlaylistStreamDAO extends BasicDAO { + " WHERE " + JOIN_PLAYLIST_ID + " = :playlistId") Flowable getMaximumIndexOf(long playlistId); - @Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_ID + " ELSE -1 END" + @Query("SELECT CASE WHEN COUNT(*) != 0 then " + STREAM_ID + + " ELSE " + PlaylistEntity.DEFAULT_THUMBNAIL_ID + " 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); + Flowable getAutomaticThumbnailStreamId(long playlistId); @RewriteQueriesToDropUnusedColumns @Transaction @@ -91,14 +93,13 @@ public interface PlaylistStreamDAO extends BasicDAO { @Transaction @Query("SELECT " + PLAYLIST_ID + ", " + PLAYLIST_NAME + "," - + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = -1" - + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = " + + PlaylistEntity.DEFAULT_THUMBNAIL_ID + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + " ELSE (SELECT " + STREAM_THUMBNAIL_URL + " FROM " + STREAM_TABLE + " WHERE " + STREAM_TABLE + "." + STREAM_ID + " = " + PLAYLIST_THUMBNAIL_STREAM_ID + " ) END AS " + PLAYLIST_THUMBNAIL_URL + ", " - + PLAYLIST_NAME + ", " + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + " FROM " + PLAYLIST_TABLE + " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE @@ -111,14 +112,14 @@ public interface PlaylistStreamDAO extends BasicDAO { @Query("SELECT " + PLAYLIST_TABLE + "." + PLAYLIST_ID + ", " + PLAYLIST_NAME + ", " - + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = -1" - + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + + " CASE WHEN " + PLAYLIST_THUMBNAIL_STREAM_ID + " = " + + PlaylistEntity.DEFAULT_THUMBNAIL_ID + " THEN " + "'" + DEFAULT_THUMBNAIL + "'" + " ELSE (SELECT " + STREAM_THUMBNAIL_URL + " FROM " + STREAM_TABLE + " WHERE " + STREAM_TABLE + "." + STREAM_ID + " = " + PLAYLIST_THUMBNAIL_STREAM_ID - + " ) END AS " + PLAYLIST_THUMBNAIL_URL + + " ) END AS " + PLAYLIST_THUMBNAIL_URL + ", " - + ", COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", " + + "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", " + "COALESCE(SUM(" + STREAM_URL + " = :streamUrl), 0) AS " + PLAYLIST_TIMES_STREAM_IS_CONTAINED 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 6c1d96d41..efb7278fd 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 @@ -16,6 +16,8 @@ public class PlaylistEntity { public static final String DEFAULT_THUMBNAIL = "drawable://" + R.drawable.placeholder_thumbnail_playlist; + public static final long DEFAULT_THUMBNAIL_ID = -1; + public static final String PLAYLIST_TABLE = "playlists"; public static final String PLAYLIST_ID = "uid"; public static final String PLAYLIST_NAME = "name"; 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 a3648c3c2..3de630b96 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 @@ -35,6 +35,7 @@ import org.schabi.newpipe.R; import org.schabi.newpipe.database.LocalItem; import org.schabi.newpipe.database.history.model.StreamHistoryEntry; import org.schabi.newpipe.database.playlist.PlaylistStreamEntry; +import org.schabi.newpipe.database.playlist.model.PlaylistEntity; import org.schabi.newpipe.database.stream.model.StreamEntity; import org.schabi.newpipe.databinding.DialogEditTextBinding; import org.schabi.newpipe.databinding.LocalPlaylistHeaderBinding; @@ -70,8 +71,6 @@ import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.subjects.PublishSubject; public class LocalPlaylistFragment extends BaseLocalListFragment, Void> { - public static final long DEFAULT_THUMBNAIL_ID = -1; - public static final long NO_THUMBNAIL_ID = -2; // Save the list 10 seconds after the last change occurred private static final long SAVE_DEBOUNCE_MILLIS = 10000; private static final int MINIMUM_INITIAL_DRAG_VELOCITY = 12; @@ -624,7 +623,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment renamePlaylist(final long playlistId, final String name) { - return modifyPlaylist(playlistId, name, LocalPlaylistFragment.NO_THUMBNAIL_ID, false); + return modifyPlaylist(playlistId, name, THUMBNAIL_ID_LEAVE_UNCHANGED, false); } public Maybe changePlaylistThumbnail(final long playlistId, @@ -134,10 +136,10 @@ public class LocalPlaylistManager { } public long getAutomaticPlaylistThumbnailStreamId(final long playlistId) { - final long streamId = playlistStreamTable.getAutomaticThumbnailUrl(playlistId) + final long streamId = playlistStreamTable.getAutomaticThumbnailStreamId(playlistId) .blockingFirst(); if (streamId < 0) { - return LocalPlaylistFragment.DEFAULT_THUMBNAIL_ID; + return PlaylistEntity.DEFAULT_THUMBNAIL_ID; } return streamId; } @@ -154,7 +156,7 @@ public class LocalPlaylistManager { if (name != null) { playlist.setName(name); } - if (thumbnailStreamId != LocalPlaylistFragment.NO_THUMBNAIL_ID) { + if (thumbnailStreamId != THUMBNAIL_ID_LEAVE_UNCHANGED) { playlist.setThumbnailStreamId(thumbnailStreamId); playlist.setIsThumbnailPermanent(isPermanent); } From 624ad6a47cf425feec84065cdfa138a96a40eee6 Mon Sep 17 00:00:00 2001 From: pratyaksh1610 Date: Fri, 10 Feb 2023 11:10:43 +0530 Subject: [PATCH 28/54] Prevent NPEs when comment text is null --- .../holder/CommentsMiniInfoItemHolder.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) 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 799aee8ba..1c8db26d6 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,8 +1,9 @@ package org.schabi.newpipe.info_list.holder; +import static android.text.TextUtils.isEmpty; + import android.graphics.Paint; import android.text.Layout; -import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; import android.util.Log; @@ -59,9 +60,9 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { private final TextView itemPublishedTime; private final CompositeDisposable disposables = new CompositeDisposable(); - private Description commentText; - private StreamingService streamService; - private String streamUrl; + @Nullable private Description commentText; + @Nullable private StreamingService streamService; + @Nullable private String streamUrl; CommentsMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, final int layoutId, final ViewGroup parent) { @@ -153,15 +154,17 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { if (DeviceUtils.isTv(itemBuilder.getContext())) { openCommentAuthor(item); } else { - ShareUtils.copyToClipboard(itemBuilder.getContext(), - itemContentView.getText().toString()); + final CharSequence text = itemContentView.getText(); + if (text != null) { + ShareUtils.copyToClipboard(itemBuilder.getContext(), text.toString()); + } } return true; }); } private void openCommentAuthor(final CommentsInfoItem item) { - if (TextUtils.isEmpty(item.getUploaderUrl())) { + if (isEmpty(item.getUploaderUrl())) { return; } final AppCompatActivity activity = (AppCompatActivity) itemBuilder.getContext(); @@ -207,11 +210,12 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { linkifyCommentContentView(v -> { boolean hasEllipsis = false; - if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { + final CharSequence charSeqText = itemContentView.getText(); + if (charSeqText != null && 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 String text = charSeqText.toString(); final Layout layout = itemContentView.getLayout(); final float lineWidth = layout.getLineWidth(COMMENT_DEFAULT_LINES - 1); @@ -252,7 +256,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { private void toggleEllipsize() { final CharSequence text = itemContentView.getText(); - if (text.charAt(text.length() - 1) == ELLIPSIS.charAt(0)) { + if (!isEmpty(text) && text.charAt(text.length() - 1) == ELLIPSIS.charAt(0)) { expand(); } else if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { ellipsize(); From 39c500f33ca6d8c0ea0a58733e2d685fca284b2b Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 14 Feb 2023 08:27:04 +0100 Subject: [PATCH 29/54] Revert "Use WindowCompat." --- .../fragments/detail/VideoDetailFragment.java | 59 +++++++++++-------- .../newpipe/player/ui/MainPlayerUi.java | 11 ++-- 2 files changed, 39 insertions(+), 31 deletions(-) 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 0fb137528..baf420409 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 @@ -27,6 +27,7 @@ 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; @@ -54,9 +55,6 @@ 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; @@ -1961,17 +1959,15 @@ public final class VideoDetailFragment return; } - 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)); + // 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)); } private void hideSystemUi() { @@ -1983,19 +1979,30 @@ public final class VideoDetailFragment return; } - final var window = activity.getWindow(); - final var windowInsetsController = WindowCompat.getInsetsController(window, - window.getDecorView()); - - WindowCompat.setDecorFitsSystemWindows(window, false); - windowInsetsController.setSystemBarsBehavior(WindowInsetsControllerCompat - .BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); - windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()); - - if (DeviceUtils.isInMultiWindow(activity) || isFullscreen()) { - window.setStatusBarColor(Color.TRANSPARENT); - window.setNavigationBarColor(Color.TRANSPARENT); + // 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; + + // 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); + + if (isInMultiWindow || isFullscreen()) { + activity.getWindow().setStatusBarColor(Color.TRANSPARENT); + activity.getWindow().setNavigationBarColor(Color.TRANSPARENT); + } + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } // Listener implementation 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 a5c745ae6..683629c25 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,6 +32,7 @@ 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; @@ -39,8 +40,6 @@ 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; @@ -453,9 +452,11 @@ public final class MainPlayerUi extends VideoPlayerUi implements View.OnLayoutCh getParentActivity().map(Activity::getWindow).ifPresent(window -> { window.setStatusBarColor(Color.TRANSPARENT); window.setNavigationBarColor(Color.TRANSPARENT); - WindowCompat.setDecorFitsSystemWindows(window, false); - WindowCompat.getInsetsController(window, window.getDecorView()) - .show(WindowInsetsCompat.Type.systemBars()); + 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); }); } } From 5560cea470ad505f747128dc4cfef8744cc8fb6d Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 23 Feb 2023 12:46:05 +0100 Subject: [PATCH 30/54] Update to ExoPlayer 2.18.3 --- app/build.gradle | 2 +- .../player/mediasource/LoadedMediaSource.java | 63 ++----------------- 2 files changed, 7 insertions(+), 58 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0afdc3ce8..a5d63f429 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -106,7 +106,7 @@ ext { androidxWorkVersion = '2.7.1' icepickVersion = '3.2.0' - exoPlayerVersion = '2.18.1' + exoPlayerVersion = '2.18.3' googleAutoServiceVersion = '1.0.1' groupieVersion = '2.10.1' markwonVersion = '4.6.2' diff --git a/app/src/main/java/org/schabi/newpipe/player/mediasource/LoadedMediaSource.java b/app/src/main/java/org/schabi/newpipe/player/mediasource/LoadedMediaSource.java index 95524cf69..3bf7c09d9 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediasource/LoadedMediaSource.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediasource/LoadedMediaSource.java @@ -1,27 +1,21 @@ package org.schabi.newpipe.player.mediasource; +import androidx.annotation.NonNull; + import com.google.android.exoplayer2.MediaItem; -import com.google.android.exoplayer2.Timeline; -import com.google.android.exoplayer2.source.CompositeMediaSource; -import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaSource; -import com.google.android.exoplayer2.upstream.Allocator; -import com.google.android.exoplayer2.upstream.TransferListener; +import com.google.android.exoplayer2.source.WrappingMediaSource; import org.schabi.newpipe.player.mediaitem.MediaItemTag; import org.schabi.newpipe.player.playqueue.PlayQueueItem; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -public class LoadedMediaSource extends CompositeMediaSource implements ManagedMediaSource { - private final MediaSource source; +public class LoadedMediaSource extends WrappingMediaSource implements ManagedMediaSource { private final PlayQueueItem stream; private final MediaItem mediaItem; private final long expireTimestamp; /** - * Uses a {@link CompositeMediaSource} to wrap one or more child {@link MediaSource}s + * Uses a {@link WrappingMediaSource} to wrap one child {@link MediaSource}s * containing actual media. This wrapper {@link LoadedMediaSource} holds the expiration * timestamp as a {@link ManagedMediaSource} to allow explicit playlist management under * {@link ManagedMediaSourcePlaylist}. @@ -36,7 +30,7 @@ public class LoadedMediaSource extends CompositeMediaSource implements @NonNull final MediaItemTag tag, @NonNull final PlayQueueItem stream, final long expireTimestamp) { - this.source = source; + super(source); this.stream = stream; this.expireTimestamp = expireTimestamp; @@ -51,51 +45,6 @@ public class LoadedMediaSource extends CompositeMediaSource implements return System.currentTimeMillis() >= expireTimestamp; } - /** - * Delegates the preparation of child {@link MediaSource}s to the - * {@link CompositeMediaSource} wrapper. Since all {@link LoadedMediaSource}s use only - * a single child media, the child id of 0 is always used (sonar doesn't like null as id here). - * - * @param mediaTransferListener A data transfer listener that will be registered by the - * {@link CompositeMediaSource} for child source preparation. - */ - @Override - protected void prepareSourceInternal(@Nullable final TransferListener mediaTransferListener) { - super.prepareSourceInternal(mediaTransferListener); - prepareChildSource(0, source); - } - - /** - * When any child {@link MediaSource} is prepared, the refreshed {@link Timeline} can - * be listened to here. But since {@link LoadedMediaSource} has only a single child source, - * this method is called only once until {@link #releaseSourceInternal()} is called. - *

- * On refresh, the {@link CompositeMediaSource} delegate will be notified with the - * new {@link Timeline}, otherwise {@link #createPeriod(MediaPeriodId, Allocator, long)} - * will not be called and playback may be stalled. - * - * @param id The unique id used to prepare the child source. - * @param mediaSource The child source whose source info has been refreshed. - * @param timeline The new timeline of the child source. - */ - @Override - protected void onChildSourceInfoRefreshed(final Integer id, - final MediaSource mediaSource, - final Timeline timeline) { - refreshSourceInfo(timeline); - } - - @Override - public MediaPeriod createPeriod(final MediaPeriodId id, final Allocator allocator, - final long startPositionUs) { - return source.createPeriod(id, allocator, startPositionUs); - } - - @Override - public void releasePeriod(final MediaPeriod mediaPeriod) { - source.releasePeriod(mediaPeriod); - } - @NonNull @Override public MediaItem getMediaItem() { From 600ebdae18711710983312fba5090297234e13e8 Mon Sep 17 00:00:00 2001 From: Stypox Date: Thu, 23 Feb 2023 23:38:20 +0100 Subject: [PATCH 31/54] Correctly open urls in browser on Android 11+ - Fix misconfiguration in manifest ('http|https|market' is not valid) - Split ShareUtils functions taking a boolean parameter into pairs of functions with better names and less runtime checks - Move all Kore-related functions to KoreUtils - Remove the toast_no_player string --- app/src/main/AndroidManifest.xml | 2 +- .../org/schabi/newpipe/about/AboutActivity.kt | 9 +- .../newpipe/about/LicenseFragmentHelper.kt | 2 +- .../schabi/newpipe/error/ErrorActivity.java | 6 +- .../schabi/newpipe/error/ErrorPanelHelper.kt | 2 +- .../fragments/detail/VideoDetailFragment.java | 13 +- .../list/channel/ChannelFragment.java | 3 +- .../dialog/StreamDialogDefaultEntry.java | 10 +- .../newpipe/player/ui/VideoPlayerUi.java | 9 +- .../schabi/newpipe/util/NavigationHelper.java | 42 +---- .../external_communication/KoreUtils.java | 48 +++++- .../external_communication/ShareUtils.java | 162 +++++++----------- .../util/text/UrlLongPressClickableSpan.java | 2 +- .../giga/ui/adapter/MissionAdapter.java | 12 +- app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-az/strings.xml | 1 - app/src/main/res/values-b+ast/strings.xml | 1 - app/src/main/res/values-b+uz+Latn/strings.xml | 1 - app/src/main/res/values-be/strings.xml | 1 - app/src/main/res/values-bg/strings.xml | 1 - app/src/main/res/values-bn-rBD/strings.xml | 1 - app/src/main/res/values-bn/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-ckb/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-da/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 1 - app/src/main/res/values-eo/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-et/strings.xml | 1 - app/src/main/res/values-eu/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-gl/strings.xml | 1 - app/src/main/res/values-he/strings.xml | 1 - app/src/main/res/values-hi/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-hu/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-is/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ka/strings.xml | 1 - app/src/main/res/values-kmr/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-ku/strings.xml | 1 - app/src/main/res/values-lt/strings.xml | 1 - app/src/main/res/values-lv/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-ml/strings.xml | 1 - app/src/main/res/values-ms/strings.xml | 1 - app/src/main/res/values-nb-rNO/strings.xml | 1 - app/src/main/res/values-ne/strings.xml | 1 - app/src/main/res/values-nl-rBE/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-or/strings.xml | 1 - app/src/main/res/values-pa/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-pt/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sc/strings.xml | 1 - app/src/main/res/values-sk/strings.xml | 1 - app/src/main/res/values-sl/strings.xml | 1 - app/src/main/res/values-so/strings.xml | 1 - app/src/main/res/values-sq/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-te/strings.xml | 1 - app/src/main/res/values-th/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-ur/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rHK/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/donottranslate.xml | 2 +- app/src/main/res/values/strings.xml | 1 - 83 files changed, 125 insertions(+), 267 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1fb20ef0e..9d86dde6d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ - + diff --git a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt index c1eec1526..f1d4c26df 100644 --- a/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt +++ b/app/src/main/java/org/schabi/newpipe/about/AboutActivity.kt @@ -6,6 +6,7 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.Button +import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity @@ -57,13 +58,9 @@ class AboutActivity : AppCompatActivity() { * A placeholder fragment containing a simple view. */ class AboutFragment : Fragment() { - private fun Button.openLink(url: Int) { + private fun Button.openLink(@StringRes url: Int) { setOnClickListener { - ShareUtils.openUrlInBrowser( - context, - requireContext().getString(url), - false - ) + ShareUtils.openUrlInApp(context, requireContext().getString(url)) } } diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt index 6e3aa4be8..5af7eefec 100644 --- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragmentHelper.kt @@ -66,7 +66,7 @@ fun showLicense(context: Context?, component: SoftwareComponent): Disposable { dialog.dismiss() } setNeutralButton(R.string.open_website_license) { _, _ -> - ShareUtils.openUrlInBrowser(context!!, component.link) + ShareUtils.openUrlInApp(context!!, component.link) } } } diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java index e1dd929d4..dd065c3bb 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorActivity.java @@ -160,7 +160,7 @@ public class ErrorActivity extends AppCompatActivity { .setMessage(R.string.start_accept_privacy_policy) .setCancelable(false) .setNeutralButton(R.string.read_privacy_policy, (dialog, which) -> - ShareUtils.openUrlInBrowser(context, + ShareUtils.openUrlInApp(context, context.getString(R.string.privacy_policy_url))) .setPositiveButton(R.string.accept, (dialog, which) -> { if (action.equals("EMAIL")) { // send on email @@ -171,9 +171,9 @@ public class ErrorActivity extends AppCompatActivity { + getString(R.string.app_name) + " " + BuildConfig.VERSION_NAME) .putExtra(Intent.EXTRA_TEXT, buildJson()); - ShareUtils.openIntentInApp(context, i, true); + ShareUtils.openIntentInApp(context, i); } else if (action.equals("GITHUB")) { // open the NewPipe issue page on GitHub - ShareUtils.openUrlInBrowser(this, ERROR_GITHUB_ISSUE_URL, false); + ShareUtils.openUrlInApp(this, ERROR_GITHUB_ISSUE_URL); } }) .setNegativeButton(R.string.decline, (dialog, which) -> { diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt index b41d3997e..17071dfcb 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt @@ -156,7 +156,7 @@ class ErrorPanelHelper( ) { errorOpenInBrowserButton.isVisible = true errorOpenInBrowserButton.setOnClickListener { - ShareUtils.openUrlInBrowser(context, errorInfo.request, true) + ShareUtils.openUrlInBrowser(context, errorInfo.request) } } 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 0fb137528..673f59281 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 @@ -11,7 +11,6 @@ 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; @@ -485,16 +484,8 @@ public final class VideoDetailFragment 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()); - } - })); + binding.detailControlsPlayWithKodi.setOnClickListener(makeOnClickListener(info -> + KoreUtils.playWithKore(requireContext(), Uri.parse(info.getUrl())))); if (DEBUG) { binding.detailControlsCrashThePlayer.setOnClickListener(v -> VideoDetailPlayerCrasher.onCrashThePlayer(requireContext(), player)); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index 8ed9389c3..a39de376b 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -204,8 +204,7 @@ public class ChannelFragment extends BaseListInfoFragment { - final Uri videoUrl = Uri.parse(item.getUrl()); - try { - NavigationHelper.playWithKore(fragment.requireContext(), videoUrl); - } catch (final Exception e) { - KoreUtils.showInstallKoreDialog(fragment.requireActivity()); - } - }), + PLAY_WITH_KODI(R.string.play_with_kodi_title, (fragment, item) -> + KoreUtils.playWithKore(fragment.requireContext(), Uri.parse(item.getUrl()))), SHARE(R.string.share, (fragment, item) -> ShareUtils.shareText(fragment.requireContext(), item.getName(), item.getUrl(), 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 e4f5b05e1..9afd1bf24 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 @@ -1420,14 +1420,7 @@ public abstract class VideoPlayerUi extends PlayerUi implements SeekBar.OnSeekBa private void onPlayWithKodiClicked() { if (player.getCurrentMetadata() != null) { player.pause(); - try { - NavigationHelper.playWithKore(context, Uri.parse(player.getVideoUrl())); - } catch (final Exception e) { - if (DEBUG) { - Log.i(TAG, "Failed to start kore", e); - } - KoreUtils.showInstallKoreDialog(player.getContext()); - } + KoreUtils.playWithKore(context, Uri.parse(player.getVideoUrl())); } } 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 b4556507c..2c8db77e0 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -1,6 +1,6 @@ package org.schabi.newpipe.util; -import static org.schabi.newpipe.util.external_communication.ShareUtils.installApp; +import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; import android.annotation.SuppressLint; import android.app.Activity; @@ -50,9 +50,9 @@ import org.schabi.newpipe.local.history.StatisticsPlaylistFragment; import org.schabi.newpipe.local.playlist.LocalPlaylistFragment; import org.schabi.newpipe.local.subscription.SubscriptionFragment; import org.schabi.newpipe.local.subscription.SubscriptionsImportFragment; -import org.schabi.newpipe.player.PlayerService; import org.schabi.newpipe.player.PlayQueueActivity; import org.schabi.newpipe.player.Player; +import org.schabi.newpipe.player.PlayerService; import org.schabi.newpipe.player.PlayerType; import org.schabi.newpipe.player.helper.PlayerHelper; import org.schabi.newpipe.player.helper.PlayerHolder; @@ -63,8 +63,6 @@ import org.schabi.newpipe.util.external_communication.ShareUtils; import java.util.List; -import static org.schabi.newpipe.util.ListHelper.getUrlAndNonTorrentStreams; - public final class NavigationHelper { public static final String MAIN_FRAGMENT_TAG = "main_fragment_tag"; public static final String SEARCH_FRAGMENT_TAG = "search_fragment_tag"; @@ -323,15 +321,13 @@ public final class NavigationHelper { public static void resolveActivityOrAskToInstall(@NonNull final Context context, @NonNull final Intent intent) { - if (intent.resolveActivity(context.getPackageManager()) != null) { - ShareUtils.openIntentInApp(context, intent, false); - } else { + if (!ShareUtils.tryOpenIntentInApp(context, intent)) { if (context instanceof Activity) { new AlertDialog.Builder(context) .setMessage(R.string.no_player_found) .setPositiveButton(R.string.install, - (dialog, which) -> ShareUtils.openUrlInBrowser(context, - context.getString(R.string.fdroid_vlc_url), false)) + (dialog, which) -> ShareUtils.installApp(context, + context.getString(R.string.vlc_package))) .setNegativeButton(R.string.cancel, (dialog, which) -> Log.i("NavigationHelper", "You unlocked a secret unicorn.")) .show(); @@ -684,34 +680,6 @@ public final class NavigationHelper { return getOpenIntent(context, url, serviceId, StreamingService.LinkType.CHANNEL); } - /** - * Start an activity to install Kore. - * - * @param context the context - */ - public static void installKore(final Context context) { - installApp(context, context.getString(R.string.kore_package)); - } - - /** - * Start Kore app to show a video on Kodi. - *

- * For a list of supported urls see the - * - * Kore source code - * . - * - * @param context the context to use - * @param videoURL the url to the video - */ - public static void playWithKore(final Context context, final Uri videoURL) { - final Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setPackage(context.getString(R.string.kore_package)); - intent.setData(videoURL); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - /** * Finish this Activity as well as all Activities running below it * and then start MainActivity. diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java index 0df579d88..7fe518113 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java @@ -1,6 +1,11 @@ package org.schabi.newpipe.util.external_communication; +import static org.schabi.newpipe.util.external_communication.ShareUtils.installApp; +import static org.schabi.newpipe.util.external_communication.ShareUtils.tryOpenIntentInApp; + import android.content.Context; +import android.content.Intent; +import android.net.Uri; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; @@ -8,7 +13,6 @@ import androidx.preference.PreferenceManager; import org.schabi.newpipe.R; import org.schabi.newpipe.extractor.ServiceList; -import org.schabi.newpipe.util.NavigationHelper; /** * Util class that provides methods which are related to the Kodi Media Center and its Kore app. @@ -29,13 +33,39 @@ public final class KoreUtils { .getBoolean(context.getString(R.string.show_play_with_kodi_key), false); } - public static void showInstallKoreDialog(@NonNull final Context context) { - final AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setMessage(R.string.kore_not_found) - .setPositiveButton(R.string.install, (dialog, which) -> - NavigationHelper.installKore(context)) - .setNegativeButton(R.string.cancel, (dialog, which) -> { - }); - builder.create().show(); + /** + * Start an activity to install Kore. + * + * @param context the context + */ + public static void installKore(final Context context) { + installApp(context, context.getString(R.string.kore_package)); + } + + /** + * Start Kore app to show a video on Kodi, and if the app is not installed ask the user to + * install it. + *

+ * For a list of supported urls see the + * + * Kore source code + * . + * + * @param context the context to use + * @param videoURL the url to the video + */ + public static void playWithKore(final Context context, final Uri videoURL) { + final Intent intent = new Intent(Intent.ACTION_VIEW) + .setPackage(context.getString(R.string.kore_package)) + .setData(videoURL) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + if (!tryOpenIntentInApp(context, intent)) { + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage(R.string.kore_not_found) + .setPositiveButton(R.string.install, (dialog, which) -> installKore(context)) + .setNegativeButton(R.string.cancel, (dialog, which) -> { }); + builder.create().show(); + } } } 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 06dd3f945..883633772 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 @@ -41,60 +41,56 @@ public final class ShareUtils { * second param (a system chooser will be opened if there are multiple markets and no default) * and falls back to Google Play Store web URL if no app to handle the market scheme was found. *

- * It uses {@link #openIntentInApp(Context, Intent, boolean)} to open market scheme - * and {@link #openUrlInBrowser(Context, String, boolean)} to open Google Play Store - * web URL with false for the boolean param. + * It uses {@link #openIntentInApp(Context, Intent)} to open market scheme and {@link + * #openUrlInBrowser(Context, String)} to open Google Play Store web URL. * * @param context the context to use * @param packageId the package id of the app to be installed */ public static void installApp(@NonNull final Context context, final String packageId) { // Try market scheme - final boolean marketSchemeResult = openIntentInApp(context, new Intent(Intent.ACTION_VIEW, + final Intent marketSchemeIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageId)) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), false); - if (!marketSchemeResult) { + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (!tryOpenIntentInApp(context, marketSchemeIntent)) { // Fall back to Google Play Store Web URL (F-Droid can handle it) - openUrlInBrowser(context, - "https://play.google.com/store/apps/details?id=" + packageId, false); + openUrlInApp(context, "https://play.google.com/store/apps/details?id=" + packageId); } } /** - * Open the url with the system default browser. - *

- * If no browser is set as default, fallbacks to - * {@link #openAppChooser(Context, Intent, boolean)} + * Open the url with the system default browser. If no browser is set as default, falls back to + * {@link #openAppChooser(Context, Intent, boolean)}. This function selects the package to open + * based on which apps respond to the {@code http://} schema alone, which should exclude special + * non-browser apps that are can handle the url (e.g. the official YouTube app). Therefore + * please prefer {@link #openUrlInApp(Context, String)}, that handles package resolution + * in a standard way, unless this is the action of an explicit "Open in browser" button. * - * @param context the context to use - * @param url the url to browse - * @param httpDefaultBrowserTest the boolean to set if the test for the default browser will be - * for HTTP protocol or for the created intent - * @return true if the URL can be opened or false if it cannot - */ - public static boolean openUrlInBrowser(@NonNull final Context context, - final String url, - final boolean httpDefaultBrowserTest) { - final String defaultPackageName; + * @param context the context to use + * @param url the url to browse + **/ + public static void openUrlInBrowser(@NonNull final Context context, final String url) { + // Resolve using a generic http://, so we are sure to get a browser and not e.g. the yt app. + // Note that this requires the `http` schema to be added to `` in the manifest. + final ResolveInfo defaultBrowserInfo = context.getPackageManager().resolveActivity( + new Intent(Intent.ACTION_VIEW, Uri.parse("http://")), + PackageManager.MATCH_DEFAULT_ONLY); + if (defaultBrowserInfo == null) { + // No app installed to open a web url + Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); + return; + } + + final String defaultBrowserPackage = defaultBrowserInfo.activityInfo.packageName; final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (httpDefaultBrowserTest) { - defaultPackageName = getDefaultAppPackageName(context, new Intent(Intent.ACTION_VIEW, - Uri.parse("http://")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } else { - defaultPackageName = getDefaultAppPackageName(context, intent); - } - - if (defaultPackageName.equals("android")) { + if (defaultBrowserPackage.equals("android")) { // No browser set as default (doesn't work on some devices) openAppChooser(context, intent, true); } else { try { - // will be empty on Android 12+ - if (!defaultPackageName.isEmpty()) { - intent.setPackage(defaultPackageName); - } + intent.setPackage(defaultBrowserPackage); context.startActivity(intent); } catch (final ActivityNotFoundException e) { // Not a browser but an app chooser because of OEMs changes @@ -102,61 +98,54 @@ public final class ShareUtils { openAppChooser(context, intent, true); } } - - return true; } /** - * Open the url with the system default browser. - *

- * If no browser is set as default, fallbacks to - * {@link #openAppChooser(Context, Intent, boolean)} - *

- * This calls {@link #openUrlInBrowser(Context, String, boolean)} with true - * for the boolean parameter + * Open a url with the system default app using {@link Intent#ACTION_VIEW}, showing a toast in + * case of failure. * * @param context the context to use - * @param url the url to browse - * @return true if the URL can be opened or false if it cannot be - **/ - public static boolean openUrlInBrowser(@NonNull final Context context, final String url) { - return openUrlInBrowser(context, url, true); + * @param url the url to open + */ + public static void openUrlInApp(@NonNull final Context context, final String url) { + openIntentInApp(context, new Intent(Intent.ACTION_VIEW, Uri.parse(url)) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } /** - * Open an intent with the system default app. - *

- * The intent can be of every type, excepted a web intent for which - * {@link #openUrlInBrowser(Context, String, boolean)} should be used. - *

- * If no app can open the intent, a toast with the message {@code No app on your device can - * open this} is shown. + * Open an intent with the system default app. Use {@link #openIntentInApp(Context, Intent)} to + * show a toast in case of failure. * - * @param context the context to use - * @param intent the intent to open - * @param showToast a boolean to set if a toast is displayed to user when no app is installed - * to open the intent (true) or not (false) - * @return true if the intent can be opened or false if it cannot be + * @param context the context to use + * @param intent the intent to open + * @return true if the intent could be opened successfully, false otherwise */ - public static boolean openIntentInApp(@NonNull final Context context, - @NonNull final Intent intent, - final boolean showToast) { - final String defaultPackageName = getDefaultAppPackageName(context, intent); - - if (defaultPackageName.isEmpty()) { - // No app installed to open the intent - if (showToast) { - Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG) - .show(); - } - return false; - } else { + public static boolean tryOpenIntentInApp(@NonNull final Context context, + @NonNull final Intent intent) { + try { context.startActivity(intent); + } catch (final ActivityNotFoundException e) { + return false; } - return true; } + /** + * Open an intent with the system default app, showing a toast in case of failure. Use {@link + * #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link + * #openUrlInApp(Context, String)} as a shorthand for {@link Intent#ACTION_VIEW} with urls. + * + * @param context the context to use + * @param intent the intent to + */ + public static void openIntentInApp(@NonNull final Context context, + @NonNull final Intent intent) { + if (!tryOpenIntentInApp(context, intent)) { + Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG) + .show(); + } + } + /** * Open the system chooser to launch an intent. *

@@ -206,31 +195,6 @@ public final class ShareUtils { context.startActivity(chooserIntent); } - /** - * Get the default app package name. - *

- * If no app is set as default, it will return "android" (not on some devices because some - * OEMs changed the app chooser). - *

- * If no app is installed on user's device to handle the intent, it will return an empty string. - * - * @param context the context to use - * @param intent the intent to get default app - * @return the package name of the default app, an empty string if there's no app installed to - * handle the intent or the app chooser if there's no default - */ - private static String getDefaultAppPackageName(@NonNull final Context context, - @NonNull final Intent intent) { - final ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, - PackageManager.MATCH_DEFAULT_ONLY); - - if (resolveInfo == null) { - return ""; - } else { - return resolveInfo.activityInfo.packageName; - } - } - /** * Open the android share sheet to share a content. * 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 index eb0d7425e..61c1a546d 100644 --- a/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java +++ b/app/src/main/java/org/schabi/newpipe/util/text/UrlLongPressClickableSpan.java @@ -30,7 +30,7 @@ final class UrlLongPressClickableSpan extends LongPressClickableSpan { public void onClick(@NonNull final View view) { if (!InternalUrlsHandler.handleUrlDescriptionTimestamp( disposables, context, url)) { - ShareUtils.openUrlInBrowser(context, url, false); + ShareUtils.openUrlInApp(context, url); } } 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 bfb6a15e2..695e7aead 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 @@ -1,6 +1,5 @@ package us.shandian.giga.ui.adapter; -import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_GRANT_PREFIX_URI_PERMISSION; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; import static us.shandian.giga.get.DownloadMission.ERROR_CONNECT_HOST; @@ -345,16 +344,7 @@ public class MissionAdapter extends Adapter implements Handler.Callb intent.setDataAndType(resolveShareableUri(mission), mimeType); intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(FLAG_GRANT_PREFIX_URI_PERMISSION); - - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { - intent.addFlags(FLAG_ACTIVITY_NEW_TASK); - } - - if (intent.resolveActivity(mContext.getPackageManager()) != null) { - ShareUtils.openIntentInApp(mContext, intent, false); - } else { - Toast.makeText(mContext, R.string.toast_no_player, Toast.LENGTH_LONG).show(); - } + ShareUtils.openIntentInApp(mContext, intent); } private void shareFile(Mission mission) { diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 02c471d63..c7fa792e2 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -288,7 +288,6 @@ الملف غير موجود أو الإذن بالقراءة أو الكتابة إليه غير موجود لا يوجد بث متاح للتنزيل تم حذف عنصر واحد. - لم يتم تثبيت أي تطبيق لتشغيل هذا الملف NewPipe هو برنامج مفتوح المصدر وبحقوق متروكة: يمكنك استخدام الكود ودراسته وتحسينه كما شئت. وعلى وجه التحديد يمكنك إعادة توزيعه / أو تعديله تحت شروط رخصة GNU العمومية والتي نشرتها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة، أو (باختيارك) أي إصدار أحدث. آخر ما تم تشغيله الأكثر تشغيلا diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 0cce71fb0..bb00af528 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -588,7 +588,6 @@ 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 görüntü rejimində \naçmaq üçün lazımdır diff --git a/app/src/main/res/values-b+ast/strings.xml b/app/src/main/res/values-b+ast/strings.xml index 12739ba41..0b857e59b 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -425,7 +425,6 @@ El proyeutu de NewPipe toma mui en serio la privacidá. Poro, l\'aplicación nun recueye nengún datu ensin el to consentimientu. \nLa política de privacidá de NewPipe desplica en detalle los datos que s\'unvien y atroxen cuando unvies un informe de casque. Un aplicación llibre pa ver/sentir plataformes de tresmisión n\'Android. - Nun hai nenguna aplicación pa reproducir esti ficheru Caráuteres de troquéu Los caráuteres que nun son válidos van trocase por esti valor Fecho 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 323dda73d..a4101a9be 100644 --- a/app/src/main/res/values-b+uz+Latn/strings.xml +++ b/app/src/main/res/values-b+uz+Latn/strings.xml @@ -214,7 +214,6 @@ © %1$s tomonidan %2$s gacha %3$s Uchinchi tomon litsenziyalari NewPipe haqida - Ushbu faylni ijro etish uchun dastur o\'rnatilmagan Ko\'pchilik maxsus belgilar Yozuvlar va raqamlar O\'zgartirish belgisi diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 8ed10b126..8031cfe9c 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -210,7 +210,6 @@ Сімвал для замены Літары і лічбы Большасць спецзнакаў - Прыкладанне для прайгравання гэтага файла не ўстаноўлена Аб NewPipe Іншыя ліцэнзіі © %1$s %2$s пад ліцэнзіяй %3$s diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 0c1ce484f..27a70053e 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -191,7 +191,6 @@ Няма абонати Създай Откажи - Няма инсталирано приложение, което да изпълни този файл © %1$s от %2$s под лиценза %3$s Съдействайте За всичко, което се сетите: превод, промени по дизайна, изчистване на кода или много сериозни промени по кода – помощта е винаги добре дошла. Колкото повече развитие, толкова по-добре! diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 34d507ee3..f37711eb0 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -303,7 +303,6 @@ প্রথম ক্রিয়া বোতাম থাম্বনেল ১:১ অনুপাতে সেট করো সিস্টেম ডিফল্ট - এ ফাইলটি চালানোর জন্য কোন অ্যাপ ইন্সটলকৃত নেই প্লেলিস্ট বুকমার্ক করুন "যখন পর্যাপ্ত নিবেদিত ফিড থেকে ডাটা সংগ্রহ করুন" সবসময় হালনগাদ করুন diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 46d12a8b6..75a41c99a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -491,7 +491,6 @@ শেষ হালনাগাদের পর একটি সাবস্ক্রিপশনের আগের সময় সেকেলে বিবেচিত — %s তুমি কি এ গ্রুপটি মুছতে চাও\? আরও তথ্য এবং খবরের জন্য নিউপাইপ ওয়েবসাইট দেখো। - এ ফাইলটি চালানোর জন্য কোন অ্যাপ ইন্সটলকৃত নেই এতে তোমার বর্তমান অবস্থা সরানো হবে। সতর্কতা: সব তথ্য আনা যায়নি। © %3$s এর মাধ্যমে %2$s দিয়ে %1$s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index fc9abd891..633599827 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -299,7 +299,6 @@ 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ó 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\? diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index 00ac35aff..53d32cd93 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -319,7 +319,6 @@ کرداری بنەڕەتی لەکاتی کردنەوەی بابەتدا — %s هکیۆسکێک دیار بکە کۆنفرانسەکان - هیچ به‌رنامه‌یه‌ك دانەمەزراوە بۆ لێدانی ئەم فایله‌ كردنه‌وه‌ له‌ دۆخی په‌نجه‌ره‌ سنووری قەبارە لەکاتی بەکارهێنانی ڕایه‌ڵه‌ی مۆبایل داخستنی پلیکانە diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index abc77e66c..9696b8d11 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -302,7 +302,6 @@ 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 - K přehrání tohoto souboru chybí vhodná aplikace Vymazat historii sledování Vymaže historii přehraných streamů pozic playbacku Vymazat celkovou historii sledování\? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index f4601ec2d..4f219e97b 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -213,7 +213,6 @@ Erstatningstegn Bogstaver og cifre De fleste specialtegn - Der ingen app installeret der kan afspille denne fil Om NewPipe Tredjepartslicenser © %1$s af %2$s under %3$s diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 2aff15046..ee1bc989f 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -301,7 +301,6 @@ Standardaktion beim Öffnen von Inhalten — %s Untertitel Textgröße und Hintergrund der Untertitel im Player anpassen. Erfordert Neustart der App - Keine App zum Abspielen dieser Datei installiert Wiedergabeverlauf löschen Den Verlauf der wiedergegebenen Streams und die Wiedergabepositionen löschen Den ganzen Wiedergabeverlauf löschen\? diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index d19b5731f..76ebbc070 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -210,7 +210,6 @@ Οι μη έγκυροι χαρακτήρες αντικαθίστανται με αυτήν την τιμή Αντικαταστάτης χαρακτήρας Οι περισσότεροι ειδικοί χαρακτήρες - Δεν υπάρχει εγκατεστημένη εφαρμογή για την αναπαραγωγή αυτού του αρχείου Σχετικά με το NewPipe Άδειες Τρίτων © %1$s από %2$s υπό %3$s diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index f82244246..b52cfe99f 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -187,7 +187,6 @@ Vakigi tutajn kaŝmemorigitajn retpaĝajn datumojn Kaŝmemorojn de metadatumojn vakigis Neniuj torentoj haveblaj por elŝuti - Neniu apo instalita por ludi ĉi tiun dosieron Forviŝi vidohistorion Forviŝi la historion de viditaj filmetojn kaj ludajn poziciojn Ĉu vi volas forviŝi la tutan historion \? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1ea514868..21dd5f9bb 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -301,7 +301,6 @@ No hay streams disponibles para descargar Acción de apertura preferida Acción predefinida al abrir contenido: %s - No se encontró ninguna aplicación que reproduzca este archivo Subtítulos Modificar la escala de texto de los subtítulos y los estilos de fondo. Requiere reiniciar la aplicación para que surta efecto Vaciar historial de reproducciones diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index b9114c4d3..17d0981de 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -200,7 +200,6 @@ Asendustähemärk Tähed ja numbrid Erimärgid - Selle faili esitamiseks puudub rakendus NewPipe rakendusest Kolmanda osapoole litsentsid Rakenduse teave ja KKK diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 6b35b7316..d94924259 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -243,7 +243,6 @@ Baztertu Aldatu izena Elementu 1 ezabatuta. - Ez dago fitxategi hau erreproduzitzeko aplikaziorik instalatuta Jotako azkena Ikusiena Esportatuta diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 72dc77660..6836ccb87 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -176,7 +176,6 @@ نویسه جایگزین حروف و اعداد مهم‌ترین نویسه‌های خاص - کاره‌ای برای پخش این پرونده نصب نشده است درباره نیوپایپ درباره و سوالات‌متداول پروانه‌ها diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index b0e6b2aba..026839c50 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -240,7 +240,6 @@ Hylkää Nimeä uudelleen 1 poistettu. - Ohjelmaa tämän toistamiseen ei ole asennettu NewPipen tietosuojakäytäntö NewPipe ottaa yksityisyytesi tosissaan. Siksi se ei kerää sinulta mitään tietoja ilman lupaasi. \nNewPipen tietosuojakäytännössä selitetään tarkasti mitä tietoja lähetetään tai tallennetaan virheraportin yhteydessä. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77b4f09bb..370f75ccf 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -302,7 +302,6 @@ Sous-titres Modifier la taille du texte et les styles d’arrière-plan des sous-titres du lecteur. Le redémarrage de l’application est requis pour appliquer les changements Ton - Aucune application installée pour lire ce fichier Effacer l’historique des vues Supprime l’historique des flux lus et des positions de reprise de lecture Voulez-vous supprimer entièrement l’historique des vues \? diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index b70f6266f..dc7ae6011 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -206,7 +206,6 @@ Carácter de substitución Letras e díxitos A maioría dos caracteres especiais - Non hai ningún aplicativo instalado para reproducir este ficheiro Sobre o NewPipe Licenzas de terceiros © %1$s de %2$s, so %3$s diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 6be8c1073..270b94e67 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -225,7 +225,6 @@ התעלמות שינוי שם פריט אחד נמחק. - לא מותקן יישומון שמתאים לנגינת הקובץ הזה הייצוא הסתיים הייבוא הסתיים אין קובץ ZIP תקין diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index dc08899ed..056783cd8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -275,7 +275,6 @@ एक भूल हुई: %1$s डाउनलोड करने के लिए कोई स्ट्रीम उपलब्ध नही है एक चीज़ साफ कर दी गई। - इस फ़ाइल को चलाने के लिए कोई ऐप स्थापित नही है न्यूपाइप की गोपनीयता नीति न्यूपाइप परियोजना आपकी गोपनीयता को बहोत गंभीर रूप से लेता है। इसलिए, ऐप आपकी अनुमति के बिना कोई डेटा जमा नही करता। \nन्यूपाइप की गोपनीयता नीति विस्तार से समज़ाती है कि कोनसा डेटा भेजा या संग्रह किया जाता है जब आप क्रेश विवरण भेजते है। diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index bc35866e3..cdaae6cf9 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -250,7 +250,6 @@ Odbaci Preimenuj 1 stavka izbrisana. - Nijedan program nije instaliran za reprodukciju ove datoteke Vrati Posjeti NewPipe web-stranicu za više informacija i vijesti. NewPipe pravila o privatnosti diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 8a518bda6..5ae2288c0 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -200,7 +200,6 @@ Csere karakter Betűk és számok Legtöbb speciális karakter - Nincs a fájl lejátszásához szükséges alkalmazás telepítve A NewPipe névjegye Névjegy és GYIK Licencek diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index cc5f6dd3b..f1e426bc7 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -255,7 +255,6 @@ Riwayat pencarian dihapus Tidak ada video yang tersedia untuk diunduh 1 item dihapus. - Tidak ada aplikasi terpasang untuk memutar berkas ini Daftar Putar Putar otomatis video berikutnya Berhenti berlanggan channel diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index ffb0b59d1..0129ead5b 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -253,7 +253,6 @@ Leysa Lokið Beðið eftir þraut reCAPTCHA - Ekkert forrit er uppsett til að spila þessa skrá Leyfi þriðja aðila Hugbúnaðarleyfi © %1$s • %2$s • %3$s diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index ccaf93510..c40a74ef1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -302,7 +302,6 @@ Azione predefinita all\'apertura del contenuto — %s Sottotitoli Modifica dimensione e stile dei sottotitoli. Riavviare per applicare le modifiche - Nessuna app installata per riprodurre questo file Elimina la cronologia delle visualizzazioni Elimina la cronologia degli elementi riprodotti e le posizioni di riproduzione Eliminare la cronologia delle visualizzazioni\? diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index e320649a3..fefd8ef23 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -245,7 +245,6 @@ 検索履歴を消去 検索キーワードの履歴を削除します 検索履歴を削除しました - このファイルを再生するためのアプリがインストールされていません 設定もインポートしますか? 字幕 チャンネル diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 1d5d42cac..ecc868f9e 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -633,7 +633,6 @@ დაშვებული სიმბოლოები ფაილის სახელებში არასწორი სიმბოლოები ჩანაცვლებულია ამ მნიშვნელობით შესახებ & ხშირად დასმული კითხვები - ამ ფაილის დასაკრავად აპი არ არის დაინსტალირებული მესამე მხარის ლიცენზიები © %1$s მიერ %2$s %3$s-ის ქვეშ NewPipe შემუშავებულია მოხალისეების მიერ, რომლებიც ატარებენ თავისუფალ დროს და მოგაქვთ საუკეთესო მომხმარებლის გამოცდილება. დაეხმარეთ დეველოპერებს, გააუმჯობესონ NewPipe, სანამ ფინჯანი ყავით ტკბებიან. diff --git a/app/src/main/res/values-kmr/strings.xml b/app/src/main/res/values-kmr/strings.xml index f2baecb0a..c5c4ee46b 100644 --- a/app/src/main/res/values-kmr/strings.xml +++ b/app/src/main/res/values-kmr/strings.xml @@ -538,7 +538,6 @@ Paraxwe dayin Li Android-ê veguhastina ronahiya sivik. Derbarê NewPipe - Ji bo lîstina vê pelê tu bername nehat saz kirin Pir karakterên taybetî Name û reqem Karaktera guheztinê diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 6011432b1..3e6dc1421 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -289,7 +289,6 @@ 피치 영상과 소리 분리 (왜곡이 발생할 수 있음) 다운로드 가능한 스트림이 없습니다 - 이 파일을 재생할 수 있는 플레이어 앱이 없습니다 선호하는 열기 동작 컨텐츠를 열 때 사용할 기본 동작 — %s 자막 diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index c7dfd05d2..886725624 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -256,7 +256,6 @@ هیچ پەخشێک نییە بۆ دابەزاندن ژێرنووسەکان بەهۆی گۆڕانکاری لە شێوەی ژێرنووسکردنەکە. پێویستە ئەپەکە دابخەیت و دیسانەوە بیکەیتەوە. - هیچ ئەپێک دانەمەزراوە بۆ کارپێکردنی ئەم فایلە سڕینەوەی مێژووی تەماشاکردن مێژوو دەسڕێتەوە لەگەڵ ڤیدیۆ کارپێکراوەکان و شوێنی لیستە ڤیدیۆییەکان تەواوی مێژووی تەماشاکردن بسڕدرێتەوە؟ diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index bb45a0970..5792c826c 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -512,7 +512,6 @@ NewPipe į jūsų privatumą žiūri labai rimtai. Programa be jūsų sutikimo nerenka jokių duomenų. \nNewPipe privatumo politika išsamiai parodo kokie duomenys siunčiami ir saugomi pranešant apie problemą. NewPipe privatumo politika - Šio failo atkūrimui nėra įdiegtos programos Atlikta Išspręsta Paspauskite \"atlikta\" kai išspręsta diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 86c756ecb..8667422dd 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -71,7 +71,6 @@ Par Trešo pušu Licences Par NewPipe - Nav instalētu aplikāciju, lai atskaņotu šo failu Lielākā daļa īpašo rakstzīmju Burti un cipari Aizvietošanas rakstzīme diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 6052b871b..4039949c7 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -300,7 +300,6 @@ Избришана е историјата на пребарувања. Нема стримови за симнување 1 ставка избришана. - Нема апликација за пуштање на овој фајл NewPipe е „copyleft“ слободен софтвер: Можеш да ја користиш, истражуваш и подобруваш по твоја желба. Можеш да ја редистрибуираш и/или да ја промениш под условите на GNU GPL лиценцата, публикувана од фондацијата FSF - или верзија 3 од лиценцата, или (по можност) понова верзија. Дали сакаш да се внесат и подесувањата? Претпочитана акција за „отворање“ diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 35243ca26..2a61f4b0a 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -125,7 +125,6 @@ %3$s ന്റെ കീഴിൽ %2$s ന്റെ ©%1$s തേർഡ്-പാർട്ടി ലൈസൻസുകൾ ന്യൂപൈപ്പിനെക്കുറിച്ച് - ഈ ഫയൽ പ്ലേ ചെയ്യാൻ കഴിയുന്ന ഒരു അപ്പും ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല പ്രത്യേക അടയാളങ്ങൾ അക്ഷരങ്ങളും അക്കങ്ങളും പകരം ഉപയോഗിക്കാവുന്ന അടയാളം diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 1ad8fe0ef..202597f2b 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -218,7 +218,6 @@ Karakter pengganti Huruf dan angka Karakter yang paling istimewa - Tiada app dipasang untuk memainkan fail ini Tentang NewPipe Lesen Pihak Ketiga © %1$s oleh %2$s di bawah %3$s diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 79bfa710a..a79c9ddae 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -282,7 +282,6 @@ Slett hele søkehistorikken\? Søkehistorikken er slettet Ett element slettet. - Ingen app installert for å spille av denne filen Undertekster 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. diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 6f3d2bb6e..28207c583 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -225,7 +225,6 @@ प्रतिस्थापन वर्ण अक्षर र अंक सबै विशेष वर्णहरु - कुनै अनुप्रयोग यो फाइल खेल्न स्थापित न्यू पाइपको बारेमा तेस्रो-पक्ष इजाजत पत्र ©%1$s को %2$s द्वारा %3$s अन्तर्गत diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 6ab0fbf5c..507ae7d14 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -194,7 +194,6 @@ Vervangend teken Letters en cijfers Meeste speciale tekens - Er is geen app geïnstalleerd die dit bestand kan afspelen Over NewPipe Derdepartijlicenties © %1$s door %2$s, uitgebracht onder de %3$s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index ab73b602f..c01a5a5c4 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -299,7 +299,6 @@ Geen streams beschikbaar voor downloaden Ondertitels Ondertitelgrootte en -achtergrondstijlen wijzigen. Vereist een herstart van de app - Er is geen app geïnstalleerd die dit bestand kan afspelen Kijkgeschiedenis wissen Verwijdert de geschiedenis van bekeken video\'s en afspeelposities De gehele kijkgeschiedenis wissen\? diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 31a53a6b3..164065836 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -542,7 +542,6 @@ କୌଣସି ଗ୍ରାହକ ନାହାଁନ୍ତି ସୃଷ୍ଟି କରନ୍ତୁ ବିବରଣୀ ପାଇଁ ଟ୍ୟାପ୍ କରନ୍ତୁ - ଏହି ଫାଇଲ୍ ଚଲାଇବା ପାଇଁ କୌଣସି ଆପ୍ ସଂସ୍ଥାପିତ ହୋଇନାହିଁ ନାମ ପରିବର୍ତ୍ତନ କରନ୍ତୁ ଦୟାକରି ଅପେକ୍ଷା କର… ଏପର୍ଯ୍ୟନ୍ତ କୌଣସି ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ସେଟ୍ ହୋଇନାହିଁ, ବର୍ତ୍ତମାନ ଡିଫଲ୍ଟ ଡାଉନଲୋଡ୍ ଫୋଲ୍ଡର ବାଛନ୍ତୁ diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 2dcac20ab..5c43baee7 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -201,7 +201,6 @@ ਵਟਾਂਦਰਾ ਚਿੰਨ ਅੱਖਰ ਅਤੇ ਅੰਕ ਬਹੁਤੇ ਖ਼ਾਸ ਅੱਖਰ - ਇਸ ਫਾਈਲ ਨੂੰ ਚਲਾਉਣ ਲਈ ਕੋਈ ਐਪ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ ਨਿਊਪਾਈਪ ਬਾਰੇ ਤੀਜੀ ਧਿਰ ਦੇ ਲਾਈਸੈਂਸ © %1$s ਵਲੋਂ %2$s, %3$s ਅਧੀਨ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 4f5ae1448..bfdb9cb01 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -314,7 +314,6 @@ Usunąć całą historię wyszukiwania\? Usunięto historię wyszukiwania Usunięto jedną pozycję - Brak zainstalowanej aplikacji do odtworzenia tego pliku NewPipe jest wolnym i bezpłatnym oprogramowaniem: Możesz używać, udostępniać i ulepszać je do woli. W szczególności możesz je redystrybuować i/lub modyfikować zgodnie z warunkami GNU General Public License, opublikowanej przez Free Software Fundation, w wersji 3 albo (według Twojego wyboru) jakiejkolwiek późniejszej wersji. Czy chcesz zaimportować również ustawienia? Polityka prywatności NewPipe diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f9b3ac196..f97420ff5 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -301,7 +301,6 @@ Fechar gaveta Legendas Mudar tamanho da legenda e estilos de plano de fundo. Requer reiniciar o app para ter efeito - Nenhum app instalado para reproduzir este arquivo Excluir histórico de vídeo Exclui o histórico de vídeos e as posições de reprodução Excluir todo o histórico de vídeo\? diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 80f6331e3..d83c45662 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -227,7 +227,6 @@ Limite de atualização da fonte OK Não foi possível atualizar a subscrição - Não existe uma aplicação para reproduzir este ficheiro Sim e também os vídeos parcialmente vistos M Ainda não há listas de reprodução favoritas diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 36528078c..9cceefc2b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -297,7 +297,6 @@ Remover todo o histórico de pesquisas\? Histórico de pesquisa removido 1 item eliminado. - Não existe uma aplicação para reproduzir este ficheiro NewPipe é desenvolvido por voluntários que utilizam o seu tempo livre para nos proporcionar a melhor experiência. Retribua para ajudar os programadores a tornarem NewPipe ainda melhor. Contribuir Política de privacidade do NewPipe diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 5eae3876f..0091e4360 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -246,7 +246,6 @@ Creați Respingeți Redenumiţi - Nici o aplicație instalată pentru a reda acest fișier Donaţi De asemenea, doriți să importați setări? Nume diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 999e9b2fe..f593fdc61 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -311,7 +311,6 @@ При открытии ссылки на контент — %s Нет потоков для загрузки Субтитры - Приложение для воспроизведения этого файла не установлено Изменить размер текста и стиль субтитров. Нужен перезапуск Очистить историю Удалить всю историю просмотров\? diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index 68c6fd5c1..ce25d6b3f 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -109,7 +109,6 @@ © %1$s de %2$s cun litzèntzia %3$s Litzèntzias de tertzas partes In subra de NewPipe - Peruna aplicatzione installada pro pòdere riproduire custu documentu Majoria de sos caràteres ispetziales Lìteras e tzifras Caràtere de remplasamentu diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f8340b47b..05f9c70b9 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -262,7 +262,6 @@ Názov súboru nesme byť prázdny Nastala chyba: %1$s Žiadne streamy nie sú k dispozícii na prevzatie - Prehrávač pre daný typ súboru nebol nájdený Preferovaná akcia \'otvoriť\' Predvolená akcia pri otváraní obsahu — %s Automaticky vygenerované diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 222b4b137..188e6f59b 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -362,7 +362,6 @@ \nPolitika zasebnosti NewPipe-a podrobno pojasnjuje, kateri podatki so poslani in shranjeni, ko pošljete poročilo o zrušitvi. Pomagaj NewPipe razvijajo prostovoljci, ki preživljajo svoj prosti čas, da vam prinašajo najboljšo uporabniško izkušnjo. Pomagajte razvijalcem pri izdelavi še boljšega NewPipe-a medtem ko uživajo skodelico kave. - Za predvajanje te datoteke ni nameščena nobena aplikacija Pritisni \"končano\" ko je rešena Odstranjen 1 element. Izračun zgoščevalne funkcije je v teku diff --git a/app/src/main/res/values-so/strings.xml b/app/src/main/res/values-so/strings.xml index 530cb465d..6a299d481 100644 --- a/app/src/main/res/values-so/strings.xml +++ b/app/src/main/res/values-so/strings.xml @@ -183,7 +183,6 @@ © %1$s sameeyay %2$s ayagoo raacaya %3$s Laysimada gacanta sadexaad Kusaabsan NewPipe - Shaygan app fura kuuguma jiro Xarfaha gaarka ah kuwa ugu badan Xarfaha iyo godadka Xarafka lagu baddalayo diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 073800b76..7c248c53e 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -250,7 +250,6 @@ © %1$s nga %2$s nën %3$s Licensat e palëve të treta Rreth NewPipe - Nuk ka aplikacion të instaluar që mund ta luajë këtë skedar Shumica e karaktereve speciale Shkronjat dhe numrat Karakteri zëvendësues diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index e87498e53..142f179c9 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -389,7 +389,6 @@ Пројекат ЊуПајп врло озбиљно схвата вашу приватност. Стога апликација не прикупља никакве податке без вашег пристанка. \nПолитика приватности ЊуПајпа детаљно објашњава који се подаци шаљу и чувају када пошаљете извештај о паду апликације. Политика приватности ЊуПајпа - Нема апликације за пуштање овог фајла Готово Реши Притисните „Готово“ кад решите diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index a64bbf555..71dadfc6c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -242,7 +242,6 @@ Avfärda Byt namn 1 objekt borttaget. - Ingen app installerad för att spela upp filen NewPipes sekretesspolicy NewPipe-projektet tar din integritet på största allvar. Appen samlar därför inte in några uppgifter utan ditt medgivande. \nNewPipes sekretesspolicy förklarar i detalj vad för data som skickas och lagras när du skickar en kraschrapport. diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index ac34a316e..fd38b35d5 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -325,7 +325,6 @@ లోపనివేదన నోటిఫికేషన్ చెరుపు వాటిని తీసివేయడానికి వాటిని స్వైప్ చేయండి - ఈ ఫైల్‌ని ప్లే చేయడానికి యాప్ ఏదీ ఇన్‌స్టాల్ చేయబడలేదు మరింత సమాచారం మరియు వార్తల కోసం NewPipe వెబ్‌సైట్‌ని సందర్శించండి. NewPipe ప్రాజెక్ట్ మీ గోప్యతను చాలా తీవ్రంగా పరిగణిస్తుంది. కాబట్టి, మీ సమ్మతి లేకుండా యాప్ ఎలాంటి డేటాను సేకరించదు. \nNewPipe యొక్క గోప్యతా విధానం మీరు క్రాష్ నివేదికను పంపినప్పుడు ఏ డేటా పంపబడుతుందో మరియు నిల్వ చేయబడుతుందో వివరంగా వివరిస్తుంది. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index fd7e457bf..19297e8f3 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -207,7 +207,6 @@ อักขระทดแทน ตัวอักษรและตัวเลข อักขระพิเศษส่วนใหญ่ - ไม่มีแอพที่ติดตั้งเพื่อให้เล่นไฟล์นี้ได้ เกี่ยวกับ NewPipe สัญญาอนุญาตของบุคคลที่สาม © %1$s โดย %2$s ภายใต้ %3$s diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 898256031..301b3db89 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -295,7 +295,6 @@ Paylaşma ekranında tanımlı eylem — %s Alt yazılar Oynatıcı alt yazı metin ölçeğini ve arka plan biçimini değiştirin. Etkili olması için uygulamayı yeniden başlatma gerektirir - Bu dosyayı oynatmak için herhangi bir uygulama yüklü değil İzleme geçmişini temizle Oynatılan akışların geçmişini ve kalınan oynatım konumlarını siler İzleme geçmişinin tamamı silinsin mi\? diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a8904c05e..270ee0d8e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -307,7 +307,6 @@ Типова дія під час відкриття вмісту — %s Субтитри Зміна висоти тексту субтитрів та стилів тла. Потребує перезапуску застосунку - Не встановлено застосунків для відтворення цього файлу Очистити історію переглядів Видаляє історію відтворень і позицій відтворення Видалити всю історію переглядів\? diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 686644fd9..a49d7b301 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -294,7 +294,6 @@ غیر مربوط (مسخ کا سبب بن سکتا ہے) عنوانات پلیئر کیپشن ٹیکسٹ اسکیل اور بیک گراونڈ اسٹائل میں ترمیم کریں۔ اثر لینے کیلئے ایپ کو دوبارہ شروع کرنا ضروری ہے۔ - اس فائل کو چلانے کے لئے کوئی ایپ انسٹال نہیں ہے دیکھنے کی سرگزشت صاف کریں چلائے گئے سلسلوں اور پلے بیک پوزیشنز کی سرگزشت کو حذف کیا گیا دیکھے جانے کی تمام سرگزشت حذف کریں؟ diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 8262abcef..54cef6aa1 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -215,7 +215,6 @@ Ký tự thay thế Chỉ chữ cái và chữ số Hầu hết các ký tự đặc biệt - Không có ứng dụng nào được cài đặt để phát tệp này Đóng góp NewPipe được phát triển bởi các tình nguyện viên dành thời gian và tâm huyết của mình để mang lại cho bạn trải nghiệm tốt nhất. Đóng góp một chút xiền để giúp chúng tôi làm NewPipe tốt hơn nữa (Nếu bạn muốn). Đôn Nét diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 06ae30657..b5499483e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -106,7 +106,6 @@ 新建 退出 重命名 - 未安装可播放此文件的应用程序 已删除一个项目。 自定义主页显示的标签页 列表视图模式 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 42661322f..701b89c07 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -324,7 +324,6 @@ 未設定下載資料夾,請立即揀選預設嘅下載資料夾 刪除咗 1 個項目。 執執佢 - 未裝 app 嚟播放呢個檔案 搞掂 NewPipe 專案非常著重您嘅私隱。因此,呢個 app 未得您同意係唔會收集任何資料。 \nNewPipe 嘅私隱政策,詳述當您傳送彈 app 報告時,有咩資料會傳送同保存。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0b5112e18..a311d704a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -293,7 +293,6 @@ 沒有可供下載的串流 字幕 調整播放器字幕文字大小與背景樣式。必須重新啟動應用程式才會生效 - 未安裝可播放此檔案的應用程式 清除觀看歷史 刪除播放過的串流與播放位置歷史 刪除所有觀看歷史記錄? diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 09bf9080c..b595a8f2c 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -1,7 +1,7 @@ - https://f-droid.org/packages/org.videolan.vlc/ RSS + org.videolan.vlc org.xbmc.kore https://joinpeertube.org/instances#instances-list newpipe diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 661f05c8c..a8d527ffb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -345,7 +345,6 @@ Replacement character Letters and digits Most special characters - No app installed to play this file About NewPipe Third-party Licenses From c2968a3ff254a54108b570d2c77924e1180f446e Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:06:15 +0100 Subject: [PATCH 32/54] Use non-deprecated resolveActivity method on API 33+ But such method is not available before API 33 --- .../util/external_communication/ShareUtils.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 883633772..b30a5ed4f 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 @@ -72,9 +72,16 @@ public final class ShareUtils { public static void openUrlInBrowser(@NonNull final Context context, final String url) { // Resolve using a generic http://, so we are sure to get a browser and not e.g. the yt app. // Note that this requires the `http` schema to be added to `` in the manifest. - final ResolveInfo defaultBrowserInfo = context.getPackageManager().resolveActivity( - new Intent(Intent.ACTION_VIEW, Uri.parse("http://")), - PackageManager.MATCH_DEFAULT_ONLY); + final ResolveInfo defaultBrowserInfo; + final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://")); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + defaultBrowserInfo = context.getPackageManager().resolveActivity(browserIntent, + PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)); + } else { + defaultBrowserInfo = context.getPackageManager().resolveActivity(browserIntent, + PackageManager.MATCH_DEFAULT_ONLY); + } + if (defaultBrowserInfo == null) { // No app installed to open a web url Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); From 24ff6a4313071ac630a58fba8b9ecfebe2622432 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:08:48 +0100 Subject: [PATCH 33/54] Rename videoURL to streamUrl --- .../newpipe/util/external_communication/KoreUtils.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java index 7fe518113..4dc9c7c07 100644 --- a/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java +++ b/app/src/main/java/org/schabi/newpipe/util/external_communication/KoreUtils.java @@ -36,7 +36,7 @@ public final class KoreUtils { /** * Start an activity to install Kore. * - * @param context the context + * @param context the context to use */ public static void installKore(final Context context) { installApp(context, context.getString(R.string.kore_package)); @@ -51,13 +51,13 @@ public final class KoreUtils { * Kore source code * . * - * @param context the context to use - * @param videoURL the url to the video + * @param context the context to use + * @param streamUrl the url to the stream to play */ - public static void playWithKore(final Context context, final Uri videoURL) { + public static void playWithKore(final Context context, final Uri streamUrl) { final Intent intent = new Intent(Intent.ACTION_VIEW) .setPackage(context.getString(R.string.kore_package)) - .setData(videoURL) + .setData(streamUrl) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (!tryOpenIntentInApp(context, intent)) { From be4f3d9d62d97f864f3ddd2659e1eba39fc93df6 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 09:13:35 +0100 Subject: [PATCH 34/54] Improve javadocs in ShareUtils --- .../external_communication/ShareUtils.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) 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 b30a5ed4f..2f50a94ae 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 @@ -60,11 +60,15 @@ public final class ShareUtils { /** * Open the url with the system default browser. If no browser is set as default, falls back to - * {@link #openAppChooser(Context, Intent, boolean)}. This function selects the package to open - * based on which apps respond to the {@code http://} schema alone, which should exclude special - * non-browser apps that are can handle the url (e.g. the official YouTube app). Therefore - * please prefer {@link #openUrlInApp(Context, String)}, that handles package resolution - * in a standard way, unless this is the action of an explicit "Open in browser" button. + * {@link #openAppChooser(Context, Intent, boolean)}. + *

+ * This function selects the package to open based on which apps respond to the {@code http://} + * schema alone, which should exclude special non-browser apps that are can handle the url (e.g. + * the official YouTube app). + *

+ * Therefore please prefer {@link #openUrlInApp(Context, String)}, that handles package + * resolution in a standard way, unless this is the action of an explicit "Open in browser" + * button. * * @param context the context to use * @param url the url to browse @@ -120,8 +124,9 @@ public final class ShareUtils { } /** - * Open an intent with the system default app. Use {@link #openIntentInApp(Context, Intent)} to - * show a toast in case of failure. + * Open an intent with the system default app. + *

+ * Use {@link #openIntentInApp(Context, Intent)} to show a toast in case of failure. * * @param context the context to use * @param intent the intent to open @@ -138,8 +143,9 @@ public final class ShareUtils { } /** - * Open an intent with the system default app, showing a toast in case of failure. Use {@link - * #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link + * Open an intent with the system default app, showing a toast in case of failure. + *

+ * Use {@link #tryOpenIntentInApp(Context, Intent)} if you don't want the toast. Use {@link * #openUrlInApp(Context, String)} as a shorthand for {@link Intent#ACTION_VIEW} with urls. * * @param context the context to use From 8e888ebdf7b49b7e2ac107016ba98e308b99bce0 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 25 Feb 2023 15:03:58 +0100 Subject: [PATCH 35/54] Reduce the size of thumbnails on big screens to fit more grid columns Reverts part of #9310, which introduced bigger grid thumbnail sizes on big screens, because some users reported not being happy about having too few grid columns. See https://github.com/TeamNewPipe/NewPipe/pull/9310#discussion_r1070670806 . --- app/src/main/res/values-w820dp/dimens.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml index 817cd8f85..ce2d482a5 100644 --- a/app/src/main/res/values-w820dp/dimens.xml +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -4,6 +4,6 @@ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> 64dp - 280dp - 160dp + 208dp + 117dp From 9067c770a75aea9e8f0fd25dcb617536c15e09f1 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Sat, 25 Feb 2023 22:14:49 +0100 Subject: [PATCH 36/54] Made some small code improvements --- .../schabi/newpipe/local/playlist/LocalPlaylistManager.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 0a9120da2..0cf2d67c5 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 @@ -42,13 +42,11 @@ public class LocalPlaylistManager { if (streams.isEmpty()) { return Maybe.empty(); } - final StreamEntity defaultStream = streams.get(0); - final PlaylistEntity newPlaylist = - new PlaylistEntity(name, false, defaultStream.getUid()); return Maybe.fromCallable(() -> database.runInTransaction(() -> { final List streamIds = streamTable.upsertAll(streams); - newPlaylist.setThumbnailStreamId(streamIds.get(0)); + final PlaylistEntity newPlaylist = new PlaylistEntity(name, false, + streamIds.get(0)); return insertJoinEntities(playlistTable.insert(newPlaylist), streamIds, 0); From 42d861688eb00fae428476ef990066c8bcfee793 Mon Sep 17 00:00:00 2001 From: Nyan Cat <17372086+e666666@users.noreply.github.com> Date: Sat, 4 Feb 2023 15:31:08 +0800 Subject: [PATCH 37/54] Implement Ignore hardware media button events option --- .../player/mediasession/MediaSessionPlayerUi.java | 10 ++++++++++ app/src/main/res/values/settings_keys.xml | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/video_audio_settings.xml | 7 +++++++ 4 files changed, 20 insertions(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java index e9541ab06..3d19e0784 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java @@ -44,6 +44,15 @@ public class MediaSessionPlayerUi extends PlayerUi { sessionConnector = new MediaSessionConnector(mediaSession); sessionConnector.setQueueNavigator(new PlayQueueNavigator(mediaSession, player)); sessionConnector.setPlayer(getForwardingPlayer()); + sessionConnector.setMediaButtonEventHandler((p, i) -> { + // It seems like events from the Media Control UI + // in the notification area don't go through this function, + // so it's safe to just ignore all events in case we want to + // ignore the hardware media buttons. + // Returning true stops all further event processing of the system + return player.getPrefs().getBoolean( + context.getString(R.string.ignore_hardware_media_buttons_key), false); + }); sessionConnector.setMetadataDeduplicationEnabled(true); sessionConnector.setMediaMetadataProvider(exoPlayer -> buildMediaMetadata()); @@ -53,6 +62,7 @@ public class MediaSessionPlayerUi extends PlayerUi { public void destroyPlayer() { super.destroyPlayer(); if (sessionConnector != null) { + sessionConnector.setMediaButtonEventHandler(null); sessionConnector.setPlayer(null); sessionConnector.setQueueNavigator(null); sessionConnector = null; diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 126818969..0b2e58d04 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -25,6 +25,7 @@ screen_brightness_key screen_brightness_timestamp_key clear_queue_confirmation_key + ignore_hardware_media_buttons_key popup_saved_width popup_saved_x diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a8d527ffb..06f8cf4f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,6 +83,8 @@ Ask for confirmation before clearing a queue Switching from one player to another may replace your queue The active player queue will be replaced + Ignore hardware media button events + Useful, for instance, if you are using a headset with broken physical buttons Load thumbnails Turn off to prevent loading thumbnails, saving data and memory usage. Changes clear both in-memory and on-disk image cache Show comments diff --git a/app/src/main/res/xml/video_audio_settings.xml b/app/src/main/res/xml/video_audio_settings.xml index 8ff91548d..117ee8703 100644 --- a/app/src/main/res/xml/video_audio_settings.xml +++ b/app/src/main/res/xml/video_audio_settings.xml @@ -224,5 +224,12 @@ app:singleLineTitle="false" app:iconSpaceReserved="false" /> + From a4767fc48aa5c33774038e8427effd41ee7f0e72 Mon Sep 17 00:00:00 2001 From: Stypox Date: Sun, 26 Feb 2023 14:27:48 +0100 Subject: [PATCH 38/54] Listen to ignore hardware buttons pref changes --- .../mediasession/MediaSessionPlayerUi.java | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java index 3d19e0784..6f76a91d1 100644 --- a/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java +++ b/app/src/main/java/org/schabi/newpipe/player/mediasession/MediaSessionPlayerUi.java @@ -3,6 +3,7 @@ package org.schabi.newpipe.player.mediasession; import static org.schabi.newpipe.MainActivity.DEBUG; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaSessionCompat; @@ -23,14 +24,20 @@ import org.schabi.newpipe.util.StreamTypeUtil; import java.util.Optional; -public class MediaSessionPlayerUi extends PlayerUi { +public class MediaSessionPlayerUi extends PlayerUi + implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "MediaSessUi"; private MediaSessionCompat mediaSession; private MediaSessionConnector sessionConnector; + private final String ignoreHardwareMediaButtonsKey; + private boolean shouldIgnoreHardwareMediaButtons = false; + public MediaSessionPlayerUi(@NonNull final Player player) { super(player); + ignoreHardwareMediaButtonsKey = + context.getString(R.string.ignore_hardware_media_buttons_key); } @Override @@ -44,15 +51,15 @@ public class MediaSessionPlayerUi extends PlayerUi { sessionConnector = new MediaSessionConnector(mediaSession); sessionConnector.setQueueNavigator(new PlayQueueNavigator(mediaSession, player)); sessionConnector.setPlayer(getForwardingPlayer()); - sessionConnector.setMediaButtonEventHandler((p, i) -> { - // It seems like events from the Media Control UI - // in the notification area don't go through this function, - // so it's safe to just ignore all events in case we want to - // ignore the hardware media buttons. - // Returning true stops all further event processing of the system - return player.getPrefs().getBoolean( - context.getString(R.string.ignore_hardware_media_buttons_key), false); - }); + + // It seems like events from the Media Control UI in the notification area don't go through + // this function, so it's safe to just ignore all events in case we want to ignore the + // hardware media buttons. Returning true stops all further event processing of the system. + sessionConnector.setMediaButtonEventHandler((p, i) -> shouldIgnoreHardwareMediaButtons); + + // listen to changes to ignore_hardware_media_buttons_key + updateShouldIgnoreHardwareMediaButtons(player.getPrefs()); + player.getPrefs().registerOnSharedPreferenceChangeListener(this); sessionConnector.setMetadataDeduplicationEnabled(true); sessionConnector.setMediaMetadataProvider(exoPlayer -> buildMediaMetadata()); @@ -61,6 +68,7 @@ public class MediaSessionPlayerUi extends PlayerUi { @Override public void destroyPlayer() { super.destroyPlayer(); + player.getPrefs().unregisterOnSharedPreferenceChangeListener(this); if (sessionConnector != null) { sessionConnector.setMediaButtonEventHandler(null); sessionConnector.setPlayer(null); @@ -84,6 +92,20 @@ public class MediaSessionPlayerUi extends PlayerUi { } + @Override + public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, + final String key) { + if (key == null || key.equals(ignoreHardwareMediaButtonsKey)) { + updateShouldIgnoreHardwareMediaButtons(sharedPreferences); + } + } + + public void updateShouldIgnoreHardwareMediaButtons(final SharedPreferences sharedPreferences) { + shouldIgnoreHardwareMediaButtons = + sharedPreferences.getBoolean(ignoreHardwareMediaButtonsKey, false); + } + + public void handleMediaButtonIntent(final Intent intent) { MediaButtonReceiver.handleIntent(mediaSession, intent); } From d8ed2c850356de9c1aa1e4b3596745983b3d5344 Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Tue, 28 Feb 2023 16:43:58 +0100 Subject: [PATCH 39/54] Refactoring removeDuplicates function and preventing concurrent calls. --- .../local/playlist/LocalPlaylistFragment.java | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) 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 36544a6a9..63cc1b57c 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 @@ -95,8 +95,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK, "Removing watched videos, partially watched=" + removePartiallyWatched)))); } @@ -623,7 +625,6 @@ public class LocalPlaylistFragment extends BaseLocalListFragment itemsToKeep = playlistManager - .getDistinctPlaylistStreams(playlistId).blockingFirst(); + if (isRewritingPlaylist) { + return; + } + isRewritingPlaylist = true; + showLoading(); - itemListAdapter.clearStreamItemList(); - itemListAdapter.addItems(itemsToKeep); - setVideoCount(itemListAdapter.getItemsList().size()); + final var streamsMaybe = playlistManager + .getDistinctPlaylistStreams(playlistId).firstElement(); - saveChanges(); + + disposables.add(streamsMaybe.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(itemsToKeep -> { + itemListAdapter.clearStreamItemList(); + itemListAdapter.addItems(itemsToKeep); + setVideoCount(itemListAdapter.getItemsList().size()); + saveChanges(); + + hideLoading(); + isRewritingPlaylist = false; + }, throwable -> showError(new ErrorInfo(throwable, UserAction.REQUESTED_BOOKMARK, + "Removing duplicated streams")))); } private void deleteItem(final PlaylistStreamEntry item) { From 1dd0930b835ae4bc7182f4f05ee3a69060f5db4b Mon Sep 17 00:00:00 2001 From: Jared Fantaye Date: Tue, 28 Feb 2023 17:30:17 +0100 Subject: [PATCH 40/54] Fixed some small issues --- .../schabi/newpipe/local/feed/FeedFragment.kt | 26 ++++++------------- .../newpipe/local/feed/FeedViewModel.kt | 2 ++ app/src/main/res/values/settings_keys.xml | 2 +- 3 files changed, 11 insertions(+), 19 deletions(-) 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 3ca3bd320..9fe90969f 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 @@ -40,7 +40,6 @@ import androidx.appcompat.app.AlertDialog import androidx.core.content.edit import androidx.core.math.MathUtils import androidx.core.os.bundleOf -import androidx.core.view.MenuItemCompat import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.preference.PreferenceManager @@ -99,9 +98,6 @@ class FeedFragment : BaseStateFragment() { private var oldestSubscriptionUpdate: OffsetDateTime? = null private lateinit var groupAdapter: GroupieAdapter - @State @JvmField var showPlayedItems: Boolean = true - @State @JvmField var showPartiallyPlayedItems: Boolean = true - @State @JvmField var showFutureItems: Boolean = true private var onSettingsChangeListener: SharedPreferences.OnSharedPreferenceChangeListener? = null private var updateListViewModeOnResume = false @@ -140,9 +136,6 @@ class FeedFragment : BaseStateFragment() { val factory = FeedViewModel.getFactory(requireContext(), groupId) viewModel = ViewModelProvider(this, factory)[FeedViewModel::class.java] - showPlayedItems = viewModel.getShowPlayedItemsFromPreferences() - showPartiallyPlayedItems = viewModel.getShowPartiallyPlayedItemsFromPreferences() - showFutureItems = viewModel.getShowFutureItemsFromPreferences() viewModel.stateLiveData.observe(viewLifecycleOwner) { it?.let(::handleResult) } groupAdapter = GroupieAdapter().apply { @@ -217,10 +210,6 @@ class FeedFragment : BaseStateFragment() { activity.supportActionBar?.subtitle = groupName inflater.inflate(R.menu.menu_feed_fragment, menu) - MenuItemCompat.setTooltipText( - menu.findItem(R.id.menu_item_feed_toggle_played_items), - getString(R.string.feed_show_hide_streams) - ) } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -259,7 +248,11 @@ class FeedFragment : BaseStateFragment() { getString(R.string.feed_show_upcoming) ) - val checkedDialogItems = booleanArrayOf(showPlayedItems, showPartiallyPlayedItems, showFutureItems) + val checkedDialogItems = booleanArrayOf( + viewModel.getShowPlayedItemsFromPreferences(), + viewModel.getShowPartiallyPlayedItemsFromPreferences(), + viewModel.getShowFutureItemsFromPreferences() + ) val builder = AlertDialog.Builder(context!!) builder.setTitle(R.string.feed_hide_streams_title) @@ -268,14 +261,11 @@ class FeedFragment : BaseStateFragment() { } builder.setPositiveButton(R.string.ok) { _, _ -> - showPlayedItems = checkedDialogItems[0] - viewModel.setSaveShowPlayedItems(showPlayedItems) + viewModel.setSaveShowPlayedItems(checkedDialogItems[0]) - showPartiallyPlayedItems = checkedDialogItems[1] - viewModel.setSaveShowPartiallyPlayedItems(showPartiallyPlayedItems) + viewModel.setSaveShowPartiallyPlayedItems(checkedDialogItems[1]) - showFutureItems = checkedDialogItems[2] - viewModel.setSaveShowFutureItems(showFutureItems) + viewModel.setSaveShowFutureItems(checkedDialogItems[2]) } builder.setNegativeButton(R.string.cancel, null) diff --git a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt index 015b72160..58f9e9edc 100644 --- a/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt +++ b/app/src/main/java/org/schabi/newpipe/local/feed/FeedViewModel.kt @@ -157,9 +157,11 @@ class FeedViewModel( private fun getShowPartiallyPlayedItemsFromPreferences(context: Context) = PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(context.getString(R.string.feed_show_partially_watched_items_key), true) + private fun getShowFutureItemsFromPreferences(context: Context) = PreferenceManager.getDefaultSharedPreferences(context) .getBoolean(context.getString(R.string.feed_show_future_items_key), true) + fun getFactory(context: Context, groupId: Long) = viewModelFactory { initializer { FeedViewModel( diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index 281d3bf40..57d1abc5c 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -283,7 +283,7 @@ feed_update_threshold_key 300 - feed_show_watched_items + feed_show_played_items feed_show_partially_watched_items feed_show_future_items From 7617f8cdc71d42287b0ee7772234d86c49fe17e3 Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 28 Feb 2023 21:35:57 +0100 Subject: [PATCH 41/54] Update app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java --- .../schabi/newpipe/local/playlist/LocalPlaylistFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ef76fe8e9..8a71ce3a8 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 @@ -637,7 +637,7 @@ public class LocalPlaylistFragment extends BaseLocalListFragment { + .setPositiveButton(R.string.ok, (dialog, i) -> { removeDuplicatesInPlaylist(); }) .setNeutralButton(R.string.cancel, null); From 43f46e29ad24910d5b7700bc2f6be56c326336cc Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 28 Feb 2023 21:40:11 +0100 Subject: [PATCH 42/54] Update app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistFragment.java --- .../schabi/newpipe/local/playlist/LocalPlaylistFragment.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 8a71ce3a8..1da211b80 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 @@ -637,9 +637,8 @@ public class LocalPlaylistFragment extends BaseLocalListFragment { - removeDuplicatesInPlaylist(); - }) + .setPositiveButton(R.string.ok, + (dialog, i) -> removeDuplicatesInPlaylist()) .setNeutralButton(R.string.cancel, null); builder.create().show(); From bb57f9cc9dda7fe080c653926819e6f2b09279b9 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 1 Mar 2023 10:17:40 +0100 Subject: [PATCH 43/54] Merge branch 'origin/dev' into Weblate. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated using Weblate (Hindi) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 99.8% (654 of 655 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Polish) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Czech) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Greek) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Portuguese) Currently translated at 99.8% (654 of 655 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (German) Currently translated at 100.0% (655 of 655 strings) Translated using Weblate (Russian) Currently translated at 75.3% (55 of 73 strings) Translated using Weblate (Belarusian) Currently translated at 74.4% (487 of 654 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 99.8% (653 of 654 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Vietnamese) Currently translated at 99.2% (649 of 654 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Polish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Czech) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Greek) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Slovenian) Currently translated at 64.2% (420 of 654 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Russian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (German) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (English) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Belarusian) Currently translated at 6.8% (5 of 73 strings) Translated using Weblate (Belarusian) Currently translated at 74.3% (486 of 654 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Czech) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (German) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Punjabi) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Vietnamese) Currently translated at 98.4% (644 of 654 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Czech) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Romanian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Korean) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Korean) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (German) Currently translated at 100.0% (654 of 654 strings) Merge branch 'origin/dev' into Weblate. Translated using Weblate (Bengali) Currently translated at 21.9% (16 of 73 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 69.8% (51 of 73 strings) Translated using Weblate (Portuguese) Currently translated at 69.8% (51 of 73 strings) Translated using Weblate (Italian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Odia) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Dutch) Currently translated at 65.7% (48 of 73 strings) Translated using Weblate (Italian) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 28.7% (21 of 73 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Galician) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Hebrew) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Italian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Korean) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Japanese) Currently translated at 99.8% (653 of 654 strings) Translated using Weblate (Dutch) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Basque) Currently translated at 45.2% (33 of 73 strings) Translated using Weblate (German) Currently translated at 73.9% (54 of 73 strings) Translated using Weblate (Sardinian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Polish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Czech) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Slovak) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Greek) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Basque) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Portuguese) Currently translated at 99.8% (653 of 654 strings) Translated using Weblate (Russian) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (French) Currently translated at 99.6% (652 of 654 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (German) Currently translated at 100.0% (654 of 654 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 15.0% (11 of 73 strings) Translated using Weblate (German) Currently translated at 73.9% (54 of 73 strings) Translated using Weblate (Thai) Currently translated at 32.0% (209 of 652 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Italian) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 15.0% (11 of 73 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Romanian) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Russian) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Polish) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 64.3% (47 of 73 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Indonesian) Currently translated at 76.7% (56 of 73 strings) Translated using Weblate (Polish) Currently translated at 60.2% (44 of 73 strings) Translated using Weblate (Hindi) Currently translated at 21.9% (16 of 73 strings) Translated using Weblate (Punjabi) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Czech) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (73 of 73 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 17.8% (13 of 73 strings) Translated using Weblate (Polish) Currently translated at 100.0% (652 of 652 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (652 of 652 strings) Co-authored-by: Agnieszka C Co-authored-by: Aitor Salaberria Co-authored-by: Ajeje Brazorf Co-authored-by: Alex25820 Co-authored-by: Allan Nordhøy Co-authored-by: Emin Tufan Çetin Co-authored-by: Eric Co-authored-by: Fjuro Co-authored-by: Florian Co-authored-by: GET100PERCENT Co-authored-by: GnuPGを使うべきだ Co-authored-by: Hoseok Seo Co-authored-by: Hosted Weblate Co-authored-by: Igor Nedoboy Co-authored-by: Igor Rückert Co-authored-by: Igor Sorocean Co-authored-by: Ihor Hordiichuk Co-authored-by: Issa1553 Co-authored-by: JS Ahn Co-authored-by: JY3 Co-authored-by: Jeff Huang Co-authored-by: Jonatan Nyberg Co-authored-by: Linerly Co-authored-by: Marian Hanzel Co-authored-by: Massimo Pissarello Co-authored-by: Mateus Co-authored-by: Nidi Co-authored-by: Oğuz Ersen Co-authored-by: Phahim Hasan Co-authored-by: Priit Jõerüüt Co-authored-by: Ray Co-authored-by: Retrial Co-authored-by: Rex_sa Co-authored-by: S3aBreeze Co-authored-by: SC Co-authored-by: ShareASmile Co-authored-by: Sierzh Co-authored-by: TXRdev Archive Co-authored-by: ThePsychoBuck Co-authored-by: Vasilis K Co-authored-by: VfBFan Co-authored-by: Yaron Shahrabani Co-authored-by: bowornsin Co-authored-by: gallegonovato Co-authored-by: komiratsu19273240ad76c354986 <2011945@naver.com> Co-authored-by: petlyh <88139840+petlyh@users.noreply.github.com> Co-authored-by: phneutral26 Co-authored-by: pjammo Co-authored-by: random r Co-authored-by: ssantos Co-authored-by: Štefan Baebler Co-authored-by: Макар Разин Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/be/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/bn/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/de/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/hi/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nb_NO/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/nl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pa/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_PT/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant_HK/ Translation: NewPipe/Metadata --- app/src/main/res/values-ar/strings.xml | 4 +- app/src/main/res/values-az/strings.xml | 4 +- app/src/main/res/values-be/strings.xml | 163 +++++++++++++++--- app/src/main/res/values-cs/strings.xml | 36 ++-- app/src/main/res/values-de/strings.xml | 12 +- app/src/main/res/values-el/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 4 +- app/src/main/res/values-et/strings.xml | 4 +- app/src/main/res/values-he/strings.xml | 4 +- app/src/main/res/values-hi/strings.xml | 126 +++++++------- app/src/main/res/values-in/strings.xml | 4 +- app/src/main/res/values-ja/strings.xml | 5 +- app/src/main/res/values-ko/strings.xml | 4 +- app/src/main/res/values-nb-rNO/strings.xml | 2 + app/src/main/res/values-pa/strings.xml | 2 + app/src/main/res/values-pl/strings.xml | 4 +- app/src/main/res/values-pt-rBR/strings.xml | 4 +- app/src/main/res/values-pt-rPT/strings.xml | 4 +- app/src/main/res/values-pt/strings.xml | 4 +- app/src/main/res/values-ro/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-sl/strings.xml | 28 +-- app/src/main/res/values-sv/strings.xml | 2 + app/src/main/res/values-tr/strings.xml | 4 +- app/src/main/res/values-uk/strings.xml | 4 +- app/src/main/res/values-vi/strings.xml | 32 ++-- app/src/main/res/values-zh-rCN/strings.xml | 4 +- app/src/main/res/values-zh-rTW/strings.xml | 4 +- app/src/main/res/values/strings.xml | 2 +- .../metadata/android/be/changelogs/63.txt | 8 + .../metadata/android/be/changelogs/64.txt | 8 + .../metadata/android/be/changelogs/992.txt | 17 ++ .../metadata/android/be/full_description.txt | 1 + .../metadata/android/be/short_description.txt | 2 +- .../metadata/android/hi/changelogs/860.txt | 4 +- .../metadata/android/ru/changelogs/760.txt | 43 +++++ .../metadata/android/ru/changelogs/770.txt | 4 + .../metadata/android/ru/changelogs/800.txt | 27 +++ .../metadata/android/ru/changelogs/810.txt | 19 ++ .../metadata/android/ru/changelogs/840.txt | 22 +++ .../metadata/android/ru/changelogs/860.txt | 7 + .../metadata/android/ru/changelogs/870.txt | 2 + .../metadata/android/ru/changelogs/900.txt | 14 ++ .../metadata/android/ru/changelogs/920.txt | 9 + .../metadata/android/ru/changelogs/930.txt | 19 ++ .../metadata/android/ru/changelogs/940.txt | 16 ++ .../metadata/android/ru/changelogs/951.txt | 17 ++ .../metadata/android/ru/changelogs/954.txt | 9 + .../metadata/android/ru/changelogs/957.txt | 10 ++ .../metadata/android/ru/changelogs/959.txt | 3 + .../metadata/android/ru/changelogs/960.txt | 4 + .../metadata/android/ru/changelogs/961.txt | 12 ++ .../metadata/android/ru/changelogs/964.txt | 8 + .../metadata/android/ru/changelogs/965.txt | 6 + .../metadata/android/ru/changelogs/966.txt | 14 ++ .../metadata/android/ru/changelogs/967.txt | 1 + .../metadata/android/ru/changelogs/968.txt | 7 + .../metadata/android/ru/changelogs/969.txt | 8 + .../metadata/android/ru/changelogs/970.txt | 11 ++ .../metadata/android/ru/changelogs/971.txt | 3 + 60 files changed, 652 insertions(+), 161 deletions(-) create mode 100644 fastlane/metadata/android/be/changelogs/63.txt create mode 100644 fastlane/metadata/android/be/changelogs/64.txt create mode 100644 fastlane/metadata/android/be/changelogs/992.txt create mode 100644 fastlane/metadata/android/be/full_description.txt create mode 100644 fastlane/metadata/android/ru/changelogs/760.txt create mode 100644 fastlane/metadata/android/ru/changelogs/770.txt create mode 100644 fastlane/metadata/android/ru/changelogs/800.txt create mode 100644 fastlane/metadata/android/ru/changelogs/810.txt create mode 100644 fastlane/metadata/android/ru/changelogs/840.txt create mode 100644 fastlane/metadata/android/ru/changelogs/860.txt create mode 100644 fastlane/metadata/android/ru/changelogs/870.txt create mode 100644 fastlane/metadata/android/ru/changelogs/900.txt create mode 100644 fastlane/metadata/android/ru/changelogs/920.txt create mode 100644 fastlane/metadata/android/ru/changelogs/930.txt create mode 100644 fastlane/metadata/android/ru/changelogs/940.txt create mode 100644 fastlane/metadata/android/ru/changelogs/951.txt create mode 100644 fastlane/metadata/android/ru/changelogs/954.txt create mode 100644 fastlane/metadata/android/ru/changelogs/957.txt create mode 100644 fastlane/metadata/android/ru/changelogs/959.txt create mode 100644 fastlane/metadata/android/ru/changelogs/960.txt create mode 100644 fastlane/metadata/android/ru/changelogs/961.txt create mode 100644 fastlane/metadata/android/ru/changelogs/964.txt create mode 100644 fastlane/metadata/android/ru/changelogs/965.txt create mode 100644 fastlane/metadata/android/ru/changelogs/966.txt create mode 100644 fastlane/metadata/android/ru/changelogs/967.txt create mode 100644 fastlane/metadata/android/ru/changelogs/968.txt create mode 100644 fastlane/metadata/android/ru/changelogs/969.txt create mode 100644 fastlane/metadata/android/ru/changelogs/970.txt create mode 100644 fastlane/metadata/android/ru/changelogs/971.txt diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index c7fa792e2..861726dd3 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -105,7 +105,7 @@ حدث خطأ للمشغل غير قابل للاسترداد استرداد المشغل من الخطأ عذرًا، لم ينبغِ أن يحدث ذلك. - الإبلاغ عن هذا الخطأ عبر البريد الإلكتروني + الإبلاغ عن طريق البريد الإلكتروني عذرًا، حدث خطأ ما. أبلِغ معلومات: @@ -783,4 +783,6 @@ البطاقة تمت إضافة وقت (أوقات) مكررة %d تحتوي قوائم التشغيل رمادية اللون بالفعل على هذا العنصر. + مفيد ، على سبيل المثال ، إذا كنت تستخدم سماعة رأس بأزرار مادية مكسورة + تجاهل أحداث ازرار الوسائط الأجهزة \ 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 bb00af528..a9eca55c9 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -303,7 +303,7 @@ 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 + E-poçt- dan məlumat ver 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. Məlumat Ver @@ -731,4 +731,6 @@ Buferə kopyalamaq alınmadı Boz rəngdə olan pleylistlərdə artıq bu element var. Dublikat %d dəfə əlavə edildi + Aparat mühiti media düyməsi hadisələrinə məhəl qoyma + Məsələn, fiziki düymələri qırılan qulaqlıq işlədirsinizsə faydalıdır \ No newline at end of file diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 8031cfe9c..e77a82097 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -1,6 +1,6 @@ - Націсніце \"Пошук\", каб пачаць + Націсніце лупу, каб пачаць. Апублікавана %1$s Патокавы плэер не знойдзены. Усталяваць VLC? Патокавы плэер не знойдзены (вы можаце ўсталяваць VLC). @@ -42,7 +42,7 @@ Толькі некаторыя прылады могуць прайграваць відэа ў 2K/4K Прайграць у Kodi Дадатак Kore не знойдзены. Усталяваць яго? - \"Прайграць у Kodi\" + Паказаць опцыю \"Прайграць у Kodi\" Паказаць опцыю прайгравання відэа праз медыяцэнтр Kodi Аўдыё Фармат аўдыё па змаўчанні @@ -54,14 +54,14 @@ Аднавіць акно Запамінаць памер і становішча ўсплываючага акна Хуткі пошук пазіцыі - Недакладны пошук дазваляе плэеру шукаць пазіцыю хутчэй, але менш дакладна. Не працуе для перамоткі на 5, 15 ці 25 секунд + Недакладны пошук дазваляе плэеру знаходзіць пазіцыі хутчэй са зніжанай дакладнасцю. Пошук цягам 5, 15 ці 25 секунд пры гэтым немажлівы Загружаць мініяцюры Адключыце, каб не загружаць мініяцюры і зэканоміць трафік і памяць. Змена налады ачысьціць кэш малюнкаў Кэш малюнкаў ачышчаны Ачысціць кэш метададзеных Выдаліць усе загружаныя дадзеныя вэб-старонак Кэш метададзеных ачышчаны - Аўтадапаўненне чаргі + Аўта- чарга наступнага патока Дадаваць падобныя патокі ў чаргу пры прайграванні апошняга, калі не ўключаны паўтор Варыянты пошуку Адлюстроўваць падказкі пры пошуку @@ -69,9 +69,9 @@ Захоўваць пошукавыя запыты лакальна Гісторыя праглядаў Запамінаць прагледжаныя відэа - Аднавіць пры фокусе - Аднаўляць прайграванне пасля перапынкаў (напрыклад, тэлефонных званкоў) - Спампаваць + Аднавіць прайграванне + Аднаўляць прайграванне пасля перарыванняў (напр. тэлефонных званкоў) + Загрузіць \"Наступнае\" и \"Прапанаванае\" відэа \"Зацісніце, каб дадаць\" Паказаць падказку пры націсканні \"У акне\" ці \"У фоне\" на старонцы звестак аб відэа @@ -106,7 +106,7 @@ Толькі цяпер Файл Апавяшчэнне NewPipe - Апавяшчэнні для NewPipe ў фоне і ва ўсплываючым акне + Апавяшчэнні для прайгравальніка NewPipe [Невядома] Перайсці ў фон Перайсці ў акно @@ -118,11 +118,11 @@ Ачысціць гісторыю праглядаў Выдаліць гісторыю прайграных патокаў Выдаліць усю гісторыю праглядаў\? - Гісторыя праглядаў выдалена. + Гісторыя праглядаў выдалена Ачысціць гісторыю пошуку Выдаліць гісторыю пошукавых запытаў Выдаліць усю гісторыю пошуку\? - Гісторыя пошуку выдалена. + Гісторыя пошуку выдалена Памылка Памылка сеткі Не атрымалася загрузіць усе мініяцюры @@ -142,22 +142,22 @@ Файл не існуе або няма дазволу на яго чытанне або запіс Імя файла не можа быць пустым Адбылася памылка: %1$s - Няма патокаў, даступных для загрузкі + Няма трансляцый, даступных для загрузкі Прабачце, гэта не павінна было адбыцца. Адправіць справаздачу па e-mail Прабачце, адбыліся памылкі. СПРАВАЗДАЧА Інфармацыя: Што адбылося: - Што:\\nЗапыт:\\nМова кантэнту:\\nСэрвіс:\\nЧас па Грынвічы:\\nПакет:\\nВерсія:\\nВерсія АС: + Што:\\nЗапыт:\\nМова кантэнту:\\nКраіна кантэнту:\\nМова праграмы:\\nСэрвіс:\\nЧас GMT:\\nПакет:\\nВерсія:\\nВерсія АС: Ваш каментар (English): Падрабязнасці: - Мініяцюра відэа-прэв\'ю + Прайграць відэа, працягласць: Мініяцюра аватара карыстальніка Спадабалася Не спадабалася Няма вынікаў - Нічога няма + Нічога няма, акрамя цвыркуноў Перацягніце, каб змяніць парадак Відэа Аўдыё @@ -278,7 +278,7 @@ Выдаліць плэйліст\? Плэйліст створаны Дададзена ў плэйліст - Мініяцюра плэйліста зменена + Мініяцюра плэйліста зменена. Без тытраў Падагнаць Запоўніць @@ -334,13 +334,13 @@ Адпісацца Абярыце ўкладку Жэст гучнасці - Мяняць гучнасць плэера жэстам + Выкарыстоўвай жэсты для кіравання гучнасцю плэера Жэст яркасці - Мяняць яркасць плэера жэстам + Выкарыстоўвай жэсты для кіравання яркасцю плэера Абнаўленні Файл выдалены - Апавяшчэнне аб абнаўленні - Апавяшчэння аб новай версіі NewPipe + Апавяшчэнне аб абнаўленні праграмы + Апавяшчэнні пра новыя версіі NewPipe Знешняе сховішча недаступна Загрузка на знешнюю SD-карту немагчымая. Скінуць размяшчэнне тэчкі загрузкі\? Памылка чытання захаваных укладак. Выкарыстоўваюцца ўкладкі па змаўчанні @@ -348,7 +348,7 @@ Аднавіць значэнні па змаўчанні\? Колькасць падпісчыкаў недаступная Ўкладкі, бачныя на галоўнай старонцы - Абнаўлення + Абнаўленні Паказаць апавяшчэнне пры наяўнасці новай версіі Выгляд спісу Спіс @@ -410,10 +410,10 @@ Пачаць загрузку Прыпыніць загрузку Запытваць тэчку загрузкі - Для кожнай загрузкі запытваць тэчку для захавання + Вам будзе прапанавана ўказаць месца захавання кожнай загрузкі. +\nУключыце сістэмны выбарнік тэчкі (SAF), калі вы хочаце загружаць файлы на знешнюю SD-картку Выкарыстоўваць SAF - Storage Framework Access дазваляе захоўваць файлы на вонкавым назапашвальніку. -\nПадтрымліваецца не ўсімі прыладамі + \'Storage Access Framework\' дазваляе загружаць на знешнюю SD-картку Пераключыць службу, выбраную ў дадзены момант: Выдаліць ўсе пазіцыі прайгравання Абмежаваны рэжым YouTube @@ -421,8 +421,8 @@ Дадаць экзэмпляр Экзэмпляры PeerTube Вынікі для: %s - Мініяцюра відэа ў 1:1 - Мініяцюра відэа ў апавяшчэнні з 16:9 да 1:1 (магчымі скажэнні) + Абрэжце мініяцюру да прапорцый 1:1 + Абрэжце мініяцюру відэа паказванае ў апавяшчэнні з прапорцый 16:9 да 1:1 Кнопка чацвёртага дзеяння Кнопка трэцяга дзеяння Кнопка другога дзеяння @@ -437,7 +437,7 @@ Экзэмпляр ужо існуе Немагчыма праверыць экзэмпляр Увесці URL экзэмпляра - Абярыце любімыя экзэмпляры PeerTube + Выберыце улюбёныя экзэмпляры PeerTube Актыўны плэер быў зменены Змена плэера можа замяніць вашу чаргу Запытаць, перш чым ачысціць чаргу @@ -453,7 +453,7 @@ Лакальнае Нядаўна дададзенае Няма закладак у плейлісце - Абярыце плэйліст + Выберыце плэйліст Кіёск па змаўчанні Так Націсніце \"Так\" калі вырашана @@ -481,4 +481,113 @@ Афарбоўваць апавяшчэнне асноўным колерам мініяцюры. Падтрымваецца не ўсімі прыладамі У кампактным апавяшчэнні дасяжна не больш за тры дзеянні! Дзеянні можна змяніць, націснуўшы на іх. Адзначце не больш за трох для адлюстравання ў кампактным апавяшчэнні + Не ўдалося распазнаць URL-адрас. Адкрыць у іншай праграме\? + Апавяшченне плэера + Апавяшчэнні + Новыя трансляцыі + Апавяшчэнні пра новыя трансляцыі ў падпісках + Апісанне + Падобныя матэрыялы + Ніхто не праглядае + аднаўленне + + %s глядач + %s глядача + %s глядачоў + %s глядачоў + + Падпіскі не выбраны + Апошняе абнаўленне: %s + Паказаць прагледжаныя матэрыялы + Схаваць прагледжаныя матэрыялы + Аўтаматычна (тэма прылады) + Выберыце ўлюбёную начную тэму - %s + Дазвол вылучэння тэксту ў апісанні + Ніжэй вы можаце абраць улюбёную начную тэму + Гэта опцыя даступна толькі тады, калі %s будзе выбранай тэмаю + Загрузка пачалась + Апавяшчэнні адключаныя + Рэжым планшета + Адключыць + Няма аўдыётрансляцый даступных для знешніх плэераў + Апавяшчаць + Няма даступных відэатрансляцый для знешніх плэераў + Выбраная трансляцыя не падтрымліваецца знешнімі плэерамі + Выберыце якасць для знешніх плэераў + Невядомая якасць + Невядомы фармат + Паказаць наступны матэрыял + Схаваць наступныя матэрыялы + Сартаваць + З-за абмежаванняў ExoPlayer працягласць пошуку была ўсталявана на %d сякундаў + Раздзелы + Пазначыць прагледжаным + Адкрыць з дапамогай + Начная тэма + Адкрыць вэб-сайт + Цяпер Вы можаце вылучаць тэкст у апісанні. Звярніце ўвагу, што ў рэжыме вылучэння старонка можа мігацець, а спасылкі могуць быць недаступныя для націскання. + Запусціць галоўны прайгравальнік у поўнаэкранным рэжыме + Паказаць дэталі канала + Нізкая якасць (менш) + Апавяшчэнне пра відэахэшуванне + Памер інтэрвалу загрузкі прайгравання + Паказаць апісанне + Каментары адключаны + + %s слухач + %s слухача + %s слухачоў + %s слухачоў + + + %d сякунда + %d сякунды + %d сякундаў + %d сякундаў + + + %d гадзіна + %d гадзіны + %d гадзін + %d гадзін + + + %d дзень + %d дня + %d дзён + %d дзён + + Ачысціць гісторыю загрузак + Мова зменіцца пасля перазапуску праграмы + Ніхто не слухае + Уключыць + Апавяшчэнні пра ход відэахэшування + Стварыць паведамленне пра памылку + Выберыце падпіскі + Імпарт ці экспарт падпісак з 3-кропкавага меню + Забарона вылучэння тэксту ў апісанні + Хуткі рэжым + Калі ў Вас узніклі праблемы з выкарыстаннем праграмы, абавязкова азнаёмцеся з адказамі на пашыраныя пытанні! + Адключыць тунэляванне медыя + Прагляд мініяцюры над паўзунком часу + Высокая якасць (больш) + Не паказваць + Вы выкарыстоўваеце апошнюю версію NewPipe + Немажліва аднавіць гэту загрузку + + Выдалена %1$s зазагрузка + Выдалена %1$s зазагрузкі + Выдалена %1$s зазагрузак + Выдалена %1$s зазагрузак + + Выдаліць усе загружаныя файлы з дыска\? + + %d хвіліна + %d хвіліны + %d хвілінаў + %d хвілінаў + + Змяніць памер інтэрвалу загрузкі (зараз %s). Меншае значэнне можа паскорыць пачатковую загрузку відэа. Змены патрабуюць перазапуск плэера + Выключыце, каб схаваць апісанне відэа і дадатковую інфармацыю + \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 9696b8d11..c13e8ddb3 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -67,7 +67,7 @@ Co se stalo: Nahlásit Omlouváme se, tohle se nemělo stát. - Nahlásit tuto chybu přes e-mail + Nahlásit přes e-mail Omlouváme se, něco se pokazilo. Aplikace/UI spadlo Nepodařilo se nastavit menu stahování @@ -115,7 +115,7 @@ Pokračovat v přehrávání po přerušení (např. hovor) Přehrávač Chování - Historie a mezipamět + Historie a mezipaměť Přehrávání v okně Vypnuto Vyčistit @@ -163,7 +163,7 @@ Podílet se Historie Historie - Zobrazit tip „Podržet pro vložení do fronty“ + Zobrazit tip „Podržte pro zařazení do fronty“ Zobrazit tip po klepnutí na pozadí nebo na vyskakovací tlačítko v „Podrobnostech“ videa Přehrát vše Tento stream nelze přehrát @@ -183,7 +183,7 @@ Odebrat Podrobnosti Nastavení zvuku - Podrž pro zařazení do fronty + Podržte pro zařazení do fronty [Neznámý] Začít přehrávat na pozadí Začít přehrávat v pop-upu @@ -219,7 +219,7 @@ Získávám informace… Načítání požadovaného obsahu Stáhnout soubor streamu - Ukázat informace + Zobrazit informace Uložené playlisty Přidat do Táhnout pro přeskupení @@ -252,10 +252,10 @@ Použít rychlé nepřesné hledání Nepřesné hledání umožní přehrávači posouvat se rychleji, ale se sníženou přesností. Posouvání po 5, 15 nebo 25 vteřinách s tímto nefunguje Načítat náhledy - Vypnout, aby se zabránilo načítání náhledů a tím se ušetřily data a používání paměti. Změna tohoto nastavení vyčistí mezipamět obrázků v paměti i na disku + Vypnutím zabráníte načítání miniatur, ukládání dat a spotřebě paměti. Změny vymažou mezipaměť obrázků v paměti i na disku Mezipaměť obrázků vymazána Vymazat metadata v mezipaměti - Odebrat všechna data uložená v mezipaměti + Odstranit všechna data webových stránek v mezipaměti Mezipaměť metadat vymazána Další stream automaticky vložit do fronty Pokračovat konečnou (neopakující se) frontu playbacku připojením souvisejícího streamu @@ -312,7 +312,7 @@ Historie vyhledávání smazána Jedna položka smazána. NewPipe je svobodný software s copyleft licencí: Můžete jej libovolně používat, studovat, sdílet a vylepšovat. Konkrétně jej můžete šířit a/nebo upravovat za podmínek Obecné veřejné licence GNU (GNU GPL) vydané nadací Free Software Foundation, a to buď za podmínek Licence verze 3 nebo (dle vaší volby) jakékoli pozdější verze. - kanály + Kanály Playlisty Stopy Uživatelé @@ -524,7 +524,7 @@ 100+ videí Umělci Alba - Písně + Skladby Toto video má věkové omezení. \n \nPokud jej chcete vidět, povolte „%1$s“ v nastavení. @@ -540,7 +540,7 @@ Vytvořil %s Ikona kanálu Strana playlistů - Ukázat jen neseskupené objednávky + Zobrazit jen neseskupené odběry Zatím žádné záložky playlistů Vybrat playlist Prosím, ověřte, zda chyba již existuje. Pokud založíte duplikovaný tiket, obíráte nás o čas, který bychom mohli věnovat řešení skutečných chyb. @@ -552,7 +552,7 @@ Automaticky zahájit přehrávání — %s Přehrát frontu Nelze rozpoznat zadané URL. Otevřít pomocí jiné aplikace\? - Auto-fronta + Automatické přehravání Fronta aktivního přehrávače bude smazána Při přechodu z jednoho přehrávače do druhého může dojít k smazání fronty Žádat potvrzení před vyklizením fronty @@ -569,7 +569,7 @@ První akční tlačítko Oříznout miniaturu videa zobrazenou v oznámení z poměru stran 16:9 na 1:1 Oříznout poměr stran miniatury na 1:1 - Ukázat memory leaks + Zobrazit úniky paměti Zařazeno do fronty Zařadit do fronty Vymazat cookies, které NewPipe uloží, po vyřešení reCAPTCHA @@ -645,7 +645,7 @@ Vypnuto Zapnuto Režim tabletu - Ukázat přehrané položky + Zobrazit zhlédnuté položky Nezobrazovat Nízká kvalita (menší) Vysoká kvalita (větší) @@ -663,8 +663,8 @@ %s stahování dokončena %s stahováních dokončeno - Ukázat zabarvené stužky Picasso na obrázcích k indikaci zdroje: červená indikuje síť, modrá disk a zelená paměť - Ukázat indikátory obrázků + Zobrazit barevné pásky Picasso na obrázcích označujících jejich zdroj: červená pro síť, modrá pro disk a zelená pro paměť + Zobrazit 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ě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 @@ -688,7 +688,7 @@ Pro tuto akci nebyl nalezen žádný vhodný správce souborů. \nNainstalujte správce souborů nebo zkuste vypnout \'%s\' v nastavení stahování Ukáže volbu pro zřícení během používání přehrávače - Ukázat krátké oznámení o chybě + Zobrazit krátké oznámení o chybě Připnutý komentář Shodit přehrávač Změnit interval načítání (aktuálně %s). Menší hodnota může zrychlit počáteční načítání videa. Změna vyžaduje restart přehrávače @@ -699,7 +699,7 @@ Oznámit o nových streamech od vašich odběrů Frekvence kontroly Jakákoli síť - Nutné síťové připojení + Požadované síťové připojení Smazat všechny stažené soubory z disku\? Objednali jste si nyní tento kanál Všechny přepnout @@ -744,4 +744,6 @@ Kopírování do schránky se nezdařilo Zašedlé playlisty již obsahují tuto položku. Duplikát přidán %dkrát + Ignorovat události hardwarových tlačítek médií + Užitečné například v případě, že používáte sluchátka s rozbitými fyzickými tlačítky \ 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 ee1bc989f..6d643f1b9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -49,7 +49,7 @@ Inhalt Altersbeschränkte Inhalte anzeigen Konnte Downloadmenü nicht einrichten - Fehler via E-Mail melden + Per E-Mail melden Formatierten Fehlerbericht kopieren Über GitHub melden Melden @@ -75,7 +75,7 @@ Mrd. Dateiname Fehler - Bitte warten … + Bitte warten … In Zwischenablage kopiert Bitte gib später in den Einstellungen einen Downloadordner an Starten @@ -136,7 +136,7 @@ Verlauf Abonnement konnte nicht geändert werden Abonnement konnte nicht aktualisiert werden - Nach Unterbrechungen (z.B. Telefonaten) Wiedergabe fortsetzen + Nach Unterbrechungen (z. B. Telefonaten) Wiedergabe fortsetzen NewPipe-Benachrichtigung Benachrichtigungen für den NewPipe-Player Verhalten @@ -295,7 +295,7 @@ \n2. Gehe zu dieser URL: %1$s \n3. Melde dich an, falls du dazu aufgefordert wirst \n4. Kopiere die Profil-URL, zu der du weitergeleitet wurdest. - yourID, soundcloud.com/yourid + deineID, soundcloud.com/deineid Keine Streams zum Download verfügbar Bevorzugte „Öffnen“-Aktion Standardaktion beim Öffnen von Inhalten — %s @@ -572,7 +572,7 @@ Lösche Cookies, die NewPipe speichert, wenn du ein reCAPTCHA löst reCAPTCHA-Cookies wurden gelöscht reCAPTCHA-Cookies löschen - Inhalte mit Altersbegrenzung (z. B. ab 18) anzeigen, die für Kinder möglicherweise ungeeignet sind + Für Kinder möglicherweise ungeeignete Inhalte anzeigen (bspw. ab 18) 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 @@ -731,4 +731,6 @@ Karte Duplikat %d mal hinzugefügt Die ausgegrauten Wiedergabelisten enthalten dieses Element bereits. + Nützlich, wenn z. B. ein Headset mit defekten physischen Tasten verwendet wird + Ereignisse der Hardware-Medientasten ignorieren \ 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 76ebbc070..1ba8811a6 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -165,7 +165,7 @@ Προέκυψε ένα σφάλμα: %1$s Δεν υπάρχουν διαθέσιμες ροές για λήψη Λυπούμαστε, αυτό δεν έπρεπε να έχει συμβεί. - Αναφορά αυτού του σφάλματος μέσω ηλεκτρονικού ταχυδρομείου + Αναφορά μέσω ηλεκτρονικού ταχυδρομείου Συγγνώμη, κάτι πήγε στραβά. Τι:\\nΑίτημα:\\nΓλώσσα περιεχομένου:\\nΧώρα περιεχομένου:\\nΓλώσσα εφαρμογής:\\nΥπηρεσία:\\nΏρα GMT:\\nΠακέτο:\\nΈκδοση:\\nΈκδοση λειτουργικού συστήματος: Κανένα αποτέλεσμα @@ -731,4 +731,6 @@ Κάρτα Οι λίστες αναπαραγωγής που είναι γκριζαρισμένες περιέχουν ήδη αυτό το στοιχείο. Προστέθηκε διπλότυπο %d φορά(ες) + Αγνοήστε τα συμβάντα κουμπιών πολυμέσων υλικού + Χρήσιμο, για παράδειγμα, εάν χρησιμοποιείτε ακουστικά με χαλασμένα φυσικά κουμπιά \ 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 21dd5f9bb..b99af00e1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -55,7 +55,7 @@ Informe de error No se pudo configurar el menú de descarga Lo siento, esto no debería haber ocurrido. - Informar de este error vía correo electrónico + Informar por correo electrónico Lo siento, algo salió mal. Informar Información: @@ -747,4 +747,6 @@ Tarjeta Duplicado añadido %d vez/veces Las listas de reproducción que están en gris ya contienen este elemento. + Útil, por ejemplo, si está utilizando un auricular con botones físicos rotos + Ignorar eventos para botones multimedia de hardware \ 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 17d0981de..7c4398007 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -139,7 +139,7 @@ Ilmnes viga: %1$s Allalaaditavaid videovooge pole Vabandust, seda poleks pidanud juhtuma. - Teata sellest veast e-posti kaudu + Teata e-posti teel Vabandust, midagi läks valesti. Teata Info: @@ -731,4 +731,6 @@ Kaart Hallina kuvatud esitusloendid juba sisaldavad seda kirjet. Topeltkirje lisatud %d kord(a) + Kasulik näiteks kui olukorras kui kõrvaklappide nupud on katki + Eira nutiseadmes asuvate või seotud seadmete meedianuppude vajutusi \ 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 270b94e67..c6358ae26 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -69,7 +69,7 @@ לא הייתה אפשרות להכין את תפריט ההורדה היישומון או מנשק המשתמש קרסו זה לא אמור היה לקרות, עמך הסליחה. - דיווח על השגיאה דרך דוא״ל + דיווח דרך דוא״ל משהו השתבש, עמך הסליחה. דיווח מידע: @@ -757,4 +757,6 @@ ההעתקה ללוח הגזירים נכשלה רשימות הנגינה שבוטלו וסומנו באפור כבר מכילות את הפריט הזה. הכפיל נוסף %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 056783cd8..f2f084f86 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -1,7 +1,7 @@ %1$s पे प्रकाशित हुआ - स्ट्रीमिंग के लिए चालक नहीं मिला। क्या आप VLC इंस्टॉल करना चाहेंगे\? + स्ट्रीमिंग के लिए चालक नहीं मिला। क्या आप वीएलसी इंस्टॉल करना चाहेंगे\? स्थापित करें ब्राउज़र में खोलें पॉपअप मोड में खोलें @@ -10,7 +10,7 @@ खोजें सेटिंग्स सब्सक्राइब करें - सब्सक्राइब है + सब्सक्राइड है चैनल अनसब्सक्राईब हुआ सब्सक्रिप्शनस बैकग्राउंड @@ -46,7 +46,7 @@ कोई दूसरा ध्वनि चालक उपयोग करें सब्सक्रिप्शन बदली नहीं जा सकी सब्सक्रिप्शन अपडेट नहीं किया जा सका - देखें कि क्या नया है + क्या नया है वीडियो डाउनलोड का फ़ोल्डर डाउनलोड की गई वीडियो फ़ाइलें यहां संग्रहीत हैं वीडियो फ़ाइलों के लिए डाउनलोड फ़ोल्डर चुनें @@ -56,10 +56,10 @@ प्रथम स्थापित गुणवत्ता स्तर पॉपअप का प्रथम स्थापित गुणवत्ता स्तर उच्च गुणवत्ता स्तर दिखाएं - केवल कुछ ही यंत्र 2K/4K मे वीडियो चला सकते हैं - Kodi मे चलाए - Kore ऐप नहीं मिली, इसे स्थापित करें\? - \"Kodi मे चलाएं\" वाला विकल्प दिखाएँ + केवल कुछ ही डिवाईस 2के/4के मे वीडियो चला सकते हैं + कोडी मे चलाए + कोरे ऐप नहीं मिला, इसे स्थापित करें\? + \"कोडी मे चलाएं\" वाला विकल्प दिखाएँ कोडी मीडिया सेंटर से वीडियो चलने के लिए विकल्प प्रदर्शित करें प्रथम स्थापित ध्वनि फॉर्मेट प्रथम स्थापित वीडियो फॉर्मेट @@ -110,8 +110,8 @@ कभी ठीक न होने वाले वीडियो प्लेयर की त्रुटी आ रही है वीडियो प्लेयर त्रुटी से ठीक हो रहा है खेद है की, ऐसा होना नहीं चाहिए था. - त्रुटी की रिपोर्ट को ईमेल से भेजे - माफ़ करे , कुछ त्रुटियाँ हो रही है + रिपोर्ट को ईमेल से भेजे + माफ़ करे, कुछ त्रुटि हो गई। रिपोर्ट करें जानकारी: क्या हुआ: @@ -133,7 +133,7 @@ कोई सब्सक्राइबर नहीं है %s सब्सक्राइबर - %s सब्सक्राइबर + %s सब्सक्राइबर्स %s दर्शक @@ -141,7 +141,7 @@ %s वीडियो - %s वीडियो + %s वीडियोस् शुरू रोकें @@ -184,7 +184,7 @@ जोड़ने के लिए पकड़ें रहे पृष्टभूमि में चलाना शुरू करे पॉपअप में चलाना शुरू करे - स्ट्रीमिंग करने के लिए कोई चालक उपलब्ध नहीं है (आप इसे चलाने के लिए VLC चालक स्थापित कर सकते हैं)। + स्ट्रीमिंग करने के लिए कोई चालक उपलब्ध नहीं है (आप इसे चलाने के लिए वीएलसी चालक स्थापित कर सकते हैं)। स्ट्रीम फाइल डाउनलोड करें जानकारी दिखाएं बुकमार्क की गई प्लेलिस्टें @@ -247,7 +247,7 @@ Out-of-Lifecycle त्रुटियों की रिपोर्ट करें थंमनेल लोड करें तेज और अनिश्चित तलाश का प्रयोग करें - अनिश्चित खोज से प्लेयर में कम सटीकता से लेकिन तेजी से वीडियो पोजीशन्स की तलाश कर सकता हैं। 5,15 या 25 सेकंड की तलाश में यह काम नहीं करता + अनिश्चित खोज से प्लेयर में कम सटीकता से लेकिन तेजी से वीडियो पोजीशन्स की तलाश कर सकता हैं। 5, 15 या 25 सेकंड की तलाश में यह काम नहीं करता थंमनेल लोड करने, डेटा और मेमोरी उपयोग को रोकने के लिए बंद करें। इन-मेमोरी और ऑन-डिस्क छवि कैश दोनों को बदलता है चित्र कैश मिटाया गया कैश मेटाडेटा मिटाएं @@ -295,14 +295,14 @@ सब्सक्रिप्शन निर्यात नही कर सके गूगल टेकआउट से यूट्यूब सदस्यता आयात करें: \n -\n1. इस URL पर जाएं:%1$s +\n1. इस यूआरएल पर जाएं: %1$s \n2. पूछे जाने पर लॉग इन करें -\n3. \"सभी डेटा शामिल करें\" पर क्लिक करें, फिर \"सभी को अचयनित करें\" पर, फिर केवल \"सदस्यताएँ\" चुनें और \"ओके\" पर क्लिक करें +\n3. \"सभी डाटा शामिल करें\" पर क्लिक करें, फिर \"सभी को अचयनित करें\" पर, फिर केवल \"सदस्यताएँ\" चुनें और \" ठीक है\" पर क्लिक करें \n4. \"अगला चरण\" पर क्लिक करें और फिर \"निर्यात बनाएं\" \n5. प्रकट होने के बाद \"डाउनलोड\" बटन पर क्लिक करें \n6. नीचे आयात फ़ाइल पर क्लिक करें और डाउनलोड की गई .zip फ़ाइल चुनें -\n7. [यदि .zip आयात विफल हो जाता है] .csv फ़ाइल निकालें (आमतौर पर \"YouTube और YouTube Music/subscriptions/subscriptions.csv\" के अंतर्गत), नीचे आयात फ़ाइल पर क्लिक करें और निकाली गई csv फ़ाइल चुनें - आपका आई डी, soundcloud.com/(आपका आई डी) +\n7. [यदि .zip आयात विफल हो जाता है] .csv फ़ाइल निकालें (आमतौर पर \"यूट्यूब और यूट्यूब म्युज़िक/सब्सक्रिपशन/subscriptions.csv\" के अंतर्गत), नीचे आयात फ़ाइल पर क्लिक करें और निकाली गई सीएसवी फ़ाइल चुनें + आपका आईडी, soundcloud.com/(आपका आईडी) ध्यान रखे, यह तरीका नेटवर्क साधनो के लिए मंहगा हो सकता है। \n \nक्या आप आगे बढ़ना चाहते है? @@ -312,16 +312,16 @@ अनहुक (बिगाड़ सकता है) खामोशी के समय तेज़ी से आगे बढ़े कदम - रिसेट + रीसेट स्वीकारे अस्वीकार करे असीमित - मोबाइल डेटा उपयोग करते समय रेसॉल्युसेन को सिमित करे + मोबाइल डेटा उपयोग करते समय रिजॉल्युशन को सिमित करे ऐप बदलते समय उसे मिनिमाइज करे मुख्य वीडियो चालक से दूसरी ऐप पर जाने पर — %s कोई नही बैकग्राउंड प्लेयर में बदले - पॉप अप प्लेयर में बदले + पॉपअप प्लेयर में बदले न्यूपाइप एक काॅपीलेफ़्ट फ़्री साॅफ़्टवेर है: इसे आप अपनी इच्छा के अनुसार इस्तेमाल, जाँच, बाँट तथा और बेहतर बना सकते है। खास तौर पर आप इसे फ़्री साॅफ़्टवेर फ़ाउंडेशन के द्वारा जारी जीएनयू जनरल पब्लिक लाइसेंस के तीसरे या उसके बाद आने वाले कोई भी वर्णन के शर्तों के मुताबिक फिर से बाँट या बदल सकते हैं। अनसब्सक्राईब करें टैब चुने @@ -361,11 +361,11 @@ सर्वर डेटा नहीं भेजता है नहीं मिला प्रक्रिया के बाद का कार्य विफल रहा - रुको + रोके अधिकतम पुनर्प्रयास डाउनलोड रद्द करने से पहले प्रयासों की अधिकतम संख्या मीटर्ड नेटवर्क पर रोके - मोबाइल डाटा का इस्तेमाल करते समय उपयोगी है, परन्तु कुछ डौन्लोडस रोके नहीं जा सकते है + मोबाइल डाटा का इस्तेमाल करते समय उपयोगी है, परंतु कुछ डाउन्लोड रोके नहीं जा सकते है घटनायें सम्मेलनों टिप्पणियां दिखाएं @@ -382,10 +382,10 @@ प्लेबैक स्थान मिटा दिए गए फाइल की जगह बदली गयी या फिर फाइल मिटा दी गयी इस नाम की कोई फ़ाइल पहले से मौजूद है - इस नाम की एक डाउनलोड की गई फ़ाइल पहले से मौजूद है - फाइल के ऊपर नहीं लिख सकते + इस नाम की डाउनलोड फ़ाइल पहले से मौजूद है + फाइल को ओवरराइट नहीं कर सकते इस नाम का एक डाउनलोड बाकी है - फ़ाइल पर कार्य करते समय NewPipe बंद किया गया + फ़ाइल पर कार्य करते समय न्यूपाइप बंद किया गया डिवाइस पर जगह समाप्त प्रगति खो गई, क्योंकि फ़ाइल मिटा दी गई थी कनेक्शन का समय समाप्त @@ -396,28 +396,28 @@ डाउनलोड रोकें डाउनलोड कहाँ करने के लिए पूछे आपको हर डाउनलोड का स्थान पूछा जाएगा -\nयदि आप बाहरी एसडी कार्ड में डाउनलोड करना चाहते हैं तो सिस्टम फोल्डर पिकर (SAF) को सक्षम करें +\nयदि आप बाहरी एसडी कार्ड में डाउनलोड करना चाहते हैं तो सिस्टम फोल्डर पिकर (एसएएफ) को सक्षम करें सिस्टम फोल्डर पिकर (एसएएफ) का प्रयोग करें प्लेबैक स्थानों को मिटाये सारे प्लेबैक स्थानों को मिटाये सारे प्लेबैक स्थानों को मिटाये\? फ्रेगमेंट या एक्टिविटी लाइफसाइकिल के बाद Rx सन्देश ना पहुँचाया जा सके तोह ज़रूर कोशिश करे - SoundCloud प्रोफाइल निर्यात करने के लिए आईडी या युआरएल दीजिये: + साउंडक्लाउड प्रोफाइल निर्यात करने के लिए आईडी या युआरएल दीजिये: \n -\n1. अपने वेब ब्राउज़र मैं \"डेस्कटॉप मोड\" चालू करे (वेबसाइट मोबाइल उपकरणों के लिए उपलब्ध नहीं है) +\n1. अपने वेब ब्राउज़र में \"डेस्कटॉप मोड\" चालू करे (वेबसाइट मोबाइल उपकरणों के लिए उपलब्ध नहीं है) \n2. इस युआरएल को खोले: %1$s -\n3. लोग इन करे +\n3. लॉग इन करे \n4. आप जिस प्रोफाइल युआरएल पे भेजे जाते है उसे कॉपी करे। - यूरोप के जनरल डाटा प्रोटेक्शन रेगुलेशन (जी डी पी आर) का पालन करने के लिए, हम आपका ध्यान न्यूपाइप की नयी प्राइवेसी पालिसी पी डालना चाहते है।इसे बारीकी से पढ़िए। -\nआपको अगर हमें किसी मुसीबत का सन्देश भेजना हो तो इसे स्वीकार करे। + यूरोप के जेनेरल डाटा प्रोटेक्शन रेगुलेशन (जीडीपीआर) का पालन करने के लिए, हम आपका ध्यान न्यूपाइप की नयी प्राइवेसी पालिसी पे डालना चाहते है। इसे बारीकी से पढ़िए। +\nआपको अगर हमें कोई त्रुटि रिपोर्ट भेजना हो तो इसे स्वीकार करे। सामान्य टैब्स का इस्तेमाल, सहेजे टैब्स को पढ़ने में रूकावट - जब इस ऐप के लिए अपडेट उपलब्ध हो, अधिसूचना दिखाई जाये + जब इस ऐप के लिए अपडेट उपलब्ध हो, तब अधिसूचना दिखाई जाये सूचि देखने वाला ढंग ग्रिड ऑटो - मुसीबत दिखाए + त्रुटि दिखाए सर्वर मल्टी थ्रेडेड डाउनलोड स्वीकार नहीं करता, पुनः कोशिश करे @string/msg_threads = 1 के साथ - स्टोरेज एक्सेस फ्रेमवर्क (एस ऐ ऍफ़) आपको एस डी कार्ड पर डाउनलोड करने देता है + \'स्टोरेज एक्सेस फ्रेमवर्क\' आपको बाहरी एसडी कार्ड पर डाउनलोड करने देता है सेवा चुने, वर्तमान चुनाव : सामान्य कीओस्क कोई नहीं देख रहा है @@ -428,23 +428,23 @@ कोई नहीं सुन रहा है %s श्रोता - %s श्रोता + %s श्रोताए ऐप के पुनः आरंभ होने के बाद भाषा बदल जाएगी तेज मोड सक्षम करें तेज मोड अक्षम करें क्या आपको लगता है कि फीड लोडिंग बहुत धीमी है\? यदि ऐसा है, तो तेज़ लोडिंग को सक्षम करने का प्रयास करें (आप इसे सेटिंग्स में या नीचे दिए गए बटन को दबाकर बदल सकते हैं)। \n -\nNewPipe दो फीड लोडिंग रणनीति प्रदान करता है: +\nन्यूपाइप दो फीड लोडिंग रणनीति प्रदान करता है: \n• संपूर्ण सदस्यता चैनल प्राप्त करना, जो धीमा है लेकिन पूरा होता है। \n• एक समर्पित सेवा के समापन बिंदु का उपयोग करना, जो तेज़ है लेकिन आमतौर पर पूरा नहीं होता है। \n \nदोनों के बीच अंतर यह है कि तेज वाली रणनीति में आमतौर पर कुछ जानकारी का अभाव होता है, जैसे कि आइटम की अवधि या प्रकार (लाइव वीडियो और सामान्य वीडियो के बीच अंतर पता नहीं लगा सकते हैं) और ऐसा भी हो सकता है कि ये कम आइटम दिखाए। \n -\nYouTube उस सेवा का एक उदाहरण है जो RSS फ़ीड के साथ तेज़ विधि प्रदान करता है। +\nयूट्यूब ऐसी सेवा का एक उदाहरण है जो आरएसएस फ़ीड के साथ ये तेज़ विधि प्रदान करता है। \n \nतो आखिर में चुनाव आपकी पसंद पर है: गति या फिर सटीक जानकारी। - यह सामग्री फिलहाल NewPipe सपोर्ट नहीं करता है। + यह सामग्री फिलहाल न्यूपाइप सपोर्ट नहीं करता है। \n \nइसे आशा से भविष्य के संस्करणों में सपोर्ट किया जायेगा। चैनल का अवतार थंमनेल @@ -471,27 +471,27 @@ अपने आप कतार में जोड़े कतार को मिटाने से पहले सत्यापन के लिए पूछें तलाश अवधि फास्ट-फ़ॉरवर्ड /- रिवाइंड करे - एंड्रॉइड को थंमनेल में मुख्य रंग के अनुसार अधिसूचना रंग को अनुकूलित करें (ध्यान दें कि यह सभी उपकरणों पर उपलब्ध नहीं है) - सूचनापत्र को रंगीन करें + एंड्रॉइड को थम्बनेल में मुख्य रंग के अनुसार अधिसूचना रंग को अनुकूलित करने की अनुमति दे (ध्यान दें कि यह सभी उपकरणों पर उपलब्ध नहीं है) + अभिसूचना को रंगीन करें कुछ नहीं बफरिंग - Shuffle करे + शफल करे दोहराएं - आप संछिप्त सूचनापत्र में दिखाए जाने वाले विकल्प में से अधिकतम 3 को चुन सकते है ! + आप संछिप्त अभिसूचना में दिखाए जाने वाले विकल्प में से अधिकतम 3 को चुन सकते है ! नीचे दी गई प्रत्येक अधिसूचना क्रिया को उस पर टैप करके संपादित करें। दाईं ओर चेकबॉक्स का उपयोग करके उनमें से अधिकतम तीन का चयन करें जिन्हें कॉम्पैक्ट अधिसूचना में दिखाया जाना है पांचवा एक्शन बटन चतुर्थी एक्शन बटन तृतीय एक्शन बटन द्वितीय एक्शन बटन प्रथम एक्शन बटन - नोटिफिकेशन में दिखाए गए वीडियो थंमनेल को 16: 9 के बजाय 1: 1 के अनुपात में दिखाए - थंमनेल को 1:1 के अनुपात में दिखाएं + नोटिफिकेशन में दिखाए गए वीडियो थम्बनेल को 16:9 के बजाय 1:1 के अनुपात में दिखाए + थम्बनेल को 1:1 के अनुपात में दिखाएं %d घंटा %d घंटे - %d सेकेड + %d सेकेंड %d सेकंड्स देखे गए वीडियो हटायें\? @@ -600,7 +600,7 @@ फ़ीड अपडेट चरणसीमा फ़ीड लोड करने में गड़बड़ी \'%s\' के लिए फ़ीड लोड नहीं कर सका। - रीसैंट + हाल ही के विवरण में पाठ का चयन सक्षम करें गोपनीयता अब आप विवरण के अंदर पाठ का चयन कर सकते हैं। ध्यान दें कि पृष्ठ झिलमिला सकता है और चयन मोड में लिंक क्लिक करने योग्य नहीं हो सकते हैं। @@ -609,13 +609,13 @@ होसट अधिसूचनाएं अक्षम हैं गैर-सूचीबद्ध - संयुक्त टॉगल करें - सूचना पायें + सबको टॉगल करें + अधिसूचना पायें , नए संस्करणों के लिए मैन्युअल रूप से जांचें - एकसोप्लेयर की कमी के कारण खोज की अवधि %d सेकंड पर सेट की गई + एग्ज़ोप्लेयर के कमी के कारण खोज की अवधि %d सेकंड पर सेट की गई खाता समाप्त किया गया - स्ट्रीम जो अभी तक डाउनलोडर द्वारा समर्थित नहीं हैं, नहीं दिखाई जाती हैं + जो स्ट्रीम अभी तक डाउनलोडर द्वारा समर्थित नहीं हैं, वो नहीं दिखाई जाती बाहरी प्लेयरस के लिए क्वालिटी का चयन करें अज्ञात प्रारूप अज्ञात क्वालिटी @@ -641,36 +641,36 @@ %d दिन - %d दिन + %d दिनो %d चयनित - %d चयनित + %d चयनित हुए - एक्सोप्लेयर डिफ़ॉल्ट + एग्ज़ोप्लेयर डिफ़ॉल्ट प्लेबैक लोड अंतराल आकार समूह का नाम नहीं सब्सक्रिप्शनस चुनें क्या आप इस समूह को हटाना चाहते हैं\? नया फ़ीड - भविष्य की आइटम दिखाएं + भविष्य आइटम दिखाएं नई फ़ीड आइटम फ़ीड संसाधित हो रही है … वेबसाइट खोलें उपलब्ध होने पर समर्पित फ़ीड से प्राप्त करें भाषा - आन + ऑन स्वतः बने (कोई अपलोडर नहीं मिला) चैनल समूह देखे गए आइटम छुपाएं - भविष्य की आइटम छुपाएं - बार बार पूछे जाने वाले प्रश्न + भविष्य आइटम छुपाएं + कई बार पूछे प्रश्न वेबसाइट पर देखें आइटम हटाने के लिए स्वाइप करें मीडिया टनलिंग अक्षम करें \"क्रैश द प्लेयर\" दिखाएं - लोड नहीं हुआ: %d + लोड नहीं हुआ: %d %s इसका कारण प्रदान करता है: टैग लाइसेंस @@ -692,9 +692,9 @@ \nक्या यक़ीनन आप ऐसा चाह्ते हैं\? इसे असंपादित नहीं किया जा सकेगा! %d मिनट - %d मिनट + %d मिनट्स - अंतिम अपडेट फ़ीड: %s + फीड अंतिम अपडेट: %s कोई सदस्यता चयनित नहीं है केवल असमूहीकृत सब्सक्रिप्शनस दिखाएं फ़ास्ट फ़ीड मोड इस पर अधिक जानकारी प्रदान नहीं करता है। @@ -710,7 +710,7 @@ पिन की हुई टिप्पणी निर्माता द्वारा दिया दिल टैबलेट मोड - आपने इस चैनल को अब सब्सक्राइब किया है + आपने इस चैनल को अभी सब्सक्राइब किया है बाहरी प्लेयरस के लिए कोई वीडियो स्ट्रीम उपलब्ध नहीं है बाहरी प्लेयरस के लिए कोई ऑडियो स्ट्रीम उपलब्ध नहीं है कुछ सेवाओं में उपलब्ध, यह आमतौर पर बहुत तेज होता है लेकिन सीमित मात्रा में आइटम और अक्सर अधूरी जानकारी (जैसे कोई अवधि नहीं, आइटम प्रकार, कोई लाइव स्थिति नहीं) लौटा सकता है @@ -718,7 +718,7 @@ \nकृपया फ़ाइल प्रबंधक स्थापित करें या डाउनलोड सेटिंग में \'%s\' को अक्षम करने का प्रयास करें %1$s डाउनलोड हटाए गए - %1$s डाउनलोड हटाए गए + %1$s डाउनलोड्स हटाए गए क्रमबद्ध करें तेज मोड @@ -729,4 +729,6 @@ स्थायी थंमनेल अनसेट करें कार्ड क्लिपबोर्ड पर कॉपी करने में विफल + धुंधली की गई प्‍लेलिस्‍ट में पहले से ही यह आइटम है। + डुप्लीकेट जोड़ा गया %d बार \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index f1e426bc7..ca225f2f1 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -48,7 +48,7 @@ Konten tidak tersedia Tidak bisa menyiapkan menu unduh Maaf, hal tersebut seharusnya tidak terjadi. - Laporkan kesalahan via surel + Laporkan via surel Maaf, telah terjadi kesalahan. Lapor Info: @@ -718,4 +718,6 @@ Kartu Daftar putar yang bewarna abu-abu sudah berisi item ini. Duplikat ditambahkan %d kali + Berguna, misalnya, jika Anda menggunakan sebuah headset dengan tombol fisik yang rusak + Abaikan peristiwa tombol media perangkat keras \ 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 fefd8ef23..6a83d9fad 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -50,7 +50,7 @@ コンテンツ 年齢制限のあるコンテンツを表示 申し訳ありません。想定外のエラーが発生しました。 - 不具合をメールで報告 + メールで送る 申し訳ありません、不具合が発生しました。 報告 情報: @@ -712,9 +712,10 @@ アプリの使い方に困ったときは、よくある質問に答えていますので、ぜひご覧ください! %sがテーマに選択された場合のみ、この選択肢が利用可能です 高速モード - 3 点メニューから登録チャンネルをインポートまたはエクスポートします + 3点メニューから登録チャンネルの読み込みまたは書き出しが可能 カード クリップボードへのコピーに失敗しました 灰色で表示されているプレイリストには、すでにこのアイテムが含まれています。 %d 回重複追加されました + 固定サムネイルの設定を解除 \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 3e6dc1421..8e4d024aa 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -655,7 +655,7 @@ 빠른 모드 활성화 %s에 의해 제작 채널의 아바타 썸네일 - + 챕터 최근 계정이 해지됨 %s은(는) 다음과 같은 이유를 제공: @@ -710,7 +710,7 @@ 정렬 빠른 모드 점 3개 메뉴에서 구독 가져오기 또는 내보내기 - 최신 버전의 NewPipe를 실행 중입니다. + 최신 버전의 NewPipe를 실행 중입니다 %s를 다운로드하려면 탭하세요. 영구 썸네일 설정 해제 이 옵션은 테마로 %s를 선택한 경우에만 사용할 수 있음 diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index a79c9ddae..ee2ba11a0 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -729,4 +729,6 @@ Kort Importer eller eksporter fra trepunktsmenyen Hurtigmodus + Spillelistene som er utgrået inneholder allerede dette elementet. + Duplikat lagt til %d gang(er) \ 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 5c43baee7..438fe4808 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -729,4 +729,6 @@ ਸਥਾਈ ਥੰਮਨੇਲ ਨੂੰ ਅਨਸੈੱਟ ਕਰੋ ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਕਾਰਡ + ਪਲੇਲਿਸਟਾਂ ਜੋ ਧੁੰਦਲੀਆਂ ਹੋ ਗਈਆਂ ਹਨ ਉਹਨਾਂ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਇਹ ਆਈਟਮ ਹੈ। + ਡੁਪਲੀਕੇਟ ਜੋੜਿਆ ਗਿਆ %d ਵਾਰ \ 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 bfdb9cb01..6ca815fb7 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -51,7 +51,7 @@ Treść niedostępna Nie udało się utworzyć menu pobierania Przepraszamy, to nie powinno mieć miejsca. - Zgłoś błąd przez e-mail + Zgłoś przez e-mail Niestety, coś poszło nie tak Zgłoś Informacje: @@ -752,4 +752,6 @@ Karta Wyszarzone playlisty zawierają już tę pozycję Dodano duplikat %d raz(y) + Przydatne, na przykład, jeśli używasz zestawu słuchawkowego z zepsutymi fizycznymi przyciskami + Ignoruj zdarzenia sprzętowego przycisku multimedialnego \ 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 f97420ff5..388673db6 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -21,7 +21,7 @@ Baixar Baixar Detalhes: - Relatar erro via email + Relatar por e-mail Relatório de erro Relatório Desculpe, algo deu errado. @@ -744,4 +744,6 @@ Falha ao copiar para a área de transferência Duplicata adicionada %d vez(es) As playlists em cinza já contêm este item. + Ignorar eventos de botão de mídia de hardware + Útil, por exemplo, se você estiver usando um fone de ouvido com botões físicos quebrados \ 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 d83c45662..749784f2a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -235,7 +235,7 @@ %s ouvintes Remover todo o histórico de pesquisas\? - Reportar erro por e-mail + Reportar por e-mail Escolher separador Utilizar gestos para controlar o volume do reprodutor Grelha @@ -731,4 +731,6 @@ Cartão As listas de reprodução acinzentadas já contêm este item. Duplicar adicionado %d vez(es) + Ignorar eventos com botões de hardware + Útil, por exemplo, se estiver a utilizar um auscultador com botões físicos defeitos \ 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 9cceefc2b..7830ad0b4 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -50,7 +50,7 @@ Mostrar conteúdo com restrição de idade Não foi possível configurar o menu de descargas Bolas, isto não deveria ter acontecido. - Reportar erro por e-mail + Reportar por e-mail Desculpe mas algo correu mal. Relatório Informação: @@ -744,4 +744,6 @@ Cartão As listas de reprodução acinzentadas já contêm este item. Duplicar adicionado %d vez(es) + Ignorar eventos com botões de hardware + Útil, por exemplo, se estiver a utilizar um auscultador com botões físicos defeitos \ 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 0091e4360..08f8f6a1f 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -742,4 +742,6 @@ Cartelă Nu s-a reușit copierea în clipboard Dezactivare miniatură permanentă + Listele de redare care colorate în gri conțin deja acest element. + Duplicat adăugat de %d ori \ 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 f593fdc61..c9e27f46d 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -68,7 +68,7 @@ Не удалось создать меню загрузки Приложение/UI завершило работу Никогда такого не было, и вот опять. - Отправить по e-mail + Отправить по электронной почте Извините, что-то пошло не так. Отчёт Информация: diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 188e6f59b..d46bd667a 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -44,9 +44,9 @@ Napaka Vseh sličic videov ni mogoče naložiti Ni mogoče odšifrirati podpisa naslova URL videa - Ni mogoče razčleniti spletišča. + Ni mogoče razčleniti spletišča Vsebina ni na voljo - Ni mogoče nastaviti menija za prejem datotek. + Ni mogoče nastaviti menija za prejem datotek Vsebina Pokaži starostno omejeno vsebino Do te napake naj ne bi prišlo. @@ -72,16 +72,16 @@ Prejemanje Podrobnosti Počakajte … - Kopirano v odložišče. + Kopirano v odložišče Izberite mapo za prejem V redu Prejemi Prejemi Poročilo o napaki - Program se je sesul! + Program se je sesul Izziv reCAPTCHA Zahtevan izziv reCAPTCHA - Predmet:\\nZahteva:\\nJezik vsebine:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS: + Predmet:\\nZahteva:\\nJezik vsebine:\\nDržava vsebine:\\nJezik aplikacije:\\nStoritev:\\nČas v GMT:\\nPaket:\\nRazličica:\\nRazličica OS: Črna Vse k @@ -144,7 +144,7 @@ Zgodovina in predpomnilnik Razveljavi Ni rezultatov iskanja - Tu ni ničesar! + Tu ni ničesar, razen čričkov Ni naročnikov %s naročnik @@ -255,7 +255,7 @@ Najbolj všečkan Dodano nedolgo nazaj Lokalno - Jezik se bo spremenil po ponovnem zagonu aplikacije. + Jezik bo spremenjen ob ponovnem zagonu aplikacije Ni mogoče naložiti komentarjev Ni veljavne ZIP datoteke Uvoženo @@ -274,7 +274,7 @@ Ni take mape Datoteka premaknjena ali izbrisana Prenašanje na zunanjo SD kartico ni mogoče. Resetiram lokacijo mape z prenosi\? - Vsa zgodovina gledanja izbrisana. + Zgodovina gledanja izbrisana Izbrišem vso zgodovino gledanja\? Izbriši zgodovino gledanja Izvozi zgodovino, naročnine, sezname predvajanj in nastavitve @@ -293,12 +293,12 @@ Izbriši shranjene metapodatke Predshramba za slike je bila izbrisana Prikaži komentarje - Izberi Zavihek + Izberi zavihek Odjava Predvajalnika pretoka ni mogoče najti (namestite lahko VLC program za predvajanje). Predvajalnik v ozadju Želite uvoziti tudi nastavite\? - Zgodovina brskanja izbrisana. + Zgodovina iskanja izbrisana Izbrišem vso zgodovino brskanja\? Izbriši zgodovino brskanja Izbriši piškotke, ki jih NewPipe shrani, ko rešite reCAPTCHA @@ -309,7 +309,7 @@ Predpomnjeni metapodatki so bili odstranjeni Prikaži meta informacije Onemogoči da se ustavi prikazovanje komentarjev - Izklopite, če želite preprečiti nalaganje sličic, s tem bo varčeval na podatkih in uporabi spomina. Spremembe bodo izbrisale predpomnilnik v spominu in na disku. + Izklopite, če želite preprečiti nalaganje sličic, s tem bo varčeval na podatkih in uporabi spomina. Spremembe bodo izbrisale predpomnilnik v spominu in na disku Dejavna vrsta bo zamenjana Preklop na drugi predvajanik lahko zamenja vašo čakalno vrsto Vprašaj za potrditev pred čiščenjem vrste @@ -328,7 +328,7 @@ Gumb za prvo dejanje 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. + Spremeni velikost besedila podnapisov in slog ozadja v predvajalniku. Zahteva ponovni zagon aplikacije, da učinkuje Podnapisi Samodejno ustvarjeno Prilagodi zaslonu @@ -400,7 +400,7 @@ Prišlo je do neobnovljive napake v predvajalniku Zunanja shramba ni na voljo Izbriše zgodovino ključnih besed za iskanje - Položaji predvajalnika so bili izbrisani. + Položaji predvajalnika so bili izbrisani Ali želite izbrisati vse položaje predvajalnika\? Izbriše vse položaje predvajalnika Izbriši položaje predvajalnika @@ -454,7 +454,7 @@ Brez omejitev Zavrni Korak - yourID, soundcloud.com/yourid + tvojID, soundcloud.com/tvojid Stran kiosk Kateri zavihki so prikazani na domači strani Rešiti diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 71dadfc6c..dbff70e8f 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -729,4 +729,6 @@ Inaktivera permanent miniatyrbild Det gick inte att kopiera till urklipp Kort + Dubblett tillagd %d gång(er) + Spellistor som är gråmarkerade innehåller redan det här objektet. \ 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 301b3db89..9449e05a5 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -51,7 +51,7 @@ İçerik kullanılamıyor Uygulama/kullanıcı arayüzü çöktü Üzgünüz, bu olmamalıydı. - Bu hatayı e-posta aracılığıyla bildir + E-posta ile bildir Üzgünüz, bir şeyler yanlış gitti. Bildir Bilgi: @@ -731,4 +731,6 @@ Panoya kopyalanamadı %d kez kopyası eklendi Gri oynatma listeleri halihazırda bu ögeyi içeriyor. + Donanımsal ortam düğmesi olaylarını yoksay + Örneğin, fiziksel düğmeleri bozuk bir kulaklık kullanıyorsanız kullanışlıdır \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 270ee0d8e..4c977dd4e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -47,7 +47,7 @@ Вміст недоступний Не вдалося налаштувати меню завантаження Перепрошуємо, цього не мало статися. - Надіслати звіт про помилки е-поштою + Надіслати звіт е-поштою Вибачте, щось пішло не так. Звіт Інформація: @@ -748,4 +748,6 @@ Не вдалося скопіювати до буфера обміну Дублікат додано %d раз(ів) У виділених сірим кольором добірках цей елемент уже є. + Ігнорувати події апаратних медіакнопок + Корисно, наприклад, якщо ви використовуєте гарнітуру зі зламаними фізичними кнопками \ 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 54cef6aa1..bb6b38d3e 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -45,7 +45,7 @@ Chọn các đề xuất để hiển thị khi tìm kiếm Tải về Hiện video \"Tiếp theo\" và \"Tương tự\" - URL không được hỗ trợ + URL không hỗ trợ Hiển thị Phát ở dưới nền Phát ở chế độ popup @@ -69,7 +69,7 @@ Ứng dụng / Giao diện người dùng bị lỗi Hmm, app đã xảy ra lỗi, lướt xuống để xem lỗi. Báo lỗi qua email - Xin lỗi, đã xảy ra sự cố. + Có gì đó không đúng lắm. Kiểm tra xem. Báo cáo Thông tin: Chuyện gì đã xảy ra: @@ -97,8 +97,8 @@ NewPipe đang tải xuống Chạm để biết chi tiết Đợi chút xíu nha… - Đã sao chép vào clipboard - Hãy chọn một thư mục để tải xuống trong phần cài đặt + Đã sao chép vào khay nhớ tạm + Hãy chọn một thư mục tải xuống trong phần cài đặt Chế độ popup cần quyền này \n để hoạt động, hãy bật trong phần cài đặt reCAPTCHA @@ -129,7 +129,7 @@ Hiện thông tin Đăng ký Danh sách phát được đánh dấu - Có gì mới + Video mới Thêm vào Sử dụng tìm kiếm nhanh không chính xác Tua không chính xác cho phép trình phát tua đến các vị trí nhanh hơn với độ chính xác bị giảm. Tua 5, 15 hay 25 giây không dùng được với chế độ này @@ -271,7 +271,7 @@ Xóa playlist này\? Đã tạo playlist Đã thêm vào playlist - Đã thay đổi hình thu nhỏ của playlist. + Đã thay đổi danh sách của playlist. Không có phụ đề Phù hợp Lấp đầy @@ -385,7 +385,7 @@ Hiện bình luận Tắt để ẩn bình luận Tự động phát - Không có bình luận + Không có bình luận nào Không thể tải bình luận Đóng Tiếp tục phát @@ -400,7 +400,7 @@ Có một bản tải xuống đang chờ xử lí với tên này Newpipe đã bị đóng khi đang xử lí tệp Không đủ dung lượng trên máy - Quá trình mất, vì tập tin đã bị xoá + Quá trình tải bị hủy, vì tập tin đã bị xoá Kết nối hết thời gian Bạn muốn xóa lịch sử tải về hay xóa tất cả những file đã tải về\? Giới hạn hàng chờ tải xuống @@ -450,7 +450,7 @@ Thêm vào gần đây Ngôn ngữ sẽ thay đổi khi ứng dụng khởi động lại Bấm \"Xong\" khi hoàn thành - Xong + Đã hoàn thành ∞ video 100+ video @@ -575,7 +575,7 @@ Tắt để ẩn mô tả video và các thông tin bổ sung Hiện mô tả Mở bằng - Tệp tin đã bắt đầu được tải xuống + Tệp đang được tải xuống Bạn có thể chọn giao diện ban đêm cho mình phía bên dưới Chọn giao diện ban đêm của bạn — %s Tự động (giao diện hệ thống) @@ -685,7 +685,7 @@ Thời gian kiểm tra Yêu cầu kết nối mạng Bất kỳ loại mạng nào (có thể tính phí) - Xóa tất cả tệp đã tải xuống khỏi ổ đĩa\? + Xóa tất cả các tệp đã tải xuống khỏi bộ nhớ\? Thông báo bị tắt Được thông báo Bạn hiện đã đăng ký kênh này @@ -706,6 +706,14 @@ Thể loại Câu hỏi thường gặp Xem trên website - Nếu bạn gặp rắc rối khi sử dụng ứng dụng , hãy chắc chắn rằng bạn đã tìm kiếm các câu hỏi thường thấy ! + Nếu bạn gặp vấn đề khi sử dụng ứng dụng , hãy chắc chắn rằng bạn đã tìm kiếm các câu hỏi thường thấy ! Ẩn các video đã xem + Nhập hoặc xuất các kênh bạn đăng ký bằng cách nhấn nút 3 chấm ở góc trên màn hình + Không thể sao chép vào khay nhớ tạm + Đã thêm khoảng thời gian %d trùng lặp (s) + Dạng thẻ + Bạn đang dùng phiên bản mới nhất + Tùy chọn này chỉ được bật khi chủ đề %s được dùng + Nhấn để tải %s + Chế độ tia sét \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index b5499483e..8393fe0ce 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -145,7 +145,7 @@ 无法设置下载菜单 App/UI 崩溃 抱歉, 这本不该发生。 - 使用电子邮件反馈错误 + 使用电子邮件反馈 抱歉,发生了一些错误。 反馈 信息: @@ -718,4 +718,6 @@ 无法复制到剪贴板 变灰的播放列表已经包含此项目。 重复添加了 %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 a311d704a..2cc840ac8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -72,7 +72,7 @@ 無法設定下載選單 應用程式或界面已停止運作 抱歉,這是不該發生的。 - 使用電子郵件回報此錯誤 + 透過電子郵件回報 抱歉,發生了一些問題。 回報 資訊: @@ -718,4 +718,6 @@ 無法複製到剪貼簿 重複新增 %d 次 變灰的播放清單已經包含此項目。 + 忽略硬體媒體鍵事件 + 這很有用,舉例來說,若您正在使用物理按鍵壞掉的耳機 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ba217650f..e1c75bba4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -247,7 +247,7 @@ NewPipe encountered an error, tap to report An error occurred, see the notification Sorry, that should not have happened. - Report this error via e-mail + Report via e-mail Copy formatted report Report on GitHub Please check whether an issue discussing your crash already exists. When creating duplicate tickets, you take time from us which we could spend with fixing the actual bug. diff --git a/fastlane/metadata/android/be/changelogs/63.txt b/fastlane/metadata/android/be/changelogs/63.txt new file mode 100644 index 000000000..8583daa68 --- /dev/null +++ b/fastlane/metadata/android/be/changelogs/63.txt @@ -0,0 +1,8 @@ +### Паляпшэнні +- Імпарт/экспарт налад #1333 +- Зменшана перамалёўка (аптымізацыя прадуктыўнасці) #1371 +- Невялікія паляпшэнні кода #1375 +- Дададзена ўсё пра GDPR #1420 + +### Выпраўлена +- Загрузчык: Выпраўленне збою пры загрузцы незавершаных загрузак з .giga файлаў #1407 diff --git a/fastlane/metadata/android/be/changelogs/64.txt b/fastlane/metadata/android/be/changelogs/64.txt new file mode 100644 index 000000000..ad5606b6f --- /dev/null +++ b/fastlane/metadata/android/be/changelogs/64.txt @@ -0,0 +1,8 @@ +### Паляпшэнні +- Дададзена магчымасць абмежаваць якасць відэа пры выкарыстанні мабільных дадзеных. #1339 +- Запамінанне яркасці для сесіі #1442 +- Паляпшенне прадуктыўнасці загрузкі для слабых працэсараў #1431 +- Дададзена (працоўная) падтрымка медыя-сесіі #1433 + +### Выпраўленне +- Выпраўленне збою пры адкрыцці загрузак (выпраўленне зараз даступна для рэлізных зборак) #1441 diff --git a/fastlane/metadata/android/be/changelogs/992.txt b/fastlane/metadata/android/be/changelogs/992.txt new file mode 100644 index 000000000..20c8a7b1a --- /dev/null +++ b/fastlane/metadata/android/be/changelogs/992.txt @@ -0,0 +1,17 @@ +Новае +- Колькасць падпісчыкаў у дэталях відэа +- Загрузка з чаргі +- Сталая ўсталёўка мініяцюры плэйліста +- Доўгі націск на хэштэгі і спасылкі +- Карткавы рэжым прагляду + +Паляпшэнні +- Павялічаная кнопка зачынення міні-плэера +- Больш плаўнае змяншэнне памеру мініяцюр +- Мэтавая версія Android 13 (API 33) +- Пошук больш не ставіць плэера на паўзу + +Выпраўленні +- Выпраўленне накладання на DeX/мыш +- Дазволены фонавы плэер без асобных аўдыятрансляцый +- Розныя выпраўленні YouTube і гэтак далей… diff --git a/fastlane/metadata/android/be/full_description.txt b/fastlane/metadata/android/be/full_description.txt new file mode 100644 index 000000000..6ce0c6963 --- /dev/null +++ b/fastlane/metadata/android/be/full_description.txt @@ -0,0 +1 @@ +NewPipe не выкарыстоўвае бібліятэкі фрэймворку Google ці API YouTube. Ён толькі аналізуе вэб-сайт, каб атрымаць неабходную інфармацыю. Таму гэтую праграму можна выкарыстоўваць на прыладах без усталяваных сэрвісаў Google. Акрамя таго, вам не патрэбен уліковы запіс YouTube, каб выкарыстоўваць NewPipe, гэта вольнае і адкрытае праграмнае забеспячэнне. diff --git a/fastlane/metadata/android/be/short_description.txt b/fastlane/metadata/android/be/short_description.txt index d689c1713..0fb912149 100644 --- a/fastlane/metadata/android/be/short_description.txt +++ b/fastlane/metadata/android/be/short_description.txt @@ -1 +1 @@ -Свабодны і лёгкі кліент Youtube для Android. +Вольны і лёгкі кліент YouTube для Android. diff --git a/fastlane/metadata/android/hi/changelogs/860.txt b/fastlane/metadata/android/hi/changelogs/860.txt index 24a2297a7..da3aa75f9 100644 --- a/fastlane/metadata/android/hi/changelogs/860.txt +++ b/fastlane/metadata/android/hi/changelogs/860.txt @@ -2,6 +2,6 @@ • सेव करें और रिस्टोर करें कि क्या पिच और टेंपो अनहुक हैं या नहीं • प्लेयर में सपोर्ट डिस्प्ले कटआउट • गोल दृश्य और ग्राहकों की संख्या -• कम डेटा का उपयोग करने के लिए YouTube को अनुकूलित किया गया +• कम डेटा का उपयोग करने के लिए यूट्यूब को अनुकूलित किया गया -इस रिलीज़ में YouTube से संबंधित 15 से अधिक बग ठीक किए गए थे। +इस रिलीज़ में यूट्यूब से संबंधित 15 से अधिक बग ठीक किए गए थे। diff --git a/fastlane/metadata/android/ru/changelogs/760.txt b/fastlane/metadata/android/ru/changelogs/760.txt new file mode 100644 index 000000000..5990094b6 --- /dev/null +++ b/fastlane/metadata/android/ru/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 + • Возобновить трансляции с того места, где вы остановились в прошлый раз. + Усовершенствования загрузчика #2149 + • Используйте Storage Access Framework для хранения загрузок на внешних SD-картах. + • Новый мультиплексор mp4 + • При желании измените каталог загрузки перед началом загрузки + • Соблюдайте тарифные сети + + + Улучшен + • Удалены гема-строки #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/770.txt b/fastlane/metadata/android/ru/changelogs/770.txt new file mode 100644 index 000000000..d2802f807 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/770.txt @@ -0,0 +1,4 @@ +Изменения в 0.17.2 + +Исправления +• Исправлено, что видео не было доступно diff --git a/fastlane/metadata/android/ru/changelogs/800.txt b/fastlane/metadata/android/ru/changelogs/800.txt new file mode 100644 index 000000000..983abbf96 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/800.txt @@ -0,0 +1,27 @@ +Новое +• Поддержка PeerTube без P2P (#2201) [бета-версия]: +◦ Смотрите и скачивайте видео с сайтов PeerTube. +◦ Добавлены экземпляры в настройках, чтобы получить доступ ко всему миру PeerTube +◦ Могут возникнуть проблемы с SSL-квитированием на Android 4.4 и 7.1 при доступе к определенным экземплярам, что приводит к сетевой ошибке. + +• Загрузчик (#2679): +◦ Рассчитать время загрузки +◦ Загрузить opus (файлы webm) в формате ogg +◦ Восстанавливайте ссылки для скачивания с истекшим сроком действия, чтобы возобновить загрузку после длительной паузы + +Улучшено +• Информируйте KioskFragment об изменениях в предпочитаемой стране контента и улучшайте производительность всех основных вкладок #2742 +• Используйте новые реализации локализации и загрузчика из extractor #2713 +• Сделайте строку "Киоск по умолчанию" переводимой +• Черная панель навигации для черной темы #2569 + +Исправлено +• Исправлена ошибка, из-за которой всплывающий проигрыватель не мог перемещаться, если при перемещении всплывающего проигрывателя был помещен другой палец #2772 +• Разрешить плейлистам отсутствие загрузчика и исправить сбои, связанные с этой проблемой #2724, TeamNewPipe/NewPipeExtractor#219 +• Включение TLS1.1/1.2 на устройствах Android 4.4 (API 19/KitKat) для исправления рукопожатия TLS с MediaCCC и некоторыми экземплярами PeerTube #2792 +• [SoundCloud] Исправлено извлечение идентификатора клиента TeamNewPipe/NewPipeExtractor#217 +• [SoundCloud] Исправлено извлечение аудиопотока + +Развитие +• Обновите ExoPlayer до 2.10.8 #2791, #2816 +• Обновите Gradle до версии 3.5.1 и добавьте поддержку Kotlin #2714 diff --git a/fastlane/metadata/android/ru/changelogs/810.txt b/fastlane/metadata/android/ru/changelogs/810.txt new file mode 100644 index 000000000..70007f261 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/810.txt @@ -0,0 +1,19 @@ +Новое +• Показывать миниатюру видео на экране блокировки при воспроизведении в фоновом режиме + +Улучшено +• Добавление локального списка воспроизведения в очередь при длительном нажатии на фоновую / всплывающую кнопку +• Сделайте вкладки главной страницы прокручиваемыми и скрывайте, когда есть только одна вкладка. +• Ограничить количество обновлений миниатюр уведомлений в фоновом проигрывателе +• Добавить фиктивный эскиз для пустых локальных списков воспроизведения +• * Пользователь *.открывает расширение файла вместо *.webmd и показывает "открывает" в метке формата вместо "WebMOpus" в раскрывающемся списке загрузки +• Добавить кнопку для удаления загруженных файлов или истории загрузок в разделе "Загрузки" +• [YouTube] Добавить поддержку ссылок на каналы /c/shortened_url + +Исправлено +• * Исправлены многочисленные проблемы при совместном использовании видео в New Pipe и прямой загрузке его потоков +• Исправлен доступ игрока из потока его создания +• Исправлена подкачка результатов поиска по страницам +• [YouTube] Исправлено включение null, приводящее к NPE +• [* [YouTube] Исправлен просмотр комментариев при открытии invidia.us url-адрес +• [SoundCloud] Обновлен идентификатор клиента diff --git a/fastlane/metadata/android/ru/changelogs/840.txt b/fastlane/metadata/android/ru/changelogs/840.txt new file mode 100644 index 000000000..2383c75a0 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/840.txt @@ -0,0 +1,22 @@ +Новое +• Добавлен выбор языка для изменения языка приложения +• Добавлена кнопка "Отправить Коди" в складное меню плеера +• Добавлена возможность копировать комментарии при длительном нажатии + +Улучшенный +• Исправьте активность reCAPTCHA и правильно сохраните полученные файлы cookie +• Удалено точечное меню в пользу ящика и кнопки скрыть историю, когда просмотр истории не включен в настройках +• Правильно запрашивайте разрешение на отображение поверх других приложений в настройках на Android 6 и более поздних версиях +• Переименуйте локальный список воспроизведения, щелкнув длительным щелчком в BookmarkFragment +• Различные улучшения PeerTube +• Улучшены несколько исходных строк на английском языке + +Исправлено +• Исправлен повторный запуск проигрывателя, хотя он приостановлен, когда включена опция "свернуть при переключении приложений" и NewPipe свернут +• Исправьте начальное значение яркости для жеста +• Исправлена загрузка субтитров .srt, содержащих не все разрывы строк +• Исправлена ошибка загрузки на SD-карту из-за того, что некоторые устройства Android 5 не совместимы с CTF +• Исправлена загрузка на Android KitKat +• Исправлено, что поврежденный файл video .mp4 распознавался как аудиофайл +• Исправлены многочисленные проблемы с локализацией, включая неправильные коды китайского языка +• [YouTube] Временные метки в описании снова доступны для кликабельности diff --git a/fastlane/metadata/android/ru/changelogs/860.txt b/fastlane/metadata/android/ru/changelogs/860.txt new file mode 100644 index 000000000..3e76217e5 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/860.txt @@ -0,0 +1,7 @@ +Улучшено +• Сохраняйте и восстанавливайте независимо от того, отключены ли высота тона и темп или нет +• Поддержка выреза дисплея в плеере +• Круговой обзор и количество подписчиков +• Оптимизирован YouTube для использования меньшего количества данных + +В этом выпуске было исправлено более 15 ошибок, связанных с YouTube. diff --git a/fastlane/metadata/android/ru/changelogs/870.txt b/fastlane/metadata/android/ru/changelogs/870.txt new file mode 100644 index 000000000..7d1f72dd5 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/870.txt @@ -0,0 +1,2 @@ +Это выпуск исправления, обновляющий New Pipe, чтобы снова использовать SoundCloud без серьезных проблем. +Soundcloud v2 API теперь используется в экстракторе, и было улучшено обнаружение недопустимых идентификаторов клиентов. diff --git a/fastlane/metadata/android/ru/changelogs/900.txt b/fastlane/metadata/android/ru/changelogs/900.txt new file mode 100644 index 000000000..2243215e9 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/900.txt @@ -0,0 +1,14 @@ +Новое +• Группы подписок и отсортированные каналы +• Кнопка отключения звука в проигрывателях + +Улучшено +• * Разрешить открытие music.youtube.com и media.ccc.de соединения в новой трубе +• Переместите две настройки с внешнего вида на содержимое +• Скрыть параметры поиска на 5, 15, 25 секунд, если включен неточный поиск + +Исправлено +• некоторые видеоролики WebM недоступны для поиска +• * резервное копирование базы данных на телефоне Android +• сбой при совместном использовании загруженного файла +• тонны проблем с извлечением с YouTube и многое другое... diff --git a/fastlane/metadata/android/ru/changelogs/920.txt b/fastlane/metadata/android/ru/changelogs/920.txt new file mode 100644 index 000000000..3cf0c63be --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/920.txt @@ -0,0 +1,9 @@ +Улучшено + +• Добавлена дата загрузки и количество просмотров для элементов сетки потока +• Улучшения в макете заголовка ящика + +Исправлено + +• Исправлена кнопка отключения звука, вызывающая сбои в API 19 +• Исправлена загрузка длинных видео с разрешением 1080p 60 кадров в секунду diff --git a/fastlane/metadata/android/ru/changelogs/930.txt b/fastlane/metadata/android/ru/changelogs/930.txt new file mode 100644 index 000000000..40fa443c2 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/930.txt @@ -0,0 +1,19 @@ +Новое +• Поиск музыки на YouTube +• Базовая поддержка Android TV + +Улучшено +• Добавлена возможность удалять все просмотренные видео из локального списка воспроизведения +• Показывать сообщение, когда контент еще не поддерживается, вместо сбоя +• Улучшено изменение размера всплывающего проигрывателя с помощью пинч-жестов +• Постановка потоков в очередь при длительном нажатии на фоновые и всплывающие кнопки в канале +• Улучшена обработка размера заголовка заголовка ящика + +Исправлено +• Исправлена ошибка, из-за которой не работает настройка контента с ограничением по возрасту +• * Исправлены некоторые виды рекапчи +• Исправлен сбой при открытии закладок, когда плейлист имеет значение `null` +• Исправлено обнаружение исключений, связанных с сетью +• Исправлена видимость кнопки сортировки по группам во фрагменте подписок + +и более diff --git a/fastlane/metadata/android/ru/changelogs/940.txt b/fastlane/metadata/android/ru/changelogs/940.txt new file mode 100644 index 000000000..c37293c4b --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/940.txt @@ -0,0 +1,16 @@ +Новое +• Добавлена поддержка комментариев SoundCloud +• Добавить настройку ограниченного режима YouTube +• Показать сведения о родительском канале PeerTube + +Улучшено +• Показывать кнопку Kore только для поддерживаемых сервисов +• * Блокируйте жесты игрока, которые начинаются с панели навигации или строки состояния +• Измените цвет фона кнопок повтора и подписки на основе цвета сервиса + +Исправлено +• Исправлена блокировка диалогового окна загрузки +• Кнопка Открыть в браузере теперь действительно открывается в браузере +• Исправлена ошибка при открытии видео и "Не удалось воспроизвести этот поток" + +и более diff --git a/fastlane/metadata/android/ru/changelogs/951.txt b/fastlane/metadata/android/ru/changelogs/951.txt new file mode 100644 index 000000000..18f47adc0 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/951.txt @@ -0,0 +1,17 @@ +Новое +• Добавить поиск для средства выбора подписки в диалоговом окне группы каналов +• Добавьте фильтр в диалоговое окно группы каналов, чтобы показывать только негруппированные подписки +• Добавить вкладку плейлиста на главную страницу +• Быстрая перемотка вперед / назад в фоновом режиме / очередь всплывающих окон проигрывателя +• Отобразить предложение по поиску: вы имели в виду и показываете результат для + +Улучшено +• * Удалите метаданные приложения для записи в смешанные файлы +• Не удаляйте сбойные потоки из очереди +• Обновите цвет строки состояния, чтобы он соответствовал цвету панели инструментов + +Исправлено +• Исправлена рассинхронизация аудио / видео, вызванная накопительными ошибками с плавающей запятой +• [PeerTube] Обрабатывает удаленные комментарии + +и более diff --git a/fastlane/metadata/android/ru/changelogs/954.txt b/fastlane/metadata/android/ru/changelogs/954.txt new file mode 100644 index 000000000..f0da44202 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/954.txt @@ -0,0 +1,9 @@ +• новый рабочий процесс приложения: воспроизведение видео на странице сведений, проведите пальцем вниз, чтобы свернуть проигрыватель +• Уведомления в стиле медиастайла: настраиваемые действия в уведомлениях, повышение производительности +• * базовое изменение размера при использовании New Pipe в качестве настольного приложения + +• показывать диалоговое окно с открытыми параметрами в случае появления неподдерживаемого URL-адреса. +• Улучшите работу с поисковыми предложениями, когда удаленные предложения не могут быть извлечены +• Увеличено качество видео по умолчанию до 720p60 (встроенный проигрыватель) и 480p (всплывающий проигрыватель). + +• тонны исправлений ошибок и многое другое diff --git a/fastlane/metadata/android/ru/changelogs/957.txt b/fastlane/metadata/android/ru/changelogs/957.txt new file mode 100644 index 000000000..55e12b906 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/957.txt @@ -0,0 +1,10 @@ +• Объединить конкретные действия по постановке в очередь в одно +• Жест двумя пальцами для закрытия проигрывателя +• Разрешить очистку файлов cookie reCAPTCHA +• Возможность не раскрашивать уведомление +• * Улучшите способ открытия деталей видео, чтобы исправить бесконечную буферизацию, ошибки при совместном использовании с новым каналом и другие несоответствия. +• Ускорьте просмотр видео на YouTube и исправьте возрастные ограничения +• Исправлен сбой при быстрой перемотке вперед / назад +• Не переставляйте списки, перетаскивая миниатюры +• Всегда помните о свойствах всплывающего окна +• Добавить язык сантали diff --git a/fastlane/metadata/android/ru/changelogs/959.txt b/fastlane/metadata/android/ru/changelogs/959.txt new file mode 100644 index 000000000..6784a604a --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/959.txt @@ -0,0 +1,3 @@ +Исправлен бесконечный цикл сбоев после открытия отчета об ошибках. +Обновлен список экземпляров PeerTube, которые могут быть автоматически открыты новым каналом. +Обновленные переводы. diff --git a/fastlane/metadata/android/ru/changelogs/960.txt b/fastlane/metadata/android/ru/changelogs/960.txt new file mode 100644 index 000000000..eeb34abc8 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/960.txt @@ -0,0 +1,4 @@ +• Улучшено описание опции экспорта базы данных в настройках. +• Исправлен синтаксический анализ комментариев на YouTube. +• Исправлено отображаемое имя media.ccc.de обслуживание. +• Обновленные переводы. diff --git a/fastlane/metadata/android/ru/changelogs/961.txt b/fastlane/metadata/android/ru/changelogs/961.txt new file mode 100644 index 000000000..9d91653b3 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/961.txt @@ -0,0 +1,12 @@ +• [YouTube] Поддержка микширования +• [YouTube] Отображает информацию об общественных вещателях и Covid-19 +• [media.ccc.de ] Добавлены последние видео +• Добавлен перевод на сомалийский + +• Множество внутренних улучшений + +• Исправлен обмен видео из плеера +• Исправлено пустое веб-представление reCAPTCHA +• Исправлен сбой, возникавший при удалении потока из списка +• [PeerTube] Исправлены связанные потоки +• [YouTube] Исправлен поиск музыки на YouTube diff --git a/fastlane/metadata/android/ru/changelogs/964.txt b/fastlane/metadata/android/ru/changelogs/964.txt new file mode 100644 index 000000000..d31f3ef2c --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/964.txt @@ -0,0 +1,8 @@ +• Добавлена поддержка глав в элементах управления плеером +• [PeerTube] Добавлен поиск в сепии +• Повторно добавлена кнопка "Поделиться" в подробном просмотре видео и перенесено описание потока в макет вкладки +• Отключите восстановление яркости, если жест яркости отключен +• Добавлен элемент списка для воспроизведения видео на kodi +• Исправлен сбой, когда на некоторых устройствах не был установлен браузер по умолчанию, и улучшены диалоги общего доступа. +• Переключение воспроизведения / паузы с помощью аппаратной кнопки пробела в полноэкранном проигрывателе +• [media.ccc.de ] Различные исправления и улучшения diff --git a/fastlane/metadata/android/ru/changelogs/965.txt b/fastlane/metadata/android/ru/changelogs/965.txt new file mode 100644 index 000000000..91154a156 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/965.txt @@ -0,0 +1,6 @@ +Исправлен сбой, возникавший при переупорядочивании групп каналов. +Исправлено получение большего количества видео с YouTube из каналов и плейлистов. +Исправлено получение комментариев на YouTube. +Добавлена поддержка подпутей /watch/, /v/ и /w/ в URL-адресах YouTube. +Исправлено извлечение идентификатора клиента SoundCloud и контента с географическими ограничениями. +Добавлена локализация на северном курдском языке. diff --git a/fastlane/metadata/android/ru/changelogs/966.txt b/fastlane/metadata/android/ru/changelogs/966.txt new file mode 100644 index 000000000..651c86838 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/966.txt @@ -0,0 +1,14 @@ +Новое: +• Добавить новую услугу: Bandcamp + +Улучшенный: +• Добавьте опцию, чтобы приложение соответствовало теме устройства +• Предотвратите некоторые сбои, показав улучшенную панель ошибок +• Показать дополнительную информацию о том, почему контент в недоступном +• Аппаратная кнопка пробела запускает воспроизведение/паузу +• Показать тост "Загрузка начата" + +Исправлено: +• Исправлена очень маленькая миниатюра в деталях видео при воспроизведении в фоновом режиме +• Исправлен пустой заголовок в свернутом проигрывателе +• Исправлено, что последний режим изменения размера восстанавливался неправильно diff --git a/fastlane/metadata/android/ru/changelogs/967.txt b/fastlane/metadata/android/ru/changelogs/967.txt new file mode 100644 index 000000000..675a4c908 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/967.txt @@ -0,0 +1 @@ +Исправлена ошибка, из-за которой YouTube не работал должным образом в ЕС. Это было вызвано новым файлом cookie и системой согласия на конфиденциальность, которая требует нового канала для установки файла cookie СОГЛАСИЯ. diff --git a/fastlane/metadata/android/ru/changelogs/968.txt b/fastlane/metadata/android/ru/changelogs/968.txt new file mode 100644 index 000000000..b4c718af7 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/968.txt @@ -0,0 +1,7 @@ +Добавлена опция сведений о канале в меню при длительном нажатии. +Добавлена функция переименования названия списка воспроизведения из интерфейса списка воспроизведения. +Разрешить пользователю делать паузу во время буферизации видео. +Отполировал белую тему. +Исправлено наложение шрифтов при использовании большего размера шрифта. +Исправлено отсутствие видео на устройствах Formuler и Zephier. +Исправлены различные сбои. diff --git a/fastlane/metadata/android/ru/changelogs/969.txt b/fastlane/metadata/android/ru/changelogs/969.txt new file mode 100644 index 000000000..259c9024d --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/969.txt @@ -0,0 +1,8 @@ +• Разрешить установку на внешнее хранилище +• [Bandcamp] Добавлена поддержка отображения первых трех комментариев в потоке +• Показывать тост "загрузка началась" только при запуске загрузки +• Не устанавливайте файл cookie reCAPTCHA, если файл cookie не сохранен +• [Player] Повысить производительность кэша +• [Player] Исправлено, что проигрыватель не воспроизводился автоматически +• Отключите предыдущие панели закусок при удалении загрузок +• Исправлена попытка удалить объект, которого нет в списке diff --git a/fastlane/metadata/android/ru/changelogs/970.txt b/fastlane/metadata/android/ru/changelogs/970.txt new file mode 100644 index 000000000..6d2d8bba9 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/970.txt @@ -0,0 +1,11 @@ +Новое + • Просмотр метаданных контента (теги, категории, лицензии и т. д.) под описанием. + • Добавлена опция "Показать информацию о канале" в удаленных (не локальных) плейлистах. + • В меню длительного нажатия добавлена опция "Открыть в браузере". + + Зафиксированный + • Исправлен сбой при вращении на странице сведений о видео. + • Исправлена ошибка, из-за которой кнопка «Играть с Kodi» в плеере всегда предлагала установить Kore. + • Исправлены и улучшены настройки путей импорта и экспорта + • [YouTube] Исправлены комментарии и их количество. + И многое другое diff --git a/fastlane/metadata/android/ru/changelogs/971.txt b/fastlane/metadata/android/ru/changelogs/971.txt new file mode 100644 index 000000000..27584b05b --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/971.txt @@ -0,0 +1,3 @@ +Исправление + • Увеличен буфер для воспроизведения после повторной буферизации + • Исправлен вылет на планшетах и телевизорах при нажатии на иконку play-queue в плеере From d33229a3b862f1e53e1c9b6da9fd7216238695a7 Mon Sep 17 00:00:00 2001 From: Stypox Date: Wed, 1 Mar 2023 10:45:25 +0100 Subject: [PATCH 44/54] Add changelog for v0.25.1 (993) --- fastlane/metadata/android/en-US/changelogs/993.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 fastlane/metadata/android/en-US/changelogs/993.txt diff --git a/fastlane/metadata/android/en-US/changelogs/993.txt b/fastlane/metadata/android/en-US/changelogs/993.txt new file mode 100644 index 000000000..5d45efd13 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/993.txt @@ -0,0 +1,13 @@ +New +• Add warning when adding playlist duplicates and add button to remove them +• Allow ignoring hardware buttons +• Allow hiding partially watched videos in feed + +Improved +• Use more grid columns on big screens +• Make progress indicators consistent with settings + +Fixed +• Fix opening browser URLs, downloads and external players on Android 11+ +• Fix interacting with fullscreen requiring two taps on MIUI +• Allow tweaking ExoPlayer settings to fix playback on some devices \ No newline at end of file From 3f8e44dc66b6e1cd48220712c808672d3abb49b4 Mon Sep 17 00:00:00 2001 From: Stypox Date: Wed, 1 Mar 2023 10:51:17 +0100 Subject: [PATCH 45/54] Update NewPipeExtractor --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a5d63f429..4d5d73444 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -191,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:7e793c11aec46358ccbfd8bcfcf521105f4f093a' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:19e4b216c905f06f55f20241c1572e48fc284811' implementation 'com.github.TeamNewPipe:NoNonsense-FilePicker:5.0.0' /** Checkstyle **/ From c5cf2f4514cbd9c669dfa5a956960ab4bc6370fd Mon Sep 17 00:00:00 2001 From: Stypox Date: Wed, 1 Mar 2023 10:52:05 +0100 Subject: [PATCH 46/54] Release v0.25.1 (993) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4d5d73444..0e2fd4001 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ android { resValue "string", "app_name", "NewPipe" minSdk 21 targetSdk 33 - versionCode 992 - versionName "0.25.0" + versionCode 993 + versionName "0.25.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" From d06cc862c88b2585f72af9390da03ca7094f2680 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Fri, 3 Mar 2023 11:58:30 +0100 Subject: [PATCH 47/54] Remove wrong annotation --- app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt index 17071dfcb..fcc062102 100644 --- a/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt +++ b/app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt @@ -6,7 +6,6 @@ import android.util.Log import android.view.View import android.widget.Button import android.widget.TextView -import androidx.annotation.Nullable import androidx.annotation.StringRes import androidx.core.view.isVisible import androidx.fragment.app.Fragment @@ -144,7 +143,7 @@ class ErrorPanelHelper( */ private fun showAndSetErrorButtonAction( @StringRes resid: Int, - @Nullable listener: View.OnClickListener + listener: View.OnClickListener ) { errorActionButton.isVisible = true errorActionButton.setText(resid) From 7c394212974f6785279d3d027d651065dad87871 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 6 Mar 2023 16:49:43 +0100 Subject: [PATCH 48/54] bump ExoPlayer to 2.18.4 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a5d63f429..5330516c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -106,7 +106,7 @@ ext { androidxWorkVersion = '2.7.1' icepickVersion = '3.2.0' - exoPlayerVersion = '2.18.3' + exoPlayerVersion = '2.18.4' googleAutoServiceVersion = '1.0.1' groupieVersion = '2.10.1' markwonVersion = '4.6.2' From 23178644223a27793c28637de0a303279e0560df Mon Sep 17 00:00:00 2001 From: Robin Date: Thu, 23 Mar 2023 15:03:07 +0100 Subject: [PATCH 49/54] Bump ExoPlayer to 2.18.5 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 5330516c8..1417f5973 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -106,7 +106,7 @@ ext { androidxWorkVersion = '2.7.1' icepickVersion = '3.2.0' - exoPlayerVersion = '2.18.4' + exoPlayerVersion = '2.18.5' googleAutoServiceVersion = '1.0.1' groupieVersion = '2.10.1' markwonVersion = '4.6.2' From 1a8aa8b17eeaee626fe97551270142ade7e0c5d6 Mon Sep 17 00:00:00 2001 From: AudricV <74829229+AudricV@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:05:15 +0100 Subject: [PATCH 50/54] Use a system chooser when opening links in browser in the case there is no browser available This change makes the app using the behavior when there is no default browser on Android 11 and lower, by opening a system chooser when there is no browser available (on all Android versions). Also catch any exception when the system chooser cannot be opened and show the "No app on your device can open this" toast in this case, as an `ActivityNotFoundException` could be thrown if no app is available to open a given web link. --- .../external_communication/ShareUtils.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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 2f50a94ae..118b77026 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 @@ -86,15 +86,19 @@ public final class ShareUtils { PackageManager.MATCH_DEFAULT_ONLY); } + final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (defaultBrowserInfo == null) { - // No app installed to open a web url - Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); + // No app installed to open a web URL, but it may be handled by other apps so try + // opening a system chooser for the link in this case (it could be bypassed by the + // system if there is only one app which can open the link or a default app associated + // with the link domain on Android 12 and higher) + openAppChooser(context, intent, true); return; } final String defaultBrowserPackage = defaultBrowserInfo.activityInfo.packageName; - final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)) - .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (defaultBrowserPackage.equals("android")) { // No browser set as default (doesn't work on some devices) @@ -205,7 +209,12 @@ public final class ShareUtils { chooserIntent.addFlags(permFlags); } } - context.startActivity(chooserIntent); + + try { + context.startActivity(chooserIntent); + } catch (final ActivityNotFoundException e) { + Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); + } } /** From 03fd2869564dfd7cc5832dde438696add0dd153b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 2 Apr 2023 22:48:15 +0200 Subject: [PATCH 51/54] Translated using Weblate (Odia) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Swedish) Currently translated at 59.4% (44 of 74 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Czech) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 18.9% (14 of 74 strings) Translated using Weblate (Danish) Currently translated at 98.3% (650 of 661 strings) Translated using Weblate (Belarusian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Korean) Currently translated at 99.8% (660 of 661 strings) Translated using Weblate (French) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (German) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Indonesian) Currently translated at 74.3% (55 of 74 strings) Translated using Weblate (Czech) Currently translated at 98.6% (73 of 74 strings) Translated using Weblate (Ukrainian) Currently translated at 98.6% (73 of 74 strings) Translated using Weblate (Basque) Currently translated at 43.2% (32 of 74 strings) Translated using Weblate (Dutch (Belgium)) Currently translated at 85.6% (566 of 661 strings) Translated using Weblate (Belarusian) Currently translated at 92.7% (613 of 661 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Czech) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Latvian) Currently translated at 89.7% (593 of 661 strings) Translated using Weblate (Malay) Currently translated at 54.3% (359 of 661 strings) Translated using Weblate (Norwegian Bokmål) Currently translated at 98.3% (650 of 661 strings) Translated using Weblate (Vietnamese) Currently translated at 97.7% (646 of 661 strings) Translated using Weblate (Lithuanian) Currently translated at 97.4% (644 of 661 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Korean) Currently translated at 99.8% (660 of 661 strings) Translated using Weblate (Hungarian) Currently translated at 97.4% (644 of 661 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (English) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Assamese) Currently translated at 14.8% (98 of 661 strings) Translated using Weblate (Georgian) Currently translated at 96.6% (639 of 661 strings) Translated using Weblate (Bosnian) Currently translated at 17.8% (118 of 661 strings) Translated using Weblate (Gujarati) Currently translated at 9.9% (66 of 661 strings) Translated using Weblate (Marathi) Currently translated at 8.4% (56 of 661 strings) Translated using Weblate (Odia) Currently translated at 99.8% (660 of 661 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Bengali) Currently translated at 87.7% (580 of 661 strings) Translated using Weblate (Bengali (India)) Currently translated at 45.9% (304 of 661 strings) Translated using Weblate (Filipino) Currently translated at 34.9% (231 of 661 strings) Translated using Weblate (Danish) Currently translated at 97.5% (645 of 661 strings) Translated using Weblate (Galician) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Belarusian) Currently translated at 91.2% (603 of 661 strings) Translated using Weblate (Belarusian) Currently translated at 91.2% (603 of 661 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Albanian) Currently translated at 83.9% (555 of 661 strings) Translated using Weblate (Dutch (Belgium)) Currently translated at 85.3% (564 of 661 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Catalan) Currently translated at 93.3% (617 of 661 strings) Translated using Weblate (Bulgarian) Currently translated at 68.9% (456 of 661 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Finnish) Currently translated at 90.0% (595 of 661 strings) Translated using Weblate (Croatian) Currently translated at 96.2% (636 of 661 strings) Translated using Weblate (Vietnamese) Currently translated at 97.7% (646 of 661 strings) Translated using Weblate (Hebrew) Currently translated at 98.7% (653 of 661 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Asturian) Currently translated at 71.5% (473 of 661 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Czech) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Basque) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Dutch) Currently translated at 98.3% (650 of 661 strings) Translated using Weblate (French) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (German) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (English) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Romanian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Korean) Currently translated at 10.8% (8 of 74 strings) Translated using Weblate (Russian) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Belarusian) Currently translated at 84.2% (557 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Korean) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Azerbaijani) Currently translated at 95.9% (71 of 74 strings) Translated using Weblate (Belarusian) Currently translated at 78.9% (522 of 661 strings) Translated using Weblate (Persian) Currently translated at 99.3% (657 of 661 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Punjabi) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Russian) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Sardinian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Filipino) Currently translated at 34.9% (231 of 661 strings) Translated using Weblate (Punjabi) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Hindi) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Basque) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (French) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Czech) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Russian) Currently translated at 89.1% (66 of 74 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Galician) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Estonian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Odia) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Italian) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Italian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Sinhala) Currently translated at 3.4% (23 of 661 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 64.8% (48 of 74 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Polish) Currently translated at 60.8% (45 of 74 strings) Translated using Weblate (Czech) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (74 of 74 strings) Translated using Weblate (Russian) Currently translated at 78.3% (58 of 74 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 18.9% (14 of 74 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Swedish) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Polish) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Indonesian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Arabic) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Czech) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Greek) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Portuguese) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Italian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Russian) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (German) Currently translated at 100.0% (661 of 661 strings) Co-authored-by: Agnieszka C Co-authored-by: Ajeje Brazorf Co-authored-by: Alex25820 Co-authored-by: Alexthegib Co-authored-by: Alfred Makne Poulsen Co-authored-by: Cyndaquissshhh Co-authored-by: Danial Behzadi Co-authored-by: Eric Co-authored-by: Fjuro Co-authored-by: GET100PERCENT Co-authored-by: Gontzal Manuel Pujana Onaindia Co-authored-by: Hosted Weblate Co-authored-by: Igor Rückert Co-authored-by: Igor Sorocean Co-authored-by: Ihor Hordiichuk Co-authored-by: Jeff Huang Co-authored-by: Linerly Co-authored-by: Maday Co-authored-by: Nidi Co-authored-by: Olivia Ng Co-authored-by: Oğuz Ersen Co-authored-by: Priit Jõerüüt Co-authored-by: Ray Co-authored-by: Rex_sa Co-authored-by: Rui Martins Co-authored-by: SC Co-authored-by: Sean Minnaert Co-authored-by: ShareASmile Co-authored-by: Simon Nilsson Co-authored-by: Subham Jena Co-authored-by: TXRdev Archive Co-authored-by: Translator Co-authored-by: Vasilis K Co-authored-by: VfBFan Co-authored-by: WB Co-authored-by: Xəyyam Qocayev Co-authored-by: Yaron Shahrabani Co-authored-by: fincent Co-authored-by: gallegonovato Co-authored-by: jc Co-authored-by: komiratsu192 <502badgateway@duck.com> Co-authored-by: nautilusx Co-authored-by: pjammo Co-authored-by: random r Co-authored-by: ssantos Co-authored-by: tndsG Co-authored-by: Макар Разин Co-authored-by: 모르것다 Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/az/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/cs/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/es/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/eu/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/hi/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/id/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/it/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ko/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pa/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pl/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/pt_PT/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/ru/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/sv/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/uk/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant/ Translate-URL: https://hosted.weblate.org/projects/newpipe/metadata/zh_Hant_HK/ Translation: NewPipe/Metadata --- app/src/main/res/values-ar/strings.xml | 8 + app/src/main/res/values-as/strings.xml | 2 +- app/src/main/res/values-az/strings.xml | 10 +- app/src/main/res/values-b+ast/strings.xml | 2 +- app/src/main/res/values-be/strings.xml | 273 ++++++++++++++---- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-bn-rIN/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-bs/strings.xml | 2 +- app/src/main/res/values-ca/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 10 +- app/src/main/res/values-da/strings.xml | 9 +- app/src/main/res/values-de/strings.xml | 8 + app/src/main/res/values-el/strings.xml | 8 + app/src/main/res/values-es/strings.xml | 10 +- app/src/main/res/values-et/strings.xml | 10 +- app/src/main/res/values-eu/strings.xml | 14 +- app/src/main/res/values-fa/strings.xml | 10 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fil/strings.xml | 12 +- app/src/main/res/values-fr/strings.xml | 14 +- app/src/main/res/values-gl/strings.xml | 14 +- app/src/main/res/values-gu/strings.xml | 2 +- app/src/main/res/values-he/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 12 +- app/src/main/res/values-hr/strings.xml | 2 +- app/src/main/res/values-hu/strings.xml | 2 +- app/src/main/res/values-in/strings.xml | 10 +- app/src/main/res/values-it/strings.xml | 12 +- app/src/main/res/values-ja/strings.xml | 12 +- app/src/main/res/values-ka/strings.xml | 2 +- app/src/main/res/values-ko/strings.xml | 98 ++++--- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-lv/strings.xml | 2 +- app/src/main/res/values-mr/strings.xml | 18 +- app/src/main/res/values-ms/strings.xml | 2 +- app/src/main/res/values-nb-rNO/strings.xml | 2 +- app/src/main/res/values-nl-rBE/strings.xml | 4 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-or/strings.xml | 22 +- app/src/main/res/values-pa/strings.xml | 12 +- app/src/main/res/values-pl/strings.xml | 8 + app/src/main/res/values-pt-rBR/strings.xml | 8 + app/src/main/res/values-pt-rPT/strings.xml | 23 +- app/src/main/res/values-pt/strings.xml | 12 +- app/src/main/res/values-ro/strings.xml | 20 +- app/src/main/res/values-ru/strings.xml | 10 + app/src/main/res/values-sc/strings.xml | 12 +- app/src/main/res/values-si/strings.xml | 19 ++ app/src/main/res/values-sq/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 12 +- app/src/main/res/values-tr/strings.xml | 8 + app/src/main/res/values-uk/strings.xml | 10 +- app/src/main/res/values-vi/strings.xml | 3 +- app/src/main/res/values-zh-rCN/strings.xml | 8 + app/src/main/res/values-zh-rHK/strings.xml | 34 ++- app/src/main/res/values-zh-rTW/strings.xml | 10 +- app/src/main/res/values/strings.xml | 2 +- .../metadata/android/az/changelogs/989.txt | 3 + .../metadata/android/cs/changelogs/66.txt | 26 +- .../metadata/android/cs/changelogs/993.txt | 13 + .../metadata/android/es/changelogs/993.txt | 13 + .../metadata/android/eu/changelogs/66.txt | 13 - .../metadata/android/hi/changelogs/993.txt | 13 + .../metadata/android/id/changelogs/66.txt | 3 - .../metadata/android/it/changelogs/993.txt | 13 + .../metadata/android/ko/changelogs/992.txt | 17 ++ .../metadata/android/pa/changelogs/986.txt | 24 +- .../metadata/android/pa/changelogs/990.txt | 24 +- .../metadata/android/pa/changelogs/993.txt | 13 + .../metadata/android/pl/changelogs/993.txt | 13 + .../metadata/android/pt-PT/changelogs/65.txt | 10 +- .../metadata/android/pt-PT/changelogs/66.txt | 33 +++ .../metadata/android/pt-PT/changelogs/68.txt | 31 ++ .../metadata/android/pt-PT/changelogs/69.txt | 19 ++ .../metadata/android/pt-PT/changelogs/70.txt | 25 ++ .../metadata/android/pt-PT/changelogs/71.txt | 10 + .../metadata/android/pt-PT/changelogs/740.txt | 23 ++ .../metadata/android/pt-PT/changelogs/750.txt | 22 ++ .../metadata/android/pt-PT/changelogs/760.txt | 43 +++ .../metadata/android/pt-PT/changelogs/780.txt | 12 + .../metadata/android/pt-PT/changelogs/790.txt | 14 + .../metadata/android/pt-PT/changelogs/800.txt | 27 ++ .../metadata/android/pt-PT/changelogs/810.txt | 19 ++ .../metadata/android/pt-PT/changelogs/840.txt | 22 ++ .../metadata/android/pt-PT/changelogs/930.txt | 19 ++ .../metadata/android/pt-PT/changelogs/952.txt | 10 +- .../metadata/android/pt-PT/changelogs/953.txt | 2 +- .../metadata/android/pt-PT/changelogs/954.txt | 14 +- .../metadata/android/pt-PT/changelogs/955.txt | 4 +- .../metadata/android/pt-PT/changelogs/956.txt | 2 +- .../metadata/android/pt-PT/changelogs/957.txt | 20 +- .../metadata/android/pt-PT/changelogs/958.txt | 4 +- .../metadata/android/pt-PT/changelogs/959.txt | 4 +- .../metadata/android/pt-PT/changelogs/961.txt | 12 + .../metadata/android/pt-PT/changelogs/964.txt | 8 + .../metadata/android/pt-PT/changelogs/966.txt | 14 + .../metadata/android/pt-PT/changelogs/969.txt | 8 + .../metadata/android/pt-PT/changelogs/972.txt | 14 + .../metadata/android/pt-PT/changelogs/975.txt | 8 +- .../metadata/android/pt-PT/changelogs/983.txt | 9 + .../metadata/android/pt-PT/changelogs/986.txt | 16 + .../metadata/android/pt-PT/changelogs/987.txt | 12 + .../metadata/android/pt-PT/changelogs/993.txt | 13 + .../android/pt-PT/full_description.txt | 2 +- .../android/pt-PT/short_description.txt | 2 +- .../metadata/android/pt/changelogs/66.txt | 33 +++ .../metadata/android/pt/changelogs/68.txt | 31 ++ .../metadata/android/pt/changelogs/69.txt | 19 ++ .../metadata/android/pt/changelogs/70.txt | 25 ++ .../metadata/android/pt/changelogs/71.txt | 10 + .../metadata/android/pt/changelogs/740.txt | 23 ++ .../metadata/android/pt/changelogs/750.txt | 22 ++ .../metadata/android/pt/changelogs/760.txt | 43 +++ .../metadata/android/pt/changelogs/780.txt | 12 + .../metadata/android/pt/changelogs/790.txt | 14 + .../metadata/android/pt/changelogs/800.txt | 27 ++ .../metadata/android/pt/changelogs/810.txt | 19 ++ .../metadata/android/pt/changelogs/840.txt | 22 ++ .../metadata/android/pt/changelogs/930.txt | 19 ++ .../metadata/android/pt/changelogs/955.txt | 6 +- .../metadata/android/pt/changelogs/956.txt | 2 +- .../metadata/android/pt/changelogs/961.txt | 12 + .../metadata/android/pt/changelogs/964.txt | 8 + .../metadata/android/pt/changelogs/966.txt | 14 + .../metadata/android/pt/changelogs/969.txt | 8 + .../metadata/android/pt/changelogs/972.txt | 14 + .../metadata/android/pt/changelogs/983.txt | 9 + .../metadata/android/pt/changelogs/986.txt | 16 + .../metadata/android/pt/changelogs/987.txt | 12 + .../metadata/android/pt/changelogs/993.txt | 13 + .../metadata/android/pt/short_description.txt | 2 +- .../metadata/android/ru/changelogs/63.txt | 4 +- .../metadata/android/ru/changelogs/64.txt | 4 +- .../metadata/android/ru/changelogs/65.txt | 27 +- .../metadata/android/ru/changelogs/66.txt | 34 ++- .../metadata/android/ru/changelogs/68.txt | 32 +- .../metadata/android/ru/changelogs/69.txt | 20 +- .../metadata/android/ru/changelogs/70.txt | 26 +- .../metadata/android/ru/changelogs/71.txt | 11 +- .../metadata/android/ru/changelogs/740.txt | 12 +- .../metadata/android/ru/changelogs/750.txt | 16 +- .../metadata/android/ru/changelogs/760.txt | 62 ++-- .../metadata/android/ru/changelogs/790.txt | 15 +- .../metadata/android/ru/changelogs/800.txt | 12 +- .../metadata/android/ru/changelogs/810.txt | 12 +- .../metadata/android/ru/changelogs/840.txt | 6 +- .../metadata/android/ru/changelogs/900.txt | 10 +- .../metadata/android/ru/changelogs/930.txt | 10 +- .../metadata/android/ru/changelogs/940.txt | 10 +- .../metadata/android/ru/changelogs/951.txt | 10 +- .../metadata/android/ru/changelogs/954.txt | 6 +- .../metadata/android/ru/changelogs/957.txt | 4 +- .../metadata/android/ru/changelogs/964.txt | 4 +- .../metadata/android/ru/changelogs/966.txt | 6 +- .../metadata/android/ru/changelogs/970.txt | 20 +- .../metadata/android/ru/changelogs/972.txt | 14 + .../metadata/android/ru/changelogs/973.txt | 4 + .../metadata/android/ru/changelogs/974.txt | 5 + .../metadata/android/ru/changelogs/975.txt | 17 ++ .../metadata/android/ru/changelogs/976.txt | 10 + .../metadata/android/ru/changelogs/977.txt | 10 + .../metadata/android/ru/changelogs/978.txt | 1 + .../metadata/android/ru/changelogs/979.txt | 2 + .../metadata/android/ru/changelogs/980.txt | 13 + .../metadata/android/ru/changelogs/981.txt | 2 + .../metadata/android/ru/changelogs/983.txt | 9 + .../metadata/android/ru/changelogs/984.txt | 7 + .../metadata/android/ru/changelogs/986.txt | 16 + .../metadata/android/ru/changelogs/987.txt | 6 +- .../metadata/android/ru/changelogs/988.txt | 2 + .../metadata/android/ru/changelogs/989.txt | 3 + .../metadata/android/ru/changelogs/990.txt | 15 + .../metadata/android/ru/changelogs/991.txt | 13 + .../metadata/android/ru/changelogs/992.txt | 17 ++ .../metadata/android/ru/changelogs/993.txt | 13 + .../metadata/android/ru/full_description.txt | 2 +- .../metadata/android/sv/changelogs/790.txt | 14 + .../metadata/android/uk/changelogs/993.txt | 13 + .../android/zh-Hant/changelogs/993.txt | 13 + .../android/zh_Hant_HK/changelogs/981.txt | 4 +- .../android/zh_Hant_HK/changelogs/983.txt | 18 +- .../android/zh_Hant_HK/changelogs/984.txt | 12 +- .../android/zh_Hant_HK/changelogs/985.txt | 2 +- .../android/zh_Hant_HK/changelogs/986.txt | 20 +- .../android/zh_Hant_HK/changelogs/993.txt | 13 + .../android/zh_Hant_HK/full_description.txt | 2 +- .../android/zh_Hant_HK/short_description.txt | 2 +- 188 files changed, 2231 insertions(+), 413 deletions(-) create mode 100644 fastlane/metadata/android/az/changelogs/989.txt create mode 100644 fastlane/metadata/android/cs/changelogs/993.txt create mode 100644 fastlane/metadata/android/es/changelogs/993.txt delete mode 100644 fastlane/metadata/android/eu/changelogs/66.txt create mode 100644 fastlane/metadata/android/hi/changelogs/993.txt delete mode 100644 fastlane/metadata/android/id/changelogs/66.txt create mode 100644 fastlane/metadata/android/it/changelogs/993.txt create mode 100644 fastlane/metadata/android/ko/changelogs/992.txt create mode 100644 fastlane/metadata/android/pa/changelogs/993.txt create mode 100644 fastlane/metadata/android/pl/changelogs/993.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/66.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/68.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/69.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/70.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/71.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/740.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/750.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/760.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/780.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/790.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/800.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/810.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/840.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/930.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/961.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/964.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/966.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/969.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/972.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/983.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/986.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/987.txt create mode 100644 fastlane/metadata/android/pt-PT/changelogs/993.txt create mode 100644 fastlane/metadata/android/pt/changelogs/66.txt create mode 100644 fastlane/metadata/android/pt/changelogs/68.txt create mode 100644 fastlane/metadata/android/pt/changelogs/69.txt create mode 100644 fastlane/metadata/android/pt/changelogs/70.txt create mode 100644 fastlane/metadata/android/pt/changelogs/71.txt create mode 100644 fastlane/metadata/android/pt/changelogs/740.txt create mode 100644 fastlane/metadata/android/pt/changelogs/750.txt create mode 100644 fastlane/metadata/android/pt/changelogs/760.txt create mode 100644 fastlane/metadata/android/pt/changelogs/780.txt create mode 100644 fastlane/metadata/android/pt/changelogs/790.txt create mode 100644 fastlane/metadata/android/pt/changelogs/800.txt create mode 100644 fastlane/metadata/android/pt/changelogs/810.txt create mode 100644 fastlane/metadata/android/pt/changelogs/840.txt create mode 100644 fastlane/metadata/android/pt/changelogs/930.txt create mode 100644 fastlane/metadata/android/pt/changelogs/961.txt create mode 100644 fastlane/metadata/android/pt/changelogs/964.txt create mode 100644 fastlane/metadata/android/pt/changelogs/966.txt create mode 100644 fastlane/metadata/android/pt/changelogs/969.txt create mode 100644 fastlane/metadata/android/pt/changelogs/972.txt create mode 100644 fastlane/metadata/android/pt/changelogs/983.txt create mode 100644 fastlane/metadata/android/pt/changelogs/986.txt create mode 100644 fastlane/metadata/android/pt/changelogs/987.txt create mode 100644 fastlane/metadata/android/pt/changelogs/993.txt create mode 100644 fastlane/metadata/android/ru/changelogs/972.txt create mode 100644 fastlane/metadata/android/ru/changelogs/973.txt create mode 100644 fastlane/metadata/android/ru/changelogs/974.txt create mode 100644 fastlane/metadata/android/ru/changelogs/975.txt create mode 100644 fastlane/metadata/android/ru/changelogs/976.txt create mode 100644 fastlane/metadata/android/ru/changelogs/977.txt create mode 100644 fastlane/metadata/android/ru/changelogs/978.txt create mode 100644 fastlane/metadata/android/ru/changelogs/979.txt create mode 100644 fastlane/metadata/android/ru/changelogs/980.txt create mode 100644 fastlane/metadata/android/ru/changelogs/981.txt create mode 100644 fastlane/metadata/android/ru/changelogs/983.txt create mode 100644 fastlane/metadata/android/ru/changelogs/984.txt create mode 100644 fastlane/metadata/android/ru/changelogs/986.txt create mode 100644 fastlane/metadata/android/ru/changelogs/988.txt create mode 100644 fastlane/metadata/android/ru/changelogs/989.txt create mode 100644 fastlane/metadata/android/ru/changelogs/990.txt create mode 100644 fastlane/metadata/android/ru/changelogs/991.txt create mode 100644 fastlane/metadata/android/ru/changelogs/992.txt create mode 100644 fastlane/metadata/android/ru/changelogs/993.txt create mode 100644 fastlane/metadata/android/sv/changelogs/790.txt create mode 100644 fastlane/metadata/android/uk/changelogs/993.txt create mode 100644 fastlane/metadata/android/zh-Hant/changelogs/993.txt create mode 100644 fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 861726dd3..95e620ad8 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -785,4 +785,12 @@ تحتوي قوائم التشغيل رمادية اللون بالفعل على هذا العنصر. مفيد ، على سبيل المثال ، إذا كنت تستخدم سماعة رأس بأزرار مادية مكسورة تجاهل أحداث ازرار الوسائط الأجهزة + هل تريد إزالة جميع التدفقات المكررة في قائمة التشغيل هذه؟ + إظهار/إخفاء التدفقات + تمت مشاهدته جزئيا + القادمة + إزالة التكرارات + إزالة التكرارات؟ + إظهار التدفقات التالية + شاهدت بالكامل \ 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 index be845845a..93e9e363e 100644 --- a/app/src/main/res/values-as/strings.xml +++ b/app/src/main/res/values-as/strings.xml @@ -39,7 +39,7 @@ উচ্চ ৰিজ\'লিউচন দেখুৱাওক কেৱল কিছুমান ডিভাইচেহে 2K/4K ভিডিঅ’ বজাব পাৰে Kodi ৰ সৈতে বজাওক - Kore এপ ইনষ্টল\? + Kode এপ ইনষ্টল\? \"Kodi ৰ সৈতে খোলক\" বিকল্প দেখুৱাওক Kodi মিডিয়া চেণ্টাৰৰ জৰিয়তে এটা ভিডিঅ\' চলাবলৈ এটা বিকল্প প্ৰদৰ্শন কৰক প্লেয়াৰটো ক্ৰেচ কৰক diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index a9eca55c9..68413792e 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -34,7 +34,7 @@ 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\? + Çatışmayan \"Kode\" tətbiqi yüklənilsin\? \"Kodi ilə Oynat\" seçimini göstər Kodi media mərkəzindən video oynatmaq üçün seçim göstər Səs @@ -733,4 +733,12 @@ Dublikat %d dəfə əlavə edildi Aparat mühiti media düyməsi hadisələrinə məhəl qoyma Məsələn, fiziki düymələri qırılan qulaqlıq işlədirsinizsə faydalıdır + Dublikatları sil + Dublikatlar silinsin\? + Aşağıdakı yayımları göstər + Yayımları Göstər/Gizlə + Tam baxılıb + Qismən baxılıb + Bu pleylistdəki bütün dublikat yayımları silmək istəyirsiniz\? + Yaxınlaşan \ 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 0b857e59b..15beb49bb 100644 --- a/app/src/main/res/values-b+ast/strings.xml +++ b/app/src/main/res/values-b+ast/strings.xml @@ -277,7 +277,7 @@ Desanicia tolos datos na caché de les páxines web Llimpiar los metadatos de la caché Llimpióse la caché d\'imáxenes - ¿Instalar Kore\? + ¿Instalar Kode\? Qué asocedió:\\nSolicitú:\\nLlingua del conteníu:\\nPaís del conteníu:\\nLlingua de l\'aplicación:\\nServiciu:\\nHora en GMT:\\nPaquete:\\nVersión de l\'aplicación:\\nVersión del SO: Nun s\'atopó nengún reproductor de fluxos (pues instalar VLC pa reproducilos). Amuesa una miniatura nel fondu de la pantalla de bloquéu y dientro de los avisos diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index e77a82097..7bbe49ebd 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -1,8 +1,8 @@ - Націсніце лупу, каб пачаць. + Націсніце «Пошук», каб пачаць. Апублікавана %1$s - Патокавы плэер не знойдзены. Усталяваць VLC? + Патокавы прайгравальнік не знойдзены. Усталяваць VLC\? Патокавы плэер не знойдзены (вы можаце ўсталяваць VLC). Усталяваць Скасаваць @@ -16,7 +16,7 @@ Магчыма, вы мелі на ўвазе \"%1$s\"\? Падзяліцца з дапамогай Знешні відэаплэер - Прыбірае гук у некаторых разрозненнях + Адключае гук для некаторых раздзяленнях Знешні аўдыяплэер Падпісацца Вы падпісаныя @@ -30,18 +30,18 @@ У фоне У акне Дадаць да - Каталог для спампаванага відэа - Папка для спампаванга відэа - Увядзіце шлях да папкі для спампавання відэа + Тэчка загрузкі відэа + Загружаныя відэафайлы захоўваюцца тут + Абярыце тэчку загрузкі для відэафайлаў Тэчка загрузкі аўдыё - Папка для спампаванага аўдыя - Увядзіце шлях да папкі для спампавання аўдыя + Загружаныя аўдыёфайлы захоўваюцца тут + Абярыце тэчку загрузкі для аўдыёфайлаў Разрознянне па змаўчанні Разрозненне усплываючага акна Высокія разрозненні Толькі некаторыя прылады могуць прайграваць відэа ў 2K/4K Прайграць у Kodi - Дадатак Kore не знойдзены. Усталяваць яго? + Усталяваць адсутную праграму Kore\? Паказаць опцыю \"Прайграць у Kodi\" Паказаць опцыю прайгравання відэа праз медыяцэнтр Kodi Аўдыё @@ -64,17 +64,17 @@ Аўта- чарга наступнага патока Дадаваць падобныя патокі ў чаргу пры прайграванні апошняга, калі не ўключаны паўтор Варыянты пошуку - Адлюстроўваць падказкі пры пошуку + Выберыце прапановы для паказу пры пошуку Гісторыя пошуку Захоўваць пошукавыя запыты лакальна Гісторыя праглядаў Запамінаць прагледжаныя відэа - Аднавіць прайграванне - Аднаўляць прайграванне пасля перарыванняў (напр. тэлефонных званкоў) + Узнавіць прайграванне + Працягваць прайграванне пасля перапынкаў (напрыклад, тэлефонных званкоў) Загрузіць \"Наступнае\" и \"Прапанаванае\" відэа - \"Зацісніце, каб дадаць\" - Паказаць падказку пры націсканні \"У акне\" ці \"У фоне\" на старонцы звестак аб відэа + Паказаць падказку \"Утрымлівайце, каб паставіць у чаргу\" + Паказаць падказку пры націсканні фонавай або ўсплывальнай кнопкі ў відэа \"Падрабязнасці:\" URL не падтрымліваецца Краіна кантэнту па змаўчанні Мова кантэнту па змаўчанні @@ -87,7 +87,7 @@ Прайграванне ў фонавым рэжыме Прайграванне ва ўсплываючым акне Кантэнт - Кантэнт 18+ + Паказаць кантэнт 18+ Трансляцыя Загрузкі Загрузкі @@ -113,10 +113,10 @@ Перайсці ў галоўнае акно Імпарт дадзеных Экспарт дадзеных - Бягучыя падпіскі, плэйлісты і гісторыя будуць заменены - Экспарт гісторыі, падпісак і плэйлістоў + Перавызначае вашу бягучую гісторыю, падпіскі, плэйлісты і (неабавязкова) налады + Экспарт гісторыі, падпісак, плэйлістоў і налад Ачысціць гісторыю праглядаў - Выдаліць гісторыю прайграных патокаў + Выдаліць гісторыю прайграных патокаў і пазіцыі прайгравання Выдаліць усю гісторыю праглядаў\? Гісторыя праглядаў выдалена Ачысціць гісторыю пошуку @@ -144,9 +144,9 @@ Адбылася памылка: %1$s Няма трансляцый, даступных для загрузкі Прабачце, гэта не павінна было адбыцца. - Адправіць справаздачу па e-mail - Прабачце, адбыліся памылкі. - СПРАВАЗДАЧА + Паведаміць па электроннай пошце + На жаль, нешта пайшло не так. + Справаздача Інфармацыя: Што адбылося: Што:\\nЗапыт:\\nМова кантэнту:\\nКраіна кантэнту:\\nМова праграмы:\\nСэрвіс:\\nЧас GMT:\\nПакет:\\nВерсія:\\nВерсія АС: @@ -182,6 +182,7 @@ %s Відэа %s відэа %s відэа + %s відэа Пачаць Паўза @@ -213,14 +214,14 @@ Аб NewPipe Іншыя ліцэнзіі © %1$s %2$s пад ліцэнзіяй %3$s - Аб дадатку + Аб праграме Ліцэнзіі Свабоднае легкавагавае патокавае прайграванне на Android. Дапамога праекту Вітаецца ўсё - ідэі, пераклад, змены дызайну, чыстка кода або велізарныя змены ў кодзе. Чым больш зроблена, тым лепш! Адкрыць на GitHub Ахвяраваць - Распрацоўшчыкі NewPipe цаной свайго вольнага часу робяць ваша жыццё крышачку зручней. Адплаціце ім тым жа - атрымліваючы асалоду ад кубачка кавы, яны змогуць зрабіць NewPipe яшчэ лепей. + NewPipe распрацаваны добраахвотнікамі, якія праводзяць свой вольны час, забяспечваючы лепшы карыстацкі досвед. Дапамажыце распрацоўшчыкам зрабіць NewPipe яшчэ лепшым, пакуль яны атрымліваюць асалоду ад кавы. Аддаць належнае Вэб-сайт Дзеля атрымання больш падрабязнай інфармацыі і апошніх навін аб NewPipe наведайце наш вэб-сайт. @@ -229,7 +230,7 @@ \nПалітыка прыватнасці NewPipe падрабязна тлумачыць, якія дадзеныя адпраўляюцца і захоўваюцца пры адпраўцы справаздачы аб збоях. Прачытаць палітыку Ліцэнзія NewPipe - NewPipe - свабоднае праграмнае забеспячэнне: вы можаце выкарыстоўваць, вывучаць і паляпшаць яго па сваім меркаванні. У прыватнасці, вы можаце распаўсюджваць і / або змяняць яго ў адпаведнасці з умовамі GNU General Public License, апублікаванай Free Software Foundation, альбо версіі 3, альбо (па вашаму выбару) любой больш позняй версіі. + NewPipe - гэта праграмнае забеспячэнне, свабоднае ад копілефта: вы можаце выкарыстоўваць, вывучаць, дзяліцца і паляпшаць яго па жаданні. У прыватнасці, вы можаце распаўсюджваць і/ці змяняць яго ў адпаведнасці з умовамі Агульнай грамадскай ліцэнзіі GNU, апублікаванай Фондам свабоднага праграмнага забеспячэння, альбо версіі 3 Ліцэнзіі, альбо (на ваш выбар) любой пазнейшай версіі. Прачытаць ліцэнзію Гісторыя Гісторыя @@ -257,7 +258,7 @@ Налады аўдыё Утрымлівайце, каб дадаць у чаргу Пачаць адсюль у фоне - Пачаць адсюль у акне + Пачніце гуляць ва ўсплываючым акне Адкрыць бакавую панэль Зачыніць бакавую панэль Пры адкрыцці кантэнту @@ -272,7 +273,7 @@ Перайменаваць Імя Дадаць у плэйліст - На мініяцюру плэйліста + Усталяваць як мініяцюру плэйліста Дадаць плэйліст у закладкі Выдаліць закладку Выдаліць плэйліст\? @@ -285,7 +286,7 @@ Наблізіць Створаны аўтаматычна Тытры - Змяніць памер тэкста і фон тытраў. Патрэбен перазапуск + Змяніць маштаб тэксту субтытраў гульца і стылі фону. Патрабуецца перазапуск праграмы, каб яна ўступіла ў сілу Маніторынг уцечкі памяці можа прывесці да завісання прыкладання Паведамляць пра памылкі жыццёвага цыклу Прымусова паведамляць пра недастаўляемыя Rx-выключэнні па-за фрагментам або жыццёвым цыкле пасля выдалення @@ -298,11 +299,15 @@ Папярэдні экспарт Не атрымалася імпартаваць падпіскі Не атрымалася экспартаваць падпіскі - Імпарт падпісак з YouTube загрузкай файла экспарту: -\n -\n1. Перайдзіце на: %1$s -\n2. Увайдзіце, калі неабходна -\n3. Павінна пачацца загрузка (гэта будзе файл экспарту) + Імпарт падпісак YouTube з Google Takeout: +\n +\n1. Перайдзіце па гэтым URL: %1$s +\n2. Увайдзіце, калі вас папросяць +\n3. Націсніце на «Усе дадзеныя ўключаны», затым на «Адмяніць выбар усіх», затым выберыце толькі «падпіскі» і націсніце «ОК» +\n4. Націсніце на «Наступны крок», а затым на «Стварыць экспарт» +\n5. Націсніце на кнопку «Спампаваць» пасля таго, як яна з\'явіцца +\n6. Пстрыкніце ФАЙЛ ІМПАРТУВАЦЬ ніжэй і выберыце спампаваны файл .zip +\n7. [Калі імпарт .zip не ўдаецца] Распакуйце файл .csv (звычайна ў раздзеле \"YouTube і YouTube Music/subscriptions/subscriptions.csv\"), націсніце ФАЙЛ ІМПАРТУВАЦЬ ніжэй і выберыце выняты файл CSV Імпарт падпісак з SoundCloud набраўшы альбо URL, альбо ваш ID: \n \n1. Уключыце \"рэжым працоўнага стала\" у браўзэры (сайт недаступны на тэлефоне) @@ -316,11 +321,11 @@ Кіраванне хуткасцю прайгравання Тэмп Тон - Незалежна (скажэнні) + Адчапіць (можа выклікаць скажэнне) Прапускаць цішыню Крок Скід - У адпаведнасці з Агульным рэгламентам па абароне дадзеных ЕС (GDPR), звяртаем вашу ўвагу на палітыку прыватнасці NewPipe. Калі ласка, уважліва азнаёмцеся з ёй. + У адпаведнасці з Агульным рэгламентам па абароне дадзеных ЕС (GDPR), звяртаем вашу ўвагу на палітыку прыватнасці NewPipe. Калі ласка, уважліва азнаёмцеся з ёй. \nВам неабходна прыняць яе ўмовы, каб адправіць нам справаздачу пра памылку. Прыняць Адмовіцца @@ -334,9 +339,9 @@ Адпісацца Абярыце ўкладку Жэст гучнасці - Выкарыстоўвай жэсты для кіравання гучнасцю плэера + Мяняць гучнасць плэера жэстамі Жэст яркасці - Выкарыстоўвай жэсты для кіравання яркасцю плэера + Мяняць яркасць плэера жэстамі Абнаўленні Файл выдалены Апавяшчэнне аб абнаўленні праграмы @@ -360,18 +365,18 @@ прыпынена у чарзе постапрацоўка - Чарга + Паставіць у чаргу Дзеянне забаронена сістэмай Памылка загрузкі Стварыць унікальнае імя Перазапісаць Загрузка з такім імем ужо выконваецца Паказаць тэкст памылкі - Тэчка прызначэння не можа быць створана - Файл не можа быць створаны - Немагчыма ўсталяваць абароненае злучэнне + Немагчыма стварыць папку прызначэння + Немагчыма стварыць файл + Не атрымалася ўсталяваць бяспечнае злучэнне Сервер не знойдзены - Немагчыма злучыцца з серверам + Немагчыма падключыцца да сервера Не атрымалася атрымаць дадзеныя з сервера Сервер не падтрымлівае шматструменную загрузку, паспрабуйце з @string/msg_threads = 1 Не знойдзена @@ -412,11 +417,11 @@ Запытваць тэчку загрузкі Вам будзе прапанавана ўказаць месца захавання кожнай загрузкі. \nУключыце сістэмны выбарнік тэчкі (SAF), калі вы хочаце загружаць файлы на знешнюю SD-картку - Выкарыстоўваць SAF + Выкарыстоўвайце сродак выбару сістэмных тэчак (SAF) \'Storage Access Framework\' дазваляе загружаць на знешнюю SD-картку Пераключыць службу, выбраную ў дадзены момант: Выдаліць ўсе пазіцыі прайгравання - Абмежаваны рэжым YouTube + Уключыце \"Абмежаваны рэжым\" YouTube Падтрымліваюцца толькі адрасы URL HTTPS Дадаць экзэмпляр Экзэмпляры PeerTube @@ -434,10 +439,10 @@ Выдаліць загружаныя файлы Арыгінальныя тэксты з сэрвісаў будуць бачны ў ленце элементаў Ачысціце cookie, якія NewPipe захоўвае пры рашэнні reCAPTCHA - Экзэмпляр ужо існуе + Інстанцыя ўжо існуе Немагчыма праверыць экзэмпляр - Увесці URL экзэмпляра - Выберыце улюбёныя экзэмпляры PeerTube + Увядзіце адрас URL інстанцыі + Выбярыце улюбёныя інстанцыі PeerTube Актыўны плэер быў зменены Змена плэера можа замяніць вашу чаргу Запытаць, перш чым ачысціць чаргу @@ -463,7 +468,7 @@ Скапіруйце адфарматаваны багрэпарт Дайце дазвол на адлюстраванне паверх іншых праграм Выдаліць усе пазіцыі прайгравання\? - Выдаліць пазіцыі прайгравання + Выдаліць пазіцыю прайгравання Ачысціць reCAPTCHA cookies reCAPTCHA cookies былі ачышчаны Выканаўцы @@ -471,7 +476,7 @@ Песні Відэа Аўтаматычная чарга - Працягласць перамоткі ўперад/назад + Крок перамотвання Каляровыя апавяшчэнні Нічога Буферызацыя @@ -589,5 +594,175 @@ Змяніць памер інтэрвалу загрузкі (зараз %s). Меншае значэнне можа паскорыць пачатковую загрузку відэа. Змены патрабуюць перазапуск плэера Выключыце, каб схаваць апісанне відэа і дадатковую інфармацыю - + Прапановы лакальнага пошуку + Наладзіць апавяшчэнне аб бягучым прайграванні патоку + Гэта відэа абмежавана па ўзросце. +\n +\nУключыце \"%1$s\" у наладах, калі хочаце бачыць гэта. + Апавяшчэнне аб памылцы + Апавяшчэнні для паведамлення аб памылках + NewPipe выявіў памылку, націсніце, каб паведаміць + Не запускайце відэа ў міні-прайгравальніку, а пераключыце непасрэдна ў поўнаэкранны рэжым, калі аўтаматычны паварот заблакіраваны. Вы ўсё яшчэ можаце атрымаць доступ да міні-плэера, выйшоўшы з поўнаэкраннага рэжыму + Знайдзіце асобнікі, якія вам падабаюцца, на %s + Паказаць метаінфармацыю + Ігнараваць падзеі апаратных медыякнопак + Паказваць змесціва, магчыма непрыдатнае для дзяцей, таму што яно мае ўзроставыя абмежаванні (напрыклад, 18+) + Калі ласка, праверце, ці існуе ўжо праблема з абмеркаваннем вашага збою. Пры стварэнні дублікатаў тыкетаў вы забіраеце ў нас час, які мы маглі б патраціць на выпраўленне фактычнай памылкі. + Адбылася памылка, глядзіце апавяшчэнне + Збой плэера + Карысна, напрыклад, калі вы карыстаецеся гарнітурай са зламанымі фізічнымі кнопкамі + Адключыце, каб схаваць поля метаінфармацыі з дадатковай інфармацыяй пра стваральніка патоку, змесціва патоку або пошукавы запыт + Прапановы аддаленага пошуку + Гэта відэа абмежавана па ўзросце. +\nУ сувязі з новай палітыкай YouTube у дачыненні да відэа з узроставымі абмежаваннямі, NewPipe не можа атрымаць доступ ні да аднаго са сваіх відэапатокаў і, такім чынам, не можа іх прайграваць. + YouTube забяспечвае \"Абмежаваны рэжым\", які хавае патэнцыйна змесціва для дарослых + Разлік хэша + Вырашана + Створана аўтаматычна (запампавальнік не знойдзены) + Плэйлісты, якія пазначаны шэрым, ужо ўтрымліваюць гэты элемент. + + %s новы стрым + %s новыя стрымы + %s новых стрымаў + %s новых стрымаў + + Каментарыі + У чаргу далей + У чарзе наступны + Загрузка звестак аб стрыме… + Апрацоўка... Можа заняць некаторы час + Дублікат дададзены %d раз + LeakCanary недаступны + Паказаць уцечкі памяці + Адключыце мультымедыйнае тунэляванне, калі ў вас з\'яўляецца чорны экран або заіканне падчас прайгравання відэа + Не ўдалося скапіраваць у буфер абмену + Папка спампоўкі пакуль не ўстаноўлена, выберыце папку спампоўкі па змаўчанні + Часта задаюць пытанні + Перайсці на вэбсайт + Правядзіце пальцам па элементах, каб выдаліць іх + Адмяніць пастаянную мініяцюру + Паказаць індыкатары выявы + Паказваць каляровыя стужкі Пікаса на выявах, якія пазначаюць іх крыніцу: чырвоная для сеткі, сіняя для дыска і зялёная для памяці + Апрацоўка стужкі… + Вам будзе прапанавана, дзе захоўваць кожную спампоўку + Загрузка стужкі… + Выдаліць прагледжаныя відэа\? + Ды і відэа часткова прагледзеў + Працэнт + Відэа, якія былі прагледжаны да і пасля дадання ў спіс прайгравання, будуць выдалены. +\nВы ўпэўнены\? Гэта не можа быць адменена! + Паказвае варыянт збою пры выкарыстанні плэера + Выдаліць прагледжанае + Паказаць панэль памылак + Паўтон + Любая сетка + Не загружана: %d + Пачынаючы з Android 10 падтрымліваецца толькі \"Storage Access Framework\" + Праверка абнаўленняў… + Выдаліць дублікаты\? + Выдаліць дублікаты + Вы хочаце выдаліць усе паўтаральныя стрымы ў гэтым плэйлісце\? + Новыя элементы стужкі + + %d выбраны + %d выбраныя + %d выбраных + %d выбраных + + Пустая назва групы + Вы хочаце выдаліць гэту групу\? + Новы + Паказаць толькі разгрупаваныя падпіскі + Маючыя адбыцца + Паказаць «Збой плэера» + Запусціце праверку новых патокаў + Збой праграмы + Апавяшчэнні аб новых стрымах + Апавяшчаць аб новых стрымах з падпісак + Частата праверкі + Патрабуецца падключэнне да сеткі + Праверце наяўнасць абнаўленняў + Праверце новыя версіі ўручную + Аўтаматычны запуск прайгравання — %s + Картка + Націсніце, каб спампаваць %s + + Загрузка скончана + %s загрузкі скончаны + %s загрузак скончана + %s загрузак скончана + + Заўсёды абнаўляць + Парог абнаўлення стужкі + Немагчыма загрузіць канал для «%s». + Стужка + Час пасля апошняга абнаўлення, перш чым падпіска лічыцца састарэлай — %s + Памылка загрузкі стужкі + Уліковы запіс аўтара быў спынены. +\nNewPipe не зможа загрузіць гэты канал у будучыні. +\nВы хочаце адмовіцца ад падпіскі на гэты канал\? + Рэжым хуткай загрузкі стужкі не дае дадатковай інфармацыі аб гэтым. + Атрымлівайце са спецыяльнага канала, калі ён даступны + Уключыць хуткі рэжым + Катэгорыя + Тэгі + Ліцэнзія + Хост + URL мініяцюры + Не ў спісе + Прыватная + , + Пераключыць усё + Стрымы, якія яшчэ не падтрымліваюцца загрузчыкам, не адлюстроўваюцца + Мініяцюра аватара канала + Аўтар: %s + Аўтару відэа спадабалася гэта + Створана %s + Адключыць хуткі рэжым + Публічная + Замацаваны каментар + Вы падпісаліся на канал + Апошнія + Радыё + Паказаць наступныя стрымы + Паказаць/схаваць стрымы + Гэты кантэнт яшчэ не падтрымліваецца NewPipe. +\n +\nСпадзяюся, ён будзе падтрымлівацца ў наступных версіях. + Старонка плэйліста + Паказаць мініяцюру + Выкарыстоўвайце мініяцюру як для фону экрана блакіроўкі, так і для апавяшчэнняў + Для гэтага дзеяння не знойдзены адпаведны дыспетчар файлаў. +\nКалі ласка, усталюйце файлавы мэнэджар або паспрабуйце адключыць «%s» у наладах загрузкі + Гэты кантэнт недаступны ў вашай краіне. + Гэта трэк SoundCloud Go+, прынамсі ў вашай краіне, таму NewPipe не можа трансляваць ці спампоўваць яго. + Гэта змесціва з\'яўляецца прыватным, таму NewPipe не можа яго трансляваць або спампоўваць. + Гэта відэа даступна толькі для падпісчыкаў YouTube Music Premium, таму NewPipe не можа яго трансляваць або спампоўваць. + Уліковы запіс спынены + %s дае наступную прычыну: + Рэкамендаваны + Унутраная + Цалкам прагледзеў + Гэты кантэнт даступны толькі для аплачаных карыстальнікаў, таму NewPipe не можа яго трансляваць або спампоўваць. + Даступны ў некаторых службах, звычайна нашмат хутчэй, але можа вяртаць абмежаваную колькасць элементаў і часта няпоўную інфармацыю (напрыклад, без працягласці, тыпу элемента, без актыўнага стану) + Узроставае абмежаванне + Для гэтага дзеяння не знойдзены адпаведны дыспетчар файлаў. +\nКалі ласка, усталюйце файлавы менеджэр, сумяшчальны з Storage Access Framework + Ніякая праграма на вашай прыладзе не можа адкрыць гэта + Стандартнае значэнне ExoPlayer + Часткова прагледжана + Як вы думаеце, загрузка корму адбываецца занадта павольна\? Калі так, паспрабуйце ўключыць хуткую загрузку (гэта можна змяніць у наладах або націснуўшы кнопку ніжэй). +\n +\nNewPipe прапануе дзве стратэгіі загрузкі корму: +\n• Атрыманне ўсяго канала падпіскі павольнае, але поўнае. +\n• Выкарыстанне спецыяльнай канчатковай кропкі абслугоўвання, якая працуе хутка, але звычайна не поўная. +\n +\nРозніца паміж імі заключаецца ў тым, што хуткаму звычайна не хапае некаторай інфармацыі, напрыклад, працягласці або тыпу элемента (не можа адрозніць жывыя відэа ад звычайных), і ён можа вяртаць менш элементаў. +\n +\nYouTube з\'яўляецца прыкладам сэрвісу, які прапануе гэты хуткі метад са сваім RSS-каналам. +\n +\nТакім чынам, выбар зводзіцца да таго, што вы аддаеце перавагу: хуткасць або дакладная інфармацыя. + Прыватнасць + Мова + Падтрымка \ No newline at end of file diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 27a70053e..d1cb10fd7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -36,7 +36,7 @@ Покажи по-високи резолюции Само някои устройства могат да възпроизвеждат 2K/4K видео Въпроизвеждане с Kodi - Инсталиране на липсващото приложение \"Kore\"\? + Инсталиране на липсващото приложение \"Kode\"\? Покажи „Възпроизвеждане с Kodi“ Показване на опция за възпроизвеждане на видео чрез „Kodi media center“ Аудио diff --git a/app/src/main/res/values-bn-rIN/strings.xml b/app/src/main/res/values-bn-rIN/strings.xml index 096674cce..53d99fb5f 100644 --- a/app/src/main/res/values-bn-rIN/strings.xml +++ b/app/src/main/res/values-bn-rIN/strings.xml @@ -101,7 +101,7 @@ অডিও Kodi মিডিয়া সেন্টারে এর মাধ্যমে ভিডিও প্লে করার জন্য একটি বিকল্প প্রদর্শন কর দেখাও \"Kodi এর মাধ্যমে চালাও \" বিকল্প - হারানো কোর ইনস্টল করবেন\? + অনুপস্থিত কোড অ্যাপ ইনস্টল করবেন\? Kodi এর মাধ্যমে চালান শুধুমাত্র কিছু ডিভাইস 2K/4K ভিডিও চালাতে পারে উচ্চ রেজোল্যুশন দেখাও diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 75a41c99a..6bfe27af8 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -251,7 +251,7 @@ থাম্বনেলে ১:১ অনুপাতে করো Kodi মিডিয়া সেন্টারে এর মাধ্যমে ভিডিও প্লে করার জন্য একটি বিকল্প প্রদর্শন কর \"Kodi দ্বারা চালান\" বিকল্পটি প্রদর্শন কর - হারানো কোর ইনস্টল করবে\? + অনুপস্থিত কোড অ্যাপ ইনস্টল করবেন\? Kodi দ্বারা চালাও শুধুমাত্র কিছু ডিভাইস 2K/4K ভিডিও চালাতে পারে উচ্চতর রেজুলেশন প্রদর্শন করা হবে diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index e865f3c22..855c577a6 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -28,7 +28,7 @@ Otkazana pratnja kanala Nije moguće promijeniti pratnju Nije moguće ažurirati pratnju - Instalirajte nedostajeću Kore aplikaciju\? + Instalirajte nedostajeću Kode aplikaciju\? Obilježeni Popisi Iskačni prozor Izaberite Podprozor diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 633599827..ac25b2992 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -114,7 +114,7 @@ Mostra resolucions superiors Només alguns dispositius poden reproduir vídeos en 2K/4K Reprodueix amb el Kodi - No s\'ha trobat l\'aplicació Kore. Voleu instal·lar-la\? + No s\'ha trobat l\'aplicació Kode. Voleu instal·lar-la\? Mostra «Reprodueix amb el Kodi» Mostra una opció per reproduir un vídeo amb el centre multimèdia Kodi Reproductor emergent intel·ligent diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index c13e8ddb3..eda30eb11 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -551,7 +551,7 @@ Pouze na Wi-Fi Automaticky zahájit přehrávání — %s Přehrát frontu - Nelze rozpoznat zadané URL. Otevřít pomocí jiné aplikace\? + Nelze rozpoznat zadanou adresu URL. Otevřít pomocí jiné aplikace\? Automatické přehravání Fronta aktivního přehrávače bude smazána Při přechodu z jednoho přehrávače do druhého může dojít k smazání fronty @@ -746,4 +746,12 @@ Duplikát přidán %dkrát Ignorovat události hardwarových tlačítek médií Užitečné například v případě, že používáte sluchátka s rozbitými fyzickými tlačítky + Odstranit duplicity\? + Zobrazit následující streamy + Zobrazit/skrýt streamy + Celé zhlédnuto + Částečně zhlédnuto + Nadcházející + Odstranit duplicity + Chcete odstranit všechny duplicitní streamy v tomto playlistu\? \ 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 4f219e97b..6b16e6eae 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -43,7 +43,7 @@ Vis højere opløsninger Kun nogle enheder kan afspille 2K-/4K-videoer Afspil med Kodi - Installer manglede Kore-app\? + Installer manglede Kode-app\? Vis valgmuligheden \"Afspil med Kodi\" Vis en knap til at afspille en video via Kodi-mediecenteret Lyd @@ -163,7 +163,7 @@ Genskab standardindstillinger Vil du genoprette standardindstillingerne\? Undskyld, dette skulle ikke være sket. - Rapporter denne fejl via e-mail + Rapporter via e-mail Beklager, noget gik galt. Rapporter Information: @@ -726,4 +726,9 @@ Vælg kvalitet til eksterne afspillere Vis fremtidige elementer Sortér + Ignorer hardware medie knapper + Brugbart f.eks. hvis du bruger et headset med ødelagte fysiske knapper + Playlists der er grået ud, indeholder allerede dette objekt. + Inaktiver permanent thumbnail + Fejlede at kopiere til udklipsholderen \ 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 6d643f1b9..369410508 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -733,4 +733,12 @@ Die ausgegrauten Wiedergabelisten enthalten dieses Element bereits. Nützlich, wenn z. B. ein Headset mit defekten physischen Tasten verwendet wird Ereignisse der Hardware-Medientasten ignorieren + Duplikate entfernen + Duplikate entfernen\? + Möchtest du alle doppelten Streams in dieser Wiedergabeliste entfernen\? + Streams anzeigen/ausblenden + Folgende Streams anzeigen + Demnächst + Vollständig angeschaut + Teilweise angeschaut \ 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 1ba8811a6..0a42d5d0f 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -733,4 +733,12 @@ Προστέθηκε διπλότυπο %d φορά(ες) Αγνοήστε τα συμβάντα κουμπιών πολυμέσων υλικού Χρήσιμο, για παράδειγμα, εάν χρησιμοποιείτε ακουστικά με χαλασμένα φυσικά κουμπιά + Εμφάνιση των ακόλουθων ροών + Θεαθέντα πλήρως + Προσεχή + Εμφάνιση/Απόκρυψη ροών + Αφαίρεση διπλοτύπων; + Θέλετε να καταργήσετε όλες τις διπλότυπες ροές σε αυτήν τη λίστα αναπαραγωγής; + Αφαίρεση διπλοτύπων + Θεαθέντα μερικώς \ 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 b99af00e1..91ba5b654 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -16,7 +16,7 @@ Elija la carpeta de descarga para los archivos de vídeo Resolución predefinida Reproducir con Kodi - ¿Instalar la aplicación Kore que falta\? + ¿Instalar la aplicación Kode que falta\? Mostrar opción «Reproducir con Kodi» Mostrar una opción para reproducir un vídeo a través de Kodi media center Audio @@ -749,4 +749,12 @@ Las listas de reproducción que están en gris ya contienen este elemento. Útil, por ejemplo, si está utilizando un auricular con botones físicos rotos Ignorar eventos para botones multimedia de hardware + ¿Eliminar los duplicados\? + ¿Desea eliminar todas las secuencias duplicadas de esta lista de reproducción\? + Mostrar las siguientes secuencias + Mostrar/Ocultar secuencias + Próximamente + Eliminar los duplicados + Completamente visto + Parcialmente visto \ 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 7c4398007..a4ee72c57 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -41,7 +41,7 @@ Kuva kõrgemaid lahutusi Ainult mõned seadmed suudavad esitada 2K/4K videoid Esita Kodi abil - Kas paigaldada puuduv Kore rakendus\? + Kas paigaldada puuduv Kode rakendus\? Kuva valik \"Esita Kodi abil\" Kuva valik video esitamiseks Kodi meediakeskuse kaudu Heli @@ -733,4 +733,12 @@ Topeltkirje lisatud %d kord(a) Kasulik näiteks kui olukorras kui kõrvaklappide nupud on katki Eira nutiseadmes asuvate või seotud seadmete meedianuppude vajutusi + Eemalda topeltkirjed + Kas eemaldame topeltkirjed\? + Kas sa soovid eemaldada kõik topelt meediavood sellest esitusloendist\? + Näita järgmisi meediavooge + Näita/peida meediavood + Tulemas + Lõpuni vaadatud + Osaliselt vaadatud \ 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 d94924259..946de5363 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -14,7 +14,7 @@ Aukeratu bideoak deskargatzeko karpeta Lehenetsitako bereizmena Jo Kodirekin - Kore aplikazioa instalatu\? + Kode aplikazioa instalatu\? Erakutsi \"Jo Kodirekin\" aukera Erakutsi bideoa Kodi multimedia zentroarekin erreproduzitzeko aukera Audioa @@ -74,7 +74,7 @@ Ezin izan da deskargen menua ezarri Aplikazioa/interfazea kraskatu da Hori ez litzateke gertatu behar. - Eman errore honen berri e-posta bidez + Eman honen berri e-posta bidez Barkatu, zerbait gaizki atera da. Salatu Informazioa: @@ -731,4 +731,14 @@ Modu azkarra Hiru-puntutako menutik harpidetzak inportatu edo esportatu Maiz galdetutako galderak + Ezikusi hardware multimedia botoien gertaerak + Erabilgarria, adibidez, botoi fisiko hautsiak dituen entzungailua erabiltzen ari bazara + Kendu bikoiztuak + Kendu bikoiztuak\? + Jario bikoiztu guztiak kendu nahi dituzu erreprodukzio-zerrenda honetatik\? + Erakutsi hurrengo jarioak + Erakutsi/Ezkutatu jarioak + Partzialki ikusita + Guztiz ikusia + Laster agertzeko \ 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 6836ccb87..fe5750dd9 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -51,7 +51,7 @@ محتوا در دسترس نیست نمی‌توان فهرست بارگیری را برپا ساخت ببخشید! نباید این اتّفاق زخ می‌داد. - این خطا را با رایانامه گزارش کنید + گزارش با رایانامه ببخشید، چیزی به درستی پیش نرفت. گزارش اطّلاعات: @@ -729,4 +729,12 @@ کارت شکست در رونوشت به تخته‌گیره ناتنظیم بندانگشتی ثابت + چشم‌پوشی از رخدادهای دکمهٔ رسانهٔ سخت‌افزاری + برداشتن تکراری‌ها + برداشتن تکراری‌ها؟ + نمایش یا نهفتن جریان‌ها + نمایش جریان‌های زیر + پیش رو + کامل دیده شده + نیمه دیده شده \ 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 026839c50..fcd0cb609 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -36,7 +36,7 @@ Näytä korkeammat resoluutiot Vain jotkin laitteet voivat toistaa 2K/4K-videota Toista Kodissa - Asennetaanko puuttuva Kore-sovellus\? + Asennetaanko puuttuva Kode-sovellus\? Näytä ”Toista Kodissa”-vaihtoehto Näyttää vaihtoehdon videon toistamiseen Kodi-mediasoittimessa Ääni diff --git a/app/src/main/res/values-fil/strings.xml b/app/src/main/res/values-fil/strings.xml index b1529c7f7..c66d1db75 100644 --- a/app/src/main/res/values-fil/strings.xml +++ b/app/src/main/res/values-fil/strings.xml @@ -1,6 +1,6 @@ - Pindutin ang magnifying glass upang magsimula. + Pindutin ang magnifying glass para magsimula. Inilathala noong %1$s Walang nakitang stream player. I-install ang VLC\? Walang nakitang stream player (pwede mong i-install ang VLC para ma-play ito). @@ -16,11 +16,11 @@ \"%1$s\" ba ang tinutukoy mo\? Ibahagi sa Gumamit ng ibang video player - Natatanggal ang tunog sa ilang mga resolusyon + Nawawala ang tunog sa ilang resolusyon Gumamit ng ibang audio player Sumubaybay - Sinusubaybayan - Ihinto ang pagsubaybay + Sumusubaybay + Tumigil sa pagsubaybay Hininto ang pagsubaybay sa channel Hindi mabago ang pagsubaybay Hindi ma-update ang pagsubaybay @@ -58,7 +58,7 @@ Tema Lokal na mungkahi Remote na mungkahi - Markahan bilang napanood + Markahan bilang napanood na Kusang ipila Ulitin Halo-halo @@ -104,7 +104,7 @@ Tandaan ang mga property ng popup Panimulang linaw ng popup Mape-play lang ng ilang device ang mga video na 2K/4K - I-install ang nawawalang Kore app\? + I-install ang nawawalang Kode app\? I-scale ang thumbnail sa 1:1 aspect ratio I-scale ang thumbnail ng video sa abiso mula 16:9 papuntang 1:1 aspect ratio (pwedeng magkaroon ng distortion) Unang action button diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 370f75ccf..ea891723b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -53,7 +53,7 @@ Impossible de charger toutes les miniatures Impossible de déchiffrer la signature URL de la vidéo Désolé, cela n’aurait pas dû se produire. - Signaler cette erreur par courriel + Signaler par courriel Information : Ce qui s’est passé : Votre commentaire (en anglais) : @@ -744,4 +744,16 @@ 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 + Utile si vous utilisez un casque avec des boutons dysfonctionnels, par exemple + Effacer les doublons + Effacer les doublons \? + Voulez-vous retirer tous les doublons de cette liste \? + Afficher les flux suivants + Entièrement vu + Partiellement vu + À venir + Ignorer les évènements des boutons média des périphériques + Doublon ajouté %d fois + Afficher/Cacher les flux + Enlever la miniature permanente \ 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 dc7ae6011..7aafe4e7e 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -41,7 +41,7 @@ Mostrar resolucións máis altas Só algúns dispositivos poden reproducir vídeos en 2K/4K Reproducir co Kodi - Quere instalar o aplicativo Kore que falta\? + Quere instalar o aplicativo Kode que falta\? Mostrar a opción «Reproducir co Kodi» Mostrar unha opción para reproducir o vídeo co Kodi Media Center Audio @@ -143,7 +143,7 @@ Ocorreu un erro: %1$s Non hai emisións para descargar Deculpe, isto non debería ter acontecido. - Informar deste erro por enderezo electrónico + Informar por correo electrónico Desculpe, algo foi mal. Informe Información: @@ -731,4 +731,14 @@ Tarxeta As listas de reprodución que se atopan atenuadas xa conteñen este elemento. Duplicado engadido %d vez/veces + Mostrar/Ocultar emisións + Ignorar eventos con botóns multimedia físicos + Útil, por exemplo, se estiver usando un auricular con botóns rotos + Eliminar duplicados + Eliminar duplicados\? + Desexa eliminar todas as emisións duplicadas nesta lista de reprodución\? + Mostrar os seguintes vídeos + Completamente visto + Parcialmente visto + Proximamente \ No newline at end of file diff --git a/app/src/main/res/values-gu/strings.xml b/app/src/main/res/values-gu/strings.xml index 2b43cbf14..e910db9cc 100644 --- a/app/src/main/res/values-gu/strings.xml +++ b/app/src/main/res/values-gu/strings.xml @@ -24,7 +24,7 @@ સૂચનામાં 16: 9 થી 1: 1 અસ્પેક્ટ રેશિયોમાં બતાવેલ વિડિઓ થંબનેલને સ્કેલ કરો (વિકૃતિ રજૂ કરી શકે છે) સ્કેલ થંબનેલથી 1: 1 પાસા રેશિયો કોડી મીડિયા સેન્ટર દ્વારા વિડિઓ ચલાવવાનો વિકલ્પ દર્શાવો - અનુપસ્થિત Kore એપ્લિકેશન ઇન્સ્ટોલ કરીએ\? + અનુપસ્થિત Kode એપ્લિકેશન ઇન્સ્ટોલ કરીએ\? ફક્ત થોડા ઉપકરણો 2K / 4K વિડિઓઝ ચલાવી શકે છે ઉચ્ચ રીઝોલ્યુશન બતાવો ડિફોલ્ટ પોપઅપ રીઝોલ્યુશન diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index c6358ae26..ffd65b736 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -29,7 +29,7 @@ הצגת רזולוציות גבוהות יותר רק חלק מהמכשירים יכולים לנגן סרטונים ב־2K/4K נגינה ב־Kodi - להתקין את יישומון Kore החסר\? + להתקין את יישומון Kode החסר\? הצגת האפשרות לניגון עם Kodi הצגת אפשרות לנגן סרטון דרך מרכז המדיה Kodi שמע diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index f2f084f86..86e7a98d0 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -58,7 +58,7 @@ उच्च गुणवत्ता स्तर दिखाएं केवल कुछ ही डिवाईस 2के/4के मे वीडियो चला सकते हैं कोडी मे चलाए - कोरे ऐप नहीं मिला, इसे स्थापित करें\? + लापता Kode ऐप स्थापित करें\? \"कोडी मे चलाएं\" वाला विकल्प दिखाएँ कोडी मीडिया सेंटर से वीडियो चलने के लिए विकल्प प्रदर्शित करें प्रथम स्थापित ध्वनि फॉर्मेट @@ -731,4 +731,14 @@ क्लिपबोर्ड पर कॉपी करने में विफल धुंधली की गई प्‍लेलिस्‍ट में पहले से ही यह आइटम है। डुप्लीकेट जोड़ा गया %d बार + डुप्लीकेट हटाएं + डुप्लीकेट हटाएं\? + क्या आप इस प्लेलिस्ट की सभी डुप्लीकेट स्ट्रीम हटाना चाहते हैं\? + निम्नलिखित स्ट्रीम दिखाएँ + आगामी + हार्डवेयर मीडिया बटन घटनाओं की अनदेखी करें + उपयोगी है, उदाहरण के लिए, यदि आप टूटे हुए भौतिक बटन वाले हेडसेट का उपयोग कर रहे हैं + स्ट्रीम दिखाएँ / छिपाएँ + पूरा देखा + आंशिक रूप से देखा गया \ 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 cdaae6cf9..fa3505011 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -36,7 +36,7 @@ Prikaži veće rezolucije Samo neki uređaji podržavaju reprodukciju 2K/4K videa Reproduciraj s Kodijem - Instalirati nedostajući Kore program\? + Instalirati nedostajući Kode program\? Prikaži opciju „Reproduciraj pomoću Kodija” Prikaži opciju za reproduciranje videozapisa putem Kodija Audiosnimka diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5ae2288c0..6327aba2d 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -16,7 +16,7 @@ Válasszon letöltési mappát a videófájloknak Alapértelmezett felbontás Lejátszás Kodival - Telepíti a hiányzó Kore alkalmazást\? + Telepíti a hiányzó Kode alkalmazást\? A „Lejátszás Kodival” lehetőség megjelenítése A videók Kodi médiaközponttal történő lejátszásának megjelenítése Hang diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index ca225f2f1..06df20082 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -20,7 +20,7 @@ Pilih folder unduhan untuk berkas audio Pilih kualitas Putar dengan Kodi - Instal aplikasi Kore yang hilang\? + Instal aplikasi Kode yang hilang\? Tampilkan opsi \"Putar dengan Kodi\" Tampilkan opsi untuk memutar video via Kodi Audio @@ -720,4 +720,12 @@ Duplikat ditambahkan %d kali Berguna, misalnya, jika Anda menggunakan sebuah headset dengan tombol fisik yang rusak Abaikan peristiwa tombol media perangkat keras + Hapus duplikat + Ditonton secara lengkap + Ditonton sebagian + Mendatang + Tampilkan/Sembunyikan saluran + Hapus duplikat\? + Apakah Anda ingin menghapus semua saluran duplikat di daftar putar ini\? + Tampilkan saluran berikut \ 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 c40a74ef1..cac9b0d2a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -52,7 +52,7 @@ Tocca la lente d\'ingrandimento per iniziare. In diretta Spiacenti, non sarebbe dovuto succedere. - Segnala l\'errore via e-mail + Segnala via e-mail Spiacente, qualcosa è andato storto. Segnala Info: @@ -744,4 +744,14 @@ Disattiva copertina permanente Le playlist in grigio contengono già questo elemento. Doppione aggiunto %d volta/e + Ignora eventi dei pulsanti multimediali hardware + Utile usando cuffie con tasti fisici rotti + Rimuovi elementi doppi + Rimuovere gli elementi doppi\? + Rimuovere tutti gli elementi doppi di questa playlist\? + Mostra gli elementi seguenti + Mostra/Nascondi elementi + Visto parzialmente + Visto completamente + Prossimamente \ 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 6a83d9fad..e9b0798bb 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -16,7 +16,7 @@ 動画ファイルをダウンロードするフォルダーを選択して下さい デフォルトの画質 Kodi で再生 - Kore をインストールしますか? + Kode をインストールしますか? 「Kodi で再生」オプションを表示 Kodi メディアセンター経由で動画を再生するための設定を表示します 音声 @@ -718,4 +718,14 @@ 灰色で表示されているプレイリストには、すでにこのアイテムが含まれています。 %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 index ecc868f9e..9ba01e672 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -89,7 +89,7 @@ გადმოწერილი ვიდეო ფაილები ინახება აქ აუდიოს ჩამოტვირთვის საქაღალდე უფრო მაღალი რეზოლუციის ჩვენება - დააინსტალიროთ დაკარგული Kore აპი\? + დააინსტალიროთ დაკარგული Kode აპი\? აჩვენეთ \"დაუკარი კოდით\" ვარიანტი აჩვენეთ ვიდეოს დაკვრის ვარიანტი Kodi მედია ცენტრის საშუალებით შეტყობინებაში ნაჩვენები ვიდეოს ესკიზის ამოჭრა 16:9-დან 1:1-მდე ასპექტის თანაფარდობით diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 8e4d024aa..20ddac776 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -16,7 +16,7 @@ 비디오 파일이 다운로드 될 폴더를 선택하세요 기본 해상도 Kodi로 재생 - Kore 앱이 발견되지 않았습니다. Kore를 설치할까요\? + 누락된 한국어 앱을 설치하시겠습니까\? \"Kodi로 재생\" 옵션 표시 비디오를 Kodi 미디어 센터를 사용해 재생하는 옵션을 표시합니다 오디오 @@ -36,8 +36,8 @@ 다운로드된 오디오 파일이 이 곳에 저장됩니다 오디오 파일이 다운로드 될 폴더를 선택하세요 테마 - 어두운 테마 - 밝은 테마 + 다크 테마 + 라이트 테마 외관 백그라운드에서 재생 중 네트워크 오류 @@ -52,7 +52,7 @@ 컨텐츠를 사용할 수 없습니다 다운로드 메뉴를 설정할 수 없습니다 죄송합니다. 오류가 발생했습니다. - 이메일을 통해 이 오류 보고 + 이메일을 통해 보고 죄송합니다. 문제가 발생했습니다. 보고 정보: @@ -83,7 +83,7 @@ 높은 해상도 표시 일부 기기에서만 2K/4K 해상도 재생이 지원됩니다 기본 비디오 형식 - 검은 테마 + 블랙 테마 팝업 크기 및 위치 기억 마지막으로 사용한 팝업 위치 및 크기를 기억합니다 검색 제안 @@ -131,7 +131,7 @@ 비디오 없음 OK 파일명 - 쓰레드 + 스레드 오류 NewPipe 다운로드 중 터치해서 상세 정보 확인 @@ -150,7 +150,7 @@ NewPipe에 대해서 제3자 라이센스 © %3$s 하에서 %2$s 에 의한 %1$s - 정보 및 자주 묻는 질문들 + 정보 및 자주 묻는 질문 라이센스 가볍고 빠른 자유 안드로이드 스트리밍 앱입니다. 기여 @@ -181,14 +181,14 @@ 오디오 설정 눌러서 대기열에 추가 백그라운드에서 재생 - 팝업에서 재생 시작 + 팝업으로 재생 스트림 플레이어를 찾을 수 없습니다 (VLC를 설치하여 동영상을 재생할 수 있습니다). 스트림 파일 다운로드하기 정보 보기 재생목록 북마크 이곳에 추가 - 정확하지는 않지만 빠른 탐색 - 정확하지 않은 탐색은 더 빠르게 위치를 탐색할 수 있지만 정확도는 떨어집니다. 5, 15 또는 25초 탐색기능은 같이 동작하지 않음 + 정확하지 않은 빠른 탐색 사용 + 정확하지 않은 탐색을 사용하면 정확도가 떨어지는 대신 더 빠르게 위치를 탐색할 수 있습니다. 5초, 15초 또는 25초 탐색 기능은 이 기능과 같이 동작하지 않습니다 다음 스트림을 자동 대기열에 추가 이전 스트림이 반복 재생 대기열이 아닐 경우, 관련 스트림을 자동 재생 기본 콘텐츠 국가 @@ -259,15 +259,15 @@ 이전 내보내기 구독 목록 가져오기 실패 구독 목록 내보내기 실패 - 구글 테이크아웃에서 유튜브 구독 가져오기: + Google 테이크아웃에서 YouTube 구독 가져오기: \n -\n1. 다음 URL로 이동: %1$s -\n2. 요청 시 로그인 -\n3. \"모든 데이터 포함\"을 클릭한 다음 \"모두 선택 취소\"를 클릭한 후 \"구독\"만 선택하고 \"확인\" 클릭 -\n4. \"다음 단계\"를 클릭한 다음 \"내보내기 만들기\" 클릭 -\n5. \"다운로드\" 버튼이 나타나면 클릭 -\n6. 아래 파일 가져오기를 클릭하고 다운로드한 .zip 파일 선택 -\n7. [.zip 가져오기가 실패한 경우] .csv 파일(일반적으로 \"YouTube 및 YouTube Music/subscriptions/subscriptions.csv\" 아래에 있음)의 압축을 풀고, 아래 파일 가져오기를 클릭하고 압축을 푼 csv 파일 선택 +\n1. 이 URL로 이동합니다: %1$s +\n2. 요청에 따라 로그인을 합니다 +\n3. \"모든 데이터 포함됨\"을 클릭한 다음 \"모두 선택 해제\"를 클릭한 후 \"구독정보\"만 선택하고 \"확인\"을 클릭합니다 +\n4. \"다음 단계\"를 클릭한 다음 \"내보내기 생성\"을 클릭합니다 +\n5. \"다운로드\" 버튼이 나타나면 클릭합니다 +\n6. 아래의 \"파일 가져오기\"를 클릭하고 다운로드한 .zip 파일을 선택합니다 +\n7. [.zip 파일 가져오기를 실패한 경우] .csv 파일(일반적으로 \"YouTube 및 YouTube Music/구독정보/구독정보.csv\")을 추출하고, 아래의 \"파일 가져오기\"를 클릭한 후 추출한 csv 파일을 선택합니다 URL 또는 ID를 입력하여 SoundCloud 프로필을 가져옵니다: \n \n1. 웹 브라우저에서 \"데스크톱 모드\"를 활성화합니다(모바일 장치에서는 사이트를 사용할 수 없습니다) @@ -319,9 +319,9 @@ 구독 취소 탭 선택 제스처 음량 조작 - 제스처를 사용하여 재생기 볼륨 제어하기 + 제스처를 사용하여 플레이어의 볼륨 제어 제스처 밝기 조작 - 제스처를 사용하여 플레이어 밝기 제어 + 제스처를 사용하여 플레이어의 밝기 제어 업데이트 트랙 사용자 @@ -386,7 +386,7 @@ 댓글 없음 댓글을 불러올 수 없음 닫기 - 재생 재개 + 재생 위치 기억 마지막 재생 위치부터 재생 리스트 내 위치 표시 리스트에서 재생 위치를 표시합니다 @@ -480,16 +480,16 @@ 썸네일 보기 그룹 이름이 없음 - %d 일 + %d일 - %d 시간 + %d시간 - %d 분 + %d분 - %d 초 + %d초 시청 기록을 지우겠습니까\? 시청 기록 지우기 @@ -510,7 +510,7 @@ 시청한 것으로 처리 비활성화하면 비디오 설명과 추가 정보를 표시하지 않습니다 설명 표시하기 - 한 플레이어에서 다른 플레이어로 전환하면 대기열이 대체될 수 있음 + 한 플레이어에서 다른 플레이어로 전환하면 대기열이 대체될 수 있습니다 어두운 테마 최대 3개까지 축소 알림에 표시될 항목을 고를 수 있습니다! 아래의 각 알림 작업을 눌러 편집하세요. 오른쪽에 있는 확인란을 사용하여 압축 알림에 표시할 항목을 최대 3개까지 선택 @@ -522,7 +522,7 @@ reCAPTCHA 쿠키를 비웠습니다 플레이어 알림 알림 - 유튜브는 잔인할 수 있는 컨텐츠를 숨겨주는 \"제한 모드\"를 제공합니다 + YouTube는 잠재적으로 성인용 콘텐츠를 숨기는 \'제한 모드\'를 제공합니다 reCAPTCHA 쿠키 비우기 플레이어 크래시 발생 존재하지 않음 @@ -532,7 +532,7 @@ 다음에 대기열에 추가됨 다음 대기열에 넣기 현재 재생 중인 스트림 알림 구성 - 연령 제한(예: 18세 이상)이 있으므로 어린이에게 적합하지 않을 수 있는 콘텐츠 표시 + 연령 제한(예: 18세 이상)이 있어 어린이에게 적합하지 않을 수 있는 콘텐츠 표시 오류 보고 알림 NewPipe에 오류가 발생했습니다. 보고하려면 탭하세요 오류가 발생했습니다. 알림을 참조하세요 @@ -561,17 +561,17 @@ 오류 스낵바 표시 새로운 스트림 알림 구독에서 새로운 스트림에 대해 알림 - 주파수 확인 + 확인 빈도 필요한 네트워크 연결 모든 네트워크 업데이트 확인 새로운 버전을 수동으로 확인 자동으로 재생 시작 — %s Wi-Fi에서만 - 절대 + 사용하지 않음 탐색막대 썸네일 미리보기 고품질 (크게) - 저품질 (작음) + 저품질 (작게) 표시하지 않음 업데이트 확인 중… 디스크에서 다운로드한 모든 파일을 지우겠습니까\? @@ -588,10 +588,10 @@ 지역 검색 제안 원격 검색 제안 이 동영상은 연령 제한이 있습니다. -\n연령 제한 동영상에 대한 새로운 유튜브 정책으로 인해 NewPipe는 동영상 스트림에 접속할 수 없으므로 재생할 수 없습니다. +\n연령 제한 동영상에 대한 새로운 YouTube 정책으로 인해 NewPipe는 동영상 스트림에 접속할 수 없으므로 재생할 수 없습니다. reCAPTCHA를 해결할 때 NewPipe가 저장하는 쿠키 지우기 설명 - 코멘트 + 댓글 해결 잠금 화면 배경과 알림 모두에 썸네일 사용 선택한 구독이 없습니다 @@ -604,8 +604,8 @@ 예, 부분적으로 본 비디오 카테고리 %s에 의해 - 아래에서 좋아하는 밤 테마를 선택할 수 있습니다 - 이 영상은 유튜브 뮤직 프리미엄 회원만 볼 수 있어 뉴파이프에서 스트리밍이나 다운로드가 불가능합니다. + 아래에서 선호하는 어두운 테마를 선택할 수 있습니다 + 이 영상은 YouTube Music Premium 회원만 볼 수 있기 때문에 NewPipe에서 스트리밍이나 다운로드가 불가능합니다. 이 콘텐츠는 비공개이므로 NewPipe에서 스트리밍하거나 다운로드할 수 없습니다. 내부 처리 중... 시간이 걸릴 수 있습니다 @@ -676,29 +676,29 @@ 안드로이드 10부터 \'저장영역 접속 프레임워크\'만 지원됩니다 재생 목록에 추가되기 전과 후에 시청한 동영상은 제거됩니다. \n확실합니까\? 이것은 취소 할 수 없습니다! - 미니 플레이어에서 동영상을 시작하지 말고 자동 회전이 잠겨 있는 경우 전체 화면 모드로 직접 전환하십시오. 전체 화면을 종료하여 미니 플레이어에 계속 접속할 수 있습니다 + 화면 자동 회전이 잠겨 있는 경우 미니 플레이어에서 동영상을 시작하지 말고 바로 전체 화면 모드로 재생하세요. 전체 화면을 종료해서 미니 플레이어를 이용할 수도 있습니다 공식 라디오 설명에서 텍스트 선택 활성화 이 콘텐츠는 귀하의 국가에서 사용할 수 없습니다. - 좋아하는 밤 테마 선택 — %s + 선호하는 어두운 테마 선택 — %s 다운로드가 시작되었습니다 이제 설명 내에서 텍스트를 선택할 수 있습니다. 선택 모드에서는 페이지가 깜박이고 링크를 클릭할 수 없는 경우가 있습니다. 이 작업에 적합한 파일 관리자를 찾을 수 없습니다. \n저장영역 접속 프레임워크 호환 파일 관리자를 설치하십시오 이 작업에 적합한 파일 관리자를 찾을 수 없습니다. \n파일 관리자를 설치하거나 다운로드 설정에서 \'%s\'을(를) 비활성화하십시오 - 피드 로딩이 너무 느리다고 생각하십니까\? 그렇다면 빠른 로딩을 활성화해 보십시오 (설정에서 변경하거나 아래 버튼을 눌러 변경할 수 있습니다). + 피드 로딩이 너무 느리다고 생각하시나요\? 그렇다면 빠른 로딩을 활성화해 보세요. (설정에서 변경하거나 아래 버튼을 눌러 변경할 수 있습니다) \n \nNewPipe는 두 가지 피드 로딩 전략을 제공합니다: -\n• 느리지만 완전한 전체 구독 채널을 가져옵니다. -\n• 빠르지만 일반적으로 완전하지는 않은 전용 서비스 엔드포인트를 사용합니다. +\n• 전체 구독 채널 가져오기: 느리지만 완전합니다. +\n• 전용 서비스 엔드포인트 사용: 빠르지만 일반적으로 완전하지 않습니다. \n -\n둘의 차이점은 빠른 동영상은 일반적으로 항목의 길이나 유형(라이브 동영상과 일반 동영상을 구분할 수 없음)과 같은 일부 정보가 부족하고 더 적은 항목을 반환할 수 있다는 것입니다. +\n이 두 가지의 차이점은 빠른 방식이 일반적으로 항목의 길이나 유형(실시간 동영상과 일반 동영상을 구분할 수 없음)과 같은 일부 정보가 부족하고 더 적은 항목을 반환할 수 있다는 점입니다. \n -\n유튜브는 RSS 피드로 이 빠른 방법을 제공하는 서비스의 한 예입니다. +\nYouTube는 RSS 피드를 통해 이 빠른 방법을 제공하는 서비스의 예입니다. \n -\n따라서 선택은 속도 또는 정확한 정보 중에서 선호하는 것으로 귀결됩니다. +\n따라서 선택은 속도와 정확한 정보 중 무엇을 선호하느냐에 달려 있습니다. 이 기능은 아직 NewPipe에서 지원하지 않습니다. \n \n이후 버전에서 지원될 예정입니다. @@ -713,9 +713,19 @@ 최신 버전의 NewPipe를 실행 중입니다 %s를 다운로드하려면 탭하세요. 영구 썸네일 설정 해제 - 이 옵션은 테마로 %s를 선택한 경우에만 사용할 수 있음 + 이 옵션은 테마로 %s을 선택한 경우에만 사용할 수 있습니다 중복 추가 %d 번 회색으로 표시된 재생 목록에 이미 이 항목이 포함되어 있습니다. 카드 클립보드 복사 실패 + 복제 삭제 + 복제를 삭제하시겠습니까\? + 이 재생목록의 모든 스트림 복사본을 삭제하겠습니까\? + 다음 스트림 표시 + 부분적 시청 + 완전 시청 + 예정 + 하드웨어 미디어 버튼 이벤트 무시 + 예를 들어, 물리적 버튼이 망가진 헤드셋을 사용하는 경우 유용합니다 + 스트림 보이기/숨기기 \ No newline at end of file diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 5792c826c..64026f53c 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -29,7 +29,7 @@ Rodyti didesnes raiškas Tik kai kurie įrenginiai palaiko 2K/4K vaizdo įrašų peržiūrą Groti su Kodi - Įdiegti nereastą Kore programėlę\? + Įdiegti nereastą Kode programėlę\? Rodyti „Peržiūra su Kodi“ pasirinkimą Rodyti pasirinkimą peržiūrėti vaizdo įrašus per Kodi mediacentrą Garso įrašas diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 8667422dd..5c5c7ba42 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -562,7 +562,7 @@ Piemērot video attēlu 1:1 proporcijai Rādīt opciju atskaņot video ar Kodi mediju centru Rādīt \"Atskaņot ar Kodi\" opciju - Instalēt trūkstošo Kore aplikāciju\? + Instalēt trūkstošo Kode aplikāciju\? Atskaņot ar Kodi Tikai dažas ierīcas var atskaņot 2K/4K videoklipus Rādīt augstākas izšķirtspējas diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 078fd0fc4..8fabe4fc5 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -34,11 +34,27 @@ इंस्टॉल प्लेअर सापडले नाही (तुम्ही VLC player वापरून फाईल चालवू शकता). प्लेअर सापडले नाही. VLC प्लेअर इंस्टॉल करू इच्छिता का\? - सुरू करण्यासाठी \"शोधा\" दाबा + प्रारंभ करण्यासाठी मॅग्निफाइंग ग्लासवर टॅप करा. कोडी वापरून चालवा फक्त काही उपकरणे 2k/4k व्हिडिओ चालवू शकतात वरचे रेसॉल्युशन दाखवा डिफॉल्ट पॉप अप रेसिल्युशन डीफॉल्ट रेसोल्युशन निवडा मध्ये टाका + %1$s रोजी प्रकाशित + \"कोडीबरोबर प्ले करा\" हा पर्याय दाखवा + कोडी मीडिया सेंटरद्वारे व्हिडिओ प्ले करण्याचा पर्याय प्रदर्शित करा + पाहिले म्हणून चिन्हांकित करा + ठीक आहे + प्लेअर क्रॅश करा + दुसरे क्रिया बटण + तिसरे क्रिया बटण + चौथे क्रिया बटण + पाचवे क्रिया बटण + तुम्हाला \"%1$s\" म्हणायचे आहे का\? + काही रेसॉल्युशनवर ऑडिओ काढून टाकते + गहाळ Kode ॲप इंस्टॉल करायचे\? + 16:9 ते 1:1 आस्पेक्ट रेशो पर्यंत नोटिफिकेशनमध्ये दाखवलेली व्हिडिओ थंबनेल क्रॉप करा + प्रथम क्रिया बटण + 1:1 आस्पेक्ट रेशोवर थंबनेल क्रॉप करा \ No newline at end of file diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 202597f2b..24dcbfc86 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -43,7 +43,7 @@ Papar resolusi yang lebih tinggi Hanya peranti tertentu yang boleh bermain video 2K/4K Main dengan Kodi - Pasangkan aplikasi Kore yang tidak dijumpai\? + Pasangkan aplikasi Kode yang tidak dijumpai\? Paparkan opsyen \"Main dengan Kodi\" Paparkan opsyen untuk memain video dengan Kodi Audio diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index ee2ba11a0..d03ae7c5a 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -21,7 +21,7 @@ Velg nedlastingsmappe for lydfiler Forvalgt oppløsning Spill av med Kodi - Installer manglende Kore-app\? + Installer manglende Kode-app\? Vis \"Spill av med Kodi\"-valg Vis valg for avspilling via Kodi mediasenter Lyd diff --git a/app/src/main/res/values-nl-rBE/strings.xml b/app/src/main/res/values-nl-rBE/strings.xml index 507ae7d14..490b75bb8 100644 --- a/app/src/main/res/values-nl-rBE/strings.xml +++ b/app/src/main/res/values-nl-rBE/strings.xml @@ -564,8 +564,8 @@ Derde actie knop Tweede actie knop Eerste actie knop - Schaal de miniatuurafbeelding van de video die getoond wordt in de notificatie van 16:9 naar 1:1 verhouding (kan vervorming creëren) - Schaal miniatuurafbeelding naar verhouding 1:1 + Snij de miniatuurafbeelding van de video die getoond wordt in de notificatie bij van 16:9 naar een 1:1 verhouding + Miniatuurafbeelding naar verhouding 1:1 bijknippen Toon oorspronkelijke tijd geleden op items Laat Android de kleur van de notificatie aanpassen, op basis van de meest voorkomende kleur in de thumbnail (let op: niet beschikbaar op elk apparaat) Notificatie kleur aanpassen diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index c01a5a5c4..bd901a26f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -16,7 +16,7 @@ Voer de downloadlocatie in voor video\'s Standaardresolutie Afspelen met Kodi - Kore-app niet gevonden. Deze installeren\? + Kode-app niet gevonden. Deze installeren\? \"Afspelen met Kodi\"-optie tonen Toon een optie om een video af te spelen via Kodi media center Audio diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 164065836..eacac40f1 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -118,7 +118,7 @@ ଦେଖାଯାଇଥିବା ଭିଡିଓଗୁଡିକର ଟ୍ରାକ୍ ରଖନ୍ତୁ ଖେଳିବା ଆରମ୍ଭ କରନ୍ତୁ ଫୁଲ ସ୍କ୍ରିନରେ ମୁଖ୍ୟ ପ୍ଲେୟାର ଆରମ୍ଭ କରନ୍ତୁ - ସ୍ଵତଃ ଚଳିତ + ସ୍ୱତଃଚାଳନ URL ଚିହ୍ନି ପାରିଲା ନାହିଁ । ଅନ୍ୟ ଏକ ଆପ୍ ସହିତ ଖୋଲନ୍ତୁ\? ଡିଫଲ୍ଟ ବିଷୟବସ୍ତୁ ଦେଶ ଡିଫଲ୍ଟ ବିଷୟବସ୍ତୁ ଭାଷା @@ -128,7 +128,7 @@ ଇନଷ୍ଟାଣ୍ଟ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ଅଛି ପ୍ଲେୟାର ଇତିହାସ ଏବଂ କ୍ୟାଚ୍ - ଦୃଶ୍ୟ + ରୂପ ତ୍ରୁଟି ନିବାରଣ କରନ୍ତୁ ଅଦ୍ୟତନଗୁଡିକ ପ୍ଲେବେକ୍ ଲୋଡ୍ ବ୍ୟବଧାନ ଆକାର @@ -149,7 +149,7 @@ ଭିଡିଓ \"ବିବରଣୀ:\" ରେ ପୃଷ୍ଠଭୂମି କିମ୍ବା ପପ୍ଅପ୍ ବଟନ୍ ଦବାଇବା ସମୟରେ ଟିପ୍ ଦେଖାନ୍ତୁ ଆପଣଙ୍କର ପ୍ରିୟ PeerTube ଉଦାହରଣଗୁଡିକ ବାଛନ୍ତୁ ବ୍ୟବହାର - ଭିଡିଓ ଏବଂ ଅଡିଓ + ଵିଡ଼ିଓ ଓ ଅଡ଼ିଓ ମିନି ପ୍ଲେୟାରରେ ଭିଡିଓ ଆରମ୍ଭ କରନ୍ତୁ ନାହିଁ, କିନ୍ତୁ ଅଟୋ ଘୂର୍ଣ୍ଣନ ବନ୍ଦ ହୋଇଗଲେ ସିଧାସଳଖ ଫୁଲ୍ ସ୍କ୍ରିନ୍ ମୋଡ୍ କୁ ଯାଆନ୍ତୁ। ଫୁଲ୍ ସ୍କ୍ରିନ୍ ଛାଡି ଆପଣ ଏପର୍ଯ୍ୟନ୍ତ ମିନି ପ୍ଲେୟାରକୁ ପ୍ରବେଶ କରିପାରିବେ ଏହା ଉପରେ ଟ୍ୟାପ୍ କରି ନିମ୍ନରେ ପ୍ରତ୍ୟେକ ବିଜ୍ଞପ୍ତି କାର୍ଯ୍ୟ ସଂପାଦନ କରନ୍ତୁ। ଡାହାଣରେ ଥିବା ଚେକ୍ ବକ୍ସ ବ୍ୟବହାର କରି କମ୍ପାକ୍ଟ ବିଜ୍ଞପ୍ତିରେ ଦେଖାଯିବାକୁ ସେମାନଙ୍କ ମଧ୍ୟରୁ ତିନୋଟି ପର୍ଯ୍ୟନ୍ତ ଚୟନ କରନ୍ତୁ ଥମ୍ବନେଲ ଲୋଡିଂ, ଡାଟା ଏବଂ ମେମୋରୀ ବ୍ୟବହାରକୁ ରୋକିବା ପାଇଁ ବନ୍ଦ କରନ୍ତୁ । ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ଉଭୟ ଇନ-ମେମୋରୀ ଏବଂ ଅନ୍-ଡିସ୍କ ଇମେଜ୍ କ୍ୟାଚ୍ ସଫା କରେ @@ -287,7 +287,7 @@ ଆପଣ ଡିଫଲ୍ଟ ପୁନଃସ୍ଥାପନ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? NewPipe ଏକ ତ୍ରୁଟିର ସମ୍ମୁଖୀନ ହେଲା, ରିପୋର୍ଟ କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ ଦୁଃଖିତ, ତାହା ହୋଇ ନଥାନ୍ତା । - ଇ-ମେଲ ମାଧ୍ୟମରେ ଏହି ତ୍ରୁଟି ରିପୋର୍ଟ କରନ୍ତୁ + ଇ-ମେଲ ମାଧ୍ୟମରେ ରିପୋର୍ଟ କରନ୍ତୁ GitHub ରେ ରିପୋର୍ଟ କରନ୍ତୁ ଭିଡିଓ ଅଡିଓ @@ -446,7 +446,7 @@ ନାପସନ୍ଦ ମନ୍ତବ୍ୟ ଗୁଡିକ ବର୍ଣ୍ଣନା - ମିଲିୟନ + ନିୟୁତ ସମାଧାନ ପ୍ଲେବେକ୍ ସ୍ପିଡ୍ ନିୟନ୍ତ୍ରଣ ଟେମ୍ପୋ @@ -538,7 +538,7 @@ ସମ୍ବନ୍ଧୀୟ ଆଇଟମ୍ ଗୁଡ଼ିକ ପୁନଃ ସଯାଇବାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ ବିରାମ - ବିଲିଅନ୍ + ଵୃନ୍ଦ କୌଣସି ଗ୍ରାହକ ନାହାଁନ୍ତି ସୃଷ୍ଟି କରନ୍ତୁ ବିବରଣୀ ପାଇଁ ଟ୍ୟାପ୍ କରନ୍ତୁ @@ -731,4 +731,14 @@ ସ୍ଥାୟୀ ଥମ୍ୱନେଲ୍ ସେଟ୍ କରନ୍ତୁ ଧୂସର ହୋଇଯାଇଥିବା ପ୍ଲେଲିଷ୍ଟଗୁଡିକ ପୂର୍ବରୁ ଏହି ଆଇଟମ୍ ଧାରଣ କରିଥାଏ । ନକଲ %d ସମୟ (ମୋଟ) ଯୋଡି ହୋଇଛି + ହାର୍ଡୱେର୍ ମିଡିଆ ବଟନ୍ ଇଭେଣ୍ଟଗୁଡ଼ିକୁ ଉପେକ୍ଷା କରନ୍ତୁ + ଉପଯୋଗୀ, ଉଦାହରଣ ସ୍ୱରୂପ, ଯଦି ଆପଣ ଭଙ୍ଗା ଶାରୀରିକ ବଟନ୍ ସହିତ ହେଡସେଟ୍ ବ୍ୟବହାର କରୁଛନ୍ତି + ନକଲଗୁଡିକ ଅପସାରଣ କରନ୍ତୁ + ନକଲ ଗୁଡିକ ହଟାନ୍ତୁ\? + ଆପଣ ଏହି ପ୍ଲେଲିଷ୍ଟରେ ଥିବା ସମସ୍ତ ନକଲ ଷ୍ଟ୍ରିମ୍ ଅପସାରଣ କରିବାକୁ ଚାହୁଁଛନ୍ତି କି\? + ନିମ୍ନଲିଖିତ ଷ୍ଟ୍ରିମ୍ ଗୁଡିକ ଦେଖାନ୍ତୁ + ଷ୍ଟ୍ରିମ୍ ଗୁଡିକ ଦେଖାନ୍ତୁ/ଲୁଚାନ୍ତୁ + ପୁରା ଦେଖାଯାଇଛି + ଆଂଶିକ ଦେଖାଯାଇଛି + ଆଗାମୀ \ 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 438fe4808..f5a38353b 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -138,7 +138,7 @@ ਇੱਕ ਤਰੁੱਟੀ ਆਈ ਹੈ: %1$s ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਕੋਈ ਸਟ੍ਰੀਮ ਉਪਲਬਧ ਨਹੀਂ ਹੈ ਮੁਆਫ ਕਰਨਾ, ਅਜਿਹਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਸੀ। - ਈ-ਮੇਲ ਦੁਆਰਾ ਇਸ ਤਰੁੱਟੀ ਦੀ ਇਤਲਾਹ ਦਿਓ + ਈ-ਮੇਲ ਦੁਆਰਾ ਇਤਲਾਹ ਦਿਓ ਅਫ਼ਸੋਸ ਹੈ, ਕੁਝ ਤਰੁੱਟੀਆਂ ਸਾਹਮਣੇ ਆਈਆਂ ਹਨ। ਇਤਲਾਹ ਕਰੋ ਜਾਣਕਾਰੀ: @@ -731,4 +731,14 @@ ਕਾਰਡ ਪਲੇਲਿਸਟਾਂ ਜੋ ਧੁੰਦਲੀਆਂ ਹੋ ਗਈਆਂ ਹਨ ਉਹਨਾਂ ਵਿੱਚ ਪਹਿਲਾਂ ਹੀ ਇਹ ਆਈਟਮ ਹੈ। ਡੁਪਲੀਕੇਟ ਜੋੜਿਆ ਗਿਆ %d ਵਾਰ + ਉਪਯੋਗੀ ਹੈ, ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਤੁਸੀਂ ਟੁੱਟੇ ਭੌਤਿਕ ਬਟਨਾਂ ਵਾਲਾ ਹੈੱਡਸੈੱਟ ਵਰਤ ਰਹੇ ਹੋ + ਡੁਪਲੀਕੇਟ ਹਟਾਓ + ਕੀ ਡੁਪਲੀਕੇਟ ਹਟਾਉਣੇ ਹਨ\? + ਕੀ ਤੁਸੀਂ ਇਸ ਪਲੇਲਿਸਟ ਵਿੱਚ ਸਾਰੀਆਂ ਡੁਪਲੀਕੇਟ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ\? + ਅੱਗੇ ਦਿੱਤੀਆਂ ਸਟ੍ਰੀਮਾਂ ਵਿਖਾਓ + ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੇਖਿਆ ਗਿਆ + ਅੰਸ਼ਕ ਤੌਰ \'ਤੇ ਵੇਖਿਆ ਗਿਆ + ਆਗਾਮੀ + ਹਾਰਡਵੇਅਰ ਮੀਡੀਆ ਬਟਨ ਇਵੈਂਟਾਂ ਨੂੰ ਅਣਡਿੱਠ ਕਰੋ + ਸਟ੍ਰੀਮ ਵਿਖਾਓ/ਲੁਕਾਓ \ 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 6ca815fb7..109accb82 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -754,4 +754,12 @@ Dodano duplikat %d raz(y) Przydatne, na przykład, jeśli używasz zestawu słuchawkowego z zepsutymi fizycznymi przyciskami Ignoruj zdarzenia sprzętowego przycisku multimedialnego + Czy usunąć duplikaty\? + Pokaż następujące strumienie + Pokaż/Ukryj strumienie + Usuń duplikaty + Czy chcesz usunąć wszystkie zduplikowane strumienie z tej playlisty\? + W pełni obejrzane + Częściowo obejrzane + Nadchodzące \ 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 388673db6..91be57038 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -746,4 +746,12 @@ As playlists em cinza já contêm este item. Ignorar eventos de botão de mídia de hardware Útil, por exemplo, se você estiver usando um fone de ouvido com botões físicos quebrados + Remover duplicados + Remover duplicados\? + Deseja remover todos os streams duplicados nesta playlist\? + Mostrar os seguintes streams + Mostrar/ocultar streams + Parcialmente assistido + Em breve + Totalmente assistido \ 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 749784f2a..9c3958ba3 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -44,6 +44,7 @@ Histórico de visualizações %s visualização + %s visualizações %s visualizações Deseja limpar o histórico de descargas ou remover todos os ficheiros descarregados\? @@ -111,10 +112,12 @@ Criado por %s %d segundo + %d segundos %d segundos %d selecionada + %d selecionadas %d selecionadas Partilhar @@ -147,6 +150,7 @@ \nTem a certeza\? Esta ação não pode ser revertida! %s a ver + %s a ver %s a ver Por favor aguarde… @@ -232,6 +236,7 @@ Ainda não há listas de reprodução favoritas %s ouvinte + %s ouvintes %s ouvintes Remover todo o histórico de pesquisas\? @@ -256,6 +261,7 @@ Abrir menu %s subscritor + %s subscritores %s subscritores Deseja repor as predefinições\? @@ -284,6 +290,7 @@ Remover vídeos visualizados\? %d minuto + %d minutos %d minutos Terminada @@ -330,12 +337,14 @@ Recentes %s vídeo + %s vídeos %s vídeos Importar Remove o histórico dos vídeos reproduzidos e as posições de reprodução %d dia + %d dias %d dias Pausa nas transferências @@ -346,6 +355,7 @@ Página \'kiosk\' %d hora + %d horas %d horas Enfileirar o próximo stream automaticamente @@ -649,10 +659,12 @@ Sugestões de pesquisa locais %1$s descarga apagada + %1$s descargas apagadas %1$s descargas apagadas Descarga concluída + %s descargas concluídas %s descargas concluídas Deslizar itens para removê-los @@ -691,6 +703,7 @@ Notificações são desativadas %s fluxo novo + %s fluxos novos %s fluxos novos Notificar sobre novos fluxos de assinaturas @@ -731,6 +744,14 @@ Cartão As listas de reprodução acinzentadas já contêm este item. Duplicar adicionado %d vez(es) - Ignorar eventos com botões de hardware + Ignorar eventos com botões físicos Útil, por exemplo, se estiver a utilizar um auscultador com botões físicos defeitos + Remover duplicados + Mostrar os seguintes fluxos + Mostrar/ocultar fluxos + Completamente visto + Parcialmente visto + Proximamente + Remover duplicados\? + Quer remover todos os fluxos duplicados nesta lista de reprodução\? \ 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 7830ad0b4..0d71e00b8 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -744,6 +744,14 @@ Cartão As listas de reprodução acinzentadas já contêm este item. Duplicar adicionado %d vez(es) - Ignorar eventos com botões de hardware - Útil, por exemplo, se estiver a utilizar um auscultador com botões físicos defeitos + Ignorar eventos com botões físicos + Útil por exemplo se estiver a utilizar auscultadores com botões físicos danificados + Remover duplicados + Remover duplicados\? + Mostrar/ocultar vídeos + Proximamente + Quer remover todos os vídeos duplicados nesta lista de reprodução\? + Completamente visto + Mostrar os seguintes vídeos + Parcialmente visto \ 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 08f8f6a1f..84eed26ec 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -55,7 +55,7 @@ Descărcări Raport de erori Ne pare rău, asta nu trebuia să se întâmple. - Raportați această eroare prin e-mail + Raport prin e-mail Ne pare rău, ceva a mers prost. Raportați Informații: @@ -92,7 +92,7 @@ Toate Dezactivat Aplicația/UI s-a oprit - Ce:\\nSolicitare:\\nLimba conținutului:\\nȚara conținutului:\\nLimba aplicației:\\nServiciu:\\nOra GMT:\\nPachet:\\nVersiune: \\nVersiune SO: + Ce:\\nSolicitare:\\nLimba conținutului:\\nȚara conținutului:\\nLimba aplicației:\\nServiciu:\\nOra GMT:\\nPachet:\\nVersiune:\\nVersiune SO: k mil. mld. @@ -580,9 +580,9 @@ Nimeni nu ascultă - %s vizionează - %s vizionează - %s vizionează + %s spectator + %s spectatori + %s spectatori Nimeni nu se uită Comutare serviciu, selectat în prezent: @@ -744,4 +744,14 @@ Dezactivare miniatură permanentă Listele de redare care colorate în gri conțin deja acest element. Duplicat adăugat de %d ori + Ignoră evenimentele butonului media hardware + Util, de exemplu, dacă utilizezi o cască cu butoane fizice defecte + Dorești să elimini toate fluxurile dublate din această listă de redare\? + Eliminare dubluri + Elimini dublurile\? + Afișează următoarele fluxuri + Afișare/Ascundere fluxuri + Vizionat complet + Vizionat parțial + Urmează \ 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 c9e27f46d..2f9ca0f4e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -748,4 +748,14 @@ Убрать постоянную миниатюру Дубликат добавлен %d раз(а) Плейлисты, выделенные серым уже содержат этот объект. + Игнорировать события аппаратной мультимедийной кнопки + Полезно, например, если вы используете гарнитуру со сломанными физическими кнопками + Показать следующие стримы + Показать/скрыть стримы + Полностью просмотрено + Предстоящие + Удалить дубликаты + Удалить дубликаты\? + Частично просмотрено + Вы хотите удалить все повторяющиеся потоки в этом плейлисте\? \ 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 ce25d6b3f..d2af26930 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -184,7 +184,7 @@ Ite est acontèssidu: Informatziones: Sinnala - Sinnala custu errore pro mèdiu de posta eletrònica + Sinnala cun sa posta eletrònica Iscusa, custu non diat dèpere èssere acontèssidu. Fruni su permissu pro l\'ammustrare in subra de àteras aplicatziones Cheres ripristinare sos valores predefinidos\? @@ -731,4 +731,14 @@ Disativa sa miniadura permanente Sas iscalitas in colore murru tenent giai custu elementu. Duplicadu annantu %d borta(s) + Ignora eventos de sos butones multimediales fìsicos + Ùtile, a esempru, si ses impreende cùfias cun butones fìsicos segados + Ammustra sos flussos chi sighint + Boga sos duplicados + Bogare sos duplicados\? + Boles bogare totu sos flussos duplicados in custa iscalita\? + Ammustra/Cua flussos + Bidu de su totu + Bidu in parte + Luego \ No newline at end of file diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 08c22c5f7..cbc248b8b 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -4,4 +4,23 @@ ඔබ අදහස් කළේ \"%1$s\" ද\? සැකසුම් සොයන්න + බාහිර මෘදුකාංගයක් භාවිත කරන්න + Subscribe කිරීම + ටැබය තෝරන්න + භාගත කල චලන රූප මෙහි තැන්පත් ය + ආරම්භ කිරීමට අණ්වීක්ෂය ඔබන්න. + හරහා විවෘත කරන්න + බෙදාගන්න + පලකරන ලද්දේ %1$s + ස්ථාපනය කරන්න + අවලංගු කරන්න + Browser එක මගින් විවෘත කරන්න + බාගත කරන්න + බැලූ ලෙස සලකුණු කරන්න + හරි + %s සඳහා ප්‍රතිපල පෙන්වයි + Subscribe කර ඇත + ඇතුලත් කරන්න මෙයට + චලන රූප භාගත කරන ස්තානය + චලන රූප ගබඩා කිරීමට ස්තානයක් තෝරන්න \ No newline at end of file diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 7c248c53e..5fbe1c012 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -507,7 +507,7 @@ Formati i parazgjedhur audio Shfaq një opsion për të luajtur videot përmes Kodi Shfaq opsionin \"Luaj me Kodi\" - Instaloni aplikacionin Kore që mungon\? + Instaloni aplikacionin Kode që mungon\? Vetëm disa pajisje mund të luajnë video 2K/4K Shfaq rezolucione më të larta Rezolucioni i parazgjedhur i popup diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index dbff70e8f..92a1d2294 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -104,7 +104,7 @@ Misslyckades med att spela denna ström Allvarligt spelarfel inträffade Återhämtar sig från spelarfel - Rapportera detta fel via e-post + Rapportera via e-post Vad:\\nBegäran:\\nInnehållsspråk:\\nInnehållsland:\\nApp-språk:\\nTjänst:\\nGMT-tid:\\nPaket:\\nVersion:\\nOS-version: Spela video, längd: Uppladdarens avatar-miniatyrbild @@ -731,4 +731,14 @@ Kort Dubblett tillagd %d gång(er) Spellistor som är gråmarkerade innehåller redan det här objektet. + Användbart om du till exempel använder ett headset med trasiga fysiska knappar + Ignorera hårdvarans media knappar + Ta bort dubbletter\? + Visa följande strömmar + Delvis sedd + Vill du ta bort alla duplicerade strömmar i den här spellistan\? + Ta bort dubbletter + Visa/Dölj strömmar + Fullständigt sedd + Kommande \ 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 9449e05a5..7943e8adf 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -733,4 +733,12 @@ Gri oynatma listeleri halihazırda bu ögeyi içeriyor. Donanımsal ortam düğmesi olaylarını yoksay Örneğin, fiziksel düğmeleri bozuk bir kulaklık kullanıyorsanız kullanışlıdır + Kopyaları kaldır + Kopyalar kaldırılsın mı\? + Bu oynatma listesindeki tüm yinelenen akışları kaldırmak istiyor musunuz\? + Aşağıdaki akışları göster + Akışları göster/gizle + Tamamen izlendi + Yaklaşan + Kısmen izlendi \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 4c977dd4e..6706396ae 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -21,7 +21,7 @@ Завантажені аудіофайли зберігаються тут Типова роздільність Програти в Kodi - Встановити відсутній застосунок Kore\? + Установити відсутній застосунок Kore\? Показати опцію «Відтворити у Kodi» Показати опцію відтворення відео в Kodi Аудіо @@ -750,4 +750,12 @@ У виділених сірим кольором добірках цей елемент уже є. Ігнорувати події апаратних медіакнопок Корисно, наприклад, якщо ви використовуєте гарнітуру зі зламаними фізичними кнопками + Вилучити дублікати + Вилучити дублікати\? + Бажаєте вилучити всі повторювані трансляції в цій добірці\? + Показати/сховати трансляції + Незабаром + Показати такі трансляції + Повністю переглянуто + Частково переглянуто \ 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 bb6b38d3e..fc00769ba 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -28,7 +28,7 @@ Hiện độ phân giải cao hơn Chỉ một số thiết bị hỗ trợ phát video 2K/4K Phát bằng Kodi - Cài đặt ứng dụng Kore\? + Cài đặt ứng dụng Kode\? Hiện tùy chọn \"Phát bằng Kodi\" Hiện tùy chọn phát video qua trung tâm media Kodi Âm thanh @@ -716,4 +716,5 @@ Tùy chọn này chỉ được bật khi chủ đề %s được dùng Nhấn để tải %s Chế độ tia sét + Danh sách này bị trùng lặp. \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 8393fe0ce..4ee6bc285 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -720,4 +720,12 @@ 重复添加了 %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 701b89c07..ee1ef78e5 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -7,9 +7,9 @@ 下載 搜尋 設定 - 您係咪想搵「%1$s」? - 用外面嘅影片播放器 - 用外面嘅音樂播放器 + 你係咪想搵「%1$s」? + 用出面嘅影片播放器 + 用出面嘅音樂播放器 影片下載路徑 下載咗嘅影片檔案會收埋喺度 揀選影片檔案嘅下載資料夾 @@ -37,7 +37,7 @@ 劣評 搵唔到串流播放器。要唔要裝 VLC? 喺瀏覽器開啟 - 分享影片 + 分享影片比 音樂下載資料夾 下載咗嘅音樂檔案會收埋喺度 揀選音樂檔案嘅下載資料夾 @@ -51,7 +51,7 @@ 解析唔到網站 設定唔到下載功能表 啫係嗱,世事講唔埋嘅,真係唔好意思。 - 以電郵報告今次問題 + 以電郵報告 出咗啲問題,唔好意思。 報告 資訊: @@ -94,7 +94,7 @@ 以浮面模式開啟 \n有呢個權限至得 要完成 reCAPTCHA 考驗 - 某啲解像度可能會冇聲 + 某啲影片可能會冇聲 幕後播 浮面播 記住浮面點擺法 @@ -112,7 +112,7 @@ 版權協議 喺 Android 上盡享自由輕便串流。 去 GitHub 睇下 - NewPipe 嘅授權協議 + NewPipe 嘅版權協議 無論您對翻譯、設計改動、打掃程式碼,抑或開山劈石編寫程式碼有咩偈仔,都無任歡迎您幫手。聚沙成塔,眾志成城! 閱讀版權協議 貢獻 @@ -122,7 +122,7 @@ 訂閱 訂閱咗 取消訂閱 - 已成功取消訂閱頻道 + 已取消訂閱頻道 轉唔到訂閱 更新唔到訂閱 顯示資訊 @@ -154,8 +154,8 @@ 跳前/跳後嘅快轉長短 關閉去隱藏影片描述同附加資訊 剔低睇過 - 開啟方式 - 搵緊呢挺嘢:%s + 開啟方式係 + 搜尋到嘅嘢係:%s 第五粒動作掣 撳一下下面每粒掣去更改各個通知動作。用右手邊嘅格仔剔選最多三個,擺喺精簡通知度顯示 精簡通知最多淨係擺到三個動作! @@ -604,7 +604,7 @@ 通知已停用 單曲 全部剷走晒播放到邊個位 - 請查看係咪已經有人喺度講緊您呢次彈 app 嘅狀況。若然重複發表新嘅議題,將會嘥我哋可以真正用嚟修復個問題嘅時間㗎喇。 + 請睇過係咪已經有人喺度講緊您呢次彈 app 嘅狀況。若然重複發表新嘅議題,就會嘥咗我哋可以真正用嚟修復個問題嘅時間㗎喇。 NewPipe 係由一班熱心人用空閒時間義務開發,為您帶嚟最佳嘅使用體驗。係時候少少無拘,支持返開發者令 NewPipe 更臻完美,同時一顆心意挺佢哋可以嘆返杯咖啡。 站內 聚首 @@ -713,9 +713,19 @@ 您已經用緊最新版本嘅 NewPipe 撳一下去下載 %s 唔再揀定封面縮圖 - 色系揀做%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 2cc840ac8..75e77fa18 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -20,7 +20,7 @@ 用 Kodi 播放 顯示用 Kodi 媒體中心播放影片的選項 聲音 - 未找到 Kore app,是否安裝? + 要安裝缺少的 Kore 應用程式嗎? 顯示「用 Kodi 播放」的選項 預設音訊格式 主題 @@ -720,4 +720,12 @@ 變灰的播放清單已經包含此項目。 忽略硬體媒體鍵事件 這很有用,舉例來說,若您正在使用物理按鍵壞掉的耳機 + 移除重複的? + 顯示以下串流 + 顯示/隱藏串流 + 完全觀看 + 部份觀看 + 即將到來 + 移除重複的 + 您想要移除所有在此播放清單中重複的串流? \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e1c75bba4..dd8b8a58d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,7 +46,7 @@ Show higher resolutions Only some devices can play 2K/4K videos Play with Kodi - Install missing Kore app? + Install missing Kore app\? Show \"Play with Kodi\" option Display an option to play a video via Kodi media center Crash the player diff --git a/fastlane/metadata/android/az/changelogs/989.txt b/fastlane/metadata/android/az/changelogs/989.txt new file mode 100644 index 000000000..cb32456dc --- /dev/null +++ b/fastlane/metadata/android/az/changelogs/989.txt @@ -0,0 +1,3 @@ +• [YouTube] İstənilən videonu oynatmağa cəhd edilərkən sonsuz tüklənmə düzəldildi +• [YouTube] Bəzi videolarda yavaşılama aradan qaldırıldı +• jsoup kitabxanası 1.15.3 versiyasına qədər yeniləndi, buraya da təhlükəsizlik riskləri aradan qaldırılması da daxildir diff --git a/fastlane/metadata/android/cs/changelogs/66.txt b/fastlane/metadata/android/cs/changelogs/66.txt index d62f6db4f..3c892ffdc 100644 --- a/fastlane/metadata/android/cs/changelogs/66.txt +++ b/fastlane/metadata/android/cs/changelogs/66.txt @@ -1,16 +1,18 @@ -# Changelog of v0.13.7 +# v0.13.17 - seznam změn -### Fixed -- Fix sort filter issues of v0.13.6 +### Opraveno +- Řazení filtrů -# Changelog of v0.13.6 +# v0.13.6 - seznam změn -### Improvements +### Vylepšeno -- 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 +- Zakázání animace tlačítka menu +- Zrušení odstranění stahování +- Možnost stažení v menu sdílení +- Sdílení v menu při dlouhém podržení +- Minimalizace hlavního přehrávače při opuštění +-Aktualizace ExoPlayer 2.8.2 + - Přepracován dialog ovládání rychlosti přehrávání + - Přidán přepínač pro rychlé přetočení v tichých částech +Další změny/opravy viz GitHub. diff --git a/fastlane/metadata/android/cs/changelogs/993.txt b/fastlane/metadata/android/cs/changelogs/993.txt new file mode 100644 index 000000000..3df0fe64b --- /dev/null +++ b/fastlane/metadata/android/cs/changelogs/993.txt @@ -0,0 +1,13 @@ +Nové +• Upozornění při přidávání duplicit do playlistu a tlačítko pro jejich odstranění +• Povolit ignorování hardwarových tlačítek +• Povolit skrývání částečně zhlédnutých videí v kanálu + +Vylepšeno +• Více sloupců mřížky na velkých obrazovkách +• Ukazatele průběhu konzistentní s nastavením + +Opraveno +• Oprava otevírání URL prohlížeče, stahování a externích přehrávačů v Android 11+ +• Oprava interakce s celou obrazovkou v MIUI +• Úpravy nastavení ExoPlayer pro opravu přehrávání na některých zařízeních diff --git a/fastlane/metadata/android/es/changelogs/993.txt b/fastlane/metadata/android/es/changelogs/993.txt new file mode 100644 index 000000000..66c147a42 --- /dev/null +++ b/fastlane/metadata/android/es/changelogs/993.txt @@ -0,0 +1,13 @@ +Nuevo +• Aviso al poner duplicados en lista de reproducción y botón para quitarlos +• Ignorar botones físicos +• Ocultar videos vistos a medias en el feed + +Mejorado +• Más columnas en pantallas grandes +• Indicadores de progreso sean consistentes con la configuración + +Solucionado +• Abrir URL del navegador, descargas y reproductores externos en Android 11+ +• Interación en pantalla completa, requería dos toques en MIUI +• Cambiar la configuración de ExoPlayer para la reproducción en algunos dispositivos diff --git a/fastlane/metadata/android/eu/changelogs/66.txt b/fastlane/metadata/android/eu/changelogs/66.txt deleted file mode 100644 index cd2fcc899..000000000 --- a/fastlane/metadata/android/eu/changelogs/66.txt +++ /dev/null @@ -1,13 +0,0 @@ -# Changelog of v0.13.7 - -### Improvements - -- Download option in share menu #1498 -- Added share option to long tap menu #1454 -- Minimize main player on exit #1354 - - Support different step sizes for faster speed change - - Added a toggle to fast-forward during silences in playback speed control - - Refactored media source resolution - - Fixed remote playlist metadata not updating. - - Various UI fixes -- Use new extractor with refactored architecture for multiservice. diff --git a/fastlane/metadata/android/hi/changelogs/993.txt b/fastlane/metadata/android/hi/changelogs/993.txt new file mode 100644 index 000000000..e3aa57e5f --- /dev/null +++ b/fastlane/metadata/android/hi/changelogs/993.txt @@ -0,0 +1,13 @@ +New +• Add warning when adding playlist duplicates and add button to remove them +• Allow ignoring hardware buttons +• Allow hiding partially watched videos in feed + +Improved +• Use more grid columns on big screens +• Make progress indicators consistent with settings + +Fixed +• Fix opening browser URLs, downloads and external players on Android 11+ +• Fix interacting with fullscreen requiring two taps on MIUI +• Allow tweaking ExoPlayer settings to fix playback on some devices diff --git a/fastlane/metadata/android/id/changelogs/66.txt b/fastlane/metadata/android/id/changelogs/66.txt deleted file mode 100644 index 4681fb5f4..000000000 --- a/fastlane/metadata/android/id/changelogs/66.txt +++ /dev/null @@ -1,3 +0,0 @@ -old version not being translated. (F-Droid only show updated verson description) -versi lama tidak diterjemahkan. (FDroid hanya menampilkan deskripsi untuk versi terbaru) -(weblate notification : Translation text too long! (terjemahan terlalu panjang). diff --git a/fastlane/metadata/android/it/changelogs/993.txt b/fastlane/metadata/android/it/changelogs/993.txt new file mode 100644 index 000000000..b7098fd24 --- /dev/null +++ b/fastlane/metadata/android/it/changelogs/993.txt @@ -0,0 +1,13 @@ +Nuovo +• Aggiunto avviso di aggiunta playlist doppia e un pulsante per rimuoverla +• Ignora pulsanti hardware +• Nascondi video visti parzialmente + +Migliorato +• Usa più colonne nella griglia su schermi grandi +• Indicatori di avanzamento consistenti con le impostazioni + +Corretto +• Fix apertura URL, download e player esterni su Android 11+ +• Fix interazione con schermo intero che richiedeva due otcchi su MIUI +• Regola le impostazioni di ExoPlayer per correggere la riproduzione su alcuni dispositivi diff --git a/fastlane/metadata/android/ko/changelogs/992.txt b/fastlane/metadata/android/ko/changelogs/992.txt new file mode 100644 index 000000000..5798994fd --- /dev/null +++ b/fastlane/metadata/android/ko/changelogs/992.txt @@ -0,0 +1,17 @@ +새로운 기능 +• 영상 상세정보에서 구독자 수 표시 +• 대기열에서 다운로드 +• 영구적으로 재생목록 썸네일 설정 +• 해시태그와 링크 길게 누르기 +• 카드 보기 모드 + +향상된 기능 +• 더 커진 미니 플레이어 닫기 버튼 +• 더 부드러운 썸네일 다운스케일링 +• 안드로이드 13 지원 (API 33) +• 검색 시 플레이어를 중지하지 않음 + +수정된 기능 +• Dex/마우스에서 오버레이 수정 +• 별도의 오디오 스트림 없이 백그라운드 플레이어 허용 +• 다양한 YouTube 수정들과 더 많은 것들… diff --git a/fastlane/metadata/android/pa/changelogs/986.txt b/fastlane/metadata/android/pa/changelogs/986.txt index c9ab694a4..b072d6cb9 100644 --- a/fastlane/metadata/android/pa/changelogs/986.txt +++ b/fastlane/metadata/android/pa/changelogs/986.txt @@ -1,15 +1,15 @@ -ਨਵਾਂ -• ਨਵੀਆਂ ਸਟ੍ਰੀਮਾਂ ਲਈ ਸੂਚਨਾਵਾਂ -• ਬੈਕਗ੍ਰਾਊਂਡ ਅਤੇ ਵੀਡੀਓ ਪਲੇਅਰਾਂ ਵਿਚਕਾਰ ਅਰਾਮ ਨਾਲ ਤਬਦੀਲੀ -• ਸੈਮੀਟੋਨਸ ਦੁਆਰਾ ਪਿੱਚ ਬਦਲੋ -• ਇੱਕ ਪਲੇਲਿਸਟ ਵਿੱਚ ਮੁੱਖ ਪਲੇਅਰ ਕਤਾਰ ਜੋੜੋ +ਨਵਾਂ +• ਨਵੀਆਂ ਸਟ੍ਰੀਮਾਂ ਲਈ ਸੂਚਨਾਵਾਂ +• ਬੈਕਗ੍ਰਾਊਂਡ ਅਤੇ ਵੀਡੀਓ ਪਲੇਅਰਾਂ ਵਿਚਕਾਰ ਅਰਾਮ ਨਾਲ ਤਬਦੀਲੀ +• ਸੈਮੀਟੋਨਸ ਦੁਆਰਾ ਪਿੱਚ ਬਦਲੋ +• ਇੱਕ ਪਲੇਲਿਸਟ ਵਿੱਚ ਮੁੱਖ ਪਲੇਅਰ ਕਤਾਰ ਜੋੜੋ -ਸੁਧਾਰ -• ਸਪੀਡ/ਪਿਚ ਸਟੈਪ ਦਾ ਆਕਾਰ ਯਾਦ ਰੱਖੋ -• ਵੀਡੀਓ ਪਲੇਅਰ ਵਿੱਚ ਸ਼ੁਰੂਆਤੀ ਲੰਬੇ ਬਫਰਿੰਗ ਨੂੰ ਘੱਟ ਕਰੋ • Android TV ਲਈ ਪਲੇਅਰ UI ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ -• ਸਾਰੀਆਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ +ਸੁਧਾਰ +• ਸਪੀਡ/ਪਿਚ ਸਟੈਪ ਦਾ ਆਕਾਰ ਯਾਦ ਰੱਖੋ +• ਵੀਡੀਓ ਪਲੇਅਰ ਵਿੱਚ ਸ਼ੁਰੂਆਤੀ ਲੰਬੇ ਬਫਰਿੰਗ ਨੂੰ ਘੱਟ ਕਰੋ • Android TV ਲਈ ਪਲੇਅਰ UI ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• ਸਾਰੀਆਂ ਡਾਊਨਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਮਿਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ -ਠੀਕ ਕੀਤਾ -• ਮੀਡੀਆ ਬਟਨ ਨੂੰ ਫਿਕਸ ਕਰੋ ਜੋ ਪਲੇਅਰ ਨਿਯੰਤਰਣਾਂ ਨੂੰ ਨਹੀਂ ਲੁਕਾਉਂਦਾ ਹੈ -• ਪਲੇਅਰ ਦੀ ਕਿਸਮ ਬਦਲਣ 'ਤੇ ਪਲੇਬੈਕ ਰੀਸੈਟ ਨੂੰ ਠੀਕ ਕਰੋ +ਠੀਕ ਕੀਤਾ +• ਮੀਡੀਆ ਬਟਨ ਨੂੰ ਫਿਕਸ ਕਰੋ ਜੋ ਪਲੇਅਰ ਨਿਯੰਤਰਣਾਂ ਨੂੰ ਨਹੀਂ ਲੁਕਾਉਂਦਾ ਹੈ +• ਪਲੇਅਰ ਦੀ ਕਿਸਮ ਬਦਲਣ 'ਤੇ ਪਲੇਬੈਕ ਰੀਸੈਟ ਨੂੰ ਠੀਕ ਕਰੋ • ਪਲੇਲਿਸਟ ਡਾਇਲਾਗ ਨੂੰ ਘੁੰਮਾਉਣ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/990.txt b/fastlane/metadata/android/pa/changelogs/990.txt index ce82cbdd6..bd532ecb0 100644 --- a/fastlane/metadata/android/pa/changelogs/990.txt +++ b/fastlane/metadata/android/pa/changelogs/990.txt @@ -1,13 +1,13 @@ -ਇਹ ਰੀਲੀਜ਼ Android 4.4 ਕਿਟਕੈਟ ਲਈ ਸਮਰਥਨ ਛੱਡਦੀ ਹੈ, ਹੁਣ ਘੱਟੋ-ਘੱਟ ਸੰਸਕਰਣ Android 5 Lollipop ਹੈ! -ਨਵਾਂ -• ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ ਵਾਲੇ ਮੀਨੂ ਤੋਂ ਡਾਊਨਲੋਡ ਕਰੋ -• ਫੀਡ ਵਿੱਚ ਭਵਿੱਖ ਦੇ ਵੀਡੀਓ ਲੁਕਾਓ -• ਸਥਾਨਕ ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ -ਸੁਧਾਰ -• ਪਲੇਅਰ ਕੋਡ ਨੂੰ ਛੋਟੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਰੀਫੈਕਟਰ ਕਰੋ: ਘੱਟ RAM ਵਰਤੀ ਗਈ, ਘੱਟ ਬੱਗ -• ਥੰਮਨੇਲ ਦੇ ਸਕੇਲ ਮੋਡ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ -• ਚਿੱਤਰ ਪਲੇਸਹੋਲਡਰ ਨੂੰ ਵੈਕਟਰਾਈਜ਼ ਕਰੋ - -ਠੀਕ ਕੀਤਾ -• ਪਲੇਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਨਾਲ ਵੱਖ-ਵੱਖ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰੋ: ਪੁਰਾਣੀ/ਗੁੰਮ ਮੀਡੀਆ ਜਾਣਕਾਰੀ, ਵਿਗੜਿਆ ਥੰਮਨੇਲ +ਇਹ ਰੀਲੀਜ਼ Android 4.4 ਕਿਟਕੈਟ ਲਈ ਸਮਰਥਨ ਛੱਡਦੀ ਹੈ, ਹੁਣ ਘੱਟੋ-ਘੱਟ ਸੰਸਕਰਣ Android 5 Lollipop ਹੈ! +ਨਵਾਂ +• ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਦਬਾਉਣ ਵਾਲੇ ਮੀਨੂ ਤੋਂ ਡਾਊਨਲੋਡ ਕਰੋ +• ਫੀਡ ਵਿੱਚ ਭਵਿੱਖ ਦੇ ਵੀਡੀਓ ਲੁਕਾਓ +• ਸਥਾਨਕ ਪਲੇਲਿਸਟਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ +ਸੁਧਾਰ +• ਪਲੇਅਰ ਕੋਡ ਨੂੰ ਛੋਟੇ ਹਿੱਸਿਆਂ ਵਿੱਚ ਰੀਫੈਕਟਰ ਕਰੋ: ਘੱਟ RAM ਵਰਤੀ ਗਈ, ਘੱਟ ਬੱਗ +• ਥੰਮਨੇਲ ਦੇ ਸਕੇਲ ਮੋਡ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ +• ਚਿੱਤਰ ਪਲੇਸਹੋਲਡਰ ਨੂੰ ਵੈਕਟਰਾਈਜ਼ ਕਰੋ + +ਠੀਕ ਕੀਤਾ +• ਪਲੇਅਰ ਨੋਟੀਫਿਕੇਸ਼ਨ ਨਾਲ ਵੱਖ-ਵੱਖ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰੋ: ਪੁਰਾਣੀ/ਗੁੰਮ ਮੀਡੀਆ ਜਾਣਕਾਰੀ, ਵਿਗੜਿਆ ਥੰਮਨੇਲ • ਪੂਰੀ ਸਕ੍ਰੀਨ ਦੀ ਥਾਂ ਉਸਦੇ 1/4 ਹਿੱਸੇ ਦੀ ਵਰਤੋਂ ਨੂੰ ਠੀਕ ਕਰੋ diff --git a/fastlane/metadata/android/pa/changelogs/993.txt b/fastlane/metadata/android/pa/changelogs/993.txt new file mode 100644 index 000000000..6fad07e20 --- /dev/null +++ b/fastlane/metadata/android/pa/changelogs/993.txt @@ -0,0 +1,13 @@ +ਨਵਾਂ +• ਪਲੇਲਿਸਟ ਡੁਪਲੀਕੇਟ ਜੋੜਨ ਵੇਲੇ ਚੇਤਾਵਨੀ ਸ਼ਾਮਲ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ +• ਹਾਰਡਵੇਅਰ ਬਟਨਾਂ ਨੂੰ ਅਣਡਿੱਠ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ +• ਫੀਡ ਵਿੱਚ ਅੰਸ਼ਕ ਤੌਰ 'ਤੇ ਦੇਖੇ ਗਏ ਵੀਡੀਓ ਨੂੰ ਲੁਕਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿਓ + +ਸੁਧਾਰ +• ਵੱਡੀਆਂ ਸਕ੍ਰੀਨਾਂ 'ਤੇ ਹੋਰ ਗਰਿੱਡ ਕਾਲਮਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ +• ਪ੍ਰਗਤੀ ਸੂਚਕਾਂ ਨੂੰ ਸੈਟਿੰਗਾਂ ਦੇ ਨਾਲ ਇਕਸਾਰ ਬਣਾਓ + +ਠੀਕ ਕੀਤੇ +• Android 11 'ਤੇ ਖੋਲ੍ਹਣ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ URL, ਡਾਊਨਲੋਡ ਅਤੇ ਬਾਹਰੀ ਪਲੇਅਰ ਨੂੰ ਠੀਕ ਕਰੋ +• MIUI 'ਤੇ ਦੋ ਟੈਪਾਂ ਦੀ ਲੋੜ ਵਾਲੀ ਪੂਰੀ ਸਕ੍ਰੀਨ ਨਾਲ ਇੰਟਰੈਕਟਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ +• ਕੁਝ ਡਿਵਾਈਸਾਂ 'ਤੇ ਪਲੇਬੈਕ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ExoPlayer ਸੈਟਿੰਗਾਂ ਨੂੰ ਟਵੀਕ ਕਰਨ ਦਿਓ diff --git a/fastlane/metadata/android/pl/changelogs/993.txt b/fastlane/metadata/android/pl/changelogs/993.txt new file mode 100644 index 000000000..38cd01325 --- /dev/null +++ b/fastlane/metadata/android/pl/changelogs/993.txt @@ -0,0 +1,13 @@ +Nowe +• Ostrzeż. podczas dodaw. duplikatów playlist i przycisk, aby je usunąć +• Opcja ignorow. przycisków sprzęt. +• Opcja ukryw. częściowo obejrzanych wideo w kanale + +Ulepszone +• Używ. więcej kol. siatki na dużych ekranach +• Ujednol. wskaź. postępu z ustawieniami + +Naprawione +• Otwier. URL-i przeglądarki, pobranych i zew. odtwarzaczy na Androidzie 11+ +• Interakcja z trybem pełnoekr. wymagającym dwóch naciśnięć na MIUI +• Dostosow. ustawień ExoPlayera, aby naprawić odtwarzanie na niektórych urządz. diff --git a/fastlane/metadata/android/pt-PT/changelogs/65.txt b/fastlane/metadata/android/pt-PT/changelogs/65.txt index a72ca3242..92b3dd535 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/65.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/65.txt @@ -8,17 +8,17 @@ - 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 controlo 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 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. +- 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 +- 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 - Use novo extrator com arquitetura ré fatorada para multisserviço ### Conserta - Correção #1440 Layout de informações de vídeo quebrado #1491 -- Ver correção de histórico #1497 -- #1495, atualizando os metadados (miniatura, título e contagem de vídeos) assim que o utilizador acessar a lista de reprodução. +-Ver correção de histórico #1497 +- #1495, atualizando os metadados (miniatura, título e contagem de vídeos) assim que o usuário acessar a lista de reprodução. - #1475, registando uma visualização na base de dados quando o utilizador inicia um vídeo no reprodutor externo no fragmento de detalhes. - Correção de tempo limite de criação em caso de modo pop-up. #1463 (Corrigido #640) - Correção do reprodutor de vídeo principal #1509 diff --git a/fastlane/metadata/android/pt-PT/changelogs/66.txt b/fastlane/metadata/android/pt-PT/changelogs/66.txt new file mode 100644 index 000000000..ed84a2759 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/66.txt @@ -0,0 +1,33 @@ +# Changelog de v0.13.7 + +### Fixo +- Fixar questões de filtro de ordenação da v0.13.6 + +# Mudança do v0.13.6 + +### Melhorias + +- Desactivar animação de ícones de burgermenu #1486 +- anular a eliminação dos downloads #1472 +- Opção de download no menu de partilha #1498 +- Adicionada a opção de partilha no menu de toque longo #1454 +- Minimizar o jogador principal na saída #1354 +- Actualização da versão da biblioteca e correcção da cópia de segurança da base de dados #1510 +- ExoPlayer 2.8.2 Actualização #1392 + - Reformulou o diálogo de controlo de velocidade de reprodução para suportar diferentes tamanhos de passos para uma mudança de velocidade mais rápida. + - Adicionada uma alternância para avançar rapidamente durante os silêncios no controlo de velocidade de reprodução. Isto deve ser útil para audiolivros e certos géneros musicais, e pode trazer uma verdadeira experiência sem falhas (e pode quebrar uma canção com muitos silêncios =\i1). + - A resolução da fonte dos meios de comunicação foi refeita para permitir a passagem de metadados ao lado dos meios de comunicação internamente no leitor, em vez de o fazer manualmente. Agora temos uma única fonte de metadados e está directamente disponível quando a reprodução começa. + - Fixados os metadados da lista de reprodução remota que não são actualizados quando novos metadados estão disponíveis quando o fragmento da lista de reprodução é aberto. + - Várias correcções UI: #1383, a notificação do leitor de fundo controla agora sempre branco, mais fácil de desligar o leitor de pop-ups através do fling +- Usar novo extractor com arquitectura refacturada para multiserviços + +### Correcções + +- Reparação #1440 Layout de Informação de Vídeo Partido #1491 +- Ver histórico correcção #1497 + - #1495, actualizando os metadados (miniatura, título e contagem de vídeo) assim que o utilizador aceda à lista de reprodução. + - #1475, através do registo de uma vista na base de dados quando o utilizador inicia um vídeo no leitor externo sobre fragmento de detalhe. +- Fixar tempo limite de creen em caso de modo popup. #1463 (Fixado #640) +- Correcção principal do leitor de vídeo #1509 + - [#1412] Modo de repetição fixo causando NPE do jogador quando novas intenções são recebidas enquanto a actividade do jogador está em segundo plano. + - Fixa a minimização do jogador a popup não destrói o jogador quando não é concedida permissão de popup. diff --git a/fastlane/metadata/android/pt-PT/changelogs/68.txt b/fastlane/metadata/android/pt-PT/changelogs/68.txt new file mode 100644 index 000000000..1e6c42e01 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/68.txt @@ -0,0 +1,31 @@ +# mudanças da v0.14.1 + +### fixo +- Fixo falhou em desencriptar a url de vídeo #1659 +- Ligação de descrição fixa não extraída bem #1657 + +# mudanças de v0.14.0 + +### Novo +- Novo desenho de gaveta #1461 +- Nova página inicial personalizável #1461 + +### Melhorias +- Controlos por gestos retrabalhados #1604 +- Nova forma de fechar o leitor de popup #1597 + +### Fixa +- Corrigir erro quando a contagem de assinaturas não está disponível. Fecha #1649. + - Mostrar "Contagem de subscritores não disponível" nesses casos +- Consertar NPE quando uma lista de reprodução do YouTube está vazia +- Correcção rápida para os quiosques em SoundCloud +- Refactor e correcção de bugs #1623 + - Resultado de pesquisa cíclica reparada #1562 + - Barra de procura fixa não estática + - Os vídeos do YT Premium não estão bloqueados correctamente + - Vídeos Fixos por vezes não carregados (devido à análise do DASH) + - Corrigir ligações na descrição vídeo + - Mostrar aviso quando alguém tenta descarregar para sdcard externo + - nada de excepção mostrado dispara o relatório + - thumbnail não mostrado no leitor de fundo para andróide 8.1 [ver aqui](https://github.com/TeamNewPipe/NewPipe/issues/943) +- Correcção do registo do receptor de radiodifusão. Fecha #1641. diff --git a/fastlane/metadata/android/pt-PT/changelogs/69.txt b/fastlane/metadata/android/pt-PT/changelogs/69.txt new file mode 100644 index 000000000..fa7d5d85c --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/69.txt @@ -0,0 +1,19 @@ +#### Novo +- Eliminação de longa duração e partilha de subscrições #1516 +- Tabela UI e esquema de lista de grelha #1617 + +### Melhorias +- armazenar e recarregar a última relação de aspeto utilizada #1748 +- Ativar a disposição linear na atividade de Downloads com nomes de vídeo completos #1771 +- Apagar e partilhar subscrições diretamente do separador de subscrições #1516 +- Enqueuing agora ativa a reprodução de vídeo se a fila de reprodução já tiver terminado #1783 +- Configurações separadas para os gestos de volume e luminosidade #1644 +- Adicionar apoio à Localização #1792 + +### Correções +- Fixar a análise do tempo para . formato, para que NewPipe possa ser usado na Finlândia +- Contagem fixa de assinaturas +- Adicionar permissão de serviço em primeiro plano para dispositivos API 28+ #1830 + +### Bugs conhecidos +- O estado de reprodução não pode ser guardado no Android P diff --git a/fastlane/metadata/android/pt-PT/changelogs/70.txt b/fastlane/metadata/android/pt-PT/changelogs/70.txt new file mode 100644 index 000000000..61de40666 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/70.txt @@ -0,0 +1,25 @@ +Atenção: esta versão é provavelmente um bugfest, tal como a última. No entanto, devido ao desligamento total desde o 17. uma versão quebrada é melhor do que nenhuma versão. Certo? ¯\_(ツ)_/¯ + +### Melhoria +* os arquivos baixados agora podem ser abertos com um clique #1879 +* suporte drop para android 4.1-4.3 #1884 +* remover jogador antigo #1884 +* remova os fluxos da fila de reprodução atual passando-os para a direita #1915 +* remova o fluxo enfileirado automático quando um novo fluxo é enfileirado manualmente # 1878 +* Pós-processamento para downloads e implementar recursos ausentes #1759 por @ kapodamy + * Infra-estruturas de pós-processamento + * Tratamento adequado de erros "infraestrutura" (para downloader) + * Fila em vez de vários downloads + * Mover transferências pendentes serializadas (`.arquivos giga`) para dados do aplicativo + * Implementar nova tentativa máxima de download + * Pausa adequada para o download de vários segmentos + * Parar downloads quando swicthing à rede móvel (nunca funciona, ver ponto 2) + * Salve a contagem de threads para os próximos downloads + * Muitas incoerências corrigidas + +### Corrigido +* Corrigir falha com resolução padrão definida como a melhor e limitada resolução de dados móveis #1835 +* falha do jogador pop-up corrigida #1874 +* NPE ao tentar abrir o jogador de fundo #1901 +* Correção para inserir novos fluxos quando o enfileiramento automático está habilitado #1878 +* Corrigido o problema decypering shuttown diff --git a/fastlane/metadata/android/pt-PT/changelogs/71.txt b/fastlane/metadata/android/pt-PT/changelogs/71.txt new file mode 100644 index 000000000..fb525cccc --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/71.txt @@ -0,0 +1,10 @@ +### Melhoria +* Adicionar notificação de atualização do aplicativo para compilação do GitHub (#1608 por @ krtkush) +* Várias melhorias para o downloader(# 1944 por @kapodamy): + * * adicione ícones brancos ausentes e use o modo hardcore para alterar as cores dos ícones + * verifique se o iterador foi inicializado (correções #2031) + * * permitir novas tentativas de downloads com erro "Falha no pós-processamento" no novo mixer + * novo muxer MPEG - 4 que fixa fluxos de vídeo e áudio não síncronos (#2039) + +### Corrigido +* * As transmissões ao vivo do YouTube param de ser reproduzidas após um curto período de tempo(# 1996 por @username) diff --git a/fastlane/metadata/android/pt-PT/changelogs/740.txt b/fastlane/metadata/android/pt-PT/changelogs/740.txt new file mode 100644 index 000000000..d591eda53 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/740.txt @@ -0,0 +1,23 @@ +< H4 > melhorias< / h4> +< ul> +< li>tornar os links nos comentários clicáveis, aumentar o tamanho do texto< / li> +< li>procurar ao clicar em links de carimbo de data/hora nos comentários< / li> +< li>mostrar a guia preferida com base no estado selecionado recentemente< / li> +< li>adicionar lista de reprodução à fila ao clicar longamente em & # 39;fundo& # 39; na janela da lista de reprodução< / li> +< li>procurar texto partilhado quando não é um URL< / li> +< li>adicionar o botão"Partilhar no momento atual & quot; ao leitor de vídeo principal< / li> +< li>adicionar botão fechar ao leitor principal quando terminar a fila de vídeo< / li> +< li>Adicionar & quot;Reproduzir diretamente em segundo plano & quot; ao menu longpress para itens da lista de vídeos< / li> +< li>melhorar as traduções em Inglês para comandos Play / Enqueue< / li> +< li>pequenas melhorias de desempenho< / li> +< li>remover ficheiros não utilizados < / li> +< li>Atualizar o ExoPlayer para 2.9.6< / li> +< li>adicionar suporte para links ofensivos< / li> +< / ul> +

fixo < /h4> +< ul> +< li>rolagem fixa com comentários e fluxos relacionados desativados < / li> +< li>Corrigido CheckForNewAppVersionTask sendo executado quando deveria & # 39; t< / li> +< li>importação de assinatura fixa do youtube: ignore aqueles com url inválido e mantenha aqueles com título vazio< / li> +< li>corrigir URL inválido do YouTube: o nome da marca de assinatura nem sempre é "Assinatura", impedindo o carregamento de fluxos< / li> +< / ul> diff --git a/fastlane/metadata/android/pt-PT/changelogs/750.txt b/fastlane/metadata/android/pt-PT/changelogs/750.txt new file mode 100644 index 000000000..25f0c1dbf --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/750.txt @@ -0,0 +1,22 @@ +Novo +Resumo da reprodução #2288 +* Retomar fluxos onde parou da última vez +Melhorias Do Downloader #2149 +* Use o Storage Access Framework para armazenar downloads em cartões SD externos +* Novo MP4 muxer +* Opcionalmente, altere o diretório de download antes de iniciar um download +* Respeitar as redes de medição + + +Melhorado +* Cordas gema removidas #2295 +* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 +* Tornar os menus de pressão longa consistentes #2368 + +Corrigido +* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 +• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 +* Downloads fixos presos em 99,9% #2440 +* Atualizar meta dados da fila de reprodução #2453 +* [*[SoundCloud] corrigida a falha ao carregar listas de reprodução Team New Pipe / New Pipe Extractor#170 +* [*[YouTube] A duração fixa não pode ser analisada Team New Pipe / New Pipe Extractor#177 diff --git a/fastlane/metadata/android/pt-PT/changelogs/760.txt b/fastlane/metadata/android/pt-PT/changelogs/760.txt new file mode 100644 index 000000000..113a92615 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/760.txt @@ -0,0 +1,43 @@ +Alterações em 0.17.1 + +Novo +* Localização tailandesa + + +Melhorado +* Adicionar começar a jogar aqui ação em menus de longo imprensa para playlists novamente #2518 +* Adicionar interruptor para SAF / legacy file picker #2521 + +Corrigido +* Corrigir botões desaparecendo na visualização de downloads ao alternar aplicativos #2487 +* Corrigir a posição de reprodução é armazenada, embora o histórico de exibição esteja desativado +* Corrigir desempenho reduzido causado pela posição de reprodução em visualizações de lista #2517 +* [Extractor] Corrigir ReCaptchaActivity # 2527, TeamNewPipe / NewPipeExtractor#186 +* [Extractor] [YouTube] Corrigir Erro de pesquisa casual quando as listas de reprodução estão nos resultados TeamNewPipe / NewPipeExtractor#185 + + + +Alterações em 0.17.0 + +Novo +Resumo da reprodução #2288 +* Retomar fluxos onde parou da última vez +Melhorias Do Downloader #2149 +* Use o Storage Access Framework para armazenar downloads em cartões SD externos +* Novo MP4 muxer +* Opcionalmente, altere o diretório de download antes de iniciar um download +* Respeitar as redes de medição + + +Melhorado +* Cordas gema removidas #2295 +* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 +* Tornar os menus de pressão longa consistentes #2368 + +Corrigido +* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 +• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 +* Downloads fixos presos em 99,9% #2440 +* Atualizar metadados da fila de reprodução #2453 +* [SoundCloud] corrigida a falha ao carregar listas de reprodução TeamNewPipe / NewPipeExtractor#170 +* [YouTube] duração fixa não pode ser Paresd TeamNewPipe / NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pt-PT/changelogs/780.txt b/fastlane/metadata/android/pt-PT/changelogs/780.txt new file mode 100644 index 000000000..961f1babd --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/780.txt @@ -0,0 +1,12 @@ +Alterações em 0.17.3 + +Melhorado em +- Adicionada opção para limpar estados de reprodução #2550 +- Mostrar diretórios ocultos no seletor de ficheiros #2591 +- URLs de apoio de instâncias `invidio.us` a serem abertas com NewPipe #2488 +- Adicionar suporte para `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 + +Fixa +- [YouTube] Fixo 'java.lang.IllegalArgumentException #192 +- [YouTube] Fluxos fixos ao vivo não funcionam TeamNewPipe/NewPipeExtractor#195 +- Resolvido problema de desempenho em torta de android ao descarregar um fluxo #2592 diff --git a/fastlane/metadata/android/pt-PT/changelogs/790.txt b/fastlane/metadata/android/pt-PT/changelogs/790.txt new file mode 100644 index 000000000..f1b3a2dd9 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/790.txt @@ -0,0 +1,14 @@ +Melhorado +- Adicionar mais títulos para melhorar a acessibilidade para os cegos #2655 +- Tornar a linguagem da pasta de download mais consistente e menos ambígua #2637 + +Fixa +- Verificar se o último byte no bloco é descarregado #2646 +- Rolagem fixa em fragmento de detalhe de vídeo #2672 +- Remover a dupla pesquisa de animações de caixa transparente para uma #2695 +- Fixar extracção client_id #2745 + +Desenvolvimento +- Adicionar dependências em falta herdadas de NewPipeExtractor em NewPipe #2535 +- Migrar para AndroidX #2685 +- Actualização para ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/pt-PT/changelogs/800.txt b/fastlane/metadata/android/pt-PT/changelogs/800.txt new file mode 100644 index 000000000..1b6ec1a4c --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/800.txt @@ -0,0 +1,27 @@ +Novo +- Suporte PeerTube sem P2P (#2201) [Beta]: + ◦ Ver e descarregar vídeos de instâncias do PeerTube + ◦ Adicionar instâncias nas definições para aceder ao mundo completo do PeerTube + ◦ Pode haver problemas com apertos de mão SSL no Android 4.4 e 7.1 quando o acesso a certos casos resulta num erro de rede. + +- Downloader (#2679): + ◦ Calcular ETA de descarregamento + ◦ Descarregar opus (ficheiros webm) como ogg + ◦ Recuperar ligações expiradas para retomar os downloads após uma longa pausa + +Melhorado +- Tornar o KioskFragment consciente das mudanças no país de conteúdo preferido e melhorar o desempenho de todos os separadores principais #2742 +- Utilizar novas implementações de Localização e Downloader do extractor #2713 +- Tornar o fio "Quiosque por defeito" traduzível +- Barra de navegação preta para o tema preto #2569 + +Fixa +- Corrigido um bug que não podia mover o leitor de popup se outro dedo fosse colocado enquanto se movia o leitor de popup #2772 +- Permitir listas de reprodução sem um carregador e corrigir falhas relacionadas com este problema #2724, TeamNewPipe/NewPipeExtractor#219 +- Habilitação de TLS1.1/1.2 em dispositivos Android 4.4 (API 19/KitKat) para corrigir o aperto de mão de TLS com MediaCCC e algumas instâncias PeerTube #2792 +- [SoundCloud] Equipa fixa de extracção client_idNewPipe/NewPipeExtractor#217 +- Fixar a extracção do fluxo de áudio + +Desenvolvimento +- Atualizar ExoPlayer para 2.10.8 #2791, #2816 +- Atualizar o Gradle para 3.5.1 e adicionar o suporte Kotlin #2714 diff --git a/fastlane/metadata/android/pt-PT/changelogs/810.txt b/fastlane/metadata/android/pt-PT/changelogs/810.txt new file mode 100644 index 000000000..3cb60e434 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/810.txt @@ -0,0 +1,19 @@ +Novo +- Mostrar a miniatura do vídeo no ecrã de bloqueio ao tocar em fundo + +Melhorado +- Adicionar lista de reprodução local à fila de espera ao premir durante muito tempo no botão de fundo / popup +- Faça com que os separadores da página principal possam ser deslocados e escondidos quando só existe um único separador +- Quantidade limite de actualizações de miniaturas de notificação no leitor de fundo +- Adicionar miniatura de miniatura para listas de reprodução locais vazias +- Use a extensão de ficheiro *.opus em vez de *.webm e mostre "opus" na etiqueta de formato em vez de "WebM Opus" no menu pendente de download +- Adicionar botão para apagar ficheiros descarregados ou histórico de descarregamentos em "Downloads +- [YouTube] Adicionar suporte a /c/shortened_url channel links + +Fixa +- Corrigido múltiplos problemas ao partilhar um vídeo para NewPipe e descarregar diretamente os seus fluxos +- Acesso fixo do jogador fora do seu fio de criação +- Paginação fixa de resultados de pesquisa +- Ligar nulo fixo causando NPE +- [YouTube] Comentários de visualização fixos ao abrir uma url invidio.us +- ClientCloud] Client_id actualizado diff --git a/fastlane/metadata/android/pt-PT/changelogs/840.txt b/fastlane/metadata/android/pt-PT/changelogs/840.txt new file mode 100644 index 000000000..4ee1d8ab3 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/840.txt @@ -0,0 +1,22 @@ +Novo +- Adicionado o seletor de língua para alterar a língua da aplicação +- Adicionado enviar para o botão Kodi ao menu desmontável do leitor +- Capacidade adicional de copiar comentários sobre imprensa longa + +Melhorado +- Fixar a actividade ReCaptcha e guardar corretamente os cookies obtidos +- Removido o ponto-menu a favor da gaveta e botão esconder histórico quando o histórico do relógio não está ativado nas definições +- Pedir permissão de visualização sobre outras aplicações em definições corretamente no Android 6 e posteriores +- Renomear playlist local através de um clique longo em BookmarkFragment +- Vários melhoramentos do PeerTube +- Melhorou várias cadeias de caracteres em inglês + +Fixa +- Jogador fixo a recomeçar, embora seja pausado quando a opção "minimizar no comutador da aplicação" é ativada e o NewPipe é minimizado +- Fixar o valor de brilho inicial para o gesto +- Downloads de subtítulos .srt fixos contendo nem todas as quebras de linha +- Corrigido o download para cartão SD falhando porque alguns dispositivos Android 5 não são compatíveis com CTF +- Descarregamento fixo no Android KitKat +- Ficheiro fixo de vídeo corrupto .mp4 sendo reconhecido como ficheiro de áudio +- Resolvidos problemas de localização múltipla, incluindo códigos de língua chinesa errados +- Os carimbos temporais em descrição podem ser clicados novamente diff --git a/fastlane/metadata/android/pt-PT/changelogs/930.txt b/fastlane/metadata/android/pt-PT/changelogs/930.txt new file mode 100644 index 000000000..1ded9e887 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/930.txt @@ -0,0 +1,19 @@ +Novo +- Pesquisa no YouTube Música +- Suporte básico de TV Android + +Melhorado +- Adicionada a capacidade de remover todos os vídeos vistos de uma lista de reprodução local +- Mostrar mensagem quando o conteúdo ainda não é suportado, em vez de se chocar +- Reprodutor popup melhorado redimensionado com gestos de beliscão +- Enqueue streams em fundo e botões de popup no canal +- Melhor manuseamento do tamanho do título do cabeçalho da gaveta + +Fixa +- Definição de conteúdo com restrição de idade fixa não funciona +- Fixação de certos tipos de reCAPTCHAs +- Corrigido o crash ao abrir marcadores enquanto a lista de reprodução é "nula". +- Deteção fixa de exceções relacionadas com a rede +- Visibilidade fixa do botão de ordenação do grupo no fragmento de subscrições + +e mais diff --git a/fastlane/metadata/android/pt-PT/changelogs/952.txt b/fastlane/metadata/android/pt-PT/changelogs/952.txt index 93724fdae..0a31a12e7 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/952.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/952.txt @@ -1,7 +1,7 @@ Melhorado -- O autoplay está disponível para todos os serviços (em vez de apenas para o YouTube) +• A reprodução automática está disponível para todos os serviços (em vez de apenas para o YouTube) -Correções -- Fluxos relacionados corrigidos, a apoiar as novas continuações do YouTube -- Vídeos do YouTube com restrição de idade corrigido -- [Android TV] Foco e sobreposição de destaque prolongado corrigidos +Corrigido +• Transmissões relacionadas, permintindo novas continuações do YouTube +• Restrições etárias em videos do YouTube +• [Android TV] Foco e sobreposição de destaque prolongado corrigidos diff --git a/fastlane/metadata/android/pt-PT/changelogs/953.txt b/fastlane/metadata/android/pt-PT/changelogs/953.txt index dd3b4bf2b..923f5f8b1 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/953.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/953.txt @@ -1 +1 @@ -Conserta a extração da função de desencriptação do YouTube. +Correção da extração da função de desencriptação do YouTube. diff --git a/fastlane/metadata/android/pt-PT/changelogs/954.txt b/fastlane/metadata/android/pt-PT/changelogs/954.txt index 1da36f6fa..3d5199621 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/954.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/954.txt @@ -1,9 +1,9 @@ -• fluxo de trabalho da app nova: reproduz vídeos na página de detalhes, deslize para baixo para minimizar o reprodutor -• notificações MediaStyle: ações personalizáveis em notificações, melhorias de desempenho -• redimensionamento básico ao usar NewPipe como app de desktop +• novo fluxo de trabalho da app: reproduz vídeos na página de detalhes, deslizar p/ baixo p/ minimizar o reprodutor +• notificações MediaStyle: c/ ações personalizáveis, melhorias de desempenho +• redimensionamento básico ao usar NewPipe como app desktop -• mostrar diálogo com opções abertas em caso de URL não suportado -• experiência de sugestão de pesquisa melhorada -• qualidade de vídeo predefinido aumentada a 720p60 (player do app) e 480p (pop-up) +• mostrar diálogo com opções de carregamento em caso de URL não suportado +• sugestão de pesquisa melhorada +• qualidade predefinida aumentada a 720p60 (reprodutor da app) e 480p (pop-up) -• correções de bugs +• correção de bugs diff --git a/fastlane/metadata/android/pt-PT/changelogs/955.txt b/fastlane/metadata/android/pt-PT/changelogs/955.txt index cd70b41c9..edc87b56b 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/955.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/955.txt @@ -1,3 +1,3 @@ -[YouTube] A procura por alguns utilizadores corrigida -[YouTube] Exceções de desencriptação aleatórias corrigidas +[YouTube] Pesquisa corrigida para alguns utilizadores +[YouTube] Corrigidas exceções de desencriptação aleatórias [SounCloud] URLs que terminam com uma barra são agora analisados corretamente diff --git a/fastlane/metadata/android/pt-PT/changelogs/956.txt b/fastlane/metadata/android/pt-PT/changelogs/956.txt index e258a451e..dcebd0562 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/956.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/956.txt @@ -1 +1 @@ -[YouTube] Falha corrigida ao carregar qualquer vídeo +[YouTube] Corrigida falha ao carregar qualquer vídeo diff --git a/fastlane/metadata/android/pt-PT/changelogs/957.txt b/fastlane/metadata/android/pt-PT/changelogs/957.txt index 8bdc458b0..e64899c8f 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/957.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/957.txt @@ -1,10 +1,10 @@ -- Unir ações específicas de inquérito em uma -- Gesto de dois dedos para fechar o jogador -- Permitir a limpeza de cookies reCAPTCHA -- Opção de não colorir a notificação -- Melhorar como os detalhes do vídeo são abertos para não por no buffer infinitamente -- Acelerar os vídeos do YouTube e corrigir os de idade restrita -- Reparação de colisão em avanço/retrocesso rápido -- Não reordenar as listas a arrastar as miniaturas -- Lembrar sempre das propriedades popup -- Acrescentar a língua Santali +Unir ações específicas de enfileiramento +Gesto 2 dedos p/ fechar APP +Permitir limpeza de cookies reCAPTCHA +Opção não colorir notific. +Melhorar forma como os detalhes do vídeo são abertos p/ corrigir buffering infinito, comportamento errático ao compartilhar com NewPipe, etc +Acelerar vídeos do YouTube e corrijir restrições etárias +Corrigir falha no avanço/recuo rápido +Não reorganizar listas ao arrastar miniaturas +Lembrar sempre as propriedades pop-up +Adicionar idioma Santali diff --git a/fastlane/metadata/android/pt-PT/changelogs/958.txt b/fastlane/metadata/android/pt-PT/changelogs/958.txt index d7616b944..fc2507f64 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/958.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/958.txt @@ -1,10 +1,10 @@ Novo e melhorado: -- Opção reajustada para esconder a miniatura na tela de bloqueio +- Opção reajustada para esconder a miniatura no ecrã de bloqueio - Puxar para atualizar o feed - Melhor desempenho na busca de listas locais Corrigido: -- Falha ao iniciar o NewPipe depois de ter sido removido da RAM +- Falha ao iniciar o NewPipe após ter sido removido da RAM - Falha na inicialização quando não há conexão à Internet - Respeitando as configurações de luminosidade e de volume - Listas de reprodução longas diff --git a/fastlane/metadata/android/pt-PT/changelogs/959.txt b/fastlane/metadata/android/pt-PT/changelogs/959.txt index a50b8d058..2ceda197e 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/959.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/959.txt @@ -1,3 +1,3 @@ -O loop infinito de falhas corrigido após a abertura do repórter de erro. -Lista atualizada de instâncias do PeerTube que podem ser abertas automaticamente pelo NewPipe. +Corrigido o ciclo infinito de falhas após a abertura do repórter de erros. +Atualizada a lista de instâncias PeerTube que podem ser abertas automaticamente pelo NewPipe. Traduções atualizadas. diff --git a/fastlane/metadata/android/pt-PT/changelogs/961.txt b/fastlane/metadata/android/pt-PT/changelogs/961.txt new file mode 100644 index 000000000..61f2a981b --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/961.txt @@ -0,0 +1,12 @@ +- Apoio à mistura +- [YouTube] Mostrar informação sobre emissoras públicas e Covid-19 +- [media.ccc.de] Adicionados vídeos recentes +- Acrescentada tradução somaliana + +- Muitas melhorias internas + +- Vídeos fixos de partilha de dentro do leitor +- Vista Web ReCaptcha em branco fixa +- Reparação de um acidente que ocorreu ao remover um fluxo de uma lista +- Fluxos relacionados fixos +- [YouTube] Pesquisa fixa de música no YouTube diff --git a/fastlane/metadata/android/pt-PT/changelogs/964.txt b/fastlane/metadata/android/pt-PT/changelogs/964.txt new file mode 100644 index 000000000..7aa3c9fe4 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/964.txt @@ -0,0 +1,8 @@ +- Apoio adicional para capítulos nos controlos de jogadores +- Adicionada a pesquisa Sepia +- Botão de partilha reajustado na visualização detalhada do vídeo e moveu a descrição do fluxo para o layout do separador +- Desativar o restabelecimento do brilho se o gesto de brilho for desativado +- Adicionado item da lista para reproduzir vídeo no kodi +- Corrigida a falha quando não está definido um navegador padrão em alguns dispositivos e melhorados os diálogos de partilha +- Alternar jogo/pausa com botão de espaço de hardware no leitor de ecrã inteiro +- [media.ccc.de] Várias correções e melhorias diff --git a/fastlane/metadata/android/pt-PT/changelogs/966.txt b/fastlane/metadata/android/pt-PT/changelogs/966.txt new file mode 100644 index 000000000..10aad806c --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/966.txt @@ -0,0 +1,14 @@ +Novo: +- Acrescentar um novo serviço: Bandcamp + +Melhorado: +- Adicionar uma opção para que a aplicação siga o tema do dispositivo +- Prevenir alguns acidentes mostrando um painel de erro melhorado +- Mostrar mais informações sobre o porquê do conteúdo na indisponibilidade +- O botão de espaço de hardware ativa o jogo/pausa +- Mostrar "Download iniciado" brinde + +Fixo: +- Fixar miniaturas muito pequenas em detalhes de vídeo enquanto se reproduz em fundo +- Corrigir título vazio em jogador minimizado +- O último modo de reparação do tamanho não está a ser restaurado corretamente diff --git a/fastlane/metadata/android/pt-PT/changelogs/969.txt b/fastlane/metadata/android/pt-PT/changelogs/969.txt new file mode 100644 index 000000000..28650ae9b --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/969.txt @@ -0,0 +1,8 @@ +* Permitir a instalação no armazenamento externo +* [Bandcamp] Adicionado suporte para exibir os três primeiros comentários em um fluxo +* Mostrar apenas o brinde 'o download começou' quando o download é iniciado +• Não defina o cookie reCaptcha quando não existir nenhum cookie armazenado +* [Jogador] melhorar o desempenho do cache +* [Jogador] jogador fixo que não joga automaticamente +* Dispensar Snackbars anteriores ao excluir downloads +* Corrigido tentando excluir objeto não na lista diff --git a/fastlane/metadata/android/pt-PT/changelogs/972.txt b/fastlane/metadata/android/pt-PT/changelogs/972.txt new file mode 100644 index 000000000..9838ebadd --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/972.txt @@ -0,0 +1,14 @@ +Novo +Reconhecer os timestamps e hashtags na descrição +Acrescentada a definição do modo tablet manual +Capacidade adicional de esconder itens jogados numa ração + +Melhorado +Apoiar adequadamente o Quadro de Acesso ao Armazenamento +Melhor tratamento de erros de canais indisponíveis e terminados +A folha de partilha do Android para utilizadores do Android 10+ mostra agora o título do conteúdo. +Atualização de instâncias Invidious e suporte de links Piped. + +Corrigido +[YouTube] Conteúdo restrito à idade +Prevenir fugas na janela Exceção ao abrir o diálogo de escolha diff --git a/fastlane/metadata/android/pt-PT/changelogs/975.txt b/fastlane/metadata/android/pt-PT/changelogs/975.txt index 994f0e8c5..e867d1b11 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/975.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/975.txt @@ -8,8 +8,8 @@ Melhorias • Layout de metadados e etiquetas Fixo -• Corrigida miniatura no miniplayer -• Corrigido buffer sem fim em itens de fila duplicados -• Corrigido ReCAPTCHA que permanece carregado em segundo plano +• Corrigir miniatura no miniplayer +• Corrigir buffer sem fim em itens de fila duplicados +• Corrigir ReCAPTCHA que permanece carregado em segundo plano • Desativados os cliques enquanto atualiza o feed -• Corrigidas algumas falhas do descarregador +• Corrigir algumas falhas do descarregador diff --git a/fastlane/metadata/android/pt-PT/changelogs/983.txt b/fastlane/metadata/android/pt-PT/changelogs/983.txt new file mode 100644 index 000000000..489f58b5b --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/983.txt @@ -0,0 +1,9 @@ +Acrescentar nova IU e comportamento de dupla tatuagem +Tornar as definições pesquisáveis +Destaque para os comentários em destaque como tal +Adicionar suporte open-with-app para a instância PeerTube da FSFE +Adicionar notificações de erro +Repor a repetição do item da primeira fila na mudança de jogador +Esperar mais tempo ao buffering durante os livestreams antes de falhar +Ordem fixa dos resultados da pesquisa local +Corrigir campos de itens vazios na fila de jogo diff --git a/fastlane/metadata/android/pt-PT/changelogs/986.txt b/fastlane/metadata/android/pt-PT/changelogs/986.txt new file mode 100644 index 000000000..102422ee2 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/986.txt @@ -0,0 +1,16 @@ +Novo +- Notificações para novas correntes +- Transição sem falhas entre o fundo e os leitores de vídeo +- Alterar o passo por semitons +- Anexar a fila principal de jogadores a uma lista de reprodução + +Melhorado +- Lembre-se da velocidade/tamanho do passo +- Mitigar o longo amortecimento inicial no leitor de vídeo +- Melhorar a interface do leitor para a TV Android +- Confirmar antes de apagar todos os ficheiros descarregados + +Fixa +- Botão de fixação do media não esconde os controlos do leitor +- Reposição da reprodução corrigida na mudança de tipo de leitor +- Fixar a rotação do diálogo da lista de reprodução diff --git a/fastlane/metadata/android/pt-PT/changelogs/987.txt b/fastlane/metadata/android/pt-PT/changelogs/987.txt new file mode 100644 index 000000000..334af9772 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/987.txt @@ -0,0 +1,12 @@ +Novo +- Métodos de entrega de suporte que não o HTTP progressivo: tempo de carregamento de reprodução mais rápido, correções para PeerTube e SoundCloud, reprodução de livestreams do YouTube recentemente terminados +- Adicionar botão para adicionar uma lista de reprodução remota a uma lista local +- Pré-visualização de imagem na folha de partilha Android 10+ + +Melhorado +- Melhorar o diálogo dos parâmetros de reprodução +- Mover botões de importação/exportação de subscrição para o menu de três pontos + +Fixa +- Correção da remoção de vídeos totalmente vistos da lista de reprodução +- Corrigir o tema do menu de partilha e a entrada "adicionar à lista de reprodução diff --git a/fastlane/metadata/android/pt-PT/changelogs/993.txt b/fastlane/metadata/android/pt-PT/changelogs/993.txt new file mode 100644 index 000000000..7f06f8081 --- /dev/null +++ b/fastlane/metadata/android/pt-PT/changelogs/993.txt @@ -0,0 +1,13 @@ +Novo +- Adicionar aviso ao adicionar duplicados da lista de reprodução e adicionar botão para os remover +- Permitir ignorar os botões de hardware +- Permitir a ocultação de vídeos parcialmente vistos na alimentação + +Melhorado +- Utilizar mais colunas de grelha em ecrãs grandes +- Tornar os indicadores de progresso consistentes com as definições + +Fixa +- Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ +- Fixação interagindo com tela cheia requer duas torneiras no MIUI +- Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos diff --git a/fastlane/metadata/android/pt-PT/full_description.txt b/fastlane/metadata/android/pt-PT/full_description.txt index cf8f2a255..af5b0f911 100644 --- a/fastlane/metadata/android/pt-PT/full_description.txt +++ b/fastlane/metadata/android/pt-PT/full_description.txt @@ -1 +1 @@ -NewPipe não utiliza nenhuma biblioteca de estrutura do Google, nem a API do YouTube. Apenas analisa o site para obter as informações necessárias. Portanto, esta app pode ser usado em aparelhos sem os Serviços do Google instalados. Além disso, não precisa de uma conta no YouTube para usar o NewPipe, e é FLOSS. +NewPipe não utiliza nenhuma biblioteca de estrutura do Google, nem a API do YouTube. Apenas analisa o site para obter as informações necessárias. Desta forma, esta aplicação pode ser utilizada em aparelhos que não tenham Google Services instalados. Não precisa de uma conta Youtube e, além disso, é uma aplicação FLOSS. diff --git a/fastlane/metadata/android/pt-PT/short_description.txt b/fastlane/metadata/android/pt-PT/short_description.txt index 5e111585b..6c0629adc 100644 --- a/fastlane/metadata/android/pt-PT/short_description.txt +++ b/fastlane/metadata/android/pt-PT/short_description.txt @@ -1 +1 @@ -Um frontend gratuito e leve do YouTube para o Android. +Um reprodutor Youtube para Android. diff --git a/fastlane/metadata/android/pt/changelogs/66.txt b/fastlane/metadata/android/pt/changelogs/66.txt new file mode 100644 index 000000000..ed84a2759 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/66.txt @@ -0,0 +1,33 @@ +# Changelog de v0.13.7 + +### Fixo +- Fixar questões de filtro de ordenação da v0.13.6 + +# Mudança do v0.13.6 + +### Melhorias + +- Desactivar animação de ícones de burgermenu #1486 +- anular a eliminação dos downloads #1472 +- Opção de download no menu de partilha #1498 +- Adicionada a opção de partilha no menu de toque longo #1454 +- Minimizar o jogador principal na saída #1354 +- Actualização da versão da biblioteca e correcção da cópia de segurança da base de dados #1510 +- ExoPlayer 2.8.2 Actualização #1392 + - Reformulou o diálogo de controlo de velocidade de reprodução para suportar diferentes tamanhos de passos para uma mudança de velocidade mais rápida. + - Adicionada uma alternância para avançar rapidamente durante os silêncios no controlo de velocidade de reprodução. Isto deve ser útil para audiolivros e certos géneros musicais, e pode trazer uma verdadeira experiência sem falhas (e pode quebrar uma canção com muitos silêncios =\i1). + - A resolução da fonte dos meios de comunicação foi refeita para permitir a passagem de metadados ao lado dos meios de comunicação internamente no leitor, em vez de o fazer manualmente. Agora temos uma única fonte de metadados e está directamente disponível quando a reprodução começa. + - Fixados os metadados da lista de reprodução remota que não são actualizados quando novos metadados estão disponíveis quando o fragmento da lista de reprodução é aberto. + - Várias correcções UI: #1383, a notificação do leitor de fundo controla agora sempre branco, mais fácil de desligar o leitor de pop-ups através do fling +- Usar novo extractor com arquitectura refacturada para multiserviços + +### Correcções + +- Reparação #1440 Layout de Informação de Vídeo Partido #1491 +- Ver histórico correcção #1497 + - #1495, actualizando os metadados (miniatura, título e contagem de vídeo) assim que o utilizador aceda à lista de reprodução. + - #1475, através do registo de uma vista na base de dados quando o utilizador inicia um vídeo no leitor externo sobre fragmento de detalhe. +- Fixar tempo limite de creen em caso de modo popup. #1463 (Fixado #640) +- Correcção principal do leitor de vídeo #1509 + - [#1412] Modo de repetição fixo causando NPE do jogador quando novas intenções são recebidas enquanto a actividade do jogador está em segundo plano. + - Fixa a minimização do jogador a popup não destrói o jogador quando não é concedida permissão de popup. diff --git a/fastlane/metadata/android/pt/changelogs/68.txt b/fastlane/metadata/android/pt/changelogs/68.txt new file mode 100644 index 000000000..1e6c42e01 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/68.txt @@ -0,0 +1,31 @@ +# mudanças da v0.14.1 + +### fixo +- Fixo falhou em desencriptar a url de vídeo #1659 +- Ligação de descrição fixa não extraída bem #1657 + +# mudanças de v0.14.0 + +### Novo +- Novo desenho de gaveta #1461 +- Nova página inicial personalizável #1461 + +### Melhorias +- Controlos por gestos retrabalhados #1604 +- Nova forma de fechar o leitor de popup #1597 + +### Fixa +- Corrigir erro quando a contagem de assinaturas não está disponível. Fecha #1649. + - Mostrar "Contagem de subscritores não disponível" nesses casos +- Consertar NPE quando uma lista de reprodução do YouTube está vazia +- Correcção rápida para os quiosques em SoundCloud +- Refactor e correcção de bugs #1623 + - Resultado de pesquisa cíclica reparada #1562 + - Barra de procura fixa não estática + - Os vídeos do YT Premium não estão bloqueados correctamente + - Vídeos Fixos por vezes não carregados (devido à análise do DASH) + - Corrigir ligações na descrição vídeo + - Mostrar aviso quando alguém tenta descarregar para sdcard externo + - nada de excepção mostrado dispara o relatório + - thumbnail não mostrado no leitor de fundo para andróide 8.1 [ver aqui](https://github.com/TeamNewPipe/NewPipe/issues/943) +- Correcção do registo do receptor de radiodifusão. Fecha #1641. diff --git a/fastlane/metadata/android/pt/changelogs/69.txt b/fastlane/metadata/android/pt/changelogs/69.txt new file mode 100644 index 000000000..fa7d5d85c --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/69.txt @@ -0,0 +1,19 @@ +#### Novo +- Eliminação de longa duração e partilha de subscrições #1516 +- Tabela UI e esquema de lista de grelha #1617 + +### Melhorias +- armazenar e recarregar a última relação de aspeto utilizada #1748 +- Ativar a disposição linear na atividade de Downloads com nomes de vídeo completos #1771 +- Apagar e partilhar subscrições diretamente do separador de subscrições #1516 +- Enqueuing agora ativa a reprodução de vídeo se a fila de reprodução já tiver terminado #1783 +- Configurações separadas para os gestos de volume e luminosidade #1644 +- Adicionar apoio à Localização #1792 + +### Correções +- Fixar a análise do tempo para . formato, para que NewPipe possa ser usado na Finlândia +- Contagem fixa de assinaturas +- Adicionar permissão de serviço em primeiro plano para dispositivos API 28+ #1830 + +### Bugs conhecidos +- O estado de reprodução não pode ser guardado no Android P diff --git a/fastlane/metadata/android/pt/changelogs/70.txt b/fastlane/metadata/android/pt/changelogs/70.txt new file mode 100644 index 000000000..61de40666 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/70.txt @@ -0,0 +1,25 @@ +Atenção: esta versão é provavelmente um bugfest, tal como a última. No entanto, devido ao desligamento total desde o 17. uma versão quebrada é melhor do que nenhuma versão. Certo? ¯\_(ツ)_/¯ + +### Melhoria +* os arquivos baixados agora podem ser abertos com um clique #1879 +* suporte drop para android 4.1-4.3 #1884 +* remover jogador antigo #1884 +* remova os fluxos da fila de reprodução atual passando-os para a direita #1915 +* remova o fluxo enfileirado automático quando um novo fluxo é enfileirado manualmente # 1878 +* Pós-processamento para downloads e implementar recursos ausentes #1759 por @ kapodamy + * Infra-estruturas de pós-processamento + * Tratamento adequado de erros "infraestrutura" (para downloader) + * Fila em vez de vários downloads + * Mover transferências pendentes serializadas (`.arquivos giga`) para dados do aplicativo + * Implementar nova tentativa máxima de download + * Pausa adequada para o download de vários segmentos + * Parar downloads quando swicthing à rede móvel (nunca funciona, ver ponto 2) + * Salve a contagem de threads para os próximos downloads + * Muitas incoerências corrigidas + +### Corrigido +* Corrigir falha com resolução padrão definida como a melhor e limitada resolução de dados móveis #1835 +* falha do jogador pop-up corrigida #1874 +* NPE ao tentar abrir o jogador de fundo #1901 +* Correção para inserir novos fluxos quando o enfileiramento automático está habilitado #1878 +* Corrigido o problema decypering shuttown diff --git a/fastlane/metadata/android/pt/changelogs/71.txt b/fastlane/metadata/android/pt/changelogs/71.txt new file mode 100644 index 000000000..fb525cccc --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/71.txt @@ -0,0 +1,10 @@ +### Melhoria +* Adicionar notificação de atualização do aplicativo para compilação do GitHub (#1608 por @ krtkush) +* Várias melhorias para o downloader(# 1944 por @kapodamy): + * * adicione ícones brancos ausentes e use o modo hardcore para alterar as cores dos ícones + * verifique se o iterador foi inicializado (correções #2031) + * * permitir novas tentativas de downloads com erro "Falha no pós-processamento" no novo mixer + * novo muxer MPEG - 4 que fixa fluxos de vídeo e áudio não síncronos (#2039) + +### Corrigido +* * As transmissões ao vivo do YouTube param de ser reproduzidas após um curto período de tempo(# 1996 por @username) diff --git a/fastlane/metadata/android/pt/changelogs/740.txt b/fastlane/metadata/android/pt/changelogs/740.txt new file mode 100644 index 000000000..c795978a8 --- /dev/null +++ b/fastlane/metadata/android/pt/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/pt/changelogs/750.txt b/fastlane/metadata/android/pt/changelogs/750.txt new file mode 100644 index 000000000..25f0c1dbf --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/750.txt @@ -0,0 +1,22 @@ +Novo +Resumo da reprodução #2288 +* Retomar fluxos onde parou da última vez +Melhorias Do Downloader #2149 +* Use o Storage Access Framework para armazenar downloads em cartões SD externos +* Novo MP4 muxer +* Opcionalmente, altere o diretório de download antes de iniciar um download +* Respeitar as redes de medição + + +Melhorado +* Cordas gema removidas #2295 +* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 +* Tornar os menus de pressão longa consistentes #2368 + +Corrigido +* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 +• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 +* Downloads fixos presos em 99,9% #2440 +* Atualizar meta dados da fila de reprodução #2453 +* [*[SoundCloud] corrigida a falha ao carregar listas de reprodução Team New Pipe / New Pipe Extractor#170 +* [*[YouTube] A duração fixa não pode ser analisada Team New Pipe / New Pipe Extractor#177 diff --git a/fastlane/metadata/android/pt/changelogs/760.txt b/fastlane/metadata/android/pt/changelogs/760.txt new file mode 100644 index 000000000..113a92615 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/760.txt @@ -0,0 +1,43 @@ +Alterações em 0.17.1 + +Novo +* Localização tailandesa + + +Melhorado +* Adicionar começar a jogar aqui ação em menus de longo imprensa para playlists novamente #2518 +* Adicionar interruptor para SAF / legacy file picker #2521 + +Corrigido +* Corrigir botões desaparecendo na visualização de downloads ao alternar aplicativos #2487 +* Corrigir a posição de reprodução é armazenada, embora o histórico de exibição esteja desativado +* Corrigir desempenho reduzido causado pela posição de reprodução em visualizações de lista #2517 +* [Extractor] Corrigir ReCaptchaActivity # 2527, TeamNewPipe / NewPipeExtractor#186 +* [Extractor] [YouTube] Corrigir Erro de pesquisa casual quando as listas de reprodução estão nos resultados TeamNewPipe / NewPipeExtractor#185 + + + +Alterações em 0.17.0 + +Novo +Resumo da reprodução #2288 +* Retomar fluxos onde parou da última vez +Melhorias Do Downloader #2149 +* Use o Storage Access Framework para armazenar downloads em cartões SD externos +* Novo MP4 muxer +* Opcionalmente, altere o diretório de download antes de iniciar um download +* Respeitar as redes de medição + + +Melhorado +* Cordas gema removidas #2295 +* Lidar com mudanças de rotação (automática) durante o ciclo de vida da atividade #2444 +* Tornar os menus de pressão longa consistentes #2368 + +Corrigido +* Corrigido o nome da faixa de legenda selecionada não sendo mostrado #2394 +• Não trave quando a verificação da atualização do aplicativo falhar (versão do GitHub) #2423 +* Downloads fixos presos em 99,9% #2440 +* Atualizar metadados da fila de reprodução #2453 +* [SoundCloud] corrigida a falha ao carregar listas de reprodução TeamNewPipe / NewPipeExtractor#170 +* [YouTube] duração fixa não pode ser Paresd TeamNewPipe / NewPipeExtractor#177 diff --git a/fastlane/metadata/android/pt/changelogs/780.txt b/fastlane/metadata/android/pt/changelogs/780.txt new file mode 100644 index 000000000..961f1babd --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/780.txt @@ -0,0 +1,12 @@ +Alterações em 0.17.3 + +Melhorado em +- Adicionada opção para limpar estados de reprodução #2550 +- Mostrar diretórios ocultos no seletor de ficheiros #2591 +- URLs de apoio de instâncias `invidio.us` a serem abertas com NewPipe #2488 +- Adicionar suporte para `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 + +Fixa +- [YouTube] Fixo 'java.lang.IllegalArgumentException #192 +- [YouTube] Fluxos fixos ao vivo não funcionam TeamNewPipe/NewPipeExtractor#195 +- Resolvido problema de desempenho em torta de android ao descarregar um fluxo #2592 diff --git a/fastlane/metadata/android/pt/changelogs/790.txt b/fastlane/metadata/android/pt/changelogs/790.txt new file mode 100644 index 000000000..f1b3a2dd9 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/790.txt @@ -0,0 +1,14 @@ +Melhorado +- Adicionar mais títulos para melhorar a acessibilidade para os cegos #2655 +- Tornar a linguagem da pasta de download mais consistente e menos ambígua #2637 + +Fixa +- Verificar se o último byte no bloco é descarregado #2646 +- Rolagem fixa em fragmento de detalhe de vídeo #2672 +- Remover a dupla pesquisa de animações de caixa transparente para uma #2695 +- Fixar extracção client_id #2745 + +Desenvolvimento +- Adicionar dependências em falta herdadas de NewPipeExtractor em NewPipe #2535 +- Migrar para AndroidX #2685 +- Actualização para ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/pt/changelogs/800.txt b/fastlane/metadata/android/pt/changelogs/800.txt new file mode 100644 index 000000000..1b6ec1a4c --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/800.txt @@ -0,0 +1,27 @@ +Novo +- Suporte PeerTube sem P2P (#2201) [Beta]: + ◦ Ver e descarregar vídeos de instâncias do PeerTube + ◦ Adicionar instâncias nas definições para aceder ao mundo completo do PeerTube + ◦ Pode haver problemas com apertos de mão SSL no Android 4.4 e 7.1 quando o acesso a certos casos resulta num erro de rede. + +- Downloader (#2679): + ◦ Calcular ETA de descarregamento + ◦ Descarregar opus (ficheiros webm) como ogg + ◦ Recuperar ligações expiradas para retomar os downloads após uma longa pausa + +Melhorado +- Tornar o KioskFragment consciente das mudanças no país de conteúdo preferido e melhorar o desempenho de todos os separadores principais #2742 +- Utilizar novas implementações de Localização e Downloader do extractor #2713 +- Tornar o fio "Quiosque por defeito" traduzível +- Barra de navegação preta para o tema preto #2569 + +Fixa +- Corrigido um bug que não podia mover o leitor de popup se outro dedo fosse colocado enquanto se movia o leitor de popup #2772 +- Permitir listas de reprodução sem um carregador e corrigir falhas relacionadas com este problema #2724, TeamNewPipe/NewPipeExtractor#219 +- Habilitação de TLS1.1/1.2 em dispositivos Android 4.4 (API 19/KitKat) para corrigir o aperto de mão de TLS com MediaCCC e algumas instâncias PeerTube #2792 +- [SoundCloud] Equipa fixa de extracção client_idNewPipe/NewPipeExtractor#217 +- Fixar a extracção do fluxo de áudio + +Desenvolvimento +- Atualizar ExoPlayer para 2.10.8 #2791, #2816 +- Atualizar o Gradle para 3.5.1 e adicionar o suporte Kotlin #2714 diff --git a/fastlane/metadata/android/pt/changelogs/810.txt b/fastlane/metadata/android/pt/changelogs/810.txt new file mode 100644 index 000000000..3cb60e434 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/810.txt @@ -0,0 +1,19 @@ +Novo +- Mostrar a miniatura do vídeo no ecrã de bloqueio ao tocar em fundo + +Melhorado +- Adicionar lista de reprodução local à fila de espera ao premir durante muito tempo no botão de fundo / popup +- Faça com que os separadores da página principal possam ser deslocados e escondidos quando só existe um único separador +- Quantidade limite de actualizações de miniaturas de notificação no leitor de fundo +- Adicionar miniatura de miniatura para listas de reprodução locais vazias +- Use a extensão de ficheiro *.opus em vez de *.webm e mostre "opus" na etiqueta de formato em vez de "WebM Opus" no menu pendente de download +- Adicionar botão para apagar ficheiros descarregados ou histórico de descarregamentos em "Downloads +- [YouTube] Adicionar suporte a /c/shortened_url channel links + +Fixa +- Corrigido múltiplos problemas ao partilhar um vídeo para NewPipe e descarregar diretamente os seus fluxos +- Acesso fixo do jogador fora do seu fio de criação +- Paginação fixa de resultados de pesquisa +- Ligar nulo fixo causando NPE +- [YouTube] Comentários de visualização fixos ao abrir uma url invidio.us +- ClientCloud] Client_id actualizado diff --git a/fastlane/metadata/android/pt/changelogs/840.txt b/fastlane/metadata/android/pt/changelogs/840.txt new file mode 100644 index 000000000..4ee1d8ab3 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/840.txt @@ -0,0 +1,22 @@ +Novo +- Adicionado o seletor de língua para alterar a língua da aplicação +- Adicionado enviar para o botão Kodi ao menu desmontável do leitor +- Capacidade adicional de copiar comentários sobre imprensa longa + +Melhorado +- Fixar a actividade ReCaptcha e guardar corretamente os cookies obtidos +- Removido o ponto-menu a favor da gaveta e botão esconder histórico quando o histórico do relógio não está ativado nas definições +- Pedir permissão de visualização sobre outras aplicações em definições corretamente no Android 6 e posteriores +- Renomear playlist local através de um clique longo em BookmarkFragment +- Vários melhoramentos do PeerTube +- Melhorou várias cadeias de caracteres em inglês + +Fixa +- Jogador fixo a recomeçar, embora seja pausado quando a opção "minimizar no comutador da aplicação" é ativada e o NewPipe é minimizado +- Fixar o valor de brilho inicial para o gesto +- Downloads de subtítulos .srt fixos contendo nem todas as quebras de linha +- Corrigido o download para cartão SD falhando porque alguns dispositivos Android 5 não são compatíveis com CTF +- Descarregamento fixo no Android KitKat +- Ficheiro fixo de vídeo corrupto .mp4 sendo reconhecido como ficheiro de áudio +- Resolvidos problemas de localização múltipla, incluindo códigos de língua chinesa errados +- Os carimbos temporais em descrição podem ser clicados novamente diff --git a/fastlane/metadata/android/pt/changelogs/930.txt b/fastlane/metadata/android/pt/changelogs/930.txt new file mode 100644 index 000000000..1ded9e887 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/930.txt @@ -0,0 +1,19 @@ +Novo +- Pesquisa no YouTube Música +- Suporte básico de TV Android + +Melhorado +- Adicionada a capacidade de remover todos os vídeos vistos de uma lista de reprodução local +- Mostrar mensagem quando o conteúdo ainda não é suportado, em vez de se chocar +- Reprodutor popup melhorado redimensionado com gestos de beliscão +- Enqueue streams em fundo e botões de popup no canal +- Melhor manuseamento do tamanho do título do cabeçalho da gaveta + +Fixa +- Definição de conteúdo com restrição de idade fixa não funciona +- Fixação de certos tipos de reCAPTCHAs +- Corrigido o crash ao abrir marcadores enquanto a lista de reprodução é "nula". +- Deteção fixa de exceções relacionadas com a rede +- Visibilidade fixa do botão de ordenação do grupo no fragmento de subscrições + +e mais diff --git a/fastlane/metadata/android/pt/changelogs/955.txt b/fastlane/metadata/android/pt/changelogs/955.txt index 98bed58fe..edc87b56b 100644 --- a/fastlane/metadata/android/pt/changelogs/955.txt +++ b/fastlane/metadata/android/pt/changelogs/955.txt @@ -1,3 +1,3 @@ -[YouTube] O problema com busca que afetava utilizadores foi corrigida -[YouTube] Exceções de desencriptação aleatórias foram corrigidas -[SounCloud] URLs que terminam com uma barra são analisadas corretamente +[YouTube] Pesquisa corrigida para alguns utilizadores +[YouTube] Corrigidas exceções de desencriptação aleatórias +[SounCloud] URLs que terminam com uma barra são agora analisados corretamente diff --git a/fastlane/metadata/android/pt/changelogs/956.txt b/fastlane/metadata/android/pt/changelogs/956.txt index e258a451e..dcebd0562 100644 --- a/fastlane/metadata/android/pt/changelogs/956.txt +++ b/fastlane/metadata/android/pt/changelogs/956.txt @@ -1 +1 @@ -[YouTube] Falha corrigida ao carregar qualquer vídeo +[YouTube] Corrigida falha ao carregar qualquer vídeo diff --git a/fastlane/metadata/android/pt/changelogs/961.txt b/fastlane/metadata/android/pt/changelogs/961.txt new file mode 100644 index 000000000..61f2a981b --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/961.txt @@ -0,0 +1,12 @@ +- Apoio à mistura +- [YouTube] Mostrar informação sobre emissoras públicas e Covid-19 +- [media.ccc.de] Adicionados vídeos recentes +- Acrescentada tradução somaliana + +- Muitas melhorias internas + +- Vídeos fixos de partilha de dentro do leitor +- Vista Web ReCaptcha em branco fixa +- Reparação de um acidente que ocorreu ao remover um fluxo de uma lista +- Fluxos relacionados fixos +- [YouTube] Pesquisa fixa de música no YouTube diff --git a/fastlane/metadata/android/pt/changelogs/964.txt b/fastlane/metadata/android/pt/changelogs/964.txt new file mode 100644 index 000000000..7aa3c9fe4 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/964.txt @@ -0,0 +1,8 @@ +- Apoio adicional para capítulos nos controlos de jogadores +- Adicionada a pesquisa Sepia +- Botão de partilha reajustado na visualização detalhada do vídeo e moveu a descrição do fluxo para o layout do separador +- Desativar o restabelecimento do brilho se o gesto de brilho for desativado +- Adicionado item da lista para reproduzir vídeo no kodi +- Corrigida a falha quando não está definido um navegador padrão em alguns dispositivos e melhorados os diálogos de partilha +- Alternar jogo/pausa com botão de espaço de hardware no leitor de ecrã inteiro +- [media.ccc.de] Várias correções e melhorias diff --git a/fastlane/metadata/android/pt/changelogs/966.txt b/fastlane/metadata/android/pt/changelogs/966.txt new file mode 100644 index 000000000..10aad806c --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/966.txt @@ -0,0 +1,14 @@ +Novo: +- Acrescentar um novo serviço: Bandcamp + +Melhorado: +- Adicionar uma opção para que a aplicação siga o tema do dispositivo +- Prevenir alguns acidentes mostrando um painel de erro melhorado +- Mostrar mais informações sobre o porquê do conteúdo na indisponibilidade +- O botão de espaço de hardware ativa o jogo/pausa +- Mostrar "Download iniciado" brinde + +Fixo: +- Fixar miniaturas muito pequenas em detalhes de vídeo enquanto se reproduz em fundo +- Corrigir título vazio em jogador minimizado +- O último modo de reparação do tamanho não está a ser restaurado corretamente diff --git a/fastlane/metadata/android/pt/changelogs/969.txt b/fastlane/metadata/android/pt/changelogs/969.txt new file mode 100644 index 000000000..28650ae9b --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/969.txt @@ -0,0 +1,8 @@ +* Permitir a instalação no armazenamento externo +* [Bandcamp] Adicionado suporte para exibir os três primeiros comentários em um fluxo +* Mostrar apenas o brinde 'o download começou' quando o download é iniciado +• Não defina o cookie reCaptcha quando não existir nenhum cookie armazenado +* [Jogador] melhorar o desempenho do cache +* [Jogador] jogador fixo que não joga automaticamente +* Dispensar Snackbars anteriores ao excluir downloads +* Corrigido tentando excluir objeto não na lista diff --git a/fastlane/metadata/android/pt/changelogs/972.txt b/fastlane/metadata/android/pt/changelogs/972.txt new file mode 100644 index 000000000..9838ebadd --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/972.txt @@ -0,0 +1,14 @@ +Novo +Reconhecer os timestamps e hashtags na descrição +Acrescentada a definição do modo tablet manual +Capacidade adicional de esconder itens jogados numa ração + +Melhorado +Apoiar adequadamente o Quadro de Acesso ao Armazenamento +Melhor tratamento de erros de canais indisponíveis e terminados +A folha de partilha do Android para utilizadores do Android 10+ mostra agora o título do conteúdo. +Atualização de instâncias Invidious e suporte de links Piped. + +Corrigido +[YouTube] Conteúdo restrito à idade +Prevenir fugas na janela Exceção ao abrir o diálogo de escolha diff --git a/fastlane/metadata/android/pt/changelogs/983.txt b/fastlane/metadata/android/pt/changelogs/983.txt new file mode 100644 index 000000000..489f58b5b --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/983.txt @@ -0,0 +1,9 @@ +Acrescentar nova IU e comportamento de dupla tatuagem +Tornar as definições pesquisáveis +Destaque para os comentários em destaque como tal +Adicionar suporte open-with-app para a instância PeerTube da FSFE +Adicionar notificações de erro +Repor a repetição do item da primeira fila na mudança de jogador +Esperar mais tempo ao buffering durante os livestreams antes de falhar +Ordem fixa dos resultados da pesquisa local +Corrigir campos de itens vazios na fila de jogo diff --git a/fastlane/metadata/android/pt/changelogs/986.txt b/fastlane/metadata/android/pt/changelogs/986.txt new file mode 100644 index 000000000..102422ee2 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/986.txt @@ -0,0 +1,16 @@ +Novo +- Notificações para novas correntes +- Transição sem falhas entre o fundo e os leitores de vídeo +- Alterar o passo por semitons +- Anexar a fila principal de jogadores a uma lista de reprodução + +Melhorado +- Lembre-se da velocidade/tamanho do passo +- Mitigar o longo amortecimento inicial no leitor de vídeo +- Melhorar a interface do leitor para a TV Android +- Confirmar antes de apagar todos os ficheiros descarregados + +Fixa +- Botão de fixação do media não esconde os controlos do leitor +- Reposição da reprodução corrigida na mudança de tipo de leitor +- Fixar a rotação do diálogo da lista de reprodução diff --git a/fastlane/metadata/android/pt/changelogs/987.txt b/fastlane/metadata/android/pt/changelogs/987.txt new file mode 100644 index 000000000..334af9772 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/987.txt @@ -0,0 +1,12 @@ +Novo +- Métodos de entrega de suporte que não o HTTP progressivo: tempo de carregamento de reprodução mais rápido, correções para PeerTube e SoundCloud, reprodução de livestreams do YouTube recentemente terminados +- Adicionar botão para adicionar uma lista de reprodução remota a uma lista local +- Pré-visualização de imagem na folha de partilha Android 10+ + +Melhorado +- Melhorar o diálogo dos parâmetros de reprodução +- Mover botões de importação/exportação de subscrição para o menu de três pontos + +Fixa +- Correção da remoção de vídeos totalmente vistos da lista de reprodução +- Corrigir o tema do menu de partilha e a entrada "adicionar à lista de reprodução diff --git a/fastlane/metadata/android/pt/changelogs/993.txt b/fastlane/metadata/android/pt/changelogs/993.txt new file mode 100644 index 000000000..7f06f8081 --- /dev/null +++ b/fastlane/metadata/android/pt/changelogs/993.txt @@ -0,0 +1,13 @@ +Novo +- Adicionar aviso ao adicionar duplicados da lista de reprodução e adicionar botão para os remover +- Permitir ignorar os botões de hardware +- Permitir a ocultação de vídeos parcialmente vistos na alimentação + +Melhorado +- Utilizar mais colunas de grelha em ecrãs grandes +- Tornar os indicadores de progresso consistentes com as definições + +Fixa +- Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ +- Fixação interagindo com tela cheia requer duas torneiras no MIUI +- Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos diff --git a/fastlane/metadata/android/pt/short_description.txt b/fastlane/metadata/android/pt/short_description.txt index 6c0629adc..1f2c45723 100644 --- a/fastlane/metadata/android/pt/short_description.txt +++ b/fastlane/metadata/android/pt/short_description.txt @@ -1 +1 @@ -Um reprodutor Youtube para Android. +Um frontend gratuito e leve do YouTube para Android. diff --git a/fastlane/metadata/android/ru/changelogs/63.txt b/fastlane/metadata/android/ru/changelogs/63.txt index 8cb650ef4..59101af13 100644 --- a/fastlane/metadata/android/ru/changelogs/63.txt +++ b/fastlane/metadata/android/ru/changelogs/63.txt @@ -1,8 +1,8 @@ ### Улучшения - Импорт/экспорт настроек #1333 -- Уменьшена перерисовка (оптимизация производительности) #1371 +- Уменьшено количество перерисовки (повышена производительность) #1371 - Небольшие улучшения кода #1375 - Добавлено всё о GDPR #1420 -### Исправлено +### Исправления - Загрузчик: Исправлен вылет при продолжении незавершённых загрузок с форматом .giga #1407 diff --git a/fastlane/metadata/android/ru/changelogs/64.txt b/fastlane/metadata/android/ru/changelogs/64.txt index e2a02f8ee..ffa1927c2 100644 --- a/fastlane/metadata/android/ru/changelogs/64.txt +++ b/fastlane/metadata/android/ru/changelogs/64.txt @@ -1,8 +1,8 @@ ### Улучшения -- Добавлена возможность ограничить качество видео при использовании мобильного интернета #1339 +- Добавлена возможность ограничения качества видео при использовании мобильного интернета #1339 - Теперь яркость запоминается на время сессии #1442 - Улучшена производительность загрузки для более слабых процессоров #1431 - Добавлена (работающая) поддержка для медиа-сессии #1433 -### Исправлено +### Исправления - Исправлен вылет при открытии Загрузок (доступно в релизных сборках) #1441 diff --git a/fastlane/metadata/android/ru/changelogs/65.txt b/fastlane/metadata/android/ru/changelogs/65.txt index 51993fef3..bd81955c4 100644 --- a/fastlane/metadata/android/ru/changelogs/65.txt +++ b/fastlane/metadata/android/ru/changelogs/65.txt @@ -1 +1,26 @@ -эскиз видео +### Улучшения + +- Отключение анимации значка burgermenu #1486 +- Отменение удаления загрузок #1472 +- Опция загрузки в меню общего доступа #1498 +- Добавлена опция "Поделиться" в меню долгого нажатием #1454 +- Минимизировать главного игрока на выходе #1354 +- Обновление версии библиотеки и исправление резервного копирования базы данных #1510 +- Обновление ExoPlayer до 2.8.2 #1392 +- Переработан диалог управления скоростью воспроизведения для поддержки различных размеров шага для более быстрого изменения скорости. +- Добавлен переключатель для быстрой перемотки вперед во время пауз в управлении скоростью воспроизведения. Это должно быть полезно для аудиокниг и определенных музыкальных жанров и может принести по-настоящему плавный опыт (и может прервать песню большим количеством пауз =\\). +- Переработано разрешение источника мультимедиа, позволяющее передавать метаданные вместе с мультимедиа внутри проигрывателя, а не делать это вручную. Теперь у нас есть единый источник метаданных, и он доступен непосредственно при запуске воспроизведения. +- Исправлено, что метаданные удаленного плейлиста не обновлялись, когда новые метаданные были доступны при открытии фрагмента плейлиста. +- Различные исправления пользовательского интерфейса: # 1383, элементы управления уведомлениями фонового проигрывателя теперь всегда белые, проще отключить всплывающее окно проигрывателя с помощью щелчка +- Используйте новый экстрактор с переработанной архитектурой для мультисервиса + +### Исправления + +- Исправлено #1440 неработающий макет видеоинформации #1491 +- Исправление истории просмотра #1497 +- # 1495, обновляя метаданные (миниатюру, заголовок и количество видео), как только пользователь получает доступ к списку воспроизведения. +- #1475, путем регистрации просмотра в базе данных, когда пользователь запускает видео на внешнем проигрывателе на детальном фрагменте. +- Исправлен тайм-аут creen в случае всплывающего режима. #1463 (исправлено #640) +- Исправление основного видеоплеера #1509 +- [#1412] Исправлен режим повтора, вызывающий NPE плеера при получении нового намерения, когда активность игрока находится в фоновом режиме. +- Исправлено сведение проигрывателя к всплывающему окну не приводит к уничтожению проигрывателя, если разрешение на всплывающее окно не предоставлено. diff --git a/fastlane/metadata/android/ru/changelogs/66.txt b/fastlane/metadata/android/ru/changelogs/66.txt index 51993fef3..d37569a68 100644 --- a/fastlane/metadata/android/ru/changelogs/66.txt +++ b/fastlane/metadata/android/ru/changelogs/66.txt @@ -1 +1,33 @@ -эскиз видео +# Список изменений версии 0.13.7 + +### Исправлено +- Исправлены проблемы с фильтром сортировки версии 0.13.6 + +# Список изменений версии 0.13.6 + +### Улучшения + +- Отключение анимации значка burgermenu #1486 +- Отменение удаления загрузок #1472 +- Опция загрузки в меню общего доступа #1498 +- Добавлена опция "Поделиться" в меню с длинным нажатием #1454 +- Минимизировать главного игрока на выходе #1354 +- Обновление версии библиотеки и исправление резервного копирования базы данных #1510 +- Обновление ExoPlayer до 2.8.2 #1392 +- Переработан диалог управления скоростью воспроизведения для поддержки различных размеров шага для более быстрого изменения скорости. +- Добавлен переключатель для быстрой перемотки вперед во время пауз в управлении скоростью воспроизведения. Это должно быть полезно для аудиокниг и определенных музыкальных жанров и может принести по-настоящему плавный опыт (и может прервать песню большим количеством пауз =\\). +- Переработано разрешение источника мультимедиа, позволяющее передавать метаданные вместе с мультимедиа внутри проигрывателя, а не делать это вручную. Теперь у нас есть единый источник метаданных, и он доступен непосредственно при запуске воспроизведения. +- Исправлено, что метаданные удаленного плейлиста не обновлялись, когда новые метаданные были доступны при открытии фрагмента плейлиста. +- Различные исправления пользовательского интерфейса: # 1383, элементы управления уведомлениями фонового проигрывателя теперь всегда белые, проще отключить всплывающее окно проигрывателя с помощью щелчка +- Используйте новый экстрактор с переработанной архитектурой для мультисервиса + +### Исправления + +- Исправлено #1440 неработающий макет видеоинформации #1491 +- Исправление истории просмотра #1497 +- # 1495, обновляя метаданные (миниатюру, заголовок и количество видео), как только пользователь получает доступ к списку воспроизведения. +- #1475, путем регистрации просмотра в базе данных, когда пользователь запускает видео на внешнем проигрывателе на детальном фрагменте. +- Исправлен тайм-аут creen в случае всплывающего режима. #1463 (исправлено #640) +- Исправление основного видеоплеера #1509 +- [#1412] Исправлен режим повтора, вызывающий NPE плеера при получении нового намерения, когда активность игрока находится в фоновом режиме. +- Исправлено сведение проигрывателя к всплывающему окну не приводит к уничтожению проигрывателя, если разрешение на всплывающее окно не предоставлено. diff --git a/fastlane/metadata/android/ru/changelogs/68.txt b/fastlane/metadata/android/ru/changelogs/68.txt index 51993fef3..71e6bf4bb 100644 --- a/fastlane/metadata/android/ru/changelogs/68.txt +++ b/fastlane/metadata/android/ru/changelogs/68.txt @@ -1 +1,31 @@ -эскиз видео +# Изменения в версии 0.14.1 + +### Исправлено +- Исправлена ошибка при расшифровке URL-адреса видео #1659 +- Исправлена плохо извлекающаяся ссылка на описание#1657 + +# Изменения в версии 0.14.0 + +### Из нового +- Новый дизайн выпадающего списка #1461 +- Новая настраиваемая главная страница #1461 + +### Улучшения +- Переработанное управление жестами #1604 +- Новый способ закрытия всплывающего окна проигрывателя #1597 + +### Исправления +- Исправлена ошибка недоступности количества подписок. Закрыто #1649. +- Показ "Количество подписчиков недоступно" в этих случаях +- Исправлено NPE, при пустом плейлист YouTube +- Быстрое исправление киосков в SoundCloud +- Рефакторинг и исправление ошибок #1623 +- Исправлен результат циклического поиска #1562 +- Исправлена панель поиска, не размещенная статически +- Исправлено, что видео YT Premium блокируется неправильно +- Исправлено, что видео иногда не загружалось (из-за разбора ТИРЕ) +- Исправлены ссылки в описании видео +- Показывать предупреждение, когда кто-то пытается загрузить на внешнюю SD-карту +- Исправлено ничего непоказывающее сообщение о триггерах исключений +- Неотображаемая миниатура в фоновом проигрывателе на Android 8.1 [смотрите здесь](https://github.com/TeamNewPipe/NewPipe/issues/943 ) +- Исправлена регистрация широковещательного приемника. Закрыто #1641. diff --git a/fastlane/metadata/android/ru/changelogs/69.txt b/fastlane/metadata/android/ru/changelogs/69.txt index c081690f8..1d97b0283 100644 --- a/fastlane/metadata/android/ru/changelogs/69.txt +++ b/fastlane/metadata/android/ru/changelogs/69.txt @@ -1 +1,19 @@ -настройки +### Из нового +- Длительное нажатие на удаление и общий доступ в подписках #1516 +- Пользовательский интерфейс планшета и макет списка таблиц #1617 + +### Улучшения +- Сохранение и перезагрузка последнего использованного соотношения сторон #1748 +- Включена линейная компоновка в активности загрузки с полными названиями видео #1771 +- Удалять подписки и делиться ими непосредственно с вкладки подписки #1516 +- Постановка в очередь теперь запускает воспроизведение видео, если очередь воспроизведения уже закончилась #1783 +- Отдельные настройки для жестов громкости и яркости #1644 +- Добавлена поддержка локализации #1792 + +### Исправления +- Исправлено время разбора для . format, чтобы NewPipe можно было использовать в Финляндии +- Исправлено количество подписок +- Добавить разрешение на работу в активном режиме для устройств API 28+ #1830 + +### Известные ошибки +- Состояние воспроизведения не может быть сохранено на телефоне Android P diff --git a/fastlane/metadata/android/ru/changelogs/70.txt b/fastlane/metadata/android/ru/changelogs/70.txt index da96c42fd..8272619cd 100644 --- a/fastlane/metadata/android/ru/changelogs/70.txt +++ b/fastlane/metadata/android/ru/changelogs/70.txt @@ -1 +1,25 @@ -всплывающий +ВНИМАНИЕ: Эта версия, вероятно, является багфестом, как и предыдущая. Однако из-за полного отключения с 17. сломанная версия лучше, чем без версии. Верно? ¯\_(ツ)_/¯ + +### Улучшения +* Загруженные файлы теперь можно открыть одним щелчком мыши #1879 +* Поддержка drop для Android 4.1 - 4.3 #1884 +* Удалён старый плеер #1884 +* Удаление потоков из текущей очереди воспроизведения, проведя по ним пальцем вправо #1915 +* Удаление потока, автоматически поставленного в очередь, когда новый поток ставится в очередь вручную #1878 +* Постобработка для загрузки и реализации недостающих функций #1759 от @kapodamy +* Инфраструктура постобработки +* Правильная обработка ошибок "инфраструктуры" (для загрузчика) +* Очередь вместо нескольких загрузок +* Переместить сериализованные ожидающие загрузки (файлы `.giga`) в данные приложения +* Реализовать максимальную повторную попытку загрузки +* Правильная приостановка многопоточной загрузки +* Остановка загрузки при подключении к мобильной сети (никогда не работает, см. 2-й пункт) +* Сохраните количество потоков для следующих загрузок +* Исправлено множество несогласованностей + +### Исправления +* Исправлена ошибка с разрешением по умолчанию, установленным на лучшее и ограниченное разрешение мобильных данных #1835 +* исправлен сбой всплывающего проигрывателя #1874 +* NPE при попытке открыть фоновый проигрыватель #1901 +* Исправлена ошибка вставки новых потоков при включенной автоматической постановке в очередь #1878 +* Исправлена проблема с отключением decypering shuttown diff --git a/fastlane/metadata/android/ru/changelogs/71.txt b/fastlane/metadata/android/ru/changelogs/71.txt index 57b179cf2..c66f055d1 100644 --- a/fastlane/metadata/android/ru/changelogs/71.txt +++ b/fastlane/metadata/android/ru/changelogs/71.txt @@ -1 +1,10 @@ -стрим +### Улучшения +* Добавлено уведомление об обновлении приложения из сборки на GitHub (# 1608 от @krtkush) +* Различные улучшения загрузчика (#1944 от @kapodamy): +* Добавьте недостающие белые значки и используйте hardcore way для изменения цвета значков +* Проверка инициализации итератора (исправления #2031) +* Добавлена повторная загрузка для "ошибки постобработки" в новом микшере +* Новый микшер MPEG-4, исправляющий асинхронные видео- и аудиопотоки (#2039) + +### Исправления +* Прямые трансляции YouTube переставали воспроизводиться спустя короткое время (#1996 от @username) diff --git a/fastlane/metadata/android/ru/changelogs/740.txt b/fastlane/metadata/android/ru/changelogs/740.txt index a89174aeb..61f21baa8 100644 --- a/fastlane/metadata/android/ru/changelogs/740.txt +++ b/fastlane/metadata/android/ru/changelogs/740.txt @@ -1,23 +1,23 @@

Улучшения

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

Исправлено

+

Исправления

  • исправлено пролистывание с выключенными комментариями и похожими трансляциями
  • исправлено запуск CheckForNewAppVersionTask когда это не нужно't
  • исправлено импорт подписок с youtube: игнорирование подписок с неправильными ссылками и сохранение тех, у которых пустые названия
  • -
  • исправить неправильные YouTube ссылки: название метки подписи не всегда "signature", что не даёт загружаться трансляциям
  • +
  • исправить неправильные YouTube - ссылки: название метки подписи не всегда "signature", что не даёт загружаться трансляциям
diff --git a/fastlane/metadata/android/ru/changelogs/750.txt b/fastlane/metadata/android/ru/changelogs/750.txt index aac46059a..ebe57b159 100644 --- a/fastlane/metadata/android/ru/changelogs/750.txt +++ b/fastlane/metadata/android/ru/changelogs/750.txt @@ -1,22 +1,22 @@ -Новое +Из нового Продолжить проигрывание #2288 • Продолжать трансляции с того момента, где вы остановились -Улучшения загрузчика #2149 +Улучшения загрузчика #2149 • Использовать Storage Access Framework для хранения загрузок на SD-картах • Новый mp4 микшер • Выборочно меняйте путь загрузки перед тем, как начать скачивание -• Учитывать сети с измеряемым трафиком +• Учитывать сети с измеряемым трафиком -Улучшено -• Убрано gema строчки #2295 +Улучшения +• Убраны gema строчки #2295 • Работа с изменениями (авто)поворота во время цикла использования #2444 • Сделать меню длинного нажатия постоянными #2368 -Исправлено +Исправления • Исправлено не показывающееся название выбранной дорожки субтитров #2394 -• Не вылетать при провальной проверке обновлений приложения (GitHub версия) #2423 +• Не вылетать при провальной проверке обновлений приложения (GitHub версия) #2423 • Исправлено вечную загрузку при достижении 99.9% #2440 -• Обновление метаданных очереди проигрывания #2453 +• Обновление метаданных очереди проигрывания #2453 • [SoundCloud] Исправлен вылет при загрузке плейлистов TeamNewPipe/NewPipeExtractor#170 • [YouTube] Исправлена ошибка парсинга времени проигрывания TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ru/changelogs/760.txt b/fastlane/metadata/android/ru/changelogs/760.txt index 5990094b6..9780bf28f 100644 --- a/fastlane/metadata/android/ru/changelogs/760.txt +++ b/fastlane/metadata/android/ru/changelogs/760.txt @@ -1,43 +1,43 @@ Изменения в 0.17.1 - Новый - • Тайская локализация +Из нового +• Тайская локализация - Улучшен - • Добавить действие "Начать воспроизведение здесь" в меню длительного нажатия для плейлистов #2518. - • Добавлен переключатель для SAF/устаревшего средства выбора файлов #2521. +Улучшения +• Добавлено действие "Начать воспроизведение здесь" в меню с длительным нажатием для списков воспроизведения #2518 +• Добавлен переключатель для SAF / legacy средства выбора файлов #2521 - Зафиксированный - • Исправлено исчезновение кнопок в режиме просмотра загрузок при переключении приложений #2487. - • Фиксированная позиция воспроизведения сохраняется, хотя история просмотра отключена. - • Исправлено снижение производительности, вызванное положением воспроизведения в представлениях списка #2517. - • [Extractor] Fix ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186. - • [Extractor] [YouTube] Исправлена случайная ошибка поиска, когда плейлисты находятся в результатах. TeamNewPipe/NewPipeExtractor#185 +Исправления +• Исправлено исчезновение кнопок в режиме загрузки при переключении приложений #2487 +• Фиксированная позиция воспроизведения сохраняется, хотя история просмотра отключена +• Исправлено снижение производительности, вызванное позицией воспроизведения в списках просмотров #2517 +• [Extractor] Исправлено ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 +• [Extractor] [YouTube] Исправлена случайная ошибка поиска, когда плейлисты отображаются в результатах TeamNewPipe/NewPipeExtractor#185 - Изменения в 0.17.0 +Изменения в версии 0.17.0 - Новый - Воспроизведение резюме #2288 - • Возобновить трансляции с того места, где вы остановились в прошлый раз. - Усовершенствования загрузчика #2149 - • Используйте Storage Access Framework для хранения загрузок на внешних SD-картах. - • Новый мультиплексор mp4 - • При желании измените каталог загрузки перед началом загрузки - • Соблюдайте тарифные сети +Из нового +Возобновление воспроизведения #2288 +• Возобновите потоки с того места, где вы остановились в прошлый раз +Улучшения загрузчика #2149 +• Используйте платформу доступа к хранилищу для хранения загрузок на внешних SD-картах +• Новый мультиплексор mp4 +• При необходимости измените каталог загрузки перед началом загрузки +• Уважайте дозированные сети - Улучшен - • Удалены гема-строки #2295. - • Обработка (автоматического) поворота во время жизненного цикла активности #2444. - • Сделать меню, вызываемые длительным нажатием, согласованными #2368. +Улучшения +• Удалены gema строки #2295 +• Изменение поворота ручки (автоматически) в течение жизненного цикла действия #2444 +• Сделайте меню при длительном нажатии согласованным #2368 - Зафиксированный - • Исправлена ошибка, из-за которой имя выбранной дорожки субтитров не отображалось #2394 - • Не происходит сбой при сбое проверки обновлений приложения (версия GitHub) #2423. - • Исправлено зависание загрузки на уровне 99,9% #2440 - • Обновлены метаданные очереди воспроизведения – 2453. - • [SoundCloud] Исправлен сбой при загрузке плейлистов TeamNewPipe/NewPipeExtractor#170. - • [YouTube] Фиксированная продолжительность не может быть обработана TeamNewPipe/NewPipeExtractor#177 +Исправления +• Исправлено, что название выбранного трека субтитров не отображалось #2394 +• Не происходит сбой при сбое проверки обновления приложения (версия GitHub) #2423 +• Исправлено застревание загрузок на уровне 99,9% #2440 +• Обновить метаданные очереди воспроизведения #2453 +• [SoundCloud] Исправлен сбой при загрузке плейлистов TeamNewPipe/NewPipeExtractor#170 +• [YouTube] Фиксированная продолжительность не может быть разделена на TeamNewPipe/NewPipeExtractor#177 diff --git a/fastlane/metadata/android/ru/changelogs/790.txt b/fastlane/metadata/android/ru/changelogs/790.txt index 24d1c115a..e5724384f 100644 --- a/fastlane/metadata/android/ru/changelogs/790.txt +++ b/fastlane/metadata/android/ru/changelogs/790.txt @@ -1 +1,14 @@ -папки +Улучшения +• Добавлено больше названий, чтобы улучшить доступность для слепых людей #2655 +• Язык папки загрузки сделан более согласованным и менее двусмысленным #2637 + +Исправления +• Проверка загрузки последнего байта в блоке #2646 +• Исправлена прокрутка в детальном фрагменте видео #2672 +• Удалите анимацию двойного поиска в поле очистки до одного #2695 +• [SoundCloud] Исправлено извлечение идентификатора клиента #2745 + +Разработка +• Добавлены недостающие зависимости, унаследованные от New Pipe Extractor, в New Pipe #2535 +• Переход на AndroidX #2685 +• Обновление ExoPlayer до 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/ru/changelogs/800.txt b/fastlane/metadata/android/ru/changelogs/800.txt index 983abbf96..1ae6c2bd7 100644 --- a/fastlane/metadata/android/ru/changelogs/800.txt +++ b/fastlane/metadata/android/ru/changelogs/800.txt @@ -1,4 +1,4 @@ -Новое +Из нового • Поддержка PeerTube без P2P (#2201) [бета-версия]: ◦ Смотрите и скачивайте видео с сайтов PeerTube. ◦ Добавлены экземпляры в настройках, чтобы получить доступ ко всему миру PeerTube @@ -9,19 +9,19 @@ ◦ Загрузить opus (файлы webm) в формате ogg ◦ Восстанавливайте ссылки для скачивания с истекшим сроком действия, чтобы возобновить загрузку после длительной паузы -Улучшено +Улучшения • Информируйте KioskFragment об изменениях в предпочитаемой стране контента и улучшайте производительность всех основных вкладок #2742 • Используйте новые реализации локализации и загрузчика из extractor #2713 • Сделайте строку "Киоск по умолчанию" переводимой • Черная панель навигации для черной темы #2569 -Исправлено +Исправления • Исправлена ошибка, из-за которой всплывающий проигрыватель не мог перемещаться, если при перемещении всплывающего проигрывателя был помещен другой палец #2772 • Разрешить плейлистам отсутствие загрузчика и исправить сбои, связанные с этой проблемой #2724, TeamNewPipe/NewPipeExtractor#219 • Включение TLS1.1/1.2 на устройствах Android 4.4 (API 19/KitKat) для исправления рукопожатия TLS с MediaCCC и некоторыми экземплярами PeerTube #2792 • [SoundCloud] Исправлено извлечение идентификатора клиента TeamNewPipe/NewPipeExtractor#217 • [SoundCloud] Исправлено извлечение аудиопотока -Развитие -• Обновите ExoPlayer до 2.10.8 #2791, #2816 -• Обновите Gradle до версии 3.5.1 и добавьте поддержку Kotlin #2714 +Разработка +• Обновление ExoPlayer до 2.10.8 #2791, #2816 +• Обновление Gradle до 3.5.1 и добавлена поддержка Kotlin #2714 diff --git a/fastlane/metadata/android/ru/changelogs/810.txt b/fastlane/metadata/android/ru/changelogs/810.txt index 70007f261..bd0eb6fc5 100644 --- a/fastlane/metadata/android/ru/changelogs/810.txt +++ b/fastlane/metadata/android/ru/changelogs/810.txt @@ -1,19 +1,19 @@ -Новое +Из нового • Показывать миниатюру видео на экране блокировки при воспроизведении в фоновом режиме -Улучшено +Улучшения • Добавление локального списка воспроизведения в очередь при длительном нажатии на фоновую / всплывающую кнопку • Сделайте вкладки главной страницы прокручиваемыми и скрывайте, когда есть только одна вкладка. • Ограничить количество обновлений миниатюр уведомлений в фоновом проигрывателе • Добавить фиктивный эскиз для пустых локальных списков воспроизведения -• * Пользователь *.открывает расширение файла вместо *.webmd и показывает "открывает" в метке формата вместо "WebMOpus" в раскрывающемся списке загрузки +• Используется расширение файла *.opus вместо *.webm и показывает "opus" в метке формата вместо "WebMOpus" в выпадающем списке загрузки • Добавить кнопку для удаления загруженных файлов или истории загрузок в разделе "Загрузки" • [YouTube] Добавить поддержку ссылок на каналы /c/shortened_url -Исправлено -• * Исправлены многочисленные проблемы при совместном использовании видео в New Pipe и прямой загрузке его потоков +Исправления +• Исправлены многочисленные проблемы при совместном использовании видео в New Pipe и прямой загрузке его потоков • Исправлен доступ игрока из потока его создания • Исправлена подкачка результатов поиска по страницам • [YouTube] Исправлено включение null, приводящее к NPE -• [* [YouTube] Исправлен просмотр комментариев при открытии invidia.us url-адрес +• [YouTube] Исправлен просмотр комментариев при открытии invidia.us url-адрес • [SoundCloud] Обновлен идентификатор клиента diff --git a/fastlane/metadata/android/ru/changelogs/840.txt b/fastlane/metadata/android/ru/changelogs/840.txt index 2383c75a0..af4791a7d 100644 --- a/fastlane/metadata/android/ru/changelogs/840.txt +++ b/fastlane/metadata/android/ru/changelogs/840.txt @@ -1,9 +1,9 @@ -Новое +Из нового • Добавлен выбор языка для изменения языка приложения • Добавлена кнопка "Отправить Коди" в складное меню плеера • Добавлена возможность копировать комментарии при длительном нажатии -Улучшенный +Улучшения • Исправьте активность reCAPTCHA и правильно сохраните полученные файлы cookie • Удалено точечное меню в пользу ящика и кнопки скрыть историю, когда просмотр истории не включен в настройках • Правильно запрашивайте разрешение на отображение поверх других приложений в настройках на Android 6 и более поздних версиях @@ -11,7 +11,7 @@ • Различные улучшения PeerTube • Улучшены несколько исходных строк на английском языке -Исправлено +Исправления • Исправлен повторный запуск проигрывателя, хотя он приостановлен, когда включена опция "свернуть при переключении приложений" и NewPipe свернут • Исправьте начальное значение яркости для жеста • Исправлена загрузка субтитров .srt, содержащих не все разрывы строк diff --git a/fastlane/metadata/android/ru/changelogs/900.txt b/fastlane/metadata/android/ru/changelogs/900.txt index 2243215e9..001561bfb 100644 --- a/fastlane/metadata/android/ru/changelogs/900.txt +++ b/fastlane/metadata/android/ru/changelogs/900.txt @@ -1,14 +1,14 @@ -Новое +Из нового • Группы подписок и отсортированные каналы • Кнопка отключения звука в проигрывателях -Улучшено -• * Разрешить открытие music.youtube.com и media.ccc.de соединения в новой трубе +Улучшения +• Разрешить открытие music.youtube.com и media.ccc.de соединения в новой трубе • Переместите две настройки с внешнего вида на содержимое • Скрыть параметры поиска на 5, 15, 25 секунд, если включен неточный поиск -Исправлено +Исправления • некоторые видеоролики WebM недоступны для поиска -• * резервное копирование базы данных на телефоне Android +• резервное копирование базы данных на телефоне Android • сбой при совместном использовании загруженного файла • тонны проблем с извлечением с YouTube и многое другое... diff --git a/fastlane/metadata/android/ru/changelogs/930.txt b/fastlane/metadata/android/ru/changelogs/930.txt index 40fa443c2..58a849bf4 100644 --- a/fastlane/metadata/android/ru/changelogs/930.txt +++ b/fastlane/metadata/android/ru/changelogs/930.txt @@ -1,19 +1,19 @@ -Новое +Из нового • Поиск музыки на YouTube • Базовая поддержка Android TV -Улучшено +Улучшения • Добавлена возможность удалять все просмотренные видео из локального списка воспроизведения • Показывать сообщение, когда контент еще не поддерживается, вместо сбоя • Улучшено изменение размера всплывающего проигрывателя с помощью пинч-жестов • Постановка потоков в очередь при длительном нажатии на фоновые и всплывающие кнопки в канале • Улучшена обработка размера заголовка заголовка ящика -Исправлено +Исправления • Исправлена ошибка, из-за которой не работает настройка контента с ограничением по возрасту -• * Исправлены некоторые виды рекапчи +• Исправлены некоторые виды рекапчи • Исправлен сбой при открытии закладок, когда плейлист имеет значение `null` • Исправлено обнаружение исключений, связанных с сетью • Исправлена видимость кнопки сортировки по группам во фрагменте подписок -и более +и много чего ещё diff --git a/fastlane/metadata/android/ru/changelogs/940.txt b/fastlane/metadata/android/ru/changelogs/940.txt index c37293c4b..a375d726d 100644 --- a/fastlane/metadata/android/ru/changelogs/940.txt +++ b/fastlane/metadata/android/ru/changelogs/940.txt @@ -1,16 +1,16 @@ -Новое +Из нового • Добавлена поддержка комментариев SoundCloud • Добавить настройку ограниченного режима YouTube • Показать сведения о родительском канале PeerTube -Улучшено +Улучшения • Показывать кнопку Kore только для поддерживаемых сервисов -• * Блокируйте жесты игрока, которые начинаются с панели навигации или строки состояния +• Блокируйте жесты игрока, которые начинаются с панели навигации или строки состояния • Измените цвет фона кнопок повтора и подписки на основе цвета сервиса -Исправлено +Исправления • Исправлена блокировка диалогового окна загрузки • Кнопка Открыть в браузере теперь действительно открывается в браузере • Исправлена ошибка при открытии видео и "Не удалось воспроизвести этот поток" -и более +и много чего ещё diff --git a/fastlane/metadata/android/ru/changelogs/951.txt b/fastlane/metadata/android/ru/changelogs/951.txt index 18f47adc0..d45fb542b 100644 --- a/fastlane/metadata/android/ru/changelogs/951.txt +++ b/fastlane/metadata/android/ru/changelogs/951.txt @@ -1,17 +1,17 @@ -Новое +Из нового • Добавить поиск для средства выбора подписки в диалоговом окне группы каналов • Добавьте фильтр в диалоговое окно группы каналов, чтобы показывать только негруппированные подписки • Добавить вкладку плейлиста на главную страницу • Быстрая перемотка вперед / назад в фоновом режиме / очередь всплывающих окон проигрывателя • Отобразить предложение по поиску: вы имели в виду и показываете результат для -Улучшено -• * Удалите метаданные приложения для записи в смешанные файлы +Улучшения +• Удалите метаданные приложения для записи в смешанные файлы • Не удаляйте сбойные потоки из очереди • Обновите цвет строки состояния, чтобы он соответствовал цвету панели инструментов -Исправлено +Исправления • Исправлена рассинхронизация аудио / видео, вызванная накопительными ошибками с плавающей запятой • [PeerTube] Обрабатывает удаленные комментарии -и более +и много чего ещё diff --git a/fastlane/metadata/android/ru/changelogs/954.txt b/fastlane/metadata/android/ru/changelogs/954.txt index f0da44202..6d6273af1 100644 --- a/fastlane/metadata/android/ru/changelogs/954.txt +++ b/fastlane/metadata/android/ru/changelogs/954.txt @@ -1,9 +1,9 @@ • новый рабочий процесс приложения: воспроизведение видео на странице сведений, проведите пальцем вниз, чтобы свернуть проигрыватель • Уведомления в стиле медиастайла: настраиваемые действия в уведомлениях, повышение производительности -• * базовое изменение размера при использовании New Pipe в качестве настольного приложения +• базовое изменение размера при использовании New Pipe в качестве настольного приложения -• показывать диалоговое окно с открытыми параметрами в случае появления неподдерживаемого URL-адреса. +• показывать диалоговое окно с открытыми параметрами в случае появления неподдерживаемого URL-адреса • Улучшите работу с поисковыми предложениями, когда удаленные предложения не могут быть извлечены -• Увеличено качество видео по умолчанию до 720p60 (встроенный проигрыватель) и 480p (всплывающий проигрыватель). +• Увеличено качество видео по умолчанию до 720p60 (встроенный проигрыватель) и 480p (всплывающий проигрыватель) • тонны исправлений ошибок и многое другое diff --git a/fastlane/metadata/android/ru/changelogs/957.txt b/fastlane/metadata/android/ru/changelogs/957.txt index 55e12b906..3f3af1d3c 100644 --- a/fastlane/metadata/android/ru/changelogs/957.txt +++ b/fastlane/metadata/android/ru/changelogs/957.txt @@ -2,9 +2,9 @@ • Жест двумя пальцами для закрытия проигрывателя • Разрешить очистку файлов cookie reCAPTCHA • Возможность не раскрашивать уведомление -• * Улучшите способ открытия деталей видео, чтобы исправить бесконечную буферизацию, ошибки при совместном использовании с новым каналом и другие несоответствия. +• Улучшите способ открытия деталей видео, чтобы исправить бесконечную буферизацию, ошибки при совместном использовании с новым каналом и другие несоответствия • Ускорьте просмотр видео на YouTube и исправьте возрастные ограничения • Исправлен сбой при быстрой перемотке вперед / назад • Не переставляйте списки, перетаскивая миниатюры • Всегда помните о свойствах всплывающего окна -• Добавить язык сантали +• Добавить язык Сантали diff --git a/fastlane/metadata/android/ru/changelogs/964.txt b/fastlane/metadata/android/ru/changelogs/964.txt index d31f3ef2c..74c406568 100644 --- a/fastlane/metadata/android/ru/changelogs/964.txt +++ b/fastlane/metadata/android/ru/changelogs/964.txt @@ -3,6 +3,6 @@ • Повторно добавлена кнопка "Поделиться" в подробном просмотре видео и перенесено описание потока в макет вкладки • Отключите восстановление яркости, если жест яркости отключен • Добавлен элемент списка для воспроизведения видео на kodi -• Исправлен сбой, когда на некоторых устройствах не был установлен браузер по умолчанию, и улучшены диалоги общего доступа. +• Исправлен сбой, когда на некоторых устройствах не был установлен браузер по умолчанию, и улучшены диалоги общего доступа • Переключение воспроизведения / паузы с помощью аппаратной кнопки пробела в полноэкранном проигрывателе -• [media.ccc.de ] Различные исправления и улучшения +• [media.ccc.de] Различные исправления и улучшения diff --git a/fastlane/metadata/android/ru/changelogs/966.txt b/fastlane/metadata/android/ru/changelogs/966.txt index 651c86838..dd76fc648 100644 --- a/fastlane/metadata/android/ru/changelogs/966.txt +++ b/fastlane/metadata/android/ru/changelogs/966.txt @@ -1,14 +1,14 @@ -Новое: +Из нового: • Добавить новую услугу: Bandcamp -Улучшенный: +Улучшения: • Добавьте опцию, чтобы приложение соответствовало теме устройства • Предотвратите некоторые сбои, показав улучшенную панель ошибок • Показать дополнительную информацию о том, почему контент в недоступном • Аппаратная кнопка пробела запускает воспроизведение/паузу • Показать тост "Загрузка начата" -Исправлено: +Исправления: • Исправлена очень маленькая миниатюра в деталях видео при воспроизведении в фоновом режиме • Исправлен пустой заголовок в свернутом проигрывателе • Исправлено, что последний режим изменения размера восстанавливался неправильно diff --git a/fastlane/metadata/android/ru/changelogs/970.txt b/fastlane/metadata/android/ru/changelogs/970.txt index 6d2d8bba9..92a89e07e 100644 --- a/fastlane/metadata/android/ru/changelogs/970.txt +++ b/fastlane/metadata/android/ru/changelogs/970.txt @@ -1,11 +1,11 @@ -Новое - • Просмотр метаданных контента (теги, категории, лицензии и т. д.) под описанием. - • Добавлена опция "Показать информацию о канале" в удаленных (не локальных) плейлистах. - • В меню длительного нажатия добавлена опция "Открыть в браузере". +Из нового +• Просмотр метаданных контента (теги, категории, лицензии и т.д.) под описанием. +• Добавлена опция "Показать информацию о канале" в удаленных (не локальных) плейлистах. +• В меню длительного нажатия добавлена опция "Открыть в браузере". - Зафиксированный - • Исправлен сбой при вращении на странице сведений о видео. - • Исправлена ошибка, из-за которой кнопка «Играть с Kodi» в плеере всегда предлагала установить Kore. - • Исправлены и улучшены настройки путей импорта и экспорта - • [YouTube] Исправлены комментарии и их количество. - И многое другое +Исправления +• Исправлен сбой при вращении на странице сведений о видео. +• Исправлена ошибка, из-за которой кнопка «Играть с Kodi» в плеере всегда предлагала установить Kore. +• Исправлены и улучшены настройки путей импорта и экспорта +• [YouTube] Исправлены комментарии и их количество. +И много чего ещё diff --git a/fastlane/metadata/android/ru/changelogs/972.txt b/fastlane/metadata/android/ru/changelogs/972.txt new file mode 100644 index 000000000..c254c0a54 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/972.txt @@ -0,0 +1,14 @@ +Из нового +Распознавание временных меток и хэштегов в описании +Добавлена ручная настройка режима планшета +Добавлена возможность скрывать воспроизводимые элементы в ленте + +Улучшения +Исправлена поддержка Storage Access Framework +Улучшенная обработка ошибок недоступных и прерванных каналов +На листе обмена Android для пользователей Android 10+ теперь отображается заголовок контента +Обновлены экземпляры Invidious и добавлена поддержка каналов + +Исправления +[YouTube] Контент с ограничением по возрасту +Утечка окна Исключение при открытии диалогового окна выбора diff --git a/fastlane/metadata/android/ru/changelogs/973.txt b/fastlane/metadata/android/ru/changelogs/973.txt new file mode 100644 index 000000000..a3733fa25 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/973.txt @@ -0,0 +1,4 @@ +Быстрое исправление +• Исправлена ошибка, из-за которой миниатюры и заголовки обрезались в макете сетки из-за неправильного расчета количества видео, которое может поместиться в одну строку +• Исправлена ошибка, из-за которой диалоговое окно загрузки исчезало без каких-либо действий, если оно было открыто из меню «Поделиться» +• Обновлена библиотека, связанная с открытием внешних действий, таких как средство выбора файлов Storage Access Framework diff --git a/fastlane/metadata/android/ru/changelogs/974.txt b/fastlane/metadata/android/ru/changelogs/974.txt new file mode 100644 index 000000000..b3591946a --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/974.txt @@ -0,0 +1,5 @@ +Быстрое исправление +•Исправлены проблемы с буферизацией, вызванные тротлингом YouTube +•Исправлено извлечение комментариев YouTube и сбои с отключенными комментариями +• Исправлен поиск музыки на YouTube +• Исправления прямых трансляций PeerTube diff --git a/fastlane/metadata/android/ru/changelogs/975.txt b/fastlane/metadata/android/ru/changelogs/975.txt new file mode 100644 index 000000000..f0a6630fc --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/975.txt @@ -0,0 +1,17 @@ +Из нового +• Показ миниатюры во время поиска +• Обнаружение отключённых комментариев +• Разрешение отмечать элемент ленты как просматриваемый +• Показывать сердечки комментариев + +Улучшения +• Улучшено расположение метаданных и тегов +• Применение служебного цвета к компонентам пользовательского интерфейса + +Исправления +• Исправлена миниатюра в мини-плеере +• Исправлена бесконечная буферизация повторяющихся элементов очереди +• Некоторые исправления плеера, такие как вращение и более быстрое закрытие +• Исправлена ошибка, из-за которой ReCAPTCHA оставалась загруженной в фоновом режиме +• Отключины клики во время обновления элементов ленты +• Исправлены некоторые сбои загрузчика diff --git a/fastlane/metadata/android/ru/changelogs/976.txt b/fastlane/metadata/android/ru/changelogs/976.txt new file mode 100644 index 000000000..2b24b0350 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/976.txt @@ -0,0 +1,10 @@ +• Добавлена возможность прямого открытия плеера в полноэкранном режиме +• Разрешение выбирать, какие типы поисковых предложений показывать +• Тёмная тема стала темнее + добавлен тёмный экран-заставка +• Улучшено средство выбора файлов, позволяющее выделить ненужные файлы серым цветом +• Исправлен импорт подписок YouTube +• Для повторного воспроизведения потока требуется повторное нажатие на кнопку воспроизведения +• Исправлено закрытие аудио сессии +• [Android TV] Исправлены долгие скачки панели поиска при использовании DPad + +Чтобы увидеть дальнейшие изменения, просмотрите журнал изменений (и сообщение в блоге) на вкладке «Ссылки» ниже. diff --git a/fastlane/metadata/android/ru/changelogs/977.txt b/fastlane/metadata/android/ru/changelogs/977.txt new file mode 100644 index 000000000..f63e6a575 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/977.txt @@ -0,0 +1,10 @@ +• В меню длительного нажатия добавлена кнопка "перейти к следующему" +• В фильтр намерений добавлен префикс пути к YouTube shorts +• Исправлен импорт настроек +• Поменяны местами панель поиска с кнопками проигрывателя на экране очереди +• Различные исправления, связанные с MediasessionManager +• Исправлена ошибка, из-за которой панель поиска не закрывалась после окончания видео +• Отключено медиа-туннелирование на RealtekATV +• Расширена интерактивная область кнопок свёрнутого проигрывателя + +Чтобы увидеть дальнейшие изменения, просмотрите журнал изменений (и сообщение в блоге) на вкладке «Ссылки» ниже. diff --git a/fastlane/metadata/android/ru/changelogs/978.txt b/fastlane/metadata/android/ru/changelogs/978.txt new file mode 100644 index 000000000..1ae2c65da --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/978.txt @@ -0,0 +1 @@ +Исправлено выполнение проверки для новых версий NewPipe. Иногда эта проверка выполнялась слишком рано, что приводило к падению приложения. Теперь это должно быть исправлено. diff --git a/fastlane/metadata/android/ru/changelogs/979.txt b/fastlane/metadata/android/ru/changelogs/979.txt new file mode 100644 index 000000000..81235074a --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/979.txt @@ -0,0 +1,2 @@ +- Исправлено возобновление воспроизведения +- Улучшения для службы, определяющей, должен ли NewPipe проверять наличие новой версии, не запускалась в фоновом режиме diff --git a/fastlane/metadata/android/ru/changelogs/980.txt b/fastlane/metadata/android/ru/changelogs/980.txt new file mode 100644 index 000000000..7bc804b06 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/980.txt @@ -0,0 +1,13 @@ +Из нового +• Добавлена опция «Добавить в плейлист» в меню «Поделиться» +• Добавлена поддержка коротких ссылок y2u.be и PeerTube + +Улучшения +• Элементы управления скоростью воспроизведения стали более компактными. +• Лента теперь выделяет новые элементы +• Опция «Показывать просмотренные элементы» в ленте теперь сохраняется + +Исправления +• Исправлено извлечение лайков и дизлайков YouTube. +• Исправлен автоматический повтор после выхода из фонового режима +И многое другое diff --git a/fastlane/metadata/android/ru/changelogs/981.txt b/fastlane/metadata/android/ru/changelogs/981.txt new file mode 100644 index 000000000..1e6aeb5ae --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/981.txt @@ -0,0 +1,2 @@ +Удалена поддержка MediaParser для исправления возобновления воспроизведения после буферизации на Android 11+. +Отключено медиа-туннелирование на Philips QM16XE для решения проблем с воспроизведением. diff --git a/fastlane/metadata/android/ru/changelogs/983.txt b/fastlane/metadata/android/ru/changelogs/983.txt new file mode 100644 index 000000000..9e9a6e52c --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/983.txt @@ -0,0 +1,9 @@ +Добавлен новый пользовательский интерфейс для поиска через двойное нажатие и поведения +Настройки сделаны более доступными для поиска +Выделенные закреплённые комментарии как таковые +Добавлена поддержка открытия с помощью приложения для экземпляра FSFE PeerTube. +Добавлены уведомления об ошибках +Исправлено повторное воспроизведение первого элемента очереди при смене плеера. +Подождите дольше при буферизации во время прямых трансляций, прежде чем произойдет сбой +Исправлен порядок результатов локального поиска +Исправлены пустые поля предметов в очереди воспроизведения diff --git a/fastlane/metadata/android/ru/changelogs/984.txt b/fastlane/metadata/android/ru/changelogs/984.txt new file mode 100644 index 000000000..0a7a8ebcd --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/984.txt @@ -0,0 +1,7 @@ +Загружайте достаточно начальных элементов в списках, чтобы заполнить весь экран и исправить прокрутку на планшетах и телевизорах +Исправлены случайные сбои при прокрутке списков +Оверлейная дуга быстрого поиска теперь идёт под системным пользовательским интерфейсом +Отменены изменения в вырезах при воспроизведении в многооконном режиме, вызывая неуместную регрессию проигрывателя на некоторых телефонах. +Увеличен compileSdk с 30 до 31 +Обновлена библиотека отчётов об ошибках +Рефакторинг кода в плеере diff --git a/fastlane/metadata/android/ru/changelogs/986.txt b/fastlane/metadata/android/ru/changelogs/986.txt new file mode 100644 index 000000000..679ea7d7c --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/986.txt @@ -0,0 +1,16 @@ +Из нового +• Уведомления о новых трансляциях +• Плавный переход между фоном и видеоплеерами +• Изменение скорости по полушагам +• Добавлена очередь основного проигрывателя в список воспроизведения + +Улучшения +• Запоминание размера шага скорости +• Уменьшина начальная долгая буферизация в видеоплеере +• Улучшен пользовательский интерфейс плеера для Android TV +• Подтверждение удаления всех загруженных файлов + +Исправления +• Исправлена ошибка, из-за которой кнопка мультимедиа не скрывала элементы управления проигрывателем +• Исправлен сброс воспроизведения при смене типа проигрывателя +• Исправлен поворот диалогового окна плейлиста diff --git a/fastlane/metadata/android/ru/changelogs/987.txt b/fastlane/metadata/android/ru/changelogs/987.txt index 8e9702365..257179fc6 100644 --- a/fastlane/metadata/android/ru/changelogs/987.txt +++ b/fastlane/metadata/android/ru/changelogs/987.txt @@ -1,12 +1,12 @@ -Новое +Из нового • Поддержка методов доставки, отличных от прогрессивного HTTP: ускорение времени загрузки воспроизведения, исправления PeerTube и SoundCloud, воспроизведение недавно закончившихся трансляций YouTube • Кнопка «Добавить», чтобы добавить удаленный плейлист к локальному • Предпросмотр изображения на странице общего доступа Android 10+ -Улучшено +Улучшения • Улучшения окна параметров воспроизведения • Перемещение кнопки импорта/экспорта подписки в трехточечное меню -Исправлено +Исправления • Исправлено удаление полностью просмотренных видео из плейлиста • Исправлена тема меню «Поделиться» и пункт «Добавить в плейлист» diff --git a/fastlane/metadata/android/ru/changelogs/988.txt b/fastlane/metadata/android/ru/changelogs/988.txt new file mode 100644 index 000000000..1464aa3b5 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/988.txt @@ -0,0 +1,2 @@ +[YouTube] Исправлена ошибка «Не удалось получить поток» при попытке воспроизвести любое видео. +[YouTube] Исправление «Следующий контент недоступен в этом приложении». Сообщение отображается вместо запрошенного видео diff --git a/fastlane/metadata/android/ru/changelogs/989.txt b/fastlane/metadata/android/ru/changelogs/989.txt new file mode 100644 index 000000000..889fec465 --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/989.txt @@ -0,0 +1,3 @@ +• [YouTube] Исправлена бесконечная загрузка при попытке воспроизвести любое видео +• [YouTube] Исправлено замедление некоторых видео +• Обновлена библиотека jsoup до версии 1.15.3, которая включает исправления безопасности diff --git a/fastlane/metadata/android/ru/changelogs/990.txt b/fastlane/metadata/android/ru/changelogs/990.txt new file mode 100644 index 000000000..195704f3a --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/990.txt @@ -0,0 +1,15 @@ +В этом выпуске прекращена поддержка Android 4.4 KitKat, теперь минимальная версия — Android 5 Lollipop! + +Из нового +• Добавлен пункт "Загрузка" в меню длительного нажатия +• Возможность скрыть будущие видео в ленте +• Возможность делиться локальными плейлистами + +Улучшения +• Рефакторинг кода проигрывателя на небольшие компоненты: меньше оперативной памяти, меньше ошибок +• Улучшен режим масштабирования миниатюр. +• Заполнители векторных изображений + +Исправления +• Исправлены различные проблемы с уведомлением проигрывателя: устаревшая/отсутствующая информация о медиа, искажённая миниатюра +• Исправлен полноэкранный режим с использованием 1/4 экрана diff --git a/fastlane/metadata/android/ru/changelogs/991.txt b/fastlane/metadata/android/ru/changelogs/991.txt new file mode 100644 index 000000000..6d4f2beac --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/991.txt @@ -0,0 +1,13 @@ +Из нового +• Добавлена кнопка "Открыть в браузере" на панели ошибок +• Добавлена возможность отображать группы каналов в виде списка +• [YouTube] Нажмите и удерживайте сегменты потока, чтобы поделиться URL-адресом временной метки +• Добавлена кнопка очереди воспроизведения в мини-плеер + +Улучшения +• Добавлена исландская локализация и обновлены многие другие переводы +• Множество внутренних улучшений + +Исправления +• Исправление нескольких сбоев +• [YouTube] Исправлены проблемы с загрузкой каналов, невыделенной лентой и временным решением проблем с воспроизведением в некоторых странах diff --git a/fastlane/metadata/android/ru/changelogs/992.txt b/fastlane/metadata/android/ru/changelogs/992.txt new file mode 100644 index 000000000..d4e5616fa --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/992.txt @@ -0,0 +1,17 @@ +Из нового +• Количество подписчиков в сведениях о видео. +• Загрузить из очереди +• Навсегда установить миниатюру плейлиста +• Нажмите и удерживайте хэштеги и ссылки. +• Режим просмотра "карта" + +Улучшения +• Увеличенная кнопка закрытия мини-плеера +• Более плавное уменьшение миниатюр +• Целевой Android 13 (API 33) +• Поиск больше не останавливает плеер + +Исправления +• Исправлено наложение на DeX/мыши. +• Разрешить фоновый проигрыватель без отдельных аудиопотоков +• Различные исправления YouTube и многое другое… diff --git a/fastlane/metadata/android/ru/changelogs/993.txt b/fastlane/metadata/android/ru/changelogs/993.txt new file mode 100644 index 000000000..ea26a1aff --- /dev/null +++ b/fastlane/metadata/android/ru/changelogs/993.txt @@ -0,0 +1,13 @@ +Из нового +• Добавлено предупреждение при добавлении дубликатов плейлистов и добавлена кнопка для их удаления +• Разрешение игнорировать аппаратные кнопки +• Разрешение скрывать частично просмотренные видео в ленте + +Улучшения +• Используйте больше столбцов сетки на больших экранах +• Приведите индикаторы прогресса в соответствие с настройками + +Исправления +• Исправлено открытие URL-адресов браузера, загрузок и внешних проигрывателей на Android 11+ +• Исправлено взаимодействие с полноэкранным режимом, требующее двух нажатий в MIUI +• Разрешить изменять настройки ExoPlayer, чтобы исправить воспроизведение на некоторых устройствах diff --git a/fastlane/metadata/android/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt index d25f04b00..8daf4ef3a 100644 --- a/fastlane/metadata/android/ru/full_description.txt +++ b/fastlane/metadata/android/ru/full_description.txt @@ -1 +1 @@ -NewPipe не использует библиотеки фреймворка Google или API YouTube, взаимодействуя только с сайтом сервиса для получения необходимых сведений. NewPipe может работать на устройствах без установленных Сервисов Google и не требует учётной записи YouTube, это свободное программное обеспечение. +NewPipe не использует библиотеки фреймворка Google или API YouTube, взаимодействуя только с сайтом сервиса для получения необходимых данных. NewPipe может работать на устройствах без установленных Сервисов Google и не требует учётной записи YouTube, это свободное программное обеспечение. diff --git a/fastlane/metadata/android/sv/changelogs/790.txt b/fastlane/metadata/android/sv/changelogs/790.txt new file mode 100644 index 000000000..367e97cfb --- /dev/null +++ b/fastlane/metadata/android/sv/changelogs/790.txt @@ -0,0 +1,14 @@ +Förbättrad +- Lägg till fler titlar för att förbättra tillgängligheten för blinda #2655 +- Språket i inställningen för nedladdningsmappen blir mer konsekvent och mindre tvetydigt #2637 + +Rättad +- Kontrollera om sista byte i blocket laddas ner #2646 +- Fastställd rullning i videodetaljfragment #2672 +- Ta bort dubbla animationer av sökrutan till en enda #2695 +- [SoundCloud] Fixa utvinning av client_id #2745 + +Utveckling +- Lägg till saknade beroenden som ärvts från NewPipeExtractor i NewPipe #2535 +- Migrera till AndroidX #2685 +- Uppdatering till ExoPlayer 2.10.6 #2697, #2736 diff --git a/fastlane/metadata/android/uk/changelogs/993.txt b/fastlane/metadata/android/uk/changelogs/993.txt new file mode 100644 index 000000000..1ce103bca --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/993.txt @@ -0,0 +1,13 @@ +Нове +• Додано попередження про дублікати добірок і кнопку їх видалення +• Дозвіл ігнорувати апаратні кнопки +• Дозвіл ховати частково переглянуті відео + +Поліпшено +• Більше стовпців сітки на великих екранах +• Індикатори перегляду відповідні налаштуванням + +Виправлено +• Відкриття URL-адрес браузера, завантажень і зовнішніх програвачів на Android 11+ +• Роботу повноекранного режиму, який вимагав двох дотиків у MIUI +• Дозвіл змінювати налаштування ExoPlayer, щоб виправити відтворення на деяких пристроях diff --git a/fastlane/metadata/android/zh-Hant/changelogs/993.txt b/fastlane/metadata/android/zh-Hant/changelogs/993.txt new file mode 100644 index 000000000..edb1f70fe --- /dev/null +++ b/fastlane/metadata/android/zh-Hant/changelogs/993.txt @@ -0,0 +1,13 @@ +新增 +• 重複加入至播放清單時警告,同時另設移除重複項目的按鈕 +• 允許忽略硬體按鈕 +• 允許在摘要中隱藏已部分觀看的影片 + +改進 +• 在大螢幕上以格線顯示更多欄 +• 進度標示器與設定一致 + +修正 +• 修正 Android 11+ 上開啟瀏覽器 URL、下載與外部播放器 +• 修正 MIUI 上全螢幕操作需要輕觸兩下 +• 允許微調 ExoPlayer 設定以修正部分裝置上的播放問題 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt index cf0bd8588..5bcc922a8 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/981.txt @@ -1,2 +1,2 @@ -移除了對MediaParser的支持,以解決在Android 11+上緩衝後恢復播放失敗的問題。 -在Philips QM16XE上禁用了媒體隧道,以解決播放問題。 +移除咗對MediaParser(媒體解析器)嘅支持,解決咗喺Android 11+上面緩衝後,恢復播放時失敗嘅問題。 +喺Philips QM16XE上禁用了media tunneling(隧道模式),去解決恢復播放卡機嘅問題。 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt index ec2edbe38..d141dc9ce 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/983.txt @@ -1,9 +1,9 @@ -新加撳兩下跳轉嘅介面同功能 -設定有得打字嚟搵 -留言置頂有色水分辨 -為 FSFE 嘅 PeerTube 站新加「用 app 嚟開」支援 -新加錯誤通知 -修正播放器轉變時重播隊頭項目 -直播串流緩衝時等耐啲先至算失敗 -修正本機搜尋結果嘅排位 -修正排隊播入面開天窗嘅項目欄位 +新加咗撳兩下就跳轉介面嘅功能 +可以喺設定入面打字搵嘢 +突出咗置頂嘅留言 +支援咗用 app 去開由FSFE (歐洲自由軟件基金會)託管嘅 PeerTube站 +新加咗錯誤通知 +修正咗播放器轉換嗰陣重播排隊嘅首項 +等耐啲實況串流緩衝再定輸數 +修正咗本機搜尋結果嘅順位 +修正咗播放順位入面空寥寥項目嘅欄位 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/984.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/984.txt index 34be1e7ef..d93c53791 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/984.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/984.txt @@ -1,7 +1,7 @@ -喺清單度載入足夠多初始項目去填滿成個螢幕並修正喺平板電腦同電視上面嘅捲動問題 -修正捲動清單時偶發閃退 +喺清單度載入足量初始項目去填滿全螢幕,並修正喺平板電腦同電視機上面嘅捲動問題 +修正咗捲動播放清單嗰陣突然出現嘅閃退問題 播放器快轉嘅覆蓋弧形擺喺系統介面後面 -撤回多視窗播放時嘅 M 字額變動,以免部份手機出現播放器錯位嘅倒退 -將 compileSdk 由 30 升至 31 -更新問題報告程式庫 -執整播放器部份程式碼 +撤回多視窗播放時嘅 M 字額變動,以免部份手機出現播放器錯位嘅倒放 +將 compileSdk (指定 Gradle 應該使用嘅Android API 級別去編譯你嘅應用)由 30 升至 31 +更新咗回報問題報告嘅程式庫 +重構部份喺播放器嘅程式碼 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt index f1d67925f..9a4721551 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/985.txt @@ -1 +1 @@ -修正 YouTube 乜串流都播唔到 +修正咗 YouTube 乜嘢實況串流都播唔到嘅問題 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt index e451189ef..c3c2fbbe8 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/986.txt @@ -1,16 +1,16 @@ 新嘢 -• 新加串流有通知 -• 幕後同影片播放器無縫切換 +• 新嘅實況串流會顯示通知出嚟 +• 無隙切換背景同影片播放器 • 按半度調整音高 -• 將主版面播放器排隊播追加落播放清單 +• 將主版面播放器隊列追加後變成播放清單 進步 -• 記住速率/音高調整步伐 -• 改善影片播放器開波時漫長緩衝 -• 完善 Android TV 嘅播放器版面 -• 刪除晒全部下載咗嘅檔案之前先確認 +• 記住咗倍速/音高嘅調整步調 +• 改善咗影片播放器開波嗰陣嘅漫長緩衝期 +• 改善咗 Android TV 嘅播放器版面 +• 確認多次係咪真係要刪除晒所有下載咗嘅檔案 修正 -• 修正媒體掣冇隱藏到啲播放器控掣 -• 修正播放器類型有變時重頭再播 -• 修正播放器清單對話方塊嘅方向旋轉 +• 修正咗媒體掣入面冇隱藏到啲播放器控掣選項 +• 修正咗播放器換轉類別嗰陣嘅重頭再播過 +• 修正咗播放器清單對話方塊嘅旋轉方向 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt new file mode 100644 index 000000000..754da7342 --- /dev/null +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt @@ -0,0 +1,13 @@ +新嘢 +• 重複加入去播放清單時警告,同時整多個掣剷走重複咗嗰啲 +• 硬件掣有得當佢冇到 +• 摘要有得收埋未睇晒嘅片 + +進步 +• 大螢幕一格格騷多幾欄 +• 轉圈公仔跟返設定噉樣 + +執漏 +• 修正 Android 11+ 開啟瀏覽器 URL、下載同外面播放器 +• 修正 MIUI 全螢幕時要撳兩下至搞得掂 +• 有得調校 ExoPlayer 設定解決某啲機播唔到片嘅問題 diff --git a/fastlane/metadata/android/zh_Hant_HK/full_description.txt b/fastlane/metadata/android/zh_Hant_HK/full_description.txt index 9fe7dfeb9..9c6fbaef6 100644 --- a/fastlane/metadata/android/zh_Hant_HK/full_description.txt +++ b/fastlane/metadata/android/zh_Hant_HK/full_description.txt @@ -1 +1 @@ -NewPipe 冇用到任何 Google 框架程式庫又或者 YouTube API,單憑解析網站去攞到所需嘅資訊,因此就算冇裝 Google 服務嘅機都用得呢個 app。此外,NewPipe 亦毋需您要有 YouTube 帳戶就用得,而且係自由同開放原始碼嘅軟件 (FLOSS)。 +NewPipe 冇用到任何 Google 框架程式庫同YouTube API。而NewPipe透過解析網站,就可以攞到所需嘅資訊。因此,就算冇裝到使用Google 架構嘅機,都用得呢個 app。此外,您亦毋需有 YouTube 帳戶就用到NewPipe,而且呢個係自由同有開放原始碼嘅軟件 (FLOSS)。 diff --git a/fastlane/metadata/android/zh_Hant_HK/short_description.txt b/fastlane/metadata/android/zh_Hant_HK/short_description.txt index 8f4a31c03..4dd4818cf 100644 --- a/fastlane/metadata/android/zh_Hant_HK/short_description.txt +++ b/fastlane/metadata/android/zh_Hant_HK/short_description.txt @@ -1 +1 @@ -一個自由輕巧嘅 Android YouTube 前端。 +適用於Android嘅免費,自由、輕量級同具有前瞻性嘅YouTube。 From 41da2bfb002644b38cc909bf227ca43911ce73cc Mon Sep 17 00:00:00 2001 From: TobiGr Date: Sun, 2 Apr 2023 23:02:19 +0200 Subject: [PATCH 52/54] Bump NewPipe Extractor to 0.22.6 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0e2fd4001..350c59cf6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -191,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:19e4b216c905f06f55f20241c1572e48fc284811' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:v0.22.6' implementation 'com.github.TeamNewPipe:NoNonsense-FilePicker:5.0.0' /** Checkstyle **/ From ec974a2b3da128354d1c608a107a4cd9122ac4c5 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 3 Apr 2023 14:47:45 +0200 Subject: [PATCH 53/54] Translated using Weblate (Estonian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Azerbaijani) Currently translated at 100.0% (661 of 661 strings) Translated using Weblate (Chinese (Traditional, Hong Kong)) Currently translated at 100.0% (661 of 661 strings) Co-authored-by: Hosted Weblate Co-authored-by: Nidi Co-authored-by: Olivia Ng Co-authored-by: Priit Jõerüüt --- app/src/main/res/values-az/strings.xml | 2 +- app/src/main/res/values-et/strings.xml | 2 +- app/src/main/res/values-zh-rHK/strings.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 68413792e..8779fb867 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -34,7 +34,7 @@ Standart ayırdetmə Daha böyük ayırdetmələr göstər \"Kodi\" ilə Oynat - Çatışmayan \"Kode\" tətbiqi yüklənilsin\? + Çatışmayan \"Kore\" tətbiqi yüklənilsin\? \"Kodi ilə Oynat\" seçimini göstər Kodi media mərkəzindən video oynatmaq üçün seçim göstər Səs diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index a4ee72c57..9ec65ce99 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -41,7 +41,7 @@ Kuva kõrgemaid lahutusi Ainult mõned seadmed suudavad esitada 2K/4K videoid Esita Kodi abil - Kas paigaldada puuduv Kode rakendus\? + Kas paigaldame puuduva Kore rakenduse\? Kuva valik \"Esita Kodi abil\" Kuva valik video esitamiseks Kodi meediakeskuse kaudu Heli diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index ee1ef78e5..8e83c4015 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -123,11 +123,11 @@ 訂閱咗 取消訂閱 已取消訂閱頻道 - 轉唔到訂閱 + 改唔到訂閱 更新唔到訂閱 顯示資訊 訂閱 - 收起嘅播放清單 + 儲起嘅播放清單 用粗略快轉 加入去 選擇標籤 From 7a8116b2cf44c00bbe31689ec0b556a304ffb84f Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 4 Apr 2023 09:47:51 +0200 Subject: [PATCH 54/54] Remove "ExoPlayer settings" from 0.25.1 changelogs Also remove "hi" changelog completely, as it was not really translated --- fastlane/metadata/android/cs/changelogs/993.txt | 1 - fastlane/metadata/android/en-US/changelogs/993.txt | 1 - fastlane/metadata/android/es/changelogs/993.txt | 1 - fastlane/metadata/android/hi/changelogs/993.txt | 13 ------------- fastlane/metadata/android/it/changelogs/993.txt | 1 - fastlane/metadata/android/pa/changelogs/993.txt | 1 - fastlane/metadata/android/pl/changelogs/993.txt | 1 - fastlane/metadata/android/pt-PT/changelogs/993.txt | 1 - fastlane/metadata/android/pt/changelogs/993.txt | 1 - fastlane/metadata/android/ru/changelogs/993.txt | 1 - fastlane/metadata/android/uk/changelogs/993.txt | 1 - .../metadata/android/zh-Hant/changelogs/993.txt | 1 - .../metadata/android/zh_Hant_HK/changelogs/993.txt | 1 - 13 files changed, 25 deletions(-) delete mode 100644 fastlane/metadata/android/hi/changelogs/993.txt diff --git a/fastlane/metadata/android/cs/changelogs/993.txt b/fastlane/metadata/android/cs/changelogs/993.txt index 3df0fe64b..2d57d44a1 100644 --- a/fastlane/metadata/android/cs/changelogs/993.txt +++ b/fastlane/metadata/android/cs/changelogs/993.txt @@ -10,4 +10,3 @@ Vylepšeno Opraveno • Oprava otevírání URL prohlížeče, stahování a externích přehrávačů v Android 11+ • Oprava interakce s celou obrazovkou v MIUI -• Úpravy nastavení ExoPlayer pro opravu přehrávání na některých zařízeních diff --git a/fastlane/metadata/android/en-US/changelogs/993.txt b/fastlane/metadata/android/en-US/changelogs/993.txt index 5d45efd13..722bc50cf 100644 --- a/fastlane/metadata/android/en-US/changelogs/993.txt +++ b/fastlane/metadata/android/en-US/changelogs/993.txt @@ -10,4 +10,3 @@ Improved Fixed • Fix opening browser URLs, downloads and external players on Android 11+ • Fix interacting with fullscreen requiring two taps on MIUI -• Allow tweaking ExoPlayer settings to fix playback on some devices \ No newline at end of file diff --git a/fastlane/metadata/android/es/changelogs/993.txt b/fastlane/metadata/android/es/changelogs/993.txt index 66c147a42..f951484e0 100644 --- a/fastlane/metadata/android/es/changelogs/993.txt +++ b/fastlane/metadata/android/es/changelogs/993.txt @@ -10,4 +10,3 @@ Mejorado Solucionado • Abrir URL del navegador, descargas y reproductores externos en Android 11+ • Interación en pantalla completa, requería dos toques en MIUI -• Cambiar la configuración de ExoPlayer para la reproducción en algunos dispositivos diff --git a/fastlane/metadata/android/hi/changelogs/993.txt b/fastlane/metadata/android/hi/changelogs/993.txt deleted file mode 100644 index e3aa57e5f..000000000 --- a/fastlane/metadata/android/hi/changelogs/993.txt +++ /dev/null @@ -1,13 +0,0 @@ -New -• Add warning when adding playlist duplicates and add button to remove them -• Allow ignoring hardware buttons -• Allow hiding partially watched videos in feed - -Improved -• Use more grid columns on big screens -• Make progress indicators consistent with settings - -Fixed -• Fix opening browser URLs, downloads and external players on Android 11+ -• Fix interacting with fullscreen requiring two taps on MIUI -• Allow tweaking ExoPlayer settings to fix playback on some devices diff --git a/fastlane/metadata/android/it/changelogs/993.txt b/fastlane/metadata/android/it/changelogs/993.txt index b7098fd24..ecaf530d2 100644 --- a/fastlane/metadata/android/it/changelogs/993.txt +++ b/fastlane/metadata/android/it/changelogs/993.txt @@ -10,4 +10,3 @@ Migliorato Corretto • Fix apertura URL, download e player esterni su Android 11+ • Fix interazione con schermo intero che richiedeva due otcchi su MIUI -• Regola le impostazioni di ExoPlayer per correggere la riproduzione su alcuni dispositivi diff --git a/fastlane/metadata/android/pa/changelogs/993.txt b/fastlane/metadata/android/pa/changelogs/993.txt index 6fad07e20..e83950724 100644 --- a/fastlane/metadata/android/pa/changelogs/993.txt +++ b/fastlane/metadata/android/pa/changelogs/993.txt @@ -10,4 +10,3 @@ ਠੀਕ ਕੀਤੇ • Android 11 'ਤੇ ਖੋਲ੍ਹਣ ਵਾਲੇ ਬ੍ਰਾਊਜ਼ਰ URL, ਡਾਊਨਲੋਡ ਅਤੇ ਬਾਹਰੀ ਪਲੇਅਰ ਨੂੰ ਠੀਕ ਕਰੋ • MIUI 'ਤੇ ਦੋ ਟੈਪਾਂ ਦੀ ਲੋੜ ਵਾਲੀ ਪੂਰੀ ਸਕ੍ਰੀਨ ਨਾਲ ਇੰਟਰੈਕਟਿੰਗ ਨੂੰ ਠੀਕ ਕਰੋ -• ਕੁਝ ਡਿਵਾਈਸਾਂ 'ਤੇ ਪਲੇਬੈਕ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ExoPlayer ਸੈਟਿੰਗਾਂ ਨੂੰ ਟਵੀਕ ਕਰਨ ਦਿਓ diff --git a/fastlane/metadata/android/pl/changelogs/993.txt b/fastlane/metadata/android/pl/changelogs/993.txt index 38cd01325..a24d4077e 100644 --- a/fastlane/metadata/android/pl/changelogs/993.txt +++ b/fastlane/metadata/android/pl/changelogs/993.txt @@ -10,4 +10,3 @@ Ulepszone Naprawione • Otwier. URL-i przeglądarki, pobranych i zew. odtwarzaczy na Androidzie 11+ • Interakcja z trybem pełnoekr. wymagającym dwóch naciśnięć na MIUI -• Dostosow. ustawień ExoPlayera, aby naprawić odtwarzanie na niektórych urządz. diff --git a/fastlane/metadata/android/pt-PT/changelogs/993.txt b/fastlane/metadata/android/pt-PT/changelogs/993.txt index 7f06f8081..80c7b25f5 100644 --- a/fastlane/metadata/android/pt-PT/changelogs/993.txt +++ b/fastlane/metadata/android/pt-PT/changelogs/993.txt @@ -10,4 +10,3 @@ Melhorado Fixa - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ - Fixação interagindo com tela cheia requer duas torneiras no MIUI -- Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos diff --git a/fastlane/metadata/android/pt/changelogs/993.txt b/fastlane/metadata/android/pt/changelogs/993.txt index 7f06f8081..80c7b25f5 100644 --- a/fastlane/metadata/android/pt/changelogs/993.txt +++ b/fastlane/metadata/android/pt/changelogs/993.txt @@ -10,4 +10,3 @@ Melhorado Fixa - Corrigir URLs de abertura do navegador, downloads e leitores externos no Android 11+ - Fixação interagindo com tela cheia requer duas torneiras no MIUI -- Permitir ajustes no ExoPlayer para fixar a reprodução em alguns dispositivos diff --git a/fastlane/metadata/android/ru/changelogs/993.txt b/fastlane/metadata/android/ru/changelogs/993.txt index ea26a1aff..dc0f2f638 100644 --- a/fastlane/metadata/android/ru/changelogs/993.txt +++ b/fastlane/metadata/android/ru/changelogs/993.txt @@ -10,4 +10,3 @@ Исправления • Исправлено открытие URL-адресов браузера, загрузок и внешних проигрывателей на Android 11+ • Исправлено взаимодействие с полноэкранным режимом, требующее двух нажатий в MIUI -• Разрешить изменять настройки ExoPlayer, чтобы исправить воспроизведение на некоторых устройствах diff --git a/fastlane/metadata/android/uk/changelogs/993.txt b/fastlane/metadata/android/uk/changelogs/993.txt index 1ce103bca..7b540cda2 100644 --- a/fastlane/metadata/android/uk/changelogs/993.txt +++ b/fastlane/metadata/android/uk/changelogs/993.txt @@ -10,4 +10,3 @@ Виправлено • Відкриття URL-адрес браузера, завантажень і зовнішніх програвачів на Android 11+ • Роботу повноекранного режиму, який вимагав двох дотиків у MIUI -• Дозвіл змінювати налаштування ExoPlayer, щоб виправити відтворення на деяких пристроях diff --git a/fastlane/metadata/android/zh-Hant/changelogs/993.txt b/fastlane/metadata/android/zh-Hant/changelogs/993.txt index edb1f70fe..0a095cff9 100644 --- a/fastlane/metadata/android/zh-Hant/changelogs/993.txt +++ b/fastlane/metadata/android/zh-Hant/changelogs/993.txt @@ -10,4 +10,3 @@ 修正 • 修正 Android 11+ 上開啟瀏覽器 URL、下載與外部播放器 • 修正 MIUI 上全螢幕操作需要輕觸兩下 -• 允許微調 ExoPlayer 設定以修正部分裝置上的播放問題 diff --git a/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt b/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt index 754da7342..76e24fb31 100644 --- a/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt +++ b/fastlane/metadata/android/zh_Hant_HK/changelogs/993.txt @@ -10,4 +10,3 @@ 執漏 • 修正 Android 11+ 開啟瀏覽器 URL、下載同外面播放器 • 修正 MIUI 全螢幕時要撳兩下至搞得掂 -• 有得調校 ExoPlayer 設定解決某啲機播唔到片嘅問題