Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.schabi.newpipe.local.playlist;

import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static org.schabi.newpipe.error.ErrorUtil.showUiErrorSnackbar;
import static org.schabi.newpipe.ktx.ViewUtils.animate;
import static org.schabi.newpipe.local.playlist.ExportPlaylistKt.export;
Expand All @@ -22,6 +24,8 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;

import androidx.annotation.NonNull;
Expand Down Expand Up @@ -55,6 +59,7 @@
import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.Localization;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.OnClickGesture;
Expand Down Expand Up @@ -366,17 +371,7 @@ public boolean onOptionsItemSelected(final MenuItem item) {
createRenameDialog();
} else if (item.getItemId() == R.id.menu_item_remove_watched) {
if (!isRewritingPlaylist) {
new AlertDialog.Builder(requireContext())
.setMessage(R.string.remove_watched_popup_warning)
.setTitle(R.string.remove_watched_popup_title)
.setPositiveButton(R.string.ok, (d, id) ->
removeWatchedStreams(false))
.setNeutralButton(
R.string.remove_watched_popup_yes_and_partially_watched_videos,
(d, id) -> removeWatchedStreams(true))
.setNegativeButton(R.string.cancel,
(d, id) -> d.cancel())
.show();
openRemoveWatchedConfirmationDialog();
}
} else if (item.getItemId() == R.id.menu_item_remove_duplicates) {
if (!isRewritingPlaylist) {
Expand Down Expand Up @@ -448,39 +443,28 @@ public void removeWatchedStreams(final boolean removePartiallyWatched) {
.getIsPlaylistThumbnailPermanent(playlistId);
boolean thumbnailVideoRemoved = false;

if (removePartiallyWatched) {
for (final var playlistItem : playlist) {
final int indexInHistory = Collections.binarySearch(historyStreamIds,
playlistItem.getStreamId());

if (indexInHistory < 0) {
itemsToKeep.add(playlistItem);
} else if (!isThumbnailPermanent && !thumbnailVideoRemoved
&& playlistManager.getPlaylistThumbnailStreamId(playlistId)
== playlistItem.getStreamEntity().getUid()) {
thumbnailVideoRemoved = true;
}
}
} else {
final var streamStates = recordManager
.loadLocalStreamStateBatch(playlist).blockingGet();

for (int i = 0; i < playlist.size(); i++) {
final var playlistItem = playlist.get(i);
final var streamStateEntity = streamStates.get(i);

final int indexInHistory = Collections.binarySearch(historyStreamIds,
playlistItem.getStreamId());
final long duration = playlistItem.toStreamInfoItem().getDuration();

if (indexInHistory < 0 || (streamStateEntity != null
&& !streamStateEntity.isFinished(duration))) {
itemsToKeep.add(playlistItem);
} else if (!isThumbnailPermanent && !thumbnailVideoRemoved
&& playlistManager.getPlaylistThumbnailStreamId(playlistId)
== playlistItem.getStreamEntity().getUid()) {
thumbnailVideoRemoved = true;
}
final var streamStates = recordManager
.loadLocalStreamStateBatch(playlist).blockingGet();

for (int i = 0; i < playlist.size(); i++) {
final var playlistItem = playlist.get(i);
final var streamStateEntity = streamStates.get(i);
final int indexInHistory = Collections.binarySearch(historyStreamIds,
playlistItem.getStreamId());
final long duration = playlistItem.toStreamInfoItem().getDuration();

if (indexInHistory < 0 // stream is not in history
// stream is in history but the streamStateEntity is null
// if the stream was played for less than 5 seconds, see
// StreamStateEntity#PLAYBACK_SAVE_THRESHOLD_START_MILLISECONDS
|| streamStateEntity == null
|| (!streamStateEntity.isFinished(duration)
&& !removePartiallyWatched)) {
itemsToKeep.add(playlistItem);
} else if (!isThumbnailPermanent && !thumbnailVideoRemoved
&& playlistManager.getPlaylistThumbnailStreamId(playlistId)
== playlistItem.getStreamEntity().getUid()) {
thumbnailVideoRemoved = true;
}
}

Expand Down Expand Up @@ -896,6 +880,35 @@ private void createShareConfirmationDialog() {
.show();
}

/**
* Opens a confirmation dialog to remove watched streams from the playlist.
* The user can also choose to remove partially watched streams.
*/
private void openRemoveWatchedConfirmationDialog() {
final android.widget.CheckBox removePartiallyWatchedCheckbox =
new android.widget.CheckBox(requireContext());
removePartiallyWatchedCheckbox.setText(
R.string.remove_watched_popup_partially_watched_streams);

// Wrap the checkbox in a container with dialog-like horizontal padding
// so it aligns with the dialog title and message on the start side.
final LinearLayout checkboxContainer = new LinearLayout(requireContext());
checkboxContainer.setOrientation(LinearLayout.VERTICAL);
final int padding = DeviceUtils.dpToPx(20, requireContext());
checkboxContainer.setPadding(padding, padding, padding, 0);
checkboxContainer.addView(removePartiallyWatchedCheckbox,
new LayoutParams(MATCH_PARENT, WRAP_CONTENT));

new AlertDialog.Builder(requireContext())
.setMessage(R.string.remove_watched_popup_warning)
.setTitle(R.string.remove_watched_popup_title)
.setView(checkboxContainer)
.setPositiveButton(R.string.yes, (d, id) ->
removeWatchedStreams(removePartiallyWatchedCheckbox.isChecked()))
.setNegativeButton(R.string.cancel, (d, id) -> d.cancel())
.show();
}

public void setTabsPagerAdapter(
@Nullable final MainFragment.SelectedTabsPagerAdapter tabsPagerAdapter) {
this.tabsPagerAdapter = tabsPagerAdapter;
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-ar-rLY/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@
<item quantity="other">%s مُشاهِد</item>
</plurals>
<string name="show_hold_to_append_summary">عرض تلميح عند الضغط على زر استخدام المشغل الخلفي أو النافذة المنبثقة في صفحة تفاصيل الفديو</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">نعم، ومقاطع الفيديو التي تمت مشاهدتها جزئيًا</string>
<string name="remove_watched_popup_partially_watched_streams">نعم، ومقاطع الفيديو التي تمت مشاهدتها جزئيًا</string>
<string name="error_timeout">انتهى وقت الاتصال</string>
<string name="unknown_audio_track">غير معروف</string>
<string name="autoplay_title">تشغيل تلقائي</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,7 @@
<string name="restricted_video">هذا الفيديو مقيد بالفئة العمرية.
\n
\nقم بتشغيل \"%1$s\" في الإعدادات إذا كنت تريد رؤيته.</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">نعم، ومقاطع الفيديو التي تمت مشاهدتها جزئيًا</string>
<string name="remove_watched_popup_partially_watched_streams">نعم، ومقاطع الفيديو التي تمت مشاهدتها جزئيًا</string>
<string name="remove_watched_popup_warning">ستتم إزالة مقاطع الفيديو التي تمت مشاهدتها قبل وبعد إضافتها إلى قائمة التشغيل.
\nهل أنت واثق؟ لا يمكن التراجع عن هذا!</string>
<string name="remove_watched_popup_title">إزالة مقاطع الفيديو التي تمت مشاهدتها؟</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-az/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -652,7 +652,7 @@
<string name="playback_speed_control">Oynatma Sürəti Nizamlamaları</string>
<string name="unhook_checkbox">Ayır (pozuntuya səbəb ola bilər)</string>
<string name="show_error">Xətanı göstər</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Bəli və qismən baxılmış videolar</string>
<string name="remove_watched_popup_partially_watched_streams">Bəli və qismən baxılmış videolar</string>
<plurals name="deleted_downloads_toast">
<item quantity="one">%1$s endirməsi silindi</item>
<item quantity="other">%1$s endirmə silindi</item>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-b+ast/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@
<string name="feed_oldest_subscription_update">Últimu anovamientu del feed: %s</string>
<string name="feed_groups_header_title">Grupos de canales</string>
<string name="new_seek_duration_toast">Pola mor de les torgues d\'ExoPlayer la duración afitóse en %d segundos</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Sí, y tamién los vistos parcialmente</string>
<string name="remove_watched_popup_partially_watched_streams">Sí, y tamién los vistos parcialmente</string>
<string name="remove_watched_popup_warning">Van desaniciase los vídeos que se vieren enantes y dempués d\'amestase a la llista de reproducción.
\n¿De xuru\? ¡Esto nun pue desfacese!</string>
<string name="remove_watched_popup_title">¿Desaniciar los vídeos vistos\?</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-b+uz+Latn/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@
<item quantity="other">%d sekondlar</item>
</plurals>
<string name="new_seek_duration_toast">ExoPlayer cheklovlari tufayli qidiruv davomiyligi %d soniya qilib belgilandi</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Ha, va qisman videolarni tomosha qildim</string>
<string name="remove_watched_popup_partially_watched_streams">Ha, va qisman videolarni tomosha qildim</string>
<string name="remove_watched_popup_warning">Pleylistga qo\'shilishdan oldin va keyin ko\'rilgan videolar o\'chiriladi.
\nIshonchingiz komilmi\? Buni qaytarib bo\'lmaydi!</string>
<string name="remove_watched_popup_title">Ko\'rilgan videolar olib tashlansinmi\?</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-be/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -617,7 +617,7 @@
<string name="downloads_storage_ask_summary_no_saf_notice">Пры кожным спампоўванні вам будзе прапанавана выбраць месца захавання</string>
<string name="feed_notification_loading">Загрузка канала…</string>
<string name="remove_watched_popup_title">Выдаліць прагледжаныя відэа\?</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Так, часткова прагледжаныя відэа таксама</string>
<string name="remove_watched_popup_partially_watched_streams">Так, часткова прагледжаныя відэа таксама</string>
<string name="percent">Працэнт</string>
<string name="remove_watched_popup_warning">Відэа, якія прагледжаны перад дадаваннем і пасля дадавання ў спіс прайгравання, будуць выдалены. \nВы ўпэўнены? Гэта дзеянне немагчыма скасаваць!</string>
<string name="show_crash_the_player_summary">Паказвае варыянт збою пры выкарыстанні плэера</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-bg/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@
<string name="paid_content">Съдържанието е достъпно само за хора, които са си платили, затова не може да бъде гледано или изтеглено с NewPipe.</string>
<string name="youtube_music_premium_content">Това видео е достъпно за абонати на YouTube Music Premium, затова не може да бъде гледано или изтеглено с NewPipe.</string>
<string name="remove_watched_popup_title">Премахни изгледаните видеа\?</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Да, както и само частично изгледаните видеа</string>
<string name="remove_watched_popup_partially_watched_streams">Да, както и само частично изгледаните видеа</string>
<string name="subscribers_count_not_available">Брой на абонати не е наличен</string>
<string name="peertube_instance_add_exists">Инстанцията вече съществува</string>
<string name="missing_file">Файлът е преместен или изтрит</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-bn/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@
<string name="player_unrecoverable_failure">অপুনরুদ্ধারযোগ্য প্লেয়ার ত্রুটি ঘটেছে</string>
<string name="peertube_instance_add_fail">ইন্সট্যান্সটি যাচাই করা যায়নি</string>
<string name="recaptcha_cookies_cleared">রিক্যাপচা কুকিগুলো পরিষ্কার করা হয়েছে</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">হ্যাঁ, এবং আংশিকভাবে দেখা ভিডিও</string>
<string name="remove_watched_popup_partially_watched_streams">হ্যাঁ, এবং আংশিকভাবে দেখা ভিডিও</string>
<string name="permission_denied">ব্যবস্থা দ্বারা ক্রিয়া অস্বীকার করা হয়েছে</string>
<string name="autoplay_summary">স্বয়ংক্রিয়ভাবে প্লেব্যাক শুরু করো %s — তে</string>
<string name="start_here_on_popup">একটি পপ-আপে প্লে শুরু করো</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-bs/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@
<string name="remove_duplicates_title">Ukloniti duplikate?</string>
<string name="remove_duplicates_message">Želite li ukloniti sve duplikatne tokove na ovoj listi za reprodukciju?</string>
<string name="remove_watched_popup_warning">Videozapisi koji su pregledani prije i poslije dodavanja na listu za reprodukciju bit će uklonjeni.\nJeste li sigurni? Ovo se ne može poništiti!</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Da, i djelimično odgledani videozapisi</string>
<string name="remove_watched_popup_partially_watched_streams">Da, i djelimično odgledani videozapisi</string>
<string name="new_seek_duration_toast">Zbog ograničenja ExoPlayera, trajanje pretraživanja je postavljeno na %d sekundi</string>
<string name="fragment_feed_title">Šta je novo</string>
<string name="feed_group_page_summary">Stranica grupe kanala</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-ca/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@
<item quantity="other">%d segons</item>
</plurals>
<string name="new_seek_duration_toast">A causa de les limitacions d\'ExoPlayer, la durada de cerca és de %d segons</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Sí, i també els vídeos vistos parcialment</string>
<string name="remove_watched_popup_partially_watched_streams">Sí, i també els vídeos vistos parcialment</string>
<string name="remove_watched_popup_warning">Els vídeos que ja heu vist tant abans com després d\'haver estat afegits a la llista de reproducció seran suprimits.
\nN\'esteu segurs\? Aquesta acció no pot desfer-se!</string>
<string name="remove_watched_popup_title">Esborrar els vídeos ja vistos\?</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-ckb/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@
<string name="hold_to_append">په‌نجه‌ڕاگرتن له‌سه‌ری بۆ نۆبه‌ت نه‌بوون</string>
<string name="max_retry_desc">زۆرترین ژمارەی هەوڵدان پێش پاشگەزبوونەوە لە دابەزاندنەکە</string>
<string name="general_error">هەڵه‌</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">بەڵێ، لەگەڵ ڤیدیۆ سەیر کراوەکانەوە</string>
<string name="remove_watched_popup_partially_watched_streams">بەڵێ، لەگەڵ ڤیدیۆ سەیر کراوەکانەوە</string>
<string name="start_here_on_popup">دەستپێکردنی لێدان لە پەنجەرەوه‌</string>
<string name="detail_dislikes_img_view_description">نابەدڵه‌كان</string>
<string name="title_activity_history">مێژوو</string>
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-cs/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@
<string name="restricted_video">Toto video má věkové omezení.
\n
\nPokud jej chcete vidět, povolte „%1$s“ v nastavení.</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Ano, i zčásti zhlédnutá videa</string>
<string name="remove_watched_popup_partially_watched_streams">Ano, i zčásti zhlédnutá videa</string>
<string name="remove_watched_popup_title">Odstranit zhlédnutá videa?</string>
<string name="remove_watched">Odstranit zhlédnutá</string>
<string name="remove_watched_popup_warning">Videa, která jste zhlédli před a po jejich přidání do playlistu, budou odstraněna.
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/values-da/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@
<string name="no_app_to_open_intent">Ingen app på din enhed kan åbne dette</string>
<string name="error_insufficient_storage_left">Ingen ledig plads på enheden</string>
<string name="app_language_title">App-sprog</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Ja, og delvist sete videoer</string>
<string name="remove_watched_popup_partially_watched_streams">Ja, og delvist sete videoer</string>
<string name="feed_load_error">Fejl ved indlæsning af feed</string>
<string name="feed_load_error_account_info">Kunne ikke indlæse feed for \'%s\'.</string>
<string name="show_crash_the_player_title">Vis \"Crash afspilleren\"</string>
Expand Down
Loading