Deduplicate code for fetching stream info when sparse

Fixes #7941
This commit is contained in:
Stypox 2022-03-03 16:24:51 +01:00
parent 05a5e4372a
commit 162a838afc
No known key found for this signature in database
GPG key ID: 4BDF1B40A49FDD23
48 changed files with 138 additions and 249 deletions

View file

@ -14,7 +14,7 @@ import org.schabi.newpipe.local.dialog.PlaylistDialog;
import org.schabi.newpipe.player.playqueue.PlayQueue;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.SaveUploaderUrlHelper;
import org.schabi.newpipe.util.SparseItemUtil;
import java.util.Collections;
@ -62,7 +62,8 @@ public final class QueueItemMenuUtil {
return true;
case R.id.menu_item_channel_details:
SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(context, item,
SparseItemUtil.fetchUploaderUrlIfSparse(context, item.getServiceId(),
item.getUrl(), item.getUploaderUrl(),
// An intent must be used here.
// Opening with FragmentManager transactions is not working,
// as PlayQueueActivity doesn't use fragments.

View file

@ -1,7 +1,8 @@
package org.schabi.newpipe.info_list.dialog;
import static org.schabi.newpipe.info_list.dialog.StreamDialogEntry.fetchItemInfoIfSparse;
import static org.schabi.newpipe.util.NavigationHelper.openChannelFragment;
import static org.schabi.newpipe.util.SparseItemUtil.fetchItemInfoIfSparse;
import static org.schabi.newpipe.util.SparseItemUtil.fetchUploaderUrlIfSparse;
import android.net.Uri;
@ -14,7 +15,6 @@ import org.schabi.newpipe.local.dialog.PlaylistAppendDialog;
import org.schabi.newpipe.local.dialog.PlaylistDialog;
import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.SaveUploaderUrlHelper;
import org.schabi.newpipe.util.external_communication.KoreUtils;
import org.schabi.newpipe.util.external_communication.ShareUtils;
@ -40,8 +40,8 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
*/
public enum StreamDialogDefaultEntry {
SHOW_CHANNEL_DETAILS(R.string.show_channel_details, (fragment, item) ->
SaveUploaderUrlHelper.saveUploaderUrlIfNeeded(fragment, item,
uploaderUrl -> openChannelFragment(fragment, item, uploaderUrl))
fetchUploaderUrlIfSparse(fragment.requireContext(), item.getServiceId(), item.getUrl(),
item.getUploaderUrl(), url -> openChannelFragment(fragment, item, url))
),
/**

View file

@ -6,19 +6,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import org.schabi.newpipe.error.ErrorInfo;
import org.schabi.newpipe.error.ErrorUtil;
import org.schabi.newpipe.error.UserAction;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.stream.StreamType;
import org.schabi.newpipe.local.history.HistoryRecordManager;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import org.schabi.newpipe.util.ExtractorHelper;
import java.util.function.Consumer;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class StreamDialogEntry {
@ -40,52 +28,4 @@ public class StreamDialogEntry {
public interface StreamDialogEntryAction {
void onClick(Fragment fragment, StreamInfoItem infoItem);
}
/**
* Fetches a {@link StreamInfoItem} if it is incomplete and executes the callback.
* <br />
* This method is required if the info has been fetched
* via a {@link org.schabi.newpipe.extractor.feed.FeedExtractor}.
* FeedExtractors provide a fast and lightweight method to fetch info,
* but the info might be incomplete
* (see {@link org.schabi.newpipe.local.feed.service.FeedLoadService} for more details).
* @param context
* @param item the item which is checked and eventually loaded completely
* @param callback
*/
public static void fetchItemInfoIfSparse(@NonNull final Context context,
@NonNull final StreamInfoItem item,
@NonNull final Consumer<SinglePlayQueue> callback) {
if (!(item.getStreamType() == StreamType.LIVE_STREAM
|| item.getStreamType() == StreamType.AUDIO_LIVE_STREAM)
&& item.getDuration() < 0) {
// Sparse item: fetched by fast fetch
ExtractorHelper.getStreamInfo(
item.getServiceId(),
item.getUrl(),
false
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
final HistoryRecordManager recordManager =
new HistoryRecordManager(context);
recordManager.saveStreamState(result, 0)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> ErrorUtil.showSnackbar(
context,
new ErrorInfo(throwable, UserAction.REQUESTED_STREAM,
item.getUrl(), item.getServiceId())))
.subscribe();
callback.accept(new SinglePlayQueue(result));
}, throwable -> ErrorUtil.createNotification(context,
new ErrorInfo(throwable, UserAction.REQUESTED_CHANNEL,
"Could not fetch missing stream info")));
} else {
callback.accept(new SinglePlayQueue(item));
}
}
}

View file

@ -19,6 +19,8 @@
package org.schabi.newpipe.util;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import android.content.Context;
import android.util.Log;
import android.view.View;
@ -30,8 +32,6 @@ import androidx.preference.PreferenceManager;
import org.schabi.newpipe.MainActivity;
import org.schabi.newpipe.R;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.util.external_communication.TextLinkifier;
import org.schabi.newpipe.extractor.Info;
import org.schabi.newpipe.extractor.InfoItem;
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
@ -42,6 +42,7 @@ import org.schabi.newpipe.extractor.Page;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.channel.ChannelInfo;
import org.schabi.newpipe.extractor.comments.CommentsInfo;
import org.schabi.newpipe.extractor.comments.CommentsInfoItem;
import org.schabi.newpipe.extractor.feed.FeedExtractor;
import org.schabi.newpipe.extractor.feed.FeedInfo;
import org.schabi.newpipe.extractor.kiosk.KioskInfo;
@ -50,6 +51,7 @@ import org.schabi.newpipe.extractor.search.SearchInfo;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.extractor.suggestion.SuggestionExtractor;
import org.schabi.newpipe.util.external_communication.TextLinkifier;
import java.util.Collections;
import java.util.List;
@ -58,8 +60,6 @@ import io.reactivex.rxjava3.core.Maybe;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
public final class ExtractorHelper {
private static final String TAG = ExtractorHelper.class.getSimpleName();
private static final InfoCache CACHE = InfoCache.getInstance();

View file

@ -1,94 +0,0 @@
package org.schabi.newpipe.util;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import android.content.Context;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.error.ErrorInfo;
import org.schabi.newpipe.error.ErrorUtil;
import org.schabi.newpipe.error.UserAction;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.player.playqueue.PlayQueueItem;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
* Utility class for putting the uploader url into the database - when required.
*/
public final class SaveUploaderUrlHelper {
private SaveUploaderUrlHelper() {
}
// Public functions which call the function that does
// the actual work with the correct parameters
public static void saveUploaderUrlIfNeeded(@NonNull final Fragment fragment,
@NonNull final StreamInfoItem infoItem,
@NonNull final SaveUploaderUrlCallback callback) {
saveUploaderUrlIfNeeded(fragment.requireContext(),
infoItem.getServiceId(),
infoItem.getUrl(),
infoItem.getUploaderUrl(),
callback);
}
public static void saveUploaderUrlIfNeeded(@NonNull final Context context,
@NonNull final PlayQueueItem queueItem,
@NonNull final SaveUploaderUrlCallback callback) {
saveUploaderUrlIfNeeded(context,
queueItem.getServiceId(),
queueItem.getUrl(),
queueItem.getUploaderUrl(),
callback);
}
/**
* Fetches and saves the uploaderUrl if it is empty (meaning that it does
* not exist in the video item). The callback is called with either the
* fetched uploaderUrl, or the already saved uploaderUrl, but it is always
* called with a valid uploaderUrl that can be used to show channel details.
*
* @param context Context
* @param serviceId The serviceId of the item
* @param url The item url
* @param uploaderUrl The uploaderUrl of the item, if null or empty, it
* will be fetched using the item url.
* @param callback The callback that returns the fetched or existing
* uploaderUrl
*/
private static void saveUploaderUrlIfNeeded(@NonNull final Context context,
final int serviceId,
@NonNull final String url,
// Only used if not null or empty
@Nullable final String uploaderUrl,
@NonNull final SaveUploaderUrlCallback callback) {
if (isNullOrEmpty(uploaderUrl)) {
Toast.makeText(context, R.string.loading_channel_details,
Toast.LENGTH_SHORT).show();
ExtractorHelper.getStreamInfo(serviceId, url, false)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
NewPipeDatabase.getInstance(context).streamDAO()
.setUploaderUrl(serviceId, url, result.getUploaderUrl())
.subscribeOn(Schedulers.io()).subscribe();
callback.onCallback(result.getUploaderUrl());
}, throwable -> ErrorUtil.createNotification(context,
new ErrorInfo(throwable, UserAction.REQUESTED_CHANNEL,
"Could not load channel details")
));
} else {
callback.onCallback(uploaderUrl);
}
}
public interface SaveUploaderUrlCallback {
void onCallback(@NonNull String uploaderUrl);
}
}

View file

@ -0,0 +1,126 @@
package org.schabi.newpipe.util;
import static org.schabi.newpipe.extractor.stream.StreamType.AUDIO_LIVE_STREAM;
import static org.schabi.newpipe.extractor.stream.StreamType.LIVE_STREAM;
import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty;
import android.content.Context;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.error.ErrorInfo;
import org.schabi.newpipe.error.ErrorUtil;
import org.schabi.newpipe.error.UserAction;
import org.schabi.newpipe.extractor.stream.StreamInfo;
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.player.playqueue.SinglePlayQueue;
import java.util.function.Consumer;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.schedulers.Schedulers;
/**
* Utility class for fetching additional data for stream items when needed.
*/
public final class SparseItemUtil {
private SparseItemUtil() {
}
/**
* Use this to certainly obtain an single play queue with all of the data filled in when the
* stream info item you are handling might be sparse, e.g. because it was fetched via a {@link
* org.schabi.newpipe.extractor.feed.FeedExtractor}. FeedExtractors provide a fast and
* lightweight method to fetch info, but the info might be incomplete (see
* {@link org.schabi.newpipe.local.feed.service.FeedLoadService} for more details).
*
* @param context the Android context
* @param item the item which is checked and eventually loaded completely
* @param callback the callback to call with the single play queue built from the original item
* if all info was available, otherwise from the fetched {@link
* org.schabi.newpipe.extractor.stream.StreamInfo}
*/
public static void fetchItemInfoIfSparse(@NonNull final Context context,
@NonNull final StreamInfoItem item,
@NonNull final Consumer<SinglePlayQueue> callback) {
if ((!(item.getStreamType() == LIVE_STREAM || item.getStreamType() == AUDIO_LIVE_STREAM)
&& item.getDuration() < 0) || isNullOrEmpty(item.getUploaderUrl())) {
fetchStreamInfoAndSaveToDatabase(context, item.getServiceId(), item.getUrl(),
streamInfo -> callback.accept(new SinglePlayQueue(streamInfo)));
} else {
// all info is already there, no need to fetch
callback.accept(new SinglePlayQueue(item));
}
}
/**
* Use this to certainly obtain an uploader url when the stream info item or play queue item you
* are handling might not have the uploader url (e.g. because it was fetched with {@link
* org.schabi.newpipe.extractor.feed.FeedExtractor}). A toast is shown if loading details is
* required.
*
* @param context the Android context
* @param serviceId the serviceId of the item
* @param url the item url
* @param uploaderUrl the uploaderUrl of the item; if null or empty will be fetched
* @param callback the callback called with either the original uploaderUrl, if it was a valid
* url, otherwise with the uploader url obtained by fetching the {@link
* org.schabi.newpipe.extractor.stream.StreamInfo} corresponding to the item
*/
public static void fetchUploaderUrlIfSparse(@NonNull final Context context,
final int serviceId,
@NonNull final String url,
@Nullable final String uploaderUrl,
@NonNull final Consumer<String> callback) {
if (isNullOrEmpty(uploaderUrl)) {
fetchStreamInfoAndSaveToDatabase(context, serviceId, url,
streamInfo -> callback.accept(streamInfo.getUploaderUrl()));
} else {
callback.accept(uploaderUrl);
}
}
/**
* Loads the stream info corresponding to the given data on an I/O thread, stores the result in
* the database and calls the callback on the main thread with the result. A toast will be shown
* to the user about loading stream details, so this needs to be called on the main thread.
*
* @param context the Android context
* @param serviceId the service id of the stream to load
* @param url the url of the stream to load
* @param callback the callback to call with the result
*/
private static void fetchStreamInfoAndSaveToDatabase(final Context context,
final int serviceId,
@NonNull final String url,
final Consumer<StreamInfo> callback) {
Toast.makeText(context, R.string.loading_stream_details, Toast.LENGTH_SHORT).show();
ExtractorHelper.getStreamInfo(serviceId, url, false)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
// save to database in the background (not on main thread)
Completable.fromAction(() -> NewPipeDatabase.getInstance(context)
.streamDAO().upsert(new StreamEntity(result)))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.doOnError(throwable ->
ErrorUtil.createNotification(context,
new ErrorInfo(throwable, UserAction.REQUESTED_STREAM,
"Saving stream info to database", result)))
.subscribe();
// call callback on main thread with the obtained result
callback.accept(result);
}, throwable -> ErrorUtil.createNotification(context,
new ErrorInfo(throwable, UserAction.REQUESTED_STREAM,
"Loading stream info: " + url, serviceId)
));
}
}

View file

@ -688,8 +688,6 @@
<string name="seekbar_preview_thumbnail_title">معاينة مصغرة على شريط التمرير</string>
<string name="mark_as_watched">علّمه كفيديو تمت مشاهدته</string>
<string name="detail_heart_img_view_description">أُعجب بها منشئ المحتوى</string>
<string name="loading_channel_details">جاري تحميل تفاصيل القناة…</string>
<string name="error_show_channel_details">خطأ في عرض تفاصيل القناة</string>
<string name="show_image_indicators_summary">أظهر أشرطة ملونة لبيكاسو أعلى الصور تشير إلى مصدرها: الأحمر للشبكة والأزرق للقرص والأخضر للذاكرة</string>
<string name="show_image_indicators_title">إظهار مؤشرات الصور</string>
<string name="remote_search_suggestions">اقتراحات البحث عن بعد</string>

View file

@ -638,8 +638,6 @@
<string name="high_quality_larger">高品质(较大)</string>
<string name="detail_heart_img_view_description">被创作者喜爱</string>
<string name="mark_as_watched">标记为已观看</string>
<string name="loading_channel_details">加载频道详情中…</string>
<string name="error_show_channel_details">显示频道详情时出错</string>
<string name="show_image_indicators_summary">在图像顶部显示毕加索彩带,指示其来源:红色代表网络,蓝色代表磁盘,绿色代表内存</string>
<string name="show_image_indicators_title">显示图像指示器</string>
<string name="remote_search_suggestions">远程搜索建议</string>

View file

@ -601,7 +601,6 @@
\nDegut a la nova política d\'edat de YouTube, el NewPipe no pot accedir a aquest contingut i per tant no pot reproduir-lo.</string>
<string name="show_description_summary">Desactiveu per amagar la descripció i la informació addicional del vídeo</string>
<string name="disable_media_tunneling_title">Desactiva l\'entunelament del contingut</string>
<string name="loading_channel_details">Carregant detalls del canal…</string>
<string name="off">Desactiva</string>
<string name="on">Activa</string>
<string name="tablet_mode_title">Mode tablet</string>
@ -671,7 +670,6 @@
<string name="error_report_notification_title">NewPipe ha trobat un error, toca per informar</string>
<string name="enqueue_next_stream">Posa a la cua el següent vídeo</string>
<string name="create_error_notification">Crear una notificació d\'error</string>
<string name="error_show_channel_details">Error en mostrar els detalls del canal</string>
<string name="error_report_channel_description">Notificacions per informar d\'errors</string>
<string name="show_error_snackbar">Mostra una barra d\'errors</string>
<string name="checking_updates_toast">S\'estan comprovant les actualitzacions…</string>

View file

@ -641,8 +641,6 @@
<string name="tablet_mode_title">دۆخی تابلێت</string>
<string name="open_website_license">کردنەوەی ماڵپەڕ</string>
<string name="seekbar_preview_thumbnail_title">پێشبینینی سەروێنەی گەڕان</string>
<string name="loading_channel_details">وردەکارییەکانی کەناڵەکە بار دەکرێن…</string>
<string name="error_show_channel_details">هەڵە ڕوویدا لە پیشاندانی وردەکارییەکانی کەناڵ</string>
<string name="detail_heart_img_view_description">بەدڵکراوە لەلایەن بڵاوکەرەوە</string>
<string name="dont_show">پیشان نەدرێت</string>
<string name="low_quality_smaller">کواڵێتی نزم (بچووکتر)</string>

View file

@ -658,8 +658,6 @@
<string name="comments_are_disabled">Komentáře jsou vypnuty</string>
<string name="detail_heart_img_view_description">Srdíčko od tvůrce</string>
<string name="mark_as_watched">Označit jako zhlédnuté</string>
<string name="loading_channel_details">Načítání podrobností kanálu…</string>
<string name="error_show_channel_details">Chyba při zobrazení prodrobností kanálu</string>
<plurals name="deleted_downloads_toast">
<item quantity="one">%1$s stažení smazáno</item>
<item quantity="few">%1$s stažení smazána</item>

View file

@ -648,8 +648,6 @@
<string name="feed_toggle_show_played_items">Angesehene Elemente anzeigen</string>
<string name="mark_as_watched">Als gesehen markieren</string>
<string name="detail_heart_img_view_description">Vom Ersteller mit Herz versehen</string>
<string name="loading_channel_details">Kanaldetails werden geladen…</string>
<string name="error_show_channel_details">Fehler beim Anzeigen der Kanaldetails</string>
<string name="show_image_indicators_summary">Farbige Picasso-Bänder über den Bildern anzeigen, die deren Quelle angeben: rot für Netzwerk, blau für Festplatte und grün für Speicher</string>
<string name="show_image_indicators_title">Bildindikatoren anzeigen</string>
<string name="remote_search_suggestions">Entfernte Suchvorschläge</string>

View file

@ -648,8 +648,6 @@
<string name="seekbar_preview_thumbnail_title">Προεπισκόπηση στην μπάρα αναζήτησης</string>
<string name="mark_as_watched">Σήμανση ως αναπαραχθέν</string>
<string name="detail_heart_img_view_description">Επισημάνθηκε από τον δημιουργό</string>
<string name="loading_channel_details">Φόρτωση λεπτομερειών καναλιού…</string>
<string name="error_show_channel_details">Σφάλμα στην εμφάνιση λεπτομερειών καναλιού</string>
<string name="show_image_indicators_summary">Εμφάνιση χρωματιστής κορδέλας πάνω στις εικόνες, που δείχνει την πηγή τους: κόκκινη για δίκτυο, μπλε για δίσκο και πράσινο για μνήμη</string>
<string name="show_image_indicators_title">Εμφάνιση δεικτών εικόνων</string>
<string name="remote_search_suggestions">Προτάσεις απομακρυσμένης αναζήτησης</string>

View file

@ -652,8 +652,6 @@
<string name="detail_heart_img_view_description">Valorado por el creador</string>
<string name="mark_as_watched">Marcar como visto</string>
<string name="show_image_indicators_summary">Mostrar cintas de colores Picasso encima de las imágenes indicando su origen: rojo para la red, azul para el disco y verde para la memoria</string>
<string name="loading_channel_details">Cargando detalles del canal…</string>
<string name="error_show_channel_details">Error en Mostrar detalles del canal</string>
<string name="show_image_indicators_title">Mostrar indicadores de imagen</string>
<string name="remote_search_suggestions">Sugerencias de búsqueda remota</string>
<string name="local_search_suggestions">Sugerencias de búsqueda local</string>

View file

@ -648,8 +648,6 @@
\n
\nNii et valik taandub sellele, mida eelistad: kiirus või täpne teave.</string>
<string name="mark_as_watched">Märgi vaadatuks</string>
<string name="loading_channel_details">Laadin kanali andmeid…</string>
<string name="error_show_channel_details">Viga kanali lisateabe kuvamisel</string>
<string name="show_image_indicators_summary">Näita piltide kohal Picasso värvides riba, mis märgib pildi allikat: punane tähistab võrku, sinine kohalikku andmekandjat ja roheline kohalikku mälu</string>
<string name="show_image_indicators_title">Näita piltide allikat</string>
<string name="remote_search_suggestions">Kaugotsingu soovitused</string>

View file

@ -646,8 +646,6 @@
<string name="high_quality_larger">Kalitate handia (handiagoa)</string>
<string name="seekbar_preview_thumbnail_title">Seekbarren miniaturen aurrebista</string>
<string name="comments_are_disabled">Iruzkinak desaktibatuta daude</string>
<string name="loading_channel_details">Kanalaren xehetasunak kargatzen…</string>
<string name="error_show_channel_details">Errorea kanalaren xehetasunak erakustean</string>
<string name="detail_heart_img_view_description">Sortzaileak baloratua</string>
<plurals name="deleted_downloads_toast">
<item quantity="one">Deskarga %1$s ezabatuta</item>

View file

@ -660,8 +660,6 @@
</plurals>
<string name="description_select_enable">به کار انداختن گزینش متن در شرح</string>
<string name="description_select_disable">از کار انداختن گزینش متن در شرح</string>
<string name="loading_channel_details">بار کردن جزییات کانال…</string>
<string name="error_show_channel_details">خطا در نمایش جزییات کانال</string>
<string name="main_page_content_swipe_remove">برای برداشتن موارد، بکشیدشان</string>
<string name="start_main_player_fullscreen_summary">اگر چرخش خودکار قفل باشد، ویدیوها را در پخش‌کنندهٔ کوچک آغاز نمی‌کند، بلکه مستقیماً به تمام‌صفحه می‌رود. همچنان می‌توانید با خروج از تمام‌صفحه به پخش‌کنندهٔ کوچک دسترسی داشته باشید</string>
<string name="start_main_player_fullscreen_title">آغاز پخش‌کنندهٔ اصلی در تمام‌صفحه</string>

View file

@ -648,8 +648,6 @@
<string name="no_dir_yet">Latauskansiota ei vielä asetettu, valitse ensin oletuslatauskansio</string>
<string name="comments_are_disabled">Kommentit poistettu käytöstä</string>
<string name="mark_as_watched">Merkitse katsotuksi</string>
<string name="loading_channel_details">Ladataan kanavan tietoja…</string>
<string name="error_show_channel_details">Virhe kanavan lisätietojen näyttämisessä</string>
<string name="show_image_indicators_summary">Näytä Picasso-värjätyt nauhat kuvien päällä osoittaakseen lähteen: punainen tarkoittaa verkkoa, sininen tarkoittaa levytilaa ja vihreä tarkoittaa muistia</string>
<string name="show_image_indicators_title">Näytä kuvailmaisimet</string>
<string name="remote_search_suggestions">Etähakuehdotukset</string>

View file

@ -650,8 +650,6 @@
<string name="seekbar_preview_thumbnail_title">Prévisualisation de la barre de progression sur la miniature</string>
<string name="mark_as_watched">Marquer comme visionné</string>
<string name="detail_heart_img_view_description">Apprécié par le créateur</string>
<string name="loading_channel_details">Chargement des détails du canal…</string>
<string name="error_show_channel_details">Erreur lors de laffichage des détails du canal</string>
<string name="show_image_indicators_title">Afficher les indicateurs dimage</string>
<string name="remote_search_suggestions">Suggestions de recherche distante</string>
<string name="local_search_suggestions">Suggestions de recherche locale</string>

View file

@ -625,8 +625,6 @@
<string name="show_meta_info_summary">Desactivar para ocultar información adicional sobre o creador da emisión, do contido, ou da petición de procura</string>
<string name="notification_colorize_summary">Permitir a Android personalizar a cor da notificación conforme a cor principal da miniatura (esta opción non está dispoñíbel en todos os dispositivos)</string>
<string name="mark_as_watched">Marcar como visto</string>
<string name="loading_channel_details">A carregar detalles da canle…</string>
<string name="error_show_channel_details">Erro en Mostrar detalles da canle</string>
<string name="download_has_started">Descarga inciada</string>
<string name="account_terminated">Conta cancelada</string>
<string name="feed_load_error_fast_unknown">O modo feed rápido non prové máis información sobre isto.</string>

View file

@ -668,8 +668,6 @@
<string name="seekbar_preview_thumbnail_title">תמונה מוקטנת בסרגל הנגינה</string>
<string name="detail_heart_img_view_description">סומן בלב על ידי היוצר</string>
<string name="mark_as_watched">סימון כנצפה</string>
<string name="loading_channel_details">פרטי הערוץ נטענים…</string>
<string name="error_show_channel_details">שגיאה בהצגת פרטי הערוץ</string>
<string name="show_image_indicators_summary">הצגת סרטים בסגנון פיקאסו בראש התמונות לציון המקור שלהם: אדום זה מהרשת, כחול מהכונן וירוק מהזיכרון</string>
<string name="show_image_indicators_title">הצגת מחווני תמונות</string>
<string name="remote_search_suggestions">הצעות חיפוש מרוחקות</string>

View file

@ -659,8 +659,6 @@
<string name="description_select_note">Sada možeš odabrati tekst u opisu. Napomena: stranica će možda treperiti i možda nećeš moći kliknuti poveznice u načinu rada za odabir teksta.</string>
<string name="service_provides_reason">%s daje ovaj razlog:</string>
<string name="processing_may_take_a_moment">Obrada... Pričekajte trenutak</string>
<string name="error_show_channel_details">Pogreška pri prikazu detalja kanala</string>
<string name="loading_channel_details">Učitavanje detalja o kanalu…</string>
<string name="main_page_content_swipe_remove">Povucite stavke da biste ih uklonili</string>
<string name="show_image_indicators_title">Prikazati indikatore slike</string>
<plurals name="download_finished_notification">

View file

@ -620,7 +620,6 @@
<string name="metadata_privacy_public">Nyilvános</string>
<string name="metadata_privacy_unlisted">Nem listázott</string>
<string name="off">Ki</string>
<string name="loading_channel_details">Csatornarészletek betöltése…</string>
<string name="no_appropriate_file_manager_message">Nem található megfelelő fájlkezelő ehhez a művelethez.
\nTelepítsen egy fájlkezelőt, vagy próbálja meg letiltani a következőt a letöltési beállításokban: „%s”.</string>
<plurals name="download_finished_notification">
@ -666,7 +665,6 @@
<string name="metadata_category">Kategória</string>
<string name="metadata_tags">Címkék</string>
<string name="metadata_privacy">Adatvédelem</string>
<string name="error_show_channel_details">Hiba a csatornarészletek megjelenítésekor</string>
<string name="feed_use_dedicated_fetch_method_disable_button">Gyors mód letiltása</string>
<string name="remove_watched_popup_yes_and_partially_watched_videos">Igen, és távolítsa el a részben megnézett videókat is</string>
<string name="remove_watched_popup_warning">A videók, melyeket már megnézett miután a lejátszási listához adta őket, el lesznek távolítva.

View file

@ -653,8 +653,6 @@
<string name="enqueued_next">telah ditambahkan ke selanjutnya</string>
<string name="show_image_indicators_summary">Tampilkan Ribon bewarna Picasso di atas gambar yang mengindikasikan asalnya: merah untuk jaringan, biru untuk disk dan hijau untuk memori</string>
<string name="start_main_player_fullscreen_summary">Jangan memulai memutar video di mini player, tapi nyalakan langsung di mode layar penuh, jika rotasi otomatis terkunci. Anda tetap dapat mengakses mini player dengan keluar dari layar penuh</string>
<string name="loading_channel_details">Memuat Detail Channel…</string>
<string name="error_show_channel_details">Galat Menampilkan Detail Channel</string>
<string name="processing_may_take_a_moment">Memproses… Mungkin butuh waktu sebentar</string>
<string name="manual_update_title">Periksa Pembaruan</string>
<string name="manual_update_description">Periksa manual untuk versi baru</string>

View file

@ -648,8 +648,6 @@
<string name="comments_are_disabled">Commenti disattivati</string>
<string name="detail_heart_img_view_description">Apprezzato dall\'autore</string>
<string name="mark_as_watched">Segna come visto</string>
<string name="loading_channel_details">Caricamento dettagli canale…</string>
<string name="error_show_channel_details">Errore per \"Mostra dettagli canale\"</string>
<string name="show_image_indicators_summary">Mostra gli indicatori colorati Picasso sopra le immagini, per indicare la loro fonte: rosso per la rete, blu per il disco e verde per la memoria</string>
<string name="show_image_indicators_title">Mostra indicatori immagine</string>
<string name="remote_search_suggestions">Suggerimenti di ricerca remoti</string>

View file

@ -637,8 +637,6 @@
<string name="seekbar_preview_thumbnail_title">シークバーのサムネイルプレビュー</string>
<string name="comments_are_disabled">コメントは無効です</string>
<string name="mark_as_watched">視聴済みとしてマーク</string>
<string name="error_show_channel_details">チャンネルの詳細の表示でエラー</string>
<string name="loading_channel_details">チャンネルの詳細を読み込み中…</string>
<string name="remote_search_suggestions">リモート検索候補</string>
<string name="local_search_suggestions">ローカル検索候補</string>
<string name="main_page_content_swipe_remove">アイテムをスワイプして削除</string>

View file

@ -658,8 +658,6 @@
<string name="dont_show">Nerodyti</string>
<string name="detail_heart_img_view_description">Širdelė nuo kurėjo</string>
<string name="mark_as_watched">Pažymėti kaip peržiūrėtą</string>
<string name="loading_channel_details">Įkeliama kanalo išsami informacija…</string>
<string name="error_show_channel_details">Klaida rodant kanalo išsamią informaciją</string>
<string name="show_image_indicators_summary">Rodyti „Picasso“ spalvotas juosteles ant vaizdų, nurodančių jų šaltinį: raudona tinklui, mėlyna diskui ir žalia atmintis</string>
<string name="show_image_indicators_title">Rodyti vaizdo indikatorius</string>
<string name="remote_search_suggestions">Nuotolinės paieškos pasiūlymai</string>

View file

@ -662,8 +662,6 @@
<string name="detail_heart_img_view_description">Autors piekrīt</string>
<string name="open_website_license">Atvērt mājaslapu</string>
<string name="tablet_mode_title">Tabletes režīms</string>
<string name="error_show_channel_details">Kļūda rādot kanāla informāciju</string>
<string name="loading_channel_details">Ielādē kanāla informāciju…</string>
<string name="low_quality_smaller">Zemas kvalitātes (mazāks)</string>
<string name="metadata_privacy">Privātums</string>
<string name="metadata_privacy_unlisted">Sarakstā neiekļauts</string>

View file

@ -611,8 +611,6 @@
<string name="detail_heart_img_view_description">സ്നേഹത്തോടെ സൃഷ്ടാവ്</string>
<string name="description_select_disable">ഡിസ്ക്രിപ്ഷനിലെ ടെക്സ്റ്റ്‌ സെലക്ട്‌ ചെയ്യുവാൻ അനുവദിക്കാതെ ഇരിക്കുക</string>
<string name="description_select_enable">ഡിസ്ക്രിപ്ഷനിലെ ടെക്സ്റ്റ്‌ സെലക്ട്‌ ചെയ്യാൻ അനുവദിക്കുക</string>
<string name="loading_channel_details">ചാനൽ വിശദാംശങ്ങൾ ലോഡ് ചെയ്യുന്നു…</string>
<string name="error_show_channel_details">ചാനൽ വിശദാംശങ്ങൾ കാണിക്കുന്നതിൽ പിശക് സംഭവിച്ചു</string>
<string name="off">ഓഫ്‌</string>
<string name="on">ഓൺ</string>
<string name="open_website_license">വെബ്സൈറ്റ് തുറക്കുക</string>

View file

@ -652,14 +652,12 @@
<item quantity="one">Slettet én nedlastning</item>
<item quantity="other">Slettet %1$s nedlastninger</item>
</plurals>
<string name="loading_channel_details">Laster inn kanaldetaljer …</string>
<string name="remote_search_suggestions">Søkeforslag annensteds fra</string>
<string name="local_search_suggestions">Lokale søkeforslag</string>
<string name="mark_as_watched">Marker som sett</string>
<string name="start_main_player_fullscreen_summary">Ikke start videoer i minispilleren, men gå til fullskjermsmodus direkte, hvis auto-rotering er låst. Du har fremdeles tilgang til minispilleren ved å avslutte fullskjermsvisning.</string>
<string name="show_image_indicators_summary">Vis Picasso-fargede bånd på toppen av bilder for å indikere kilde: Rød for nettverk, blå for disk, og grønn for minne</string>
<string name="detail_heart_img_view_description">Hjertemerket av skaper</string>
<string name="error_show_channel_details">Kunne ikke vise kanaldetaljer</string>
<string name="show_image_indicators_title">Vis bildeindikatorer</string>
<string name="main_page_content_swipe_remove">Dra elementer for å fjerne dem</string>
<string name="start_main_player_fullscreen_title">Start hovedspiller i fullskjerm</string>

View file

@ -641,8 +641,6 @@
<string name="downloads_storage_use_saf_summary_api_19">Het \'Storage Access Framework\' is niet ondersteund op Android KitKat en lager</string>
<string name="downloads_storage_ask_summary_no_saf_notice">U wordt gevraagd waar elk bestand wordt opgeslagen</string>
<string name="no_dir_yet">Nog geen downloadfolder gekozen, kies de standaard downloadfolder</string>
<string name="loading_channel_details">Kanaaldetails laden…</string>
<string name="error_show_channel_details">Error tijdens tonen van kanaal details</string>
<string name="detail_heart_img_view_description">Geliefd door de maker</string>
<string name="dont_show">Niet laten zien</string>
<string name="low_quality_smaller">Lage kwaliteit (kleiner)</string>

View file

@ -663,8 +663,6 @@
<string name="dont_show">Nie pokazuj</string>
<string name="detail_heart_img_view_description">Serduszko od twórcy</string>
<string name="mark_as_watched">Oznacz jako obejrzane</string>
<string name="loading_channel_details">Ładowanie szczegółów kanału…</string>
<string name="error_show_channel_details">Błąd podczas wyświetlania szczegółów kanału</string>
<string name="show_image_indicators_summary">Pokazuj kolorowe wstążki Picasso nad obrazami wskazujące ich źródło: czerwone dla sieci, niebieskie dla dysku i zielone dla pamięci</string>
<string name="show_image_indicators_title">Pokazuj wskaźniki obrazu</string>
<string name="remote_search_suggestions">Zdalne podpowiedzi wyszukiwania</string>

View file

@ -649,8 +649,6 @@
<string name="mark_as_watched">Marcar como visto</string>
<string name="detail_heart_img_view_description">Curtido pelo criador</string>
<string name="show_image_indicators_summary">Exibir fitas coloridas no topo das imagens indicando sua fonte: vermelho para rede, azul para disco e verde para memória</string>
<string name="loading_channel_details">Carregando detalhes do canal…</string>
<string name="error_show_channel_details">Erro ao exibir detalhes do canal</string>
<plurals name="deleted_downloads_toast">
<item quantity="one">%1$s download apagado</item>
<item quantity="other">%1$s downloads apagados</item>

View file

@ -648,8 +648,6 @@
<string name="no_dir_yet">Ainda não foi definida uma pasta de descarregamento, escolha agora a pasta de descarregamento padrão</string>
<string name="comments_are_disabled">Comentários estão desativados</string>
<string name="mark_as_watched">Marcar como visto</string>
<string name="loading_channel_details">A carregar detalhes do canal…</string>
<string name="error_show_channel_details">Erro em Mostrar detalhes do canal</string>
<string name="show_image_indicators_summary">Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória</string>
<string name="show_image_indicators_title">Mostrar indicadores de imagem</string>
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>

View file

@ -648,8 +648,6 @@
<string name="low_quality_smaller">Baixa qualidade (menor)</string>
<string name="high_quality_larger">Alta qualidade (maior)</string>
<string name="comments_are_disabled">Comentários estão desativados</string>
<string name="loading_channel_details">A carregar detalhes do canal…</string>
<string name="error_show_channel_details">Erro em Mostrar detalhes do canal</string>
<string name="show_image_indicators_summary">Mostrar fitas coloridas de Picasso em cima das imagens que indicam a sua fonte: vermelho para rede, azul para disco e verde para memória</string>
<string name="show_image_indicators_title">Mostrar indicadores de imagem</string>
<string name="remote_search_suggestions">Sugestões de pesquisa remotas</string>

View file

@ -619,8 +619,6 @@
<string name="enqueued_next">Următorul pus în coadă</string>
<string name="enqueue_next_stream">Adăugați în coadă pe următorul</string>
<string name="mark_as_watched">Marcare ca vizionat</string>
<string name="loading_channel_details">Încărcare Detalii canal…</string>
<string name="error_show_channel_details">Eroare la Afișare detalii canal</string>
<string name="off">Oprit</string>
<string name="on">Pornit</string>
<string name="tablet_mode_title">Mod tabletă</string>

View file

@ -660,8 +660,6 @@
<string name="seekbar_preview_thumbnail_title">Миниатюра над полосой прокрутки</string>
<string name="detail_heart_img_view_description">Автору видео понравилось это</string>
<string name="mark_as_watched">Пометить как проигранные</string>
<string name="error_show_channel_details">Не удалось отобразить сведения о канале</string>
<string name="loading_channel_details">Загрузка сведений о канале…</string>
<string name="show_image_indicators_summary">Picasso: указать цветом источник изображений (красный — сеть, синий — диск, зелёный — память)</string>
<string name="show_image_indicators_title">Цветные метки на изображениях</string>
<string name="remote_search_suggestions">Серверные предложения поиска</string>

View file

@ -648,8 +648,6 @@
<string name="comments_are_disabled">Sos cummentos sunt disabilitados</string>
<string name="detail_heart_img_view_description">Su creadore b\'at postu unu coro</string>
<string name="mark_as_watched">Marca comente pompiadu</string>
<string name="loading_channel_details">Carrighende sos detàllios de su canale…</string>
<string name="error_show_channel_details">Errore in sa visualizatzione de sos detàllios de su canale</string>
<string name="show_image_indicators_summary">Ammustra sos listrones colorados de Picasso in subra de sas immàgines chi indicant sa fonte issoro: ruja pro sa retze, biaita pro su discu e birde pro sa memòria</string>
<string name="show_image_indicators_title">Ammustra sos indicadores de immàgines</string>
<string name="remote_search_suggestions">Impòsitos de chirca remota</string>

View file

@ -648,8 +648,6 @@
<string name="downloads_storage_ask_summary_no_saf_notice">Pri každom sťahovaní sa zobrazí výzva kam uložiť súbor</string>
<string name="no_dir_yet">Nie je nastavený adresár na sťahovanie, nastavte ho teraz</string>
<string name="mark_as_watched">Označiť ako pozorované</string>
<string name="loading_channel_details">Načítavanie podrobností o kanáli…</string>
<string name="error_show_channel_details">Chyba pri zobrazení podrobností kanála</string>
<string name="off">Vypnuté</string>
<string name="on">Zapnuté</string>
<string name="tablet_mode_title">Režim tabletu</string>

View file

@ -647,8 +647,6 @@
<string name="comments_are_disabled">Fallooyinka waa laxidhay</string>
<string name="detail_heart_img_view_description">Kahelay soosaaraha</string>
<string name="mark_as_watched">Waan daawaday</string>
<string name="error_show_channel_details">Khalad ayaa ka dhacay Faahfaahinta Kanaalka</string>
<string name="loading_channel_details">Soo kicinaya faahfaahinta Kanaalka…</string>
<string name="show_image_indicators_summary">Soo bandhig shaambado midabka Picasso leh sawirrada dushooda oo tilmaamaya isha laga keenay: guduud waa khadka, buluug waa kaydka gudaha, cagaar waa kaydka K/G</string>
<string name="show_image_indicators_title">Tus tilmaamayaasha sawirka</string>
<string name="remote_search_suggestions">Soojeedinada raadinta banaanka</string>

View file

@ -647,10 +647,8 @@
<string name="select_night_theme_toast">Du kan välja det natt-tema du föredrar nedan</string>
<string name="night_theme_summary">Välj det natt-tema du föredrar — %s</string>
<string name="seekbar_preview_thumbnail_title">Sökradens förhandsvisningsminiatyr</string>
<string name="loading_channel_details">Laddar kanaldetaljer…</string>
<string name="show_image_indicators_title">Visa bildindikatorer</string>
<string name="local_search_suggestions">Lokala sökningsförslag</string>
<string name="error_show_channel_details">Kunde inte visa kanaldetaljer</string>
<plurals name="deleted_downloads_toast">
<item quantity="one">Tog bort %1$s nedladdning</item>
<item quantity="other">Tog bort %1$s nedladdningar</item>

View file

@ -330,7 +330,6 @@
<string name="enqueue_next_stream">அடுத்தைச் சாரைபடுத்து</string>
<string name="enqueued_next">அடுத்தது சாரைபடுத்தப்பட்டது</string>
<string name="rename_playlist">மறுபெயரிடு</string>
<string name="loading_channel_details">பதிவுத்தட விவரங்களை ஏற்றுகிறது…</string>
<string name="no_playlist_bookmarked_yet">ஒளிச்சர நூற்குறிகள் இன்னுமில</string>
<string name="unbookmark_playlist">நூற்குறியை நீக்கு</string>
<string name="set_as_playlist_thumbnail">ஒளிச்சர சிறுபடமாக அமை</string>
@ -338,7 +337,6 @@
<string name="settings_file_replacement_character_title">மாற்றீடு வரியுரு</string>
<string name="playlist_page_summary">ஒளிச்சரப் பக்கம்</string>
<string name="feed_group_show_only_ungrouped_subscriptions">ஒன்றிணைக்கா சந்தாக்களை மட்டும் காட்டு</string>
<string name="error_show_channel_details">பதிவுத்தட விவரங்களைக் காட்டுவதில் பிழை</string>
<string name="import_settings">அமைவையும் இறக்குமதி செய்யவா\?</string>
<string name="start_here_on_background">பின்னணியில் இயங்கத் துவங்கு</string>
<string name="start_here_on_popup"></string>

View file

@ -648,8 +648,6 @@
<string name="comments_are_disabled">Yorumlar devre dışı</string>
<string name="detail_heart_img_view_description">Yaratıcısınca kalplendi</string>
<string name="mark_as_watched">İzlendi olarak imle</string>
<string name="loading_channel_details">Kanal Ayrıntıları Yükleniyor…</string>
<string name="error_show_channel_details">Kanal Ayrıntılarını Göstermede Hata</string>
<string name="show_image_indicators_summary">Resimlerin üzerinde kaynaklarını gösteren Picasso renkli şeritler göster: ağ için kırmızı, disk için mavi ve bellek için yeşil</string>
<string name="show_image_indicators_title">Resim göstergelerini göster</string>
<string name="remote_search_suggestions">Uzak arama önerileri</string>

View file

@ -659,8 +659,6 @@
<string name="seekbar_preview_thumbnail_title">Мініатюра з попереднім переглядом на повзунку поступу</string>
<string name="detail_heart_img_view_description">Вподобано автором</string>
<string name="mark_as_watched">Позначити переглянутим</string>
<string name="loading_channel_details">Завантаження відомостей про канал…</string>
<string name="error_show_channel_details">Помилка показу відомостей про канал</string>
<string name="show_image_indicators_summary">Показувати кольорові стрічки Пікассо поверх зображень із зазначенням їх джерела: червоний для мережі, синій для диска та зелений для пам’яті</string>
<string name="show_image_indicators_title">Показати індикатори зображень</string>
<string name="remote_search_suggestions">Віддалені пропозиції пошуку</string>

View file

@ -637,8 +637,6 @@
<string name="comments_are_disabled">Bình luận đang bị tắt</string>
<string name="detail_heart_img_view_description">Đã được người tạo gắn tim</string>
<string name="mark_as_watched">Đánh dấu là đã xem</string>
<string name="loading_channel_details">Đang tải chi tiết kênh…</string>
<string name="error_show_channel_details">Lỗi tại Hiện chi tiết kênh</string>
<string name="show_image_indicators_summary">Hiện ruy băng được tô màu Picasso ở trên cùng các hình ảnh và chỉ ra nguồn của chúng: đỏ đối với mạng, xanh lam đối với ổ đĩa và xanh lá đối với bộ nhớ</string>
<string name="show_image_indicators_title">Hiện dấu chỉ hình ảnh</string>
<string name="remote_search_suggestions">Đề xuất tìm kiếm trên mạng</string>

View file

@ -459,7 +459,6 @@
<string name="error_http_unsupported_range">伺服器唔接受多執行緒下載,請改用 @string/msg_threads = 1 再試下啦</string>
<string name="error_connect_host">連接唔到伺服器</string>
<string name="playlist_page_summary">播放清單頁面</string>
<string name="loading_channel_details">載入緊頻道詳情…</string>
<string name="hold_to_append">撳住就輪候</string>
<string name="error_path_creation">目的地資料夾建立唔到</string>
<string name="error_ssl_exception">建立唔到安全連線</string>
@ -525,7 +524,6 @@
<string name="detail_heart_img_view_description">創作者畀咗心心</string>
<string name="open_website_license">開啟網站</string>
<string name="off"></string>
<string name="error_show_channel_details">顯示頻道詳情嘅時候有問題</string>
<string name="metadata_host">主機</string>
<string name="show_hold_to_append_summary">喺影片「詳情:」度撳一下「幕後播」或者「浮面播」個掣嘅時候顯示提示</string>
<string name="title_activity_history">紀錄</string>

View file

@ -638,8 +638,6 @@
<string name="seekbar_preview_thumbnail_title">拖動列縮圖預覽</string>
<string name="detail_heart_img_view_description">被創作者加心號</string>
<string name="mark_as_watched">標記為已觀看</string>
<string name="loading_channel_details">正在載入頻道詳細資訊……</string>
<string name="error_show_channel_details">顯示頻道詳細資訊時發生錯誤</string>
<string name="show_image_indicators_summary">在圖片頂部顯示畢卡索彩色絲帶,指示其來源:紅色代表網路、藍色代表磁碟、綠色代表記憶體</string>
<string name="show_image_indicators_title">顯示圖片指示器</string>
<string name="remote_search_suggestions">遠端搜尋建議</string>

View file

@ -405,6 +405,7 @@
<string name="enqueued_next">Enqueued next</string>
<string name="start_here_on_background">Start playing in the background</string>
<string name="start_here_on_popup">Start playing in a popup</string>
<string name="loading_stream_details">Loading stream details…</string>
<!-- Drawer -->
<string name="drawer_open">Open Drawer</string>
<string name="drawer_close">Close Drawer</string>
@ -715,9 +716,6 @@
<string name="tablet_mode_title">Tablet mode</string>
<string name="on">On</string>
<string name="off">Off</string>
<!-- Show Channel Details -->
<string name="error_show_channel_details">Error at Show Channel Details</string>
<string name="loading_channel_details">Loading Channel Details…</string>
<!-- Progressive Load Interval -->
<string name="progressive_load_interval_default">ExoPlayer default</string>
</resources>