mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Merge branch 'master' into dev
This commit is contained in:
		| @@ -20,8 +20,8 @@ android { | ||||
|         resValue "string", "app_name", "NewPipe" | ||||
|         minSdk 21 | ||||
|         targetSdk 33 | ||||
|         versionCode 991 | ||||
|         versionName "0.24.1" | ||||
|         versionCode 992 | ||||
|         versionName "0.25.0" | ||||
|  | ||||
|         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||
|  | ||||
| @@ -106,7 +106,7 @@ ext { | ||||
|     androidxWorkVersion = '2.7.1' | ||||
|  | ||||
|     icepickVersion = '3.2.0' | ||||
|     exoPlayerVersion = '2.18.2' | ||||
|     exoPlayerVersion = '2.18.1' | ||||
|     googleAutoServiceVersion = '1.0.1' | ||||
|     groupieVersion = '2.10.1' | ||||
|     markwonVersion = '4.6.2' | ||||
| @@ -183,7 +183,7 @@ sonar { | ||||
|  | ||||
| dependencies { | ||||
| /** Desugaring **/ | ||||
|     coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.0' | ||||
|     coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.2' | ||||
|  | ||||
| /** NewPipe libraries **/ | ||||
|     // You can use a local version by uncommenting a few lines in settings.gradle | ||||
| @@ -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:2211a24b6934a8a8cdf5547ea1b52daa4cb5de6c' | ||||
|     implementation 'com.github.TeamNewPipe:NewPipeExtractor:7e793c11aec46358ccbfd8bcfcf521105f4f093a' | ||||
|     implementation 'com.github.TeamNewPipe:NoNonsense-FilePicker:5.0.0' | ||||
|  | ||||
| /** Checkstyle **/ | ||||
|   | ||||
| @@ -11,6 +11,14 @@ | ||||
|     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> | ||||
|     <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> | ||||
|  | ||||
|     <!-- We need to be able to open links in the browser on API 30+ --> | ||||
|     <queries> | ||||
|         <intent> | ||||
|             <action android:name="android.intent.action.VIEW" /> | ||||
|             <data android:scheme="http|https|market" /> | ||||
|         </intent> | ||||
|     </queries> | ||||
|  | ||||
|     <uses-feature | ||||
|         android:name="android.hardware.touchscreen" | ||||
|         android:required="false" /> | ||||
| @@ -165,6 +173,7 @@ | ||||
|                 <data android:pathPrefix="/watch" /> | ||||
|                 <data android:pathPrefix="/attribution_link" /> | ||||
|                 <data android:pathPrefix="/shorts/" /> | ||||
|                 <data android:pathPrefix="/live/" /> | ||||
|                 <!-- channel prefix --> | ||||
|                 <data android:pathPrefix="/channel/" /> | ||||
|                 <data android:pathPrefix="/user/" /> | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import static android.text.TextUtils.isEmpty; | ||||
| import static org.schabi.newpipe.extractor.stream.StreamExtractor.NO_AGE_LIMIT; | ||||
| import static org.schabi.newpipe.extractor.utils.Utils.isBlank; | ||||
| import static org.schabi.newpipe.util.Localization.getAppLocale; | ||||
| import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD; | ||||
|  | ||||
| import android.os.Bundle; | ||||
| import android.view.LayoutInflater; | ||||
| @@ -112,7 +113,10 @@ public class DescriptionFragment extends BaseFragment { | ||||
|  | ||||
|     private void disableDescriptionSelection() { | ||||
|         // show description content again, otherwise some links are not clickable | ||||
|         loadDescriptionContent(); | ||||
|         TextLinkifier.fromDescription(binding.detailDescriptionView, | ||||
|                 streamInfo.getDescription(), HtmlCompat.FROM_HTML_MODE_LEGACY, | ||||
|                 streamInfo.getService(), streamInfo.getUrl(), | ||||
|                 descriptionDisposables, SET_LINK_MOVEMENT_METHOD); | ||||
|  | ||||
|         binding.detailDescriptionNoteView.setVisibility(View.GONE); | ||||
|         binding.detailDescriptionView.setTextIsSelectable(false); | ||||
| @@ -123,27 +127,6 @@ public class DescriptionFragment extends BaseFragment { | ||||
|         binding.detailSelectDescriptionButton.setImageResource(R.drawable.ic_select_all); | ||||
|     } | ||||
|  | ||||
|     private void loadDescriptionContent() { | ||||
|         final Description description = streamInfo.getDescription(); | ||||
|         switch (description.getType()) { | ||||
|             case Description.HTML: | ||||
|                 TextLinkifier.createLinksFromHtmlBlock(binding.detailDescriptionView, | ||||
|                         description.getContent(), HtmlCompat.FROM_HTML_MODE_LEGACY, streamInfo, | ||||
|                         descriptionDisposables); | ||||
|                 break; | ||||
|             case Description.MARKDOWN: | ||||
|                 TextLinkifier.createLinksFromMarkdownText(binding.detailDescriptionView, | ||||
|                         description.getContent(), streamInfo, descriptionDisposables); | ||||
|                 break; | ||||
|             case Description.PLAIN_TEXT: | ||||
|             default: | ||||
|                 TextLinkifier.createLinksFromPlainText(binding.detailDescriptionView, | ||||
|                         description.getContent(), streamInfo, descriptionDisposables); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
|     private void setupMetadata(final LayoutInflater inflater, | ||||
|                                final LinearLayout layout) { | ||||
|         addMetadataItem(inflater, layout, false, R.string.metadata_category, | ||||
| @@ -193,8 +176,8 @@ public class DescriptionFragment extends BaseFragment { | ||||
|         }); | ||||
|  | ||||
|         if (linkifyContent) { | ||||
|             TextLinkifier.createLinksFromPlainText(itemBinding.metadataContentView, content, | ||||
|                     null, descriptionDisposables); | ||||
|             TextLinkifier.fromPlainText(itemBinding.metadataContentView, content, null, null, | ||||
|                     descriptionDisposables, SET_LINK_MOVEMENT_METHOD); | ||||
|         } else { | ||||
|             itemBinding.metadataContentView.setText(content); | ||||
|         } | ||||
|   | ||||
| @@ -865,7 +865,8 @@ public final class VideoDetailFragment | ||||
|                             if (playQueue == null) { | ||||
|                                 playQueue = new SinglePlayQueue(result); | ||||
|                             } | ||||
|                             if (stack.isEmpty() || !stack.peek().getPlayQueue().equals(playQueue)) { | ||||
|                             if (stack.isEmpty() || !stack.peek().getPlayQueue() | ||||
|                                     .equalStreams(playQueue)) { | ||||
|                                 stack.push(new StackItem(serviceId, url, title, playQueue)); | ||||
|                             } | ||||
|                         } | ||||
| @@ -1779,7 +1780,7 @@ public final class VideoDetailFragment | ||||
|         // deleted/added items inside Channel/Playlist queue and makes possible to have | ||||
|         // a history of played items | ||||
|         @Nullable final StackItem stackPeek = stack.peek(); | ||||
|         if (stackPeek != null && !stackPeek.getPlayQueue().equals(queue)) { | ||||
|         if (stackPeek != null && !stackPeek.getPlayQueue().equalStreams(queue)) { | ||||
|             @Nullable final PlayQueueItem playQueueItem = queue.getItem(); | ||||
|             if (playQueueItem != null) { | ||||
|                 stack.push(new StackItem(playQueueItem.getServiceId(), playQueueItem.getUrl(), | ||||
| @@ -1845,7 +1846,7 @@ public final class VideoDetailFragment | ||||
|         // They are not equal when user watches something in popup while browsing in fragment and | ||||
|         // then changes screen orientation. In that case the fragment will set itself as | ||||
|         // a service listener and will receive initial call to onMetadataUpdate() | ||||
|         if (!queue.equals(playQueue)) { | ||||
|         if (!queue.equalStreams(playQueue)) { | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @@ -2102,7 +2103,7 @@ public final class VideoDetailFragment | ||||
|         final Iterator<StackItem> iterator = stack.descendingIterator(); | ||||
|         while (iterator.hasNext()) { | ||||
|             final StackItem next = iterator.next(); | ||||
|             if (next.getPlayQueue().equals(queue)) { | ||||
|             if (next.getPlayQueue().equalStreams(queue)) { | ||||
|                 item = next; | ||||
|                 break; | ||||
|             } | ||||
| @@ -2117,7 +2118,7 @@ public final class VideoDetailFragment | ||||
|         if (isClearingQueueConfirmationRequired(activity) | ||||
|                 && playerIsNotStopped() | ||||
|                 && activeQueue != null | ||||
|                 && !activeQueue.equals(playQueue)) { | ||||
|                 && !activeQueue.equalStreams(playQueue)) { | ||||
|             showClearingQueueConfirmation(onAllow); | ||||
|         } else { | ||||
|             onAllow.run(); | ||||
|   | ||||
| @@ -1,9 +1,10 @@ | ||||
| package org.schabi.newpipe.info_list.holder; | ||||
|  | ||||
| import android.graphics.Paint; | ||||
| import android.text.Layout; | ||||
| import android.text.TextUtils; | ||||
| import android.text.method.LinkMovementMethod; | ||||
| import android.text.style.URLSpan; | ||||
| import android.text.util.Linkify; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| @@ -11,27 +12,36 @@ import android.widget.ImageView; | ||||
| import android.widget.RelativeLayout; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.appcompat.app.AppCompatActivity; | ||||
| import androidx.core.text.util.LinkifyCompat; | ||||
| import androidx.core.text.HtmlCompat; | ||||
|  | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.error.ErrorUtil; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.comments.CommentsInfoItem; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.stream.Description; | ||||
| import org.schabi.newpipe.info_list.InfoItemBuilder; | ||||
| import org.schabi.newpipe.local.history.HistoryRecordManager; | ||||
| import org.schabi.newpipe.util.text.CommentTextOnTouchListener; | ||||
| import org.schabi.newpipe.util.DeviceUtils; | ||||
| import org.schabi.newpipe.util.Localization; | ||||
| import org.schabi.newpipe.util.NavigationHelper; | ||||
| import org.schabi.newpipe.util.PicassoHelper; | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
| import org.schabi.newpipe.util.text.TimestampExtractor; | ||||
| import org.schabi.newpipe.util.text.CommentTextOnTouchListener; | ||||
| import org.schabi.newpipe.util.text.TextLinkifier; | ||||
|  | ||||
| import java.util.Objects; | ||||
| import java.util.function.Consumer; | ||||
|  | ||||
| import io.reactivex.rxjava3.disposables.CompositeDisposable; | ||||
|  | ||||
| public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|     private static final String TAG = "CommentsMiniIIHolder"; | ||||
|     private static final String ELLIPSIS = "…"; | ||||
|  | ||||
|     private static final int COMMENT_DEFAULT_LINES = 2; | ||||
|     private static final int COMMENT_EXPANDED_LINES = 1000; | ||||
| @@ -39,13 +49,18 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|     private final int commentHorizontalPadding; | ||||
|     private final int commentVerticalPadding; | ||||
|  | ||||
|     private final Paint paintAtContentSize; | ||||
|     private final float ellipsisWidthPx; | ||||
|  | ||||
|     private final RelativeLayout itemRoot; | ||||
|     private final ImageView itemThumbnailView; | ||||
|     private final TextView itemContentView; | ||||
|     private final TextView itemLikesCountView; | ||||
|     private final TextView itemPublishedTime; | ||||
|  | ||||
|     private String commentText; | ||||
|     private final CompositeDisposable disposables = new CompositeDisposable(); | ||||
|     private Description commentText; | ||||
|     private StreamingService streamService; | ||||
|     private String streamUrl; | ||||
|  | ||||
|     CommentsMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, final int layoutId, | ||||
| @@ -62,6 +77,10 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|                 .getResources().getDimension(R.dimen.comments_horizontal_padding); | ||||
|         commentVerticalPadding = (int) infoItemBuilder.getContext() | ||||
|                 .getResources().getDimension(R.dimen.comments_vertical_padding); | ||||
|  | ||||
|         paintAtContentSize = new Paint(); | ||||
|         paintAtContentSize.setTextSize(itemContentView.getTextSize()); | ||||
|         ellipsisWidthPx = paintAtContentSize.measureText(ELLIPSIS); | ||||
|     } | ||||
|  | ||||
|     public CommentsMiniInfoItemHolder(final InfoItemBuilder infoItemBuilder, | ||||
| @@ -91,18 +110,20 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|  | ||||
|         itemThumbnailView.setOnClickListener(view -> openCommentAuthor(item)); | ||||
|  | ||||
|         streamUrl = item.getUrl(); | ||||
|  | ||||
|         itemContentView.setLines(COMMENT_DEFAULT_LINES); | ||||
|         commentText = item.getCommentText(); | ||||
|         itemContentView.setText(commentText, TextView.BufferType.SPANNABLE); | ||||
|         itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE); | ||||
|  | ||||
|         if (itemContentView.getLineCount() == 0) { | ||||
|             itemContentView.post(this::ellipsize); | ||||
|         } else { | ||||
|             ellipsize(); | ||||
|         try { | ||||
|             streamService = NewPipe.getService(item.getServiceId()); | ||||
|         } catch (final ExtractionException e) { | ||||
|             // should never happen | ||||
|             ErrorUtil.showUiErrorSnackbar(itemBuilder.getContext(), "Getting StreamingService", e); | ||||
|             Log.w(TAG, "Cannot obtain service from comment service id, defaulting to YouTube", e); | ||||
|             streamService = ServiceList.YouTube; | ||||
|         } | ||||
|         streamUrl = item.getUrl(); | ||||
|         commentText = item.getCommentText(); | ||||
|         ellipsize(); | ||||
|  | ||||
|         //noinspection ClickableViewAccessibility | ||||
|         itemContentView.setOnTouchListener(CommentTextOnTouchListener.INSTANCE); | ||||
|  | ||||
|         if (item.getLikeCount() >= 0) { | ||||
|             itemLikesCountView.setText( | ||||
| @@ -132,7 +153,8 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|             if (DeviceUtils.isTv(itemBuilder.getContext())) { | ||||
|                 openCommentAuthor(item); | ||||
|             } else { | ||||
|                 ShareUtils.copyToClipboard(itemBuilder.getContext(), commentText); | ||||
|                 ShareUtils.copyToClipboard(itemBuilder.getContext(), | ||||
|                         itemContentView.getText().toString()); | ||||
|             } | ||||
|             return true; | ||||
|         }); | ||||
| @@ -172,7 +194,7 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|         return urls != null && urls.length != 0; | ||||
|     } | ||||
|  | ||||
|     private void determineLinkFocus() { | ||||
|     private void determineMovementMethod() { | ||||
|         if (shouldFocusLinks()) { | ||||
|             allowLinkFocus(); | ||||
|         } else { | ||||
| @@ -181,63 +203,73 @@ public class CommentsMiniInfoItemHolder extends InfoItemHolder { | ||||
|     } | ||||
|  | ||||
|     private void ellipsize() { | ||||
|         boolean hasEllipsis = false; | ||||
|         itemContentView.setMaxLines(COMMENT_EXPANDED_LINES); | ||||
|         linkifyCommentContentView(v -> { | ||||
|             boolean hasEllipsis = false; | ||||
|  | ||||
|         if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { | ||||
|             final int endOfLastLine = itemContentView | ||||
|                     .getLayout() | ||||
|                     .getLineEnd(COMMENT_DEFAULT_LINES - 1); | ||||
|             int end = itemContentView.getText().toString().lastIndexOf(' ', endOfLastLine - 2); | ||||
|             if (end == -1) { | ||||
|                 end = Math.max(endOfLastLine - 2, 0); | ||||
|             if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { | ||||
|                 // Note that converting to String removes spans (i.e. links), but that's something | ||||
|                 // we actually want since when the text is ellipsized we want all clicks on the | ||||
|                 // comment to expand the comment, not to open links. | ||||
|                 final String text = itemContentView.getText().toString(); | ||||
|  | ||||
|                 final Layout layout = itemContentView.getLayout(); | ||||
|                 final float lineWidth = layout.getLineWidth(COMMENT_DEFAULT_LINES - 1); | ||||
|                 final float layoutWidth = layout.getWidth(); | ||||
|                 final int lineStart = layout.getLineStart(COMMENT_DEFAULT_LINES - 1); | ||||
|                 final int lineEnd = layout.getLineEnd(COMMENT_DEFAULT_LINES - 1); | ||||
|  | ||||
|                 // remove characters up until there is enough space for the ellipsis | ||||
|                 // (also summing 2 more pixels, just to be sure to avoid float rounding errors) | ||||
|                 int end = lineEnd; | ||||
|                 float removedCharactersWidth = 0.0f; | ||||
|                 while (lineWidth - removedCharactersWidth + ellipsisWidthPx + 2.0f > layoutWidth | ||||
|                         && end >= lineStart) { | ||||
|                     end -= 1; | ||||
|                     // recalculate each time to account for ligatures or other similar things | ||||
|                     removedCharactersWidth = paintAtContentSize.measureText( | ||||
|                             text.substring(end, lineEnd)); | ||||
|                 } | ||||
|  | ||||
|                 // remove trailing spaces and newlines | ||||
|                 while (end > 0 && Character.isWhitespace(text.charAt(end - 1))) { | ||||
|                     end -= 1; | ||||
|                 } | ||||
|  | ||||
|                 final String newVal = text.substring(0, end) + ELLIPSIS; | ||||
|                 itemContentView.setText(newVal); | ||||
|                 hasEllipsis = true; | ||||
|             } | ||||
|             final String newVal = itemContentView.getText().subSequence(0, end) + " …"; | ||||
|             itemContentView.setText(newVal); | ||||
|             hasEllipsis = true; | ||||
|         } | ||||
|  | ||||
|         linkify(); | ||||
|  | ||||
|         if (hasEllipsis) { | ||||
|             denyLinkFocus(); | ||||
|         } else { | ||||
|             determineLinkFocus(); | ||||
|         } | ||||
|             itemContentView.setMaxLines(COMMENT_DEFAULT_LINES); | ||||
|             if (hasEllipsis) { | ||||
|                 denyLinkFocus(); | ||||
|             } else { | ||||
|                 determineMovementMethod(); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     private void toggleEllipsize() { | ||||
|         if (itemContentView.getText().toString().equals(commentText)) { | ||||
|             if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { | ||||
|                 ellipsize(); | ||||
|             } | ||||
|         } else { | ||||
|         final CharSequence text = itemContentView.getText(); | ||||
|         if (text.charAt(text.length() - 1) == ELLIPSIS.charAt(0)) { | ||||
|             expand(); | ||||
|         } else if (itemContentView.getLineCount() > COMMENT_DEFAULT_LINES) { | ||||
|             ellipsize(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void expand() { | ||||
|         itemContentView.setMaxLines(COMMENT_EXPANDED_LINES); | ||||
|         itemContentView.setText(commentText); | ||||
|         linkify(); | ||||
|         determineLinkFocus(); | ||||
|         linkifyCommentContentView(v -> determineMovementMethod()); | ||||
|     } | ||||
|  | ||||
|     private void linkify() { | ||||
|         LinkifyCompat.addLinks(itemContentView, Linkify.WEB_URLS); | ||||
|         LinkifyCompat.addLinks(itemContentView, TimestampExtractor.TIMESTAMPS_PATTERN, null, null, | ||||
|                 (match, url) -> { | ||||
|                     try { | ||||
|                         final var timestampMatch = TimestampExtractor | ||||
|                                 .getTimestampFromMatcher(match, commentText); | ||||
|                         if (timestampMatch == null) { | ||||
|                             return url; | ||||
|                         } | ||||
|                         return streamUrl + url.replace(Objects.requireNonNull(match.group(0)), | ||||
|                                 "#timestamp=" + timestampMatch.seconds()); | ||||
|                     } catch (final Exception ex) { | ||||
|                         Log.e(TAG, "Unable to process url='" + url + "' as timestampLink", ex); | ||||
|                         return url; | ||||
|                     } | ||||
|                 }); | ||||
|     private void linkifyCommentContentView(@Nullable final Consumer<TextView> onCompletion) { | ||||
|         disposables.clear(); | ||||
|         if (commentText != null) { | ||||
|             TextLinkifier.fromDescription(itemContentView, commentText, | ||||
|                     HtmlCompat.FROM_HTML_MODE_LEGACY, streamService, streamUrl, disposables, | ||||
|                     onCompletion); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -348,7 +348,7 @@ public final class Player implements PlaybackListener, Listener { | ||||
|         final boolean playbackSkipSilence = getPrefs().getBoolean(getContext().getString( | ||||
|                 R.string.playback_skip_silence_key), getPlaybackSkipSilence()); | ||||
|  | ||||
|         final boolean samePlayQueue = playQueue != null && playQueue.equals(newQueue); | ||||
|         final boolean samePlayQueue = playQueue != null && playQueue.equalStreamsAndIndex(newQueue); | ||||
|         final int repeatMode = intent.getIntExtra(REPEAT_MODE, getRepeatMode()); | ||||
|         final boolean playWhenReady = intent.getBooleanExtra(PLAY_WHEN_READY, true); | ||||
|         final boolean isMuted = intent.getBooleanExtra(IS_MUTED, isMuted()); | ||||
|   | ||||
| @@ -1,21 +1,27 @@ | ||||
| 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.source.WrappingMediaSource; | ||||
| import com.google.android.exoplayer2.upstream.Allocator; | ||||
| import com.google.android.exoplayer2.upstream.TransferListener; | ||||
|  | ||||
| import org.schabi.newpipe.player.mediaitem.MediaItemTag; | ||||
| import org.schabi.newpipe.player.playqueue.PlayQueueItem; | ||||
|  | ||||
| public class LoadedMediaSource extends WrappingMediaSource implements ManagedMediaSource { | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
|  | ||||
| public class LoadedMediaSource extends CompositeMediaSource<Integer> implements ManagedMediaSource { | ||||
|     private final MediaSource source; | ||||
|     private final PlayQueueItem stream; | ||||
|     private final MediaItem mediaItem; | ||||
|     private final long expireTimestamp; | ||||
|  | ||||
|     /** | ||||
|      * Uses a {@link WrappingMediaSource} to wrap one child {@link MediaSource} | ||||
|      * Uses a {@link CompositeMediaSource} to wrap one or more 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}. | ||||
| @@ -30,7 +36,7 @@ public class LoadedMediaSource extends WrappingMediaSource implements ManagedMed | ||||
|                              @NonNull final MediaItemTag tag, | ||||
|                              @NonNull final PlayQueueItem stream, | ||||
|                              final long expireTimestamp) { | ||||
|         super(source); | ||||
|         this.source = source; | ||||
|         this.stream = stream; | ||||
|         this.expireTimestamp = expireTimestamp; | ||||
|  | ||||
| @@ -45,6 +51,51 @@ public class LoadedMediaSource extends WrappingMediaSource implements ManagedMed | ||||
|         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. | ||||
|      * <br><br> | ||||
|      * 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() { | ||||
|   | ||||
| @@ -518,12 +518,10 @@ public abstract class PlayQueue implements Serializable { | ||||
|      * This method also gives a chance to track history of items in a queue in | ||||
|      * VideoDetailFragment without duplicating items from two identical queues | ||||
|      */ | ||||
|     @Override | ||||
|     public boolean equals(@Nullable final Object obj) { | ||||
|         if (!(obj instanceof PlayQueue)) { | ||||
|     public boolean equalStreams(@Nullable final PlayQueue other) { | ||||
|         if (other == null) { | ||||
|             return false; | ||||
|         } | ||||
|         final PlayQueue other = (PlayQueue) obj; | ||||
|         if (size() != other.size()) { | ||||
|             return false; | ||||
|         } | ||||
| @@ -539,9 +537,11 @@ public abstract class PlayQueue implements Serializable { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int hashCode() { | ||||
|         return streams.hashCode(); | ||||
|     public boolean equalStreamsAndIndex(@Nullable final PlayQueue other) { | ||||
|         if (equalStreams(other)) { | ||||
|             return other.getIndex() == getIndex(); | ||||
|         } | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     public boolean isDisposed() { | ||||
|   | ||||
| @@ -20,6 +20,7 @@ | ||||
| package org.schabi.newpipe.util; | ||||
|  | ||||
| import static org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty; | ||||
| import static org.schabi.newpipe.util.text.TextLinkifier.SET_LINK_MOVEMENT_METHOD; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.util.Log; | ||||
| @@ -319,8 +320,9 @@ public final class ExtractorHelper { | ||||
|             } | ||||
|  | ||||
|             metaInfoSeparator.setVisibility(View.VISIBLE); | ||||
|             TextLinkifier.createLinksFromHtmlBlock(metaInfoTextView, stringBuilder.toString(), | ||||
|                     HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING, null, disposables); | ||||
|             TextLinkifier.fromHtml(metaInfoTextView, stringBuilder.toString(), | ||||
|                     HtmlCompat.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING, null, null, disposables, | ||||
|                     SET_LINK_MOVEMENT_METHOD); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -90,19 +90,16 @@ public final class ShareUtils { | ||||
|             // No browser set as default (doesn't work on some devices) | ||||
|             openAppChooser(context, intent, true); | ||||
|         } else { | ||||
|             if (defaultPackageName.isEmpty()) { | ||||
|                 // No app installed to open a web url | ||||
|                 Toast.makeText(context, R.string.no_app_to_open_intent, Toast.LENGTH_LONG).show(); | ||||
|                 return false; | ||||
|             } else { | ||||
|                 try { | ||||
|             try { | ||||
|                 // will be empty on Android 12+ | ||||
|                 if (!defaultPackageName.isEmpty()) { | ||||
|                     intent.setPackage(defaultPackageName); | ||||
|                     context.startActivity(intent); | ||||
|                 } catch (final ActivityNotFoundException e) { | ||||
|                     // Not a browser but an app chooser because of OEMs changes | ||||
|                     intent.setPackage(null); | ||||
|                     openAppChooser(context, intent, true); | ||||
|                 } | ||||
|                 context.startActivity(intent); | ||||
|             } catch (final ActivityNotFoundException e) { | ||||
|                 // Not a browser but an app chooser because of OEMs changes | ||||
|                 intent.setPackage(null); | ||||
|                 openAppChooser(context, intent, true); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -2,51 +2,37 @@ package org.schabi.newpipe.util.text; | ||||
|  | ||||
| import static org.schabi.newpipe.util.text.TouchUtils.getOffsetForHorizontalLine; | ||||
|  | ||||
| import android.text.Selection; | ||||
| import android.text.Spannable; | ||||
| import android.annotation.SuppressLint; | ||||
| import android.text.Spanned; | ||||
| import android.text.style.ClickableSpan; | ||||
| import android.text.style.URLSpan; | ||||
| import android.view.MotionEvent; | ||||
| import android.view.View; | ||||
| import android.widget.TextView; | ||||
|  | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
|  | ||||
| import io.reactivex.rxjava3.disposables.CompositeDisposable; | ||||
|  | ||||
| public class CommentTextOnTouchListener implements View.OnTouchListener { | ||||
|     public static final CommentTextOnTouchListener INSTANCE = new CommentTextOnTouchListener(); | ||||
|  | ||||
|     @SuppressLint("ClickableViewAccessibility") | ||||
|     @Override | ||||
|     public boolean onTouch(final View v, final MotionEvent event) { | ||||
|         if (!(v instanceof TextView)) { | ||||
|             return false; | ||||
|         } | ||||
|         final TextView widget = (TextView) v; | ||||
|         final Object text = widget.getText(); | ||||
|         final CharSequence text = widget.getText(); | ||||
|         if (text instanceof Spanned) { | ||||
|             final Spannable buffer = (Spannable) text; | ||||
|  | ||||
|             final Spanned buffer = (Spanned) text; | ||||
|             final int action = event.getAction(); | ||||
|  | ||||
|             if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { | ||||
|                 final int offset = getOffsetForHorizontalLine(widget, event); | ||||
|                 final ClickableSpan[] link = buffer.getSpans(offset, offset, ClickableSpan.class); | ||||
|                 final ClickableSpan[] links = buffer.getSpans(offset, offset, ClickableSpan.class); | ||||
|  | ||||
|                 if (link.length != 0) { | ||||
|                 if (links.length != 0) { | ||||
|                     if (action == MotionEvent.ACTION_UP) { | ||||
|                         if (link[0] instanceof URLSpan) { | ||||
|                             final String url = ((URLSpan) link[0]).getURL(); | ||||
|                             if (!InternalUrlsHandler.handleUrlCommentsTimestamp( | ||||
|                                     new CompositeDisposable(), v.getContext(), url)) { | ||||
|                                 ShareUtils.openUrlInBrowser(v.getContext(), url, false); | ||||
|                             } | ||||
|                         } | ||||
|                     } else if (action == MotionEvent.ACTION_DOWN) { | ||||
|                         Selection.setSelection(buffer, buffer.getSpanStart(link[0]), | ||||
|                                 buffer.getSpanEnd(link[0])); | ||||
|                         links[0].onClick(widget); | ||||
|                     } | ||||
|                     // we handle events that intersect links, so return true | ||||
|                     return true; | ||||
|                 } | ||||
|             } | ||||
|   | ||||
| @@ -5,7 +5,6 @@ import android.view.View; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.Info; | ||||
| import org.schabi.newpipe.util.NavigationHelper; | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
|  | ||||
| @@ -15,20 +14,19 @@ final class HashtagLongPressClickableSpan extends LongPressClickableSpan { | ||||
|     private final Context context; | ||||
|     @NonNull | ||||
|     private final String parsedHashtag; | ||||
|     @NonNull | ||||
|     private final Info relatedInfo; | ||||
|     private final int relatedInfoServiceId; | ||||
|  | ||||
|     HashtagLongPressClickableSpan(@NonNull final Context context, | ||||
|                                   @NonNull final String parsedHashtag, | ||||
|                                   @NonNull final Info relatedInfo) { | ||||
|                                   final int relatedInfoServiceId) { | ||||
|         this.context = context; | ||||
|         this.parsedHashtag = parsedHashtag; | ||||
|         this.relatedInfo = relatedInfo; | ||||
|         this.relatedInfoServiceId = relatedInfoServiceId; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onClick(@NonNull final View view) { | ||||
|         NavigationHelper.openSearch(context, relatedInfo.getServiceId(), parsedHashtag); | ||||
|         NavigationHelper.openSearch(context, relatedInfoServiceId, parsedHashtag); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|   | ||||
| @@ -12,11 +12,12 @@ import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import androidx.core.text.HtmlCompat; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.Info; | ||||
| import org.schabi.newpipe.extractor.stream.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.stream.Description; | ||||
| import org.schabi.newpipe.util.NavigationHelper; | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
|  | ||||
| import java.util.function.Consumer; | ||||
| import java.util.regex.Matcher; | ||||
| import java.util.regex.Pattern; | ||||
|  | ||||
| @@ -33,88 +34,155 @@ public final class TextLinkifier { | ||||
|     // Looks for hashtags with characters from any language (\p{L}), numbers, or underscores | ||||
|     private static final Pattern HASHTAGS_PATTERN = Pattern.compile("(#[\\p{L}0-9_]+)"); | ||||
|  | ||||
|     public static final Consumer<TextView> SET_LINK_MOVEMENT_METHOD = | ||||
|             v -> v.setMovementMethod(LongPressLinkMovementMethod.getInstance()); | ||||
|  | ||||
|     private TextLinkifier() { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create links for contents with an {@link Description} in the various possible formats. | ||||
|      * <p> | ||||
|      * This will call one of these three functions based on the format: {@link #fromHtml}, | ||||
|      * {@link #fromMarkdown} or {@link #fromPlainText}. | ||||
|      * | ||||
|      * @param textView           the TextView to set the htmlBlock linked | ||||
|      * @param description        the htmlBlock to be linked | ||||
|      * @param htmlCompatFlag     the int flag to be set if {@link HtmlCompat#fromHtml(String, int)} | ||||
|      *                           will be called (not used for formats different than HTML) | ||||
|      * @param relatedInfoService if given, handle hashtags to search for the term in the correct | ||||
|      *                           service | ||||
|      * @param relatedStreamUrl   if given, used alongside {@code relatedInfoService} to handle | ||||
|      *                           timestamps to open the stream in the popup player at the specific | ||||
|      *                           time | ||||
|      * @param disposables        disposables created by the method are added here and their | ||||
|      *                           lifecycle should be handled by the calling class | ||||
|      * @param onCompletion       will be run when setting text to the textView completes; use {@link | ||||
|      *                           #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable | ||||
|      */ | ||||
|     public static void fromDescription(@NonNull final TextView textView, | ||||
|                                        @NonNull final Description description, | ||||
|                                        final int htmlCompatFlag, | ||||
|                                        @Nullable final StreamingService relatedInfoService, | ||||
|                                        @Nullable final String relatedStreamUrl, | ||||
|                                        @NonNull final CompositeDisposable disposables, | ||||
|                                        @Nullable final Consumer<TextView> onCompletion) { | ||||
|         switch (description.getType()) { | ||||
|             case Description.HTML: | ||||
|                 TextLinkifier.fromHtml(textView, description.getContent(), htmlCompatFlag, | ||||
|                         relatedInfoService, relatedStreamUrl, disposables, onCompletion); | ||||
|                 break; | ||||
|             case Description.MARKDOWN: | ||||
|                 TextLinkifier.fromMarkdown(textView, description.getContent(), | ||||
|                         relatedInfoService, relatedStreamUrl, disposables, onCompletion); | ||||
|                 break; | ||||
|             case Description.PLAIN_TEXT: default: | ||||
|                 TextLinkifier.fromPlainText(textView, description.getContent(), | ||||
|                         relatedInfoService, relatedStreamUrl, disposables, onCompletion); | ||||
|                 break; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create links for contents with an HTML description. | ||||
|      * | ||||
|      * <p> | ||||
|      * This method will call {@link #changeIntentsOfDescriptionLinks(TextView, CharSequence, Info, | ||||
|      * CompositeDisposable)} after having linked the URLs with | ||||
|      * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, | ||||
|      * String, CompositeDisposable, Consumer)} after having linked the URLs with | ||||
|      * {@link HtmlCompat#fromHtml(String, int)}. | ||||
|      * </p> | ||||
|      * | ||||
|      * @param textView       the {@link TextView} to set the the HTML string block linked | ||||
|      * @param htmlBlock      the HTML string block to be linked | ||||
|      * @param htmlCompatFlag the int flag to be set when {@link HtmlCompat#fromHtml(String, int)} | ||||
|      *                       will be called | ||||
|      * @param relatedInfo    if given, handle timestamps to open the stream in the popup player at | ||||
|      *                       the specific time, and hashtags to search for the term in the correct | ||||
|      *                       service | ||||
|      * @param disposables    disposables created by the method are added here and their lifecycle | ||||
|      *                       should be handled by the calling class | ||||
|      * @param textView           the {@link TextView} to set the the HTML string block linked | ||||
|      * @param htmlBlock          the HTML string block to be linked | ||||
|      * @param htmlCompatFlag     the int flag to be set when {@link HtmlCompat#fromHtml(String, | ||||
|      *                           int)} will be called | ||||
|      * @param relatedInfoService if given, handle hashtags to search for the term in the correct | ||||
|      *                           service | ||||
|      * @param relatedStreamUrl   if given, used alongside {@code relatedInfoService} to handle | ||||
|      *                           timestamps to open the stream in the popup player at the specific | ||||
|      *                           time | ||||
|      * @param disposables        disposables created by the method are added here and their | ||||
|      *                           lifecycle should be handled by the calling class | ||||
|      * @param onCompletion       will be run when setting text to the textView completes; use {@link | ||||
|      *                           #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable | ||||
|      */ | ||||
|     public static void createLinksFromHtmlBlock(@NonNull final TextView textView, | ||||
|                                                 @NonNull final String htmlBlock, | ||||
|                                                 final int htmlCompatFlag, | ||||
|                                                 @Nullable final Info relatedInfo, | ||||
|                                                 @NonNull final CompositeDisposable disposables) { | ||||
|         changeIntentsOfDescriptionLinks(textView, HtmlCompat.fromHtml(htmlBlock, htmlCompatFlag), | ||||
|                 relatedInfo, disposables); | ||||
|     public static void fromHtml(@NonNull final TextView textView, | ||||
|                                 @NonNull final String htmlBlock, | ||||
|                                 final int htmlCompatFlag, | ||||
|                                 @Nullable final StreamingService relatedInfoService, | ||||
|                                 @Nullable final String relatedStreamUrl, | ||||
|                                 @NonNull final CompositeDisposable disposables, | ||||
|                                 @Nullable final Consumer<TextView> onCompletion) { | ||||
|         changeLinkIntents( | ||||
|                 textView, HtmlCompat.fromHtml(htmlBlock, htmlCompatFlag), relatedInfoService, | ||||
|                 relatedStreamUrl, disposables, onCompletion); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create links for contents with a plain text description. | ||||
|      * | ||||
|      * <p> | ||||
|      * This method will call {@link #changeIntentsOfDescriptionLinks(TextView, CharSequence, Info, | ||||
|      * CompositeDisposable)} after having linked the URLs with {@link TextView#setAutoLinkMask(int)} | ||||
|      * and {@link TextView#setText(CharSequence, TextView.BufferType)}. | ||||
|      * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, | ||||
|      * String, CompositeDisposable, Consumer)} after having linked the URLs with | ||||
|      * {@link TextView#setAutoLinkMask(int)} and | ||||
|      * {@link TextView#setText(CharSequence, TextView.BufferType)}. | ||||
|      * </p> | ||||
|      * | ||||
|      * @param textView       the {@link TextView} to set the plain text block linked | ||||
|      * @param plainTextBlock the block of plain text to be linked | ||||
|      * @param relatedInfo    if given, handle timestamps to open the stream in the popup player, at | ||||
|      *                       the specified time, and hashtags to search for the term in the correct | ||||
|      *                       service | ||||
|      * @param disposables    disposables created by the method are added here and their lifecycle | ||||
|      *                       should be handled by the calling class | ||||
|      * @param textView           the {@link TextView} to set the plain text block linked | ||||
|      * @param plainTextBlock     the block of plain text to be linked | ||||
|      * @param relatedInfoService if given, handle hashtags to search for the term in the correct | ||||
|      *                           service | ||||
|      * @param relatedStreamUrl   if given, used alongside {@code relatedInfoService} to handle | ||||
|      *                           timestamps to open the stream in the popup player at the specific | ||||
|      *                           time | ||||
|      * @param disposables        disposables created by the method are added here and their | ||||
|      *                           lifecycle should be handled by the calling class | ||||
|      * @param onCompletion       will be run when setting text to the textView completes; use {@link | ||||
|      *                           #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable | ||||
|      */ | ||||
|     public static void createLinksFromPlainText(@NonNull final TextView textView, | ||||
|                                                 @NonNull final String plainTextBlock, | ||||
|                                                 @Nullable final Info relatedInfo, | ||||
|                                                 @NonNull final CompositeDisposable disposables) { | ||||
|     public static void fromPlainText(@NonNull final TextView textView, | ||||
|                                      @NonNull final String plainTextBlock, | ||||
|                                      @Nullable final StreamingService relatedInfoService, | ||||
|                                      @Nullable final String relatedStreamUrl, | ||||
|                                      @NonNull final CompositeDisposable disposables, | ||||
|                                      @Nullable final Consumer<TextView> onCompletion) { | ||||
|         textView.setAutoLinkMask(Linkify.WEB_URLS); | ||||
|         textView.setText(plainTextBlock, TextView.BufferType.SPANNABLE); | ||||
|         changeIntentsOfDescriptionLinks(textView, textView.getText(), relatedInfo, disposables); | ||||
|         changeLinkIntents(textView, textView.getText(), relatedInfoService, | ||||
|                 relatedStreamUrl, disposables, onCompletion); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Create links for contents with a markdown description. | ||||
|      * | ||||
|      * <p> | ||||
|      * This method will call {@link #changeIntentsOfDescriptionLinks(TextView, CharSequence, Info, | ||||
|      * CompositeDisposable)} after creating a {@link Markwon} object and using | ||||
|      * This method will call {@link #changeLinkIntents(TextView, CharSequence, StreamingService, | ||||
|      * String, CompositeDisposable, Consumer)} after creating a {@link Markwon} object and using | ||||
|      * {@link Markwon#setMarkdown(TextView, String)}. | ||||
|      * </p> | ||||
|      * | ||||
|      * @param textView      the {@link TextView} to set the plain text block linked | ||||
|      * @param markdownBlock the block of markdown text to be linked | ||||
|      * @param relatedInfo   if given, handle timestamps to open the stream in the popup player at | ||||
|      *                      the specific time, and hashtags to search for the term in the correct | ||||
|      *                      service | ||||
|      * @param disposables   disposables created by the method are added here and their lifecycle | ||||
|      *                      should be handled by the calling class | ||||
|      * @param textView           the {@link TextView} to set the plain text block linked | ||||
|      * @param markdownBlock      the block of markdown text to be linked | ||||
|      * @param relatedInfoService if given, handle hashtags to search for the term in the correct | ||||
|      *                           service | ||||
|      * @param relatedStreamUrl   if given, used alongside {@code relatedInfoService} to handle | ||||
|      *                           timestamps to open the stream in the popup player at the specific | ||||
|      *                           time | ||||
|      * @param disposables        disposables created by the method are added here and their | ||||
|      *                           lifecycle should be handled by the calling class | ||||
|      * @param onCompletion       will be run when setting text to the textView completes; use {@link | ||||
|      *                           #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable | ||||
|      */ | ||||
|     public static void createLinksFromMarkdownText(@NonNull final TextView textView, | ||||
|                                                    final String markdownBlock, | ||||
|                                                    @Nullable final Info relatedInfo, | ||||
|                                                    final CompositeDisposable disposables) { | ||||
|     public static void fromMarkdown(@NonNull final TextView textView, | ||||
|                                     @NonNull final String markdownBlock, | ||||
|                                     @Nullable final StreamingService relatedInfoService, | ||||
|                                     @Nullable final String relatedStreamUrl, | ||||
|                                     @NonNull final CompositeDisposable disposables, | ||||
|                                     @Nullable final Consumer<TextView> onCompletion) { | ||||
|         final Markwon markwon = Markwon.builder(textView.getContext()) | ||||
|                 .usePlugin(LinkifyPlugin.create()).build(); | ||||
|         changeIntentsOfDescriptionLinks(textView, markwon.toMarkdown(markdownBlock), relatedInfo, | ||||
|                 disposables); | ||||
|         changeLinkIntents(textView, markwon.toMarkdown(markdownBlock), | ||||
|                 relatedInfoService, relatedStreamUrl, disposables, onCompletion); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -131,9 +199,9 @@ public final class TextLinkifier { | ||||
|      * This method will also add click listeners on timestamps in this description, which will play | ||||
|      * the content in the popup player at the time indicated in the timestamp, by using | ||||
|      * {@link TextLinkifier#addClickListenersOnTimestamps(Context, SpannableStringBuilder, | ||||
|      * StreamInfo, CompositeDisposable)} method and click listeners on hashtags, by using | ||||
|      * {@link TextLinkifier#addClickListenersOnHashtags(Context, SpannableStringBuilder, Info)})}, | ||||
|      * which will open a search on the current service with the hashtag. | ||||
|      * StreamingService, String, CompositeDisposable)} method and click listeners on hashtags, by | ||||
|      * using {@link TextLinkifier#addClickListenersOnHashtags(Context, SpannableStringBuilder, | ||||
|      * StreamingService)}, which will open a search on the current service with the hashtag. | ||||
|      * </p> | ||||
|      * | ||||
|      * <p> | ||||
| @@ -141,20 +209,25 @@ public final class TextLinkifier { | ||||
|      * before opening a web link. | ||||
|      * </p> | ||||
|      * | ||||
|      * @param textView    the {@link TextView} in which the converted {@link CharSequence} will be | ||||
|      *                    applied | ||||
|      * @param chars       the {@link CharSequence} to be parsed | ||||
|      * @param relatedInfo if given, handle timestamps to open the stream in the popup player at the | ||||
|      *                    specific time, and hashtags to search for the term in the correct service | ||||
|      * @param disposables disposables created by the method are added here and their lifecycle | ||||
|      *                    should be handled by the calling class | ||||
|      * @param textView           the {@link TextView} to which the converted {@link CharSequence} | ||||
|      *                           will be applied | ||||
|      * @param chars              the {@link CharSequence} to be parsed | ||||
|      * @param relatedInfoService if given, handle hashtags to search for the term in the correct | ||||
|      *                           service | ||||
|      * @param relatedStreamUrl   if given, used alongside {@code relatedInfoService} to handle | ||||
|      *                           timestamps to open the stream in the popup player at the specific | ||||
|      *                           time | ||||
|      * @param disposables        disposables created by the method are added here and their | ||||
|      *                           lifecycle should be handled by the calling class | ||||
|      * @param onCompletion       will be run when setting text to the textView completes; use {@link | ||||
|      *                           #SET_LINK_MOVEMENT_METHOD} to make links clickable and focusable | ||||
|      */ | ||||
|     private static void changeIntentsOfDescriptionLinks( | ||||
|             @NonNull final TextView textView, | ||||
|             @NonNull final CharSequence chars, | ||||
|             @Nullable final Info relatedInfo, | ||||
|             @NonNull final CompositeDisposable disposables) { | ||||
|         textView.setMovementMethod(LongPressLinkMovementMethod.getInstance()); | ||||
|     private static void changeLinkIntents(@NonNull final TextView textView, | ||||
|                                           @NonNull final CharSequence chars, | ||||
|                                           @Nullable final StreamingService relatedInfoService, | ||||
|                                           @Nullable final String relatedStreamUrl, | ||||
|                                           @NonNull final CompositeDisposable disposables, | ||||
|                                           @Nullable final Consumer<TextView> onCompletion) { | ||||
|         disposables.add(Single.fromCallable(() -> { | ||||
|                     final Context context = textView.getContext(); | ||||
|  | ||||
| @@ -176,26 +249,26 @@ public final class TextLinkifier { | ||||
|                         textBlockLinked.removeSpan(span); | ||||
|                     } | ||||
|  | ||||
|                     if (relatedInfo != null) { | ||||
|                         // add click actions on plain text timestamps only for description of | ||||
|                         // contents, unneeded for meta-info or other TextViews | ||||
|                         if (relatedInfo instanceof StreamInfo) { | ||||
|                     // add click actions on plain text timestamps only for description of contents, | ||||
|                     // unneeded for meta-info or other TextViews | ||||
|                     if (relatedInfoService != null) { | ||||
|                         if (relatedStreamUrl != null) { | ||||
|                             addClickListenersOnTimestamps(context, textBlockLinked, | ||||
|                                     (StreamInfo) relatedInfo, disposables); | ||||
|                                     relatedInfoService, relatedStreamUrl, disposables); | ||||
|                         } | ||||
|  | ||||
|                         addClickListenersOnHashtags(context, textBlockLinked, relatedInfo); | ||||
|                         addClickListenersOnHashtags(context, textBlockLinked, relatedInfoService); | ||||
|                     } | ||||
|  | ||||
|                     return textBlockLinked; | ||||
|                 }).subscribeOn(Schedulers.computation()) | ||||
|                 .observeOn(AndroidSchedulers.mainThread()) | ||||
|                 .subscribe( | ||||
|                         textBlockLinked -> setTextViewCharSequence(textView, textBlockLinked), | ||||
|                         textBlockLinked -> | ||||
|                                 setTextViewCharSequence(textView, textBlockLinked, onCompletion), | ||||
|                         throwable -> { | ||||
|                             Log.e(TAG, "Unable to linkify text", throwable); | ||||
|                             // this should never happen, but if it does, just fallback to it | ||||
|                             setTextViewCharSequence(textView, chars); | ||||
|                             setTextViewCharSequence(textView, chars, onCompletion); | ||||
|                         })); | ||||
|     } | ||||
|  | ||||
| @@ -213,12 +286,12 @@ public final class TextLinkifier { | ||||
|      * @param context              the {@link Context} to use | ||||
|      * @param spannableDescription the {@link SpannableStringBuilder} with the text of the | ||||
|      *                             content description | ||||
|      * @param relatedInfo          used to search for the term in the correct service | ||||
|      * @param relatedInfoService   used to search for the term in the correct service | ||||
|      */ | ||||
|     private static void addClickListenersOnHashtags( | ||||
|             @NonNull final Context context, | ||||
|             @NonNull final SpannableStringBuilder spannableDescription, | ||||
|             @NonNull final Info relatedInfo) { | ||||
|             @NonNull final StreamingService relatedInfoService) { | ||||
|         final String descriptionText = spannableDescription.toString(); | ||||
|         final Matcher hashtagsMatches = HASHTAGS_PATTERN.matcher(descriptionText); | ||||
|  | ||||
| @@ -231,8 +304,9 @@ public final class TextLinkifier { | ||||
|             // of an URL, already parsed before | ||||
|             if (spannableDescription.getSpans(hashtagStart, hashtagEnd, | ||||
|                     LongPressClickableSpan.class).length == 0) { | ||||
|                 final int serviceId = relatedInfoService.getServiceId(); | ||||
|                 spannableDescription.setSpan( | ||||
|                         new HashtagLongPressClickableSpan(context, parsedHashtag, relatedInfo), | ||||
|                         new HashtagLongPressClickableSpan(context, parsedHashtag, serviceId), | ||||
|                         hashtagStart, hashtagEnd, 0); | ||||
|             } | ||||
|         } | ||||
| @@ -251,14 +325,16 @@ public final class TextLinkifier { | ||||
|      * @param context              the {@link Context} to use | ||||
|      * @param spannableDescription the {@link SpannableStringBuilder} with the text of the | ||||
|      *                             content description | ||||
|      * @param streamInfo           what to open in the popup player when timestamps are clicked | ||||
|      * @param relatedInfoService   the service of the {@code relatedStreamUrl} | ||||
|      * @param relatedStreamUrl     what to open in the popup player when timestamps are clicked | ||||
|      * @param disposables          disposables created by the method are added here and their | ||||
|      *                             lifecycle should be handled by the calling class | ||||
|      */ | ||||
|     private static void addClickListenersOnTimestamps( | ||||
|             @NonNull final Context context, | ||||
|             @NonNull final SpannableStringBuilder spannableDescription, | ||||
|             @NonNull final StreamInfo streamInfo, | ||||
|             @NonNull final StreamingService relatedInfoService, | ||||
|             @NonNull final String relatedStreamUrl, | ||||
|             @NonNull final CompositeDisposable disposables) { | ||||
|         final String descriptionText = spannableDescription.toString(); | ||||
|         final Matcher timestampsMatches = TimestampExtractor.TIMESTAMPS_PATTERN.matcher( | ||||
| @@ -272,8 +348,9 @@ public final class TextLinkifier { | ||||
|                 continue; | ||||
|             } | ||||
|  | ||||
|             spannableDescription.setSpan(new TimestampLongPressClickableSpan( | ||||
|                     context, descriptionText, disposables, streamInfo, timestampMatchDTO), | ||||
|             spannableDescription.setSpan( | ||||
|                     new TimestampLongPressClickableSpan(context, descriptionText, disposables, | ||||
|                             relatedInfoService, relatedStreamUrl, timestampMatchDTO), | ||||
|                     timestampMatchDTO.timestampStart(), | ||||
|                     timestampMatchDTO.timestampEnd(), | ||||
|                     0); | ||||
| @@ -281,8 +358,12 @@ public final class TextLinkifier { | ||||
|     } | ||||
|  | ||||
|     private static void setTextViewCharSequence(@NonNull final TextView textView, | ||||
|                                                 @Nullable final CharSequence charSequence) { | ||||
|                                                 @Nullable final CharSequence charSequence, | ||||
|                                                 @Nullable final Consumer<TextView> onCompletion) { | ||||
|         textView.setText(charSequence); | ||||
|         textView.setVisibility(View.VISIBLE); | ||||
|         if (onCompletion != null) { | ||||
|             onCompletion.accept(textView); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.stream.StreamInfo; | ||||
| import org.schabi.newpipe.util.external_communication.ShareUtils; | ||||
|  | ||||
| import io.reactivex.rxjava3.disposables.CompositeDisposable; | ||||
| @@ -23,7 +22,9 @@ final class TimestampLongPressClickableSpan extends LongPressClickableSpan { | ||||
|     @NonNull | ||||
|     private final CompositeDisposable disposables; | ||||
|     @NonNull | ||||
|     private final StreamInfo streamInfo; | ||||
|     private final StreamingService relatedInfoService; | ||||
|     @NonNull | ||||
|     private final String relatedStreamUrl; | ||||
|     @NonNull | ||||
|     private final TimestampExtractor.TimestampMatchDTO timestampMatchDTO; | ||||
|  | ||||
| @@ -31,41 +32,43 @@ final class TimestampLongPressClickableSpan extends LongPressClickableSpan { | ||||
|             @NonNull final Context context, | ||||
|             @NonNull final String descriptionText, | ||||
|             @NonNull final CompositeDisposable disposables, | ||||
|             @NonNull final StreamInfo streamInfo, | ||||
|             @NonNull final StreamingService relatedInfoService, | ||||
|             @NonNull final String relatedStreamUrl, | ||||
|             @NonNull final TimestampExtractor.TimestampMatchDTO timestampMatchDTO) { | ||||
|         this.context = context; | ||||
|         this.descriptionText = descriptionText; | ||||
|         this.disposables = disposables; | ||||
|         this.streamInfo = streamInfo; | ||||
|         this.relatedInfoService = relatedInfoService; | ||||
|         this.relatedStreamUrl = relatedStreamUrl; | ||||
|         this.timestampMatchDTO = timestampMatchDTO; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onClick(@NonNull final View view) { | ||||
|         playOnPopup(context, streamInfo.getUrl(), streamInfo.getService(), | ||||
|         playOnPopup(context, relatedStreamUrl, relatedInfoService, | ||||
|                 timestampMatchDTO.seconds(), disposables); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onLongClick(@NonNull final View view) { | ||||
|         ShareUtils.copyToClipboard(context, | ||||
|                 getTimestampTextToCopy(streamInfo, descriptionText, timestampMatchDTO)); | ||||
|         ShareUtils.copyToClipboard(context, getTimestampTextToCopy( | ||||
|                 relatedInfoService, relatedStreamUrl, descriptionText, timestampMatchDTO)); | ||||
|     } | ||||
|  | ||||
|     @NonNull | ||||
|     private static String getTimestampTextToCopy( | ||||
|             @NonNull final StreamInfo relatedInfo, | ||||
|             @NonNull final StreamingService relatedInfoService, | ||||
|             @NonNull final String relatedStreamUrl, | ||||
|             @NonNull final String descriptionText, | ||||
|             @NonNull final TimestampExtractor.TimestampMatchDTO timestampMatchDTO) { | ||||
|         // TODO: use extractor methods to get timestamps when this feature will be implemented in it | ||||
|         final StreamingService streamingService = relatedInfo.getService(); | ||||
|         if (streamingService == ServiceList.YouTube) { | ||||
|             return relatedInfo.getUrl() + "&t=" + timestampMatchDTO.seconds(); | ||||
|         } else if (streamingService == ServiceList.SoundCloud | ||||
|                 || streamingService == ServiceList.MediaCCC) { | ||||
|             return relatedInfo.getUrl() + "#t=" + timestampMatchDTO.seconds(); | ||||
|         } else if (streamingService == ServiceList.PeerTube) { | ||||
|             return relatedInfo.getUrl() + "?start=" + timestampMatchDTO.seconds(); | ||||
|         if (relatedInfoService == ServiceList.YouTube) { | ||||
|             return relatedStreamUrl + "&t=" + timestampMatchDTO.seconds(); | ||||
|         } else if (relatedInfoService == ServiceList.SoundCloud | ||||
|                 || relatedInfoService == ServiceList.MediaCCC) { | ||||
|             return relatedStreamUrl + "#t=" + timestampMatchDTO.seconds(); | ||||
|         } else if (relatedInfoService == ServiceList.PeerTube) { | ||||
|             return relatedStreamUrl + "?start=" + timestampMatchDTO.seconds(); | ||||
|         } | ||||
|  | ||||
|         // Return timestamp text for other services | ||||
|   | ||||
| @@ -782,4 +782,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">إلغاء تعيين الصورة المصغرة الدائمة</string> | ||||
|     <string name="msg_failed_to_copy">فشل النسخ إلى الحافظة</string> | ||||
|     <string name="card">البطاقة</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">تمت إضافة وقت (أوقات) مكررة %d</string> | ||||
|     <string name="duplicate_in_playlist">تحتوي قوائم التشغيل رمادية اللون بالفعل على هذا العنصر.</string> | ||||
| </resources> | ||||
| @@ -3,7 +3,7 @@ | ||||
|     <string name="main_bg_subtitle">Başlamaq üçün böyüdücü güzgüyə toxun.</string> | ||||
|     <string name="upload_date_text">%1$s tarixində yayımlanıb</string> | ||||
|     <string name="no_player_found">Yayım oynadıcı tapılmadı. \"VLC\" quraşdırılsın\?</string> | ||||
|     <string name="no_player_found_toast">Yayım oynadıcı tapılmadı (Oynatmaq üçün VLC\'ni quraşdıra bilərsiniz).</string> | ||||
|     <string name="no_player_found_toast">Yayım oynadıcı tapılmadı (Oynatmaq üçün VLC quraşdıra bilərsiniz).</string> | ||||
|     <string name="install">Yüklə</string> | ||||
|     <string name="cancel">Ləğv et</string> | ||||
|     <string name="open_in_browser">Brauzerdə aç</string> | ||||
| @@ -12,59 +12,59 @@ | ||||
|     <string name="controls_download_desc">Yayım faylını endir</string> | ||||
|     <string name="search">Axtarış</string> | ||||
|     <string name="settings">Tənzimləmələr</string> | ||||
|     <string name="did_you_mean">Bunu nəzərdə tuturdunuz: \"%1$s\"\?</string> | ||||
|     <string name="did_you_mean">Bunu demək istəyirdiniz: \"%1$s\"\?</string> | ||||
|     <string name="share_dialog_title">ilə paylaş</string> | ||||
|     <string name="use_external_video_player_title">Xarici video oynadıcı istifadə et</string> | ||||
|     <string name="use_external_video_player_summary">Bəzi qətnamələrdə səsi silir</string> | ||||
|     <string name="use_external_video_player_summary">Bəzi ayırdetmələrdə səsi silir</string> | ||||
|     <string name="use_external_audio_player_title">Xarici səs oynadıcı istifadə et</string> | ||||
|     <string name="subscribe_button_title">Abunə Ol</string> | ||||
|     <string name="subscribed_button_title">Abunə olundu</string> | ||||
|     <string name="channel_unsubscribed">Kanal abunəliyi ləğv edildi</string> | ||||
|     <string name="show_info">Məlumat göstər</string> | ||||
|     <string name="tab_subscriptions">Abunəliklər</string> | ||||
|     <string name="tab_subscriptions">Abunələr</string> | ||||
|     <string name="tab_bookmarks">Əlfəcinlənmiş Pleylistlər</string> | ||||
|     <string name="fragment_feed_title">Yeniliklər</string> | ||||
|     <string name="controls_background_title">Fon</string> | ||||
|     <string name="download_path_title">Video endirmə qovluğu</string> | ||||
|     <string name="download_path_summary">Endirilmiş video fayllar burada saxlanılır</string> | ||||
|     <string name="download_path_dialog_title">Video faylları üçün endirmə qovluğunu seç</string> | ||||
|     <string name="download_path_dialog_title">Video fayllar üçün endirmə qovluğu seç</string> | ||||
|     <string name="download_path_audio_title">Səs endirmə qovluğu</string> | ||||
|     <string name="download_path_audio_summary">Endirilmiş səs faylları burada saxlanılır</string> | ||||
|     <string name="download_path_audio_dialog_title">Səs faylları üçün endirmə qovluğu seç</string> | ||||
|     <string name="default_resolution_title">Defolt keyfiyyət</string> | ||||
|     <string name="show_higher_resolutions_title">Daha böyük keyfiyyət seçimləri göstər</string> | ||||
|     <string name="default_resolution_title">Standart ayırdetmə</string> | ||||
|     <string name="show_higher_resolutions_title">Daha böyük ayırdetmələr göstər</string> | ||||
|     <string name="play_with_kodi_title">\"Kodi\" ilə Oynat</string> | ||||
|     <string name="kore_not_found">Çatışmayan \"Kore\" tətbiqi yüklənilsin\?</string> | ||||
|     <string name="show_play_with_kodi_title">\"Kodi ilə Oynat\" seçimini göstər</string> | ||||
|     <string name="show_play_with_kodi_summary">Videonu Kodi media mərkəzi ilə oynatmaq üçün seçim göstər</string> | ||||
|     <string name="show_play_with_kodi_summary">Kodi media mərkəzindən video oynatmaq üçün seçim göstər</string> | ||||
|     <string name="play_audio">Səs</string> | ||||
|     <string name="default_audio_format_title">Defolt səs formatı</string> | ||||
|     <string name="default_video_format_title">Defolt video formatı</string> | ||||
|     <string name="default_audio_format_title">Standart səs formatı</string> | ||||
|     <string name="default_video_format_title">Standart video formatı</string> | ||||
|     <string name="theme_title">Tema</string> | ||||
|     <string name="light_theme_title">İşıqlı</string> | ||||
|     <string name="dark_theme_title">Qaranlıq</string> | ||||
|     <string name="black_theme_title">Qara</string> | ||||
|     <string name="unsubscribe">Abunəlikdən çıxın</string> | ||||
|     <string name="unsubscribe">Abunə olma</string> | ||||
|     <string name="open_in_popup_mode">Ani görüntü rejimində aç</string> | ||||
|     <string name="autoplay_title">Avtomatik oynat</string> | ||||
|     <string name="download_dialog_title">Endir</string> | ||||
|     <string name="resume_on_audio_focus_gain_summary">Fasilələrdən sonra (məsələn, telefon zəngləri) oynatmağa davam etdir</string> | ||||
|     <string name="download_dialog_title">Yüklə</string> | ||||
|     <string name="resume_on_audio_focus_gain_summary">Fasilələr ardınca (məsələn, telefon zəngləri) oynatmağa davam etdir</string> | ||||
|     <string name="resume_on_audio_focus_gain_title">Oynatmanı davam etdir</string> | ||||
|     <string name="enable_watch_history_summary">Baxılmış videoların saxlanılması</string> | ||||
|     <string name="settings_category_clear_data_title">Məlumat təmizlə</string> | ||||
|     <string name="enable_playback_state_lists_summary">Siyahılarda oynatma mövqelərini göstər</string> | ||||
|     <string name="enable_playback_state_lists_summary">Siyahılarda oynatma mövqe göstəricilərini göstər</string> | ||||
|     <string name="enable_playback_state_lists_title">Siyahılardakı mövqelər</string> | ||||
|     <string name="enable_playback_resume_summary">Son oynatma mövqeyini qaytar</string> | ||||
|     <string name="enable_playback_resume_title">Oynatmanı davam etdir</string> | ||||
|     <string name="enable_watch_history_title">Baxış tarixçəsi</string> | ||||
|     <string name="enable_search_history_summary">Axtarış sorğularını yerli olaraq saxla</string> | ||||
|     <string name="enable_search_history_title">Axtarış tarixçəsi</string> | ||||
|     <string name="show_search_suggestions_summary">Axtarış edərkən göstəriləcək təklifləri seç</string> | ||||
|     <string name="show_search_suggestions_summary">Axtarış zamanı göstərmək üçün təklifləri seç</string> | ||||
|     <string name="show_search_suggestions_title">Axtarış təklifləri</string> | ||||
|     <string name="brightness_gesture_control_summary">Oynadıcının parlaqlığını nizamlamaq üçün jestləri istifadə et</string> | ||||
|     <string name="brightness_gesture_control_title">Parlaqlığı jestlə nizamlamaq</string> | ||||
|     <string name="volume_gesture_control_summary">Oynadıcı səsini nizamlamaq üçün jestləri istifadə et</string> | ||||
|     <string name="volume_gesture_control_title">Səsi jestlə idarə etmək</string> | ||||
|     <string name="brightness_gesture_control_summary">Oynadıcı parlaqlığını nizamlamaq üçün jestlər istifadə et</string> | ||||
|     <string name="brightness_gesture_control_title">Parlaqlıq jesti idarəetməsi</string> | ||||
|     <string name="volume_gesture_control_summary">Oynadıcı səsini nizamlamaq üçün jestlər istifadə et</string> | ||||
|     <string name="volume_gesture_control_title">Səs səviyyəsi jesti idarəetməsi</string> | ||||
|     <string name="auto_queue_toggle">Avto-növbələ</string> | ||||
|     <string name="auto_queue_title">Növbəti Yayımı Avto-növbələ</string> | ||||
|     <string name="metadata_cache_wipe_complete_notice">Üst məlumat keşi silindi</string> | ||||
| @@ -73,10 +73,10 @@ | ||||
|     <string name="thumbnail_cache_wipe_complete_notice">Şəkil keşi silindi</string> | ||||
|     <string name="show_comments_summary">Şərhləri gizlətmək üçün bağla</string> | ||||
|     <string name="show_comments_title">Şərhləri göstər</string> | ||||
|     <string name="clear_queue_confirmation_description">Aktiv oynadıcının növbəsi dəyişdiriləcək</string> | ||||
|     <string name="clear_queue_confirmation_description">Aktiv oynadıcı növbəsi dəyişdiriləcək</string> | ||||
|     <string name="clear_queue_confirmation_summary">Bir oynadıcıdan digərinə keçid növbənizi dəyişdirə bilər</string> | ||||
|     <string name="clear_queue_confirmation_title">Növbəni təmizləməzdən əvvəl təsdiq üçün soruş</string> | ||||
|     <string name="use_inexact_seek_title">Sürətli qeyri-dəqiq axtarışdan istifadə et</string> | ||||
|     <string name="use_inexact_seek_title">Sürətli qeyri-dəqiq axtarış istifadə et</string> | ||||
|     <string name="use_inexact_seek_summary">Qeyri-dəqiq axtarış oynadıcıya azaldılmış dəqiqliklə mövqeləri daha sürətli axtarmağa imkan verir. 5, 15 və ya 25 saniyəlik axtarış bununla işləmir</string> | ||||
|     <string name="seek_duration_title">Sürətli irəli/geri çəkmə axtarış müddəti</string> | ||||
|     <string name="notification_action_nothing">Heç nə</string> | ||||
| @@ -89,9 +89,9 @@ | ||||
|     <string name="notification_action_1_title">İkinci fəaliyyət düyməsi</string> | ||||
|     <string name="notification_action_0_title">Birinci fəaliyyət düyməsi</string> | ||||
|     <string name="show_higher_resolutions_summary">Yalnız bəzi cihazlar 2K/4K videoları oynada bilir</string> | ||||
|     <string name="default_popup_resolution_title">Defolt ani pəncərə keyfiyyəti</string> | ||||
|     <string name="default_popup_resolution_title">Standart ani görüntü ayırdetməsi</string> | ||||
|     <string name="controls_add_to_playlist_title">Əlavə Et</string> | ||||
|     <string name="controls_popup_title">Ani Pəncərə</string> | ||||
|     <string name="controls_popup_title">Ani Görüntü</string> | ||||
|     <string name="tab_choose">Paneli Seç</string> | ||||
|     <string name="subscription_update_failed">Abunəliyi yeniləmək alınmadı</string> | ||||
|     <string name="subscription_change_failed">Abunəliyi dəyişmək alınmadı</string> | ||||
| @@ -102,7 +102,7 @@ | ||||
|     <string name="show_age_restricted_content_summary">Yaş həddi səbəbiylə (məsələn, 18+) uşaqlar üçün uyğun olmayan məzmunu göstər</string> | ||||
|     <string name="show_age_restricted_content_title">Yaş məhdudiyyətli məzmunu göstər</string> | ||||
|     <string name="content">Məzmun</string> | ||||
|     <string name="popup_playing_toast">Ani pəncərə rejimində oynadılır</string> | ||||
|     <string name="popup_playing_toast">Ani görüntü rejimində oynadılır</string> | ||||
|     <string name="background_player_playing_toast">Fonda oynadılır</string> | ||||
|     <string name="settings_category_updates_title">Yeniləmələr</string> | ||||
|     <string name="settings_category_debug_title">Sazlama</string> | ||||
| @@ -111,23 +111,23 @@ | ||||
|     <string name="settings_category_video_audio_title">Video və səs</string> | ||||
|     <string name="settings_category_player_behavior_title">Davranış</string> | ||||
|     <string name="settings_category_player_title">Oynadıcı</string> | ||||
|     <string name="content_language_title">Defolt məzmun dili</string> | ||||
|     <string name="default_content_country_title">Defolt məzmun ölkəsi</string> | ||||
|     <string name="content_language_title">Cari məzmun dili</string> | ||||
|     <string name="default_content_country_title">Cari məzmun ölkəsi</string> | ||||
|     <string name="unsupported_url_dialog_message">URL\'i tanımaq olmadı. Başqa tətbiqlə açılsın\?</string> | ||||
|     <string name="unsupported_url">Dəstəklənməyən URL\'i</string> | ||||
|     <string name="show_hold_to_append_title">\"Növbələmək üçün basılı saxla\" tövsiyəsin göstər</string> | ||||
|     <string name="show_next_and_similar_title">\"Növbəti\" və \"Bənzər\" videoları göstər</string> | ||||
|     <string name="export_data_summary">Tarixçəni, abunəlikləri, pleylistləri və tənzimləmələri ixrac edin</string> | ||||
|     <string name="export_data_summary">Tarixçəni, abunəlikləri, pleylistləri və tənzimləmələri ixrac et</string> | ||||
|     <string name="import_data_summary">Cari tarixçənizi, abunəliklərinizi, pleylistlərinizi və (könüllü) tənzimləmələrinizi etibarsız edir</string> | ||||
|     <string name="recaptcha_cookies_cleared">reCAPTCHA kukiləri təmizləndi</string> | ||||
|     <string name="clear_cookie_title">reCAPTCHA kukilərini təmizlə</string> | ||||
|     <string name="recaptcha_cookies_cleared">reCAPTCHA bazaları təmizləndi</string> | ||||
|     <string name="clear_cookie_title">reCAPTCHA bazalarını təmizlə</string> | ||||
|     <string name="export_data_title">Məlumat bazasını ixrac et</string> | ||||
|     <string name="import_data_title">Məlumat bazasını idxal et</string> | ||||
|     <string name="switch_to_main">Əsas Görünüşə Keçid</string> | ||||
|     <string name="switch_to_popup">Ani Pəncərəyə Keçid</string> | ||||
|     <string name="switch_to_popup">Ani Görüntüyə Keçid</string> | ||||
|     <string name="switch_to_background">Fona Keçid</string> | ||||
|     <string name="unknown_content">[Naməlum]</string> | ||||
|     <string name="app_update_notification_channel_description">Yeni \"NewPipe\" versiyası üçün bildirişlər</string> | ||||
|     <string name="app_update_notification_channel_description">Yeni \"NewPipe\" versiyaları üçün bildirişlər</string> | ||||
|     <string name="app_update_notification_channel_name">Tətbiq yeniləmə bildirişi</string> | ||||
|     <string name="notification_channel_description">NewPipe oynadıcısı üçün bildirişlər</string> | ||||
|     <string name="all">Hamısı</string> | ||||
| @@ -141,7 +141,7 @@ | ||||
|     <string name="youtube_restricted_mode_enabled_summary">YouTube potensial yetkin məzmunu gizlədən \"Məhdud Rejim\" təmin edir</string> | ||||
|     <string name="peertube_instance_url_title">\"PeerTube\" nümunələri</string> | ||||
|     <string name="download_thumbnail_title">Miniatürləri yüklə</string> | ||||
|     <string name="notification_actions_at_most_three">Siz yığcam bildirişdə göstərilməsi üçün ən çoxu üç fəaliyyət seçə bilərsiniz!</string> | ||||
|     <string name="notification_actions_at_most_three">Yığcam bildirişdə göstərmək üçün ən çoxu üç fəaliyyət seçə bilərsiniz!</string> | ||||
|     <string name="feed_update_threshold_option_always_update">Həmişə yenilə</string> | ||||
|     <string name="settings_category_feed_title">Axın</string> | ||||
|     <string name="feed_group_show_only_ungrouped_subscriptions">Yalnız qruplaşdırılmamış abunəlikləri göstər</string> | ||||
| @@ -153,7 +153,7 @@ | ||||
|         <item quantity="other">%d seçildi</item> | ||||
|     </plurals> | ||||
|     <string name="feed_group_dialog_empty_selection">Abunəlik seçilməyib</string> | ||||
|     <string name="feed_group_dialog_select_subscriptions">Abunəlikləri seçin</string> | ||||
|     <string name="feed_group_dialog_select_subscriptions">Abunəlikləri seç</string> | ||||
|     <string name="feed_processing_message">Axın emal edilir…</string> | ||||
|     <string name="feed_notification_loading">Axın yüklənir…</string> | ||||
|     <string name="feed_subscription_not_loaded_count">Yüklənmədi: %d</string> | ||||
| @@ -179,8 +179,8 @@ | ||||
|     <string name="general_error">Xəta</string> | ||||
|     <string name="search_history_deleted">Axtarış tarixçəsi silindi</string> | ||||
|     <string name="delete_search_history_alert">Bütün axtarış tarixçəsi silinsin\?</string> | ||||
|     <string name="clear_search_history_summary">Açar sözləri axtarışının tarixçəsini silir</string> | ||||
|     <string name="clear_search_history_title">Axtarış tarixçəsini silin</string> | ||||
|     <string name="clear_search_history_summary">Açar sözləri axtarışı tarixçəsini silir</string> | ||||
|     <string name="clear_search_history_title">Axtarış tarixçəsini sil</string> | ||||
|     <string name="watch_history_states_deleted">Oynatma mövqeləri silindi</string> | ||||
|     <string name="delete_playback_states_alert">Bütün oynatma mövqeləri silinsin\?</string> | ||||
|     <string name="clear_playback_states_summary">Bütün oynatma mövqelərini silir</string> | ||||
| @@ -188,7 +188,7 @@ | ||||
|     <string name="watch_history_deleted">Baxış tarixçəsi silindi</string> | ||||
|     <string name="delete_view_history_alert">Bütün baxış tarixçəsi silinsin\?</string> | ||||
|     <string name="clear_views_history_title">Baxış tarixçəsini təmizlə</string> | ||||
|     <string name="clear_cookie_summary">reCAPTCHA həll edərkən NewPipe\'ın saxladığı kukiləri silin</string> | ||||
|     <string name="clear_cookie_summary">reCAPTCHA həll edərkən NewPipe saxladığı bazaları sil</string> | ||||
|     <string name="channel_created_by">%s tərəfindən yaradıldı</string> | ||||
|     <string name="resize_zoom">Yaxınlaşdır</string> | ||||
|     <string name="resize_fill">Doldur</string> | ||||
| @@ -198,22 +198,22 @@ | ||||
|     <string name="no_channel_subscribed_yet">Hələ ki, kanal abunəliyi yoxdur</string> | ||||
|     <string name="select_a_channel">Kanal seç</string> | ||||
|     <string name="channel_page_summary">Kanal Səhifəsi</string> | ||||
|     <string name="default_kiosk_page_summary">Defolt Köşk</string> | ||||
|     <string name="kiosk_page_summary">Köşk Səhifəsi</string> | ||||
|     <string name="default_kiosk_page_summary">Standart Köşk</string> | ||||
|     <string name="kiosk_page_summary">Köşk Səhifə</string> | ||||
|     <string name="blank_page_summary">Boş Səhifə</string> | ||||
|     <string name="main_page_content_summary">Əsas səhifədə hansı tablar göstərilir</string> | ||||
|     <string name="main_page_content">Əsas səhifənin məzmunu</string> | ||||
|     <string name="main_page_content">Əsas səhifə məzmunu</string> | ||||
|     <string name="updates_setting_description">Yeni versiya mövcud olduqda tətbiq yeniləməsini xatırlatmaq üçün bildiriş göstər</string> | ||||
|     <string name="updates_setting_title">Yeniləmələr</string> | ||||
|     <string name="limit_mobile_data_usage_title">Mobil internet istifadə edərkən görüntü keyfiyyətini məhdudlaşdır</string> | ||||
|     <string name="limit_mobile_data_usage_title">Mobil internet istifadə edərkən ayırdetməni məhdudlaşdır</string> | ||||
|     <string name="limit_data_usage_none_description">Limitsiz</string> | ||||
|     <string name="one_item_deleted">1 element silindi.</string> | ||||
|     <string name="peertube_instance_add_title">Nümunə əlavə et</string> | ||||
|     <string name="peertube_instance_url_summary">Sevimli \"PeerTube\" nümunələrinizi seçin</string> | ||||
|     <string name="delete_downloaded_files">Endirilmiş faylları silin</string> | ||||
|     <string name="confirm_prompt">Endirmə tarixçənizi təmizləmək və ya endirilmiş bütün faylları silmək istəyirsiniz\?</string> | ||||
|     <string name="delete_downloaded_files">Endirilmiş faylları sil</string> | ||||
|     <string name="confirm_prompt">Endirmə tarixçənizi təmizləmək və ya bütün endirilmiş faylları silmək istəyirsiniz\?</string> | ||||
|     <string name="clear_download_history">Endirmə tarixçəsini təmizlə</string> | ||||
|     <string name="start_downloads">Endirmələrə başla</string> | ||||
|     <string name="start_downloads">Endirmələri başlat</string> | ||||
|     <string name="pause_downloads">Endirmələri dayandır</string> | ||||
|     <string name="downloads_storage_ask_title">Haraya endiriləcəyini soruş</string> | ||||
|     <string name="downloads_storage_ask_summary">Sizdən hər endirmənin harada saxlanılacağı soruşulacaq. | ||||
| @@ -241,13 +241,13 @@ | ||||
|     <string name="feed_update_threshold_title">Axın yeniləmə astanası</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_enable_button">Sürətli rejimi aktivləşdir</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_disable_button">Sürətli rejimi deaktiv et</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_help_text">Axının çox yavaş yükləndiyini düşünürsünüz\? Əgər elədirsə, sürətli yükləməni işə salmağı sınayın (tənzimləmələrdən dəyişə və ya aşağıdakı düyməni basa bilərsiniz). | ||||
|     <string name="feed_use_dedicated_fetch_method_help_text">Axının çox yavaş yükləndiyini düşünürsünüz\? Əgər elədirsə, sürətli yükləməni işə salmağı sınayın (tənzimləmələrdə dəyişə və ya aşağıdakı düyməni basa bilərsiniz). | ||||
| \n | ||||
| \nNewPipe axını yükləmək üçün 2 metod təklif edir: | ||||
| \n• Bütün abunəlik kanallarını gətirtmək, bu yavaş olsa da tamdır; | ||||
| \n• Ayrılmış xidmət uc nöqtəsi istifadə etmək, bu sürətlidir, amma tam deyil. | ||||
| \n | ||||
| \nBu ikisi arasında fərq odur ki, sürətlisində, adətən elementin müddəti və növü kimi bəzi məlumatlar çatışmır (canlı video ilə adisini ayırd edə bilmir) və daha az element gətirir. | ||||
| \nBu ikisi arasında fərq odur ki, sürətlisində, adətən elementin müddəti və növü kimi bəzi məlumatlar çatışmır (canlı video ilə adisini ayırd edə bilmir) və daha az elementlər gətirir. | ||||
| \n | ||||
| \nYouTube öz RSS axını ilə bu sürətli metodu təklif edən xidmətlərdən biridir. | ||||
| \n | ||||
| @@ -262,9 +262,9 @@ | ||||
|     <string name="download_to_sdcard_error_title">Xarici yaddaş əlçatan deyil</string> | ||||
|     <string name="clear_views_history_summary">Oynadılmış yayımlar tarixçəsini və oynatma mövqelərini silir</string> | ||||
|     <string name="show_meta_info_title">Üst məlumatı göstər</string> | ||||
|     <string name="show_description_summary">Video açıqlamasını və əlavə məlumatı gizlətmək üçün bağla</string> | ||||
|     <string name="show_description_summary">Video açıqlamanı və əlavə məlumatı gizlətmək üçün bağla</string> | ||||
|     <string name="show_description_title">Açıqlamanı göstər</string> | ||||
|     <string name="notification_colorize_title">Bildirişi rəngləndir</string> | ||||
|     <string name="notification_colorize_title">Bildirişi rənglə</string> | ||||
|     <string name="invalid_directory">Belə qovluq yoxdur</string> | ||||
|     <string name="start_main_player_fullscreen_title">Əsas oynadıcını tam ekranda başlat</string> | ||||
|     <string name="external_player_unsupported_link_type">Xarici oynadıcılar bu cür linkləri dəstəkləmir</string> | ||||
| @@ -281,7 +281,7 @@ | ||||
|     <string name="description_tab_description">Açıqlama</string> | ||||
|     <string name="empty_list_subtitle">Burada kriketlərdən başqa heç nə yoxdur</string> | ||||
|     <string name="search_no_results">Nəticə yoxdur</string> | ||||
|     <string name="restore_defaults">İlkin tənzimləmələri qaytar</string> | ||||
|     <string name="restore_defaults">Standartları qaytar</string> | ||||
|     <string name="missing_file">Fayl köçürüldü və ya silindi</string> | ||||
|     <string name="player_recoverable_failure">Oynadıcı xətası bərpa edilir</string> | ||||
|     <string name="player_unrecoverable_failure">Bərpa olunmayan oynatma xətası baş verdi</string> | ||||
| @@ -291,28 +291,28 @@ | ||||
|     <string name="audio_streams_empty">Səs yayımı tapılmadı</string> | ||||
|     <string name="permission_display_over_apps">Digər tətbiqlərin üzərində göstərməyə icazə ver</string> | ||||
|     <string name="restore_defaults_confirmation">İlkin tənzimləmələri qaytarmaq istəyirsiniz\?</string> | ||||
|     <string name="download_thumbnail_summary">Miniatürlərin yüklənməsini, dataya qənaət etmək və yaddaşdan istifadəni azaltmaq üçün söndürün. Dəyişikliklər həm yaddaşdaxili, həm də diskdə olan təsvir keşini təmizləyir</string> | ||||
|     <string name="download_thumbnail_summary">Miniatürləri yükləməyi, məlumata qənaət və yaddaş istifadəsin azaltmaq üçün söndür. Dəyişikliklər həm yaddaşdaxilində, həm də diskdə təsvir keşini təmizləyir</string> | ||||
|     <string name="enqueue_next_stream">Növbətini növbələ</string> | ||||
|     <string name="retry">Yenidən Cəhd Et</string> | ||||
|     <string name="retry">Təkrar Cəhd Et</string> | ||||
|     <string name="settings_category_player_notification_summary">Cari oynatma yayımı bildirişini konfiqurasiya et</string> | ||||
|     <string name="notifications">Bildirişlər</string> | ||||
|     <string name="hash_channel_name">Video fayl xülasəsi bildirişi</string> | ||||
|     <string name="streams_notification_channel_description">Abunəliklər üçün yeni yayımlar haqqında bildirişlər</string> | ||||
|     <string name="error_report_channel_description">Xəta hesabatları üçün bildirişlər</string> | ||||
|     <string name="file_name_empty_error">Fayl adı boş ola bilməz</string> | ||||
|     <string name="saved_tabs_invalid_json">Yadda saxlanmış tabları oxumaq mümkün olmadı, buna görə defolt tablardan istifadə edin</string> | ||||
|     <string name="saved_tabs_invalid_json">Saxlanmış tabları oxumaq mümkün olmadı, buna görə standart tabları istifadə et</string> | ||||
|     <string name="error_report_notification_title">NewPipe xəta ilə qarşılaşdı, bildirmək üçün toxun</string> | ||||
|     <string name="sorry_string">Bağışlayın, o baş verməməli idi.</string> | ||||
|     <string name="error_report_button_text">Bu xətanı e-poçt vasitəsilə bildirin</string> | ||||
|     <string name="error_report_open_issue_button_text">GitHub\'da Hesabat Ver</string> | ||||
|     <string name="sorry_string">Bağışla, o baş verməməli idi.</string> | ||||
|     <string name="error_report_button_text">Bu xətanı e-poçt-dan bildir</string> | ||||
|     <string name="error_report_open_issue_button_text">GitHub\'da Məlumat Ver</string> | ||||
|     <string name="error_report_open_github_notice">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.</string> | ||||
|     <string name="error_snackbar_action">Hesabat Bildir</string> | ||||
|     <string name="error_snackbar_action">Məlumat Ver</string> | ||||
|     <string name="what_device_headline">Məlumat:</string> | ||||
|     <string name="what_happened_headline">Nə baş verdi:</string> | ||||
|     <string name="detail_uploader_thumbnail_view_description">Yükləyənin avatar miniatürü</string> | ||||
|     <string name="detail_likes_img_view_description">Bəyən</string> | ||||
|     <string name="detail_dislikes_img_view_description">Bəyənmə</string> | ||||
|     <string name="detail_drag_description">Yenidən sıralamaq üçün sürüşdür</string> | ||||
|     <string name="detail_drag_description">Yenidən sıralamaq üçün sürüklə</string> | ||||
|     <string name="short_thousand">min</string> | ||||
|     <string name="short_million">Mln</string> | ||||
|     <string name="short_billion">Mlrd</string> | ||||
| @@ -324,13 +324,13 @@ | ||||
|     <string name="no_videos">Video yoxdur</string> | ||||
|     <string name="comments_are_disabled">Şərhlər qeyri-aktivdir</string> | ||||
|     <string name="start">Başlat</string> | ||||
|     <string name="pause">Fasilə</string> | ||||
|     <string name="pause">Dayandır</string> | ||||
|     <string name="checksum">Təsdiqləmə</string> | ||||
|     <string name="dismiss">İmtina</string> | ||||
|     <string name="msg_error">Xəta</string> | ||||
|     <string name="msg_running_detail">Detallar üçün toxun</string> | ||||
|     <string name="msg_wait">Zəhmət olmasa, gözləyin…</string> | ||||
|     <string name="no_dir_yet">Hələ endirmə qovluğu təyin edilməyib, indi defolt endirmə qovluğunu seç</string> | ||||
|     <string name="no_dir_yet">Hələ endirmə qovluğu təyin edilməyib, indi standart endirmə qovluğu seç</string> | ||||
|     <string name="title_activity_recaptcha">reCAPTCHA çağırışı</string> | ||||
|     <string name="recaptcha_request_toast">reCAPTCHA sorğusu göndərildi</string> | ||||
|     <string name="recaptcha_done_button">Bitdi</string> | ||||
| @@ -340,15 +340,15 @@ | ||||
|     <string name="title_licenses">Üçüncü Tərəf Lisenziyaları</string> | ||||
|     <string name="tab_about">Haqqında & T-TSS</string> | ||||
|     <string name="contribution_title">Töhfə Ver</string> | ||||
|     <string name="contribution_encouragement">Fikirlərinizin olub-olmaması, tərcümə, dizayn dəyişiklikləri, kodun təmizlənməsi və ya real ağırlıqlı kod dəyişiklikləri və.s kömək həmişə xoşdur. Nə qədər çox edilsə, bir o qədər yaxşı olar!</string> | ||||
|     <string name="contribution_encouragement">Fikirlərinizin olub-olmaması, tərcümə, dizayn dəyişiklikləri, kod təmizlənməsi və ya real ağır kod dəyişiklikləri və.s kömək həmişə xoşdur. Nə qədər çox edilsə, bir o qədər yaxşı olar!</string> | ||||
|     <string name="give_back">İanə Et</string> | ||||
|     <string name="website_title">Veb sayt</string> | ||||
|     <string name="website_encouragement">Əlavə məlumat və xəbərlər üçün NewPipe Veb saytına daxil olun.</string> | ||||
|     <string name="privacy_policy_title">NewPipe\'ın Məxfilik Siyasəti</string> | ||||
|     <string name="privacy_policy_encouragement">NewPipe layihəsi məxfiliyinizə çox ciddi yanaşır. Buna görə də, tətbiq sizin razılığınız olmadan heç bir məlumat toplamır. | ||||
| \nNewPipe\'ın məxfilik siyasəti qəza hesabatı göndərdiyiniz zaman hansı məlumatların göndərildiyini və saxlanıldığını ətraflı izah edir.</string> | ||||
|     <string name="read_privacy_policy">Məxfilik siyasətini oxu</string> | ||||
|     <string name="app_license_title">NewPipe\'ın Lisenziyası</string> | ||||
|     <string name="website_encouragement">Əlavə məlumat və xəbərlər üçün NewPipe Veb saytını ziyarət et.</string> | ||||
|     <string name="privacy_policy_title">NewPipe Məxfilik Siyasəti</string> | ||||
|     <string name="privacy_policy_encouragement">NewPipe layihəsi məxfiliyinizə çox ciddi yanaşır. Nəticə etibarı ilə, tətbiq sizin razılığınız olmadan heç bir məlumat toplamır. | ||||
| \nNewPipe məxfilik siyasəti xəta məlumatı göndərdiyiniz zaman hansı məlumatların göndərildiyini və saxlanıldığını ətraflı izah edir.</string> | ||||
|     <string name="read_privacy_policy">Məxfilik Siyasətini Oxu</string> | ||||
|     <string name="app_license_title">NewPipe Lisenziyası</string> | ||||
|     <string name="action_history">Tarixçə</string> | ||||
|     <string name="delete_item_search_history">Bu elementi axtarış tarixçəsindən silmək istəyirsiniz\?</string> | ||||
|     <string name="title_last_played">Son Oynadılan</string> | ||||
| @@ -367,7 +367,7 @@ | ||||
|     <string name="title_activity_play_queue">Oynatma növbəsi</string> | ||||
|     <string name="play_queue_stream_detail">Detallar</string> | ||||
|     <string name="show_channel_details">Kanal təfərrüatlarını göstər</string> | ||||
|     <string name="start_here_on_popup">Ani pəncərədə oynatmağa başla</string> | ||||
|     <string name="start_here_on_popup">Ani görüntüdə oynatmağa başla</string> | ||||
|     <string name="preferred_open_action_settings_title">\"Açıq\" fəaliyyətə üstünlük verilir</string> | ||||
|     <string name="background_player">Fon oynadıcı</string> | ||||
|     <string name="always_ask_open_action">Həmişə soruş</string> | ||||
| @@ -403,7 +403,7 @@ | ||||
| \nDavam etmək istəyirsiniz\?</string> | ||||
|     <string name="skip_silence_checkbox">Səssizlik zamanı sürətlə irəli</string> | ||||
|     <string name="enable_streams_notifications_title">Yeni yayım bildirişləri</string> | ||||
|     <string name="enable_streams_notifications_summary">Abunəliklərdən yeni yayımlar haqqında bildiriş göndər</string> | ||||
|     <string name="enable_streams_notifications_summary">Abunəliklərdən yeni yayımlar haqqında bildir</string> | ||||
|     <string name="streams_notifications_interval_title">Yoxlama tezliyi</string> | ||||
|     <string name="streams_notifications_network_title">Tələb olunan şəbəkə bağlantısı</string> | ||||
|     <string name="any_network">İstənilən şəbəkə</string> | ||||
| @@ -426,7 +426,7 @@ | ||||
|     <string name="content_not_supported">Bu məzmun hələ NewPipe tərəfindən dəstəklənmir. | ||||
| \n  | ||||
| \nÜmid edirik ki, gələcək versiyada dəstəklənəcək.</string> | ||||
|     <string name="show_thumbnail_summary">Həm kilid ekranı fonu, həm də bildirişlər üçün miniatürdən istifadə et</string> | ||||
|     <string name="show_thumbnail_summary">Həm kilid ekranı fonu, həm də bildirişlər üçün miniatür istifadə et</string> | ||||
|     <string name="recent">Ən Yeni</string> | ||||
|     <string name="georestricted_content">Bu məzmun ölkənizdə mövcud deyil.</string> | ||||
|     <string name="paid_content">Bu məzmun yalnız ödəniş etmiş istifadəçilər üçün əlçatandır, ona görə də NewPipe tərəfindən yayımlana və ya endirilə bilməz.</string> | ||||
| @@ -468,10 +468,10 @@ | ||||
|     <string name="notification_colorize_summary">Android\'in bildiriş rəngini miniatürdəki əsas rəngə uyğun fərdiləşdirməsini təmin et (qeyd edək ki, bu, bütün cihazlarda mövcud deyil)</string> | ||||
|     <string name="view_on_github">GitHub\'da Bax</string> | ||||
|     <string name="donation_title">İanə Et</string> | ||||
|     <string name="donation_encouragement">NewPipe, sizə ən yaxşı istifadəçi təcrübəsini göstərmək üçün boş vaxtlarını sərf edən könüllülər tərəfindən hazırlanmışdır. Tərtibatçılara bir fincan qəhvə içərkən NewPipe-ı daha da yaxşılaşdırmağa ianə etməklə kömək edin.</string> | ||||
|     <string name="donation_encouragement">NewPipe, sizə ən yaxşı istifadəçi təcrübəsi göstərmək üçün boş vaxtlarını sərf edən könüllülər tərəfindən hazırlanmışdır. Tərtibatçılara bir fincan qəhvə içərkən NewPipe-ı daha da yaxşılaşdırmağa ianə etməklə kömək edin.</string> | ||||
|     <string name="most_liked">Ən çox bəyənildi</string> | ||||
|     <string name="enqueued">Növbəyə salındı</string> | ||||
|     <string name="preferred_open_action_settings_summary">Məzmunu açarkən defolt hərəkət — %s</string> | ||||
|     <string name="preferred_open_action_settings_summary">Məzmunu açarkən standart hərəkət — %s</string> | ||||
|     <string name="name">Ad</string> | ||||
|     <string name="set_as_playlist_thumbnail">Pleylist miniatürü kimi təyin et</string> | ||||
|     <string name="wifi_only">Yalnız Wi-Fi\'da</string> | ||||
| @@ -488,7 +488,7 @@ | ||||
|     <string name="metadata_licence">Lisenziya</string> | ||||
|     <string name="feed_load_error_terminated">Müəllifin hesabı bağlanıb. | ||||
| \nNewPipe gələcəkdə bu axını yükləyə bilməyəcək. | ||||
| \nBu kanala abunəlikdən çıxmaq istəyirsiniz\?</string> | ||||
| \nBu kanaldan abunəliyi çıxarmaq istəyirsiniz\?</string> | ||||
|     <string name="feed_toggle_show_played_items">Baxılan elementləri göstər</string> | ||||
|     <string name="featured">Seçilmiş</string> | ||||
|     <string name="drawer_close">Çəkməcəni Bağla</string> | ||||
| @@ -496,12 +496,12 @@ | ||||
|     <string name="hash_channel_description">Video fayl xülasəsi prosesi üçün bildirişlər</string> | ||||
|     <string name="on">Aç</string> | ||||
|     <string name="notification_scale_to_square_image_title">Miniatürü 1:1 görünüş nisbətinə kəs</string> | ||||
|     <string name="progressive_load_interval_summary">Yükləmə intervalının həcmini dəyişdir (hazırda %s). Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər. Dəyişikliklər oynadıcının yenidən başladılmasını tələb edir</string> | ||||
|     <string name="show_meta_info_summary">Yayım yaradıcısı, məzmunu və ya axtarış sorğusu haqqında əlavə məlumat olan üst məlumat qutularını gizlətmək üçün söndürün</string> | ||||
|     <string name="progressive_load_interval_summary">Yükləmə intervalı həcmini dəyişdir (hazırda %s). Daha aşağı dəyər ilkin video yükləməni sürətləndirə bilər. Dəyişikliklər oynadıcını yenidən başlatmağı tələb edir</string> | ||||
|     <string name="show_meta_info_summary">Yayım yaradıcısı, məzmunu və ya axtarış sorğusu haqqında əlavə məlumat olan üst məlumat qutularını gizlətmək üçün söndür</string> | ||||
|     <string name="auto_queue_summary">Əlaqəli yayımı əlavə etməklə (təkrarlanmayan) sonlanacaq oynatma növbəsini davam etdir</string> | ||||
|     <string name="remote_search_suggestions">Kənar axtarış təklifləri</string> | ||||
|     <string name="peertube_instance_add_exists">Nümunə artıq mövcuddur</string> | ||||
|     <string name="start_main_player_fullscreen_summary">Videoları mini oynadıcıda başlatma, avtomatik fırlatma kilidlidirsə, birbaşa tam ekran rejiminə keçid. Siz hələ də tam ekrandan çıxmaqla mini oynadıcıya daxil ola bilərsiniz</string> | ||||
|     <string name="start_main_player_fullscreen_summary">Videoları kiçik oynadıcıda başlatma, avtomatik fırlatma kilidlidirsə, birbaşa tam ekran rejiminə keçid. Siz hələ də tam ekrandan çıxmaqla mini oynadıcıya daxil ola bilərsiniz</string> | ||||
|     <string name="more_than_100_videos">100+ video</string> | ||||
|     <string name="infinite_videos">∞ video</string> | ||||
|     <string name="no_comments">Şərhlər yoxdur</string> | ||||
| @@ -532,7 +532,7 @@ | ||||
|     <string name="metadata_tags">Etiketlər</string> | ||||
|     <string name="tablet_mode_title">Planşet rejimi</string> | ||||
|     <string name="off">Bağla</string> | ||||
|     <string name="detail_heart_img_view_description">Müəllifə ürəkləndi</string> | ||||
|     <string name="detail_heart_img_view_description">Müəllifdən ürəkləndi</string> | ||||
|     <string name="open_website_license">Veb saytı aç</string> | ||||
|     <plurals name="views"> | ||||
|         <item quantity="one">%s baxış</item> | ||||
| @@ -550,11 +550,11 @@ | ||||
|         <item quantity="one">Endirmə tamamlandı</item> | ||||
|         <item quantity="other">%s endirmə tamamlandı</item> | ||||
|     </plurals> | ||||
|     <string name="progressive_load_interval_exoplayer_default">Defolt ExoPlayer</string> | ||||
|     <string name="progressive_load_interval_exoplayer_default">Standart ExoPlayer</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_title">Mövcud olduqda xüsusi axından al</string> | ||||
|     <string name="remove_watched_popup_title">Baxılmış videolar silinsin\?</string> | ||||
|     <string name="remove_watched">İzləniləni sil</string> | ||||
|     <string name="downloads_storage_use_saf_title">Sistem qovluğu seçicisini (SAF) istifadə edin</string> | ||||
|     <string name="downloads_storage_use_saf_title">Sistem qovluğu seçicisini (SAF) istifadə et</string> | ||||
|     <string name="error_timeout">Bağlantı fasiləsi</string> | ||||
|     <string name="error_insufficient_storage">Cihazda yer qalmayıb</string> | ||||
|     <string name="error_postprocessing_stopped">Fayl üzərində işləyərkən NewPipe bağlandı</string> | ||||
| @@ -582,7 +582,7 @@ | ||||
|     <string name="import_ongoing">İdxal edilir…</string> | ||||
|     <string name="playlist_add_stream_success">Pleylistə salındı</string> | ||||
|     <string name="mute">Səsi bağla</string> | ||||
|     <string name="popup_player">Ani pəncərə oynadıcı</string> | ||||
|     <string name="popup_player">Ani görüntü oynadıcı</string> | ||||
|     <string name="drawer_open">Çəkməcəni Aç</string> | ||||
|     <string name="hold_to_append">Növbələşdirmək üçün basılı tut</string> | ||||
|     <string name="play_queue_remove">Sil</string> | ||||
| @@ -590,7 +590,7 @@ | ||||
|     <string name="copyright">© %1$s, %2$s tərəfindən %3$s altında</string> | ||||
|     <string name="toast_no_player">Bu faylı oynatmaq üçün heç bir tətbiq quraşdırılmayıb</string> | ||||
|     <string name="settings_category_downloads_title">Endirmə</string> | ||||
|     <string name="msg_popup_permission">Bu icazə, ani pəncərə rejimində  | ||||
|     <string name="msg_popup_permission">Bu icazə, ani görüntü rejimində | ||||
| \naçmaq üçün lazımdır</string> | ||||
|     <string name="msg_copied">Buferə kopyalandı</string> | ||||
|     <string name="msg_threads">Parçalar</string> | ||||
| @@ -608,22 +608,22 @@ | ||||
|     <string name="peertube_instance_add_help">Nümunə URL\'sini daxil et</string> | ||||
|     <string name="peertube_instance_add_fail">Nümunəni doğrulamaq mümkün olmadı</string> | ||||
|     <string name="peertube_instance_url_help">%s-də bəyəndiyiniz nümunələri tapın</string> | ||||
|     <string name="show_hold_to_append_summary">Video \"Təfsilatlar:\"səhifəsində fon və ya ani pəncərə düyməsini basarkən ipucu göstər</string> | ||||
|     <string name="caption_setting_description">Oynadıcı altyazı mətn miqyasını və arxa fon üslublarını dəyişdirin. Effektiv olması üçün tətbiqi yenidən başlatmaq tələb olunur</string> | ||||
|     <string name="show_hold_to_append_summary">Video \"Təfsilatlar:\"səhifəsində fon və ya ani görüntü düyməsin basarkən ipucu göstər</string> | ||||
|     <string name="caption_setting_description">Oynadıcı altyazı mətn miqyasını və arxa fon üslublarını dəyişdir. Effektiv olması üçün tətbiqi yenidən başlatmaq tələb olunur</string> | ||||
|     <string name="error_occurred_detail">Xəta baş verdi: %1$s</string> | ||||
|     <string name="invalid_file">Fayl mövcud deyil, yaxud oxumaq və ya yazmaq icazəsi yoxdur</string> | ||||
|     <string name="parsing_error">Veb saytı təhlil etmək alınmadı</string> | ||||
|     <string name="playback_pitch">Ucalıq</string> | ||||
|     <string name="radio">Radio</string> | ||||
|     <string name="show_crash_the_player_title">\"Oynadıcını çökdür\" Göstər</string> | ||||
|     <string name="show_crash_the_player_summary">Oynadıcıdan istifadə edərkən çökdürmə seçimini göstər</string> | ||||
|     <string name="show_crash_the_player_summary">Oynadıcını istifadə edərkən çökdürmə seçimini göstər</string> | ||||
|     <string name="show_error_snackbar">Xəta balonu göstər</string> | ||||
|     <string name="create_error_notification">Xəta bildirişi yarat</string> | ||||
|     <string name="import_from">Burdan idxal edin</string> | ||||
|     <string name="export_to">Bura ixrac edin</string> | ||||
|     <string name="import_from">Burdan idxal et</string> | ||||
|     <string name="export_to">Bura ixrac et</string> | ||||
|     <string name="import_file_title">Faylı idxal et</string> | ||||
|     <string name="subscriptions_import_unsuccessful">Abunəlikləri idxal etmək mümkün olmadı</string> | ||||
|     <string name="start_accept_privacy_policy">Avropa Ümumi Məlumat Mühafizəsi Qaydasına (GDPR) riayət etmək üçün diqqətinizi NewPipe\'ın məxfilik siyasətinə cəlb edirik. Zəhmət olmasa, diqqətlə oxuyun. Xəta hesabatını bizə göndərmək üçün onu qəbul etməlisiniz.</string> | ||||
|     <string name="start_accept_privacy_policy">Avropa Ümumi Məlumat Mühafizəsi Qaydasına (GDPR) riayət etmək üçün diqqətinizi NewPipe məxfilik siyasətinə cəlb edirik. Zəhmət olmasa, diqqətlə oxuyun. Xəta hesabatın bizə göndərmək üçün qəbul etməlisiniz.</string> | ||||
|     <string name="overwrite_unrelated_warning">Bu adda fayl artıq mövcuddur</string> | ||||
|     <string name="download_already_pending">Bu adla gözlənilən bir endirmə var</string> | ||||
|     <string name="error_path_creation">Təyinat qovluğu yaradıla bilməz</string> | ||||
| @@ -643,7 +643,7 @@ | ||||
|     <string name="metadata_language">Dil</string> | ||||
|     <string name="metadata_privacy_public">İctimai</string> | ||||
|     <string name="subscribers_count_not_available">Abunəçi sayı əlçatan deyil</string> | ||||
|     <string name="read_full_license">Lisenziyanı oxuyun</string> | ||||
|     <string name="read_full_license">Lisenziyanı Oxu</string> | ||||
|     <string name="title_activity_history">Tarixçə</string> | ||||
|     <string name="charset_letters_and_digits">Hərflər və rəqəmlər</string> | ||||
|     <string name="crash_the_player">Oynadıcını çökdür</string> | ||||
| @@ -651,18 +651,18 @@ | ||||
|     <string name="settings_category_player_notification_title">Oynadıcı bildirişi</string> | ||||
|     <string name="streams_notification_channel_name">Yeni yayımlar</string> | ||||
|     <string name="error_report_channel_name">Xəta hesabatı bildirişi</string> | ||||
|     <string name="youtube_signature_deobfuscation_error">Video URL\'i imzasının şifrəsi qırılmadı</string> | ||||
|     <string name="no_streams_available_download">Endirmək üçün heç bir yayım yoxdur</string> | ||||
|     <string name="error_report_notification_toast">Xəta baş verdi, bildirişə baxın</string> | ||||
|     <string name="youtube_signature_deobfuscation_error">Video URL\'i imzası şifrəsi qırılmadı</string> | ||||
|     <string name="no_streams_available_download">Endirmək üçün yayım mövcud deyil</string> | ||||
|     <string name="error_report_notification_toast">Xəta baş verdi, bildirişi gör</string> | ||||
|     <string name="your_comment">Şərhiniz (İngiliscə):</string> | ||||
|     <string name="detail_thumbnail_view_description">Video oynat, müddət:</string> | ||||
|     <string name="no_available_dir">Zəhmət olmasa, daha sonra tənzimləmələrdə endirmə qovluğunu təyin et</string> | ||||
|     <string name="no_available_dir">Zəhmət olmasa, endirmə qovluğunu daha sonra tənzimləmələrdə təyin et</string> | ||||
|     <string name="msg_running">NewPipe Endirilir</string> | ||||
|     <string name="msg_calculating_hash">Hash hesablanır</string> | ||||
|     <string name="settings_file_charset_title">Fayl adlarında icazə verilən simvollar</string> | ||||
|     <string name="title_activity_about">NewPipe Haqqında</string> | ||||
|     <string name="tab_licenses">Lisenziyalar</string> | ||||
|     <string name="app_license">NewPipe müəllif hüquqlu sərbəst tətbiqdir: Siz onu istədiyiniz zaman istifadə edə, öyrənə, paylaşa və təkmilləşdirə bilərsiniz. Xüsusilə, siz Lisenziyanın 3-cü versiyası və ya (seçiminizə görə) hər hansı sonrakı versiyada Azad Proqram Təminatı Fondu tərəfindən dərc edilən GNU Ümumi İctimai Lisenziyanın şərtlərinə uyğun olaraq onu yenidən paylaya və/yaxud dəyişdirə bilərsiniz.</string> | ||||
|     <string name="app_license">NewPipe müəllif hüquqlu sərbəst tətbiqdir: Siz onu istədiyiniz zaman istifadə edə, öyrənə, paylaşa və təkmilləşdirə bilərsiniz. Xüsusilə, siz Lisenziyanın 3-cü versiyası və ya (seçiminizə görə) hər hansı sonrakı versiyada Azad Proqram Təminatı Fondu tərəfindən dərc edilən GNU Ümumi İctimai Lisenziya şərtlərinə uyğun olaraq onu yenidən paylaya və/yaxud dəyişdirə bilərsiniz.</string> | ||||
|     <string name="export_complete_toast">İxrac edildi</string> | ||||
|     <string name="main_page_content_swipe_remove">Elementləri silmək üçün sürüşdür</string> | ||||
|     <string name="no_playlist_bookmarked_yet">Hələ,əlfəcinlənmiş pleylistlər yoxdur</string> | ||||
| @@ -705,7 +705,7 @@ | ||||
|     <string name="youtube_music_premium_content">Bu video yalnız YouTube Music Premium üzvləri üçün əlçatandır, ona görə də NewPipe tərəfindən yayımlamaq və ya endirmək mümkün deyil.</string> | ||||
|     <string name="description_select_note">İndi açıqlamadakı mətni seçə bilərsiniz. Nəzərə alın ki, seçim rejimində səhifə titrəyə və keçidlər kliklənməyə bilər.</string> | ||||
|     <string name="notification_scale_to_square_image_summary">Bildirişdə göstərilən video miniatürünü 16:9-dan 1:1 görünüş nisbətinə qədər kəs</string> | ||||
|     <string name="notification_actions_summary">Aşağıdakı bildiriş fəaliyyətini hər birinin üzərinə toxunaraq redaktə edin. Sağdakı təsdiq qutularından istifadə edərək yığcam bildirişdə göstərilməsi üçün onların üçə qədərini seç</string> | ||||
|     <string name="notification_actions_summary">Aşağıdakı hər bir bildiriş fəaliyyətini üzərinə toxunaraq redaktə et. Sağdakı təsdiq qutularından istifadə edərək yığcam bildirişdə göstərmək üçün onların üçünü seç</string> | ||||
|     <string name="invalid_source">Belə fayl/məzmun mənbəyi yoxdur</string> | ||||
|     <string name="selected_stream_external_player_not_supported">Seçilmiş yayım xarici oynadıcılar tərəfindən dəstəklənmir</string> | ||||
|     <string name="streams_not_yet_supported_removed">Yükləyici tərəfindən hələ dəstəklənməyən yayımlar göstərilmir</string> | ||||
| @@ -718,7 +718,7 @@ | ||||
|     <string name="feed_toggle_show_future_items">Gələcək elementləri göstər</string> | ||||
|     <string name="feed_toggle_hide_played_items">Baxılan elementləri gizlət</string> | ||||
|     <string name="feed_toggle_hide_future_items">Gələcək elementləri gizlət</string> | ||||
|     <string name="faq_description">Tətbiqdən istifadə etməkdə çətinlik çəkirsinizsə, ümumi suallara bu cavabların yoxlanıldığına əmin olun!</string> | ||||
|     <string name="faq_description">Tətbiqi istifadə etməkdə çətinlik çəkirsinizsə, ümumi suallara bu cavabları yoxladığınıza əmin olun!</string> | ||||
|     <string name="faq_title">Tez-tez soruşulan suallar</string> | ||||
|     <string name="faq">Veb Saytında bax</string> | ||||
|     <string name="sort">Çeşidlə</string> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Daimi miniatürü ləğv et</string> | ||||
|     <string name="card">Kart</string> | ||||
|     <string name="msg_failed_to_copy">Buferə kopyalamaq alınmadı</string> | ||||
|     <string name="duplicate_in_playlist">Boz rəngdə olan pleylistlərdə artıq bu element var.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Dublikat %d dəfə əlavə edildi</string> | ||||
| </resources> | ||||
| @@ -11,16 +11,16 @@ | ||||
|     <string name="settings">Nastavení</string> | ||||
|     <string name="did_you_mean">Mysleli jste „%1$s“\?</string> | ||||
|     <string name="share_dialog_title">Sdílet s</string> | ||||
|     <string name="use_external_video_player_title">Použít externí video přehrávač</string> | ||||
|     <string name="use_external_video_player_title">Použít externí přehrávač videí</string> | ||||
|     <string name="use_external_audio_player_title">Použít externí audio přehrávač</string> | ||||
|     <string name="download_path_audio_summary">Stažené audio je uloženo zde</string> | ||||
|     <string name="download_path_audio_summary">Sem bude ukládáno stažené audio</string> | ||||
|     <string name="download_path_audio_dialog_title">Zvolte adresář pro stažené audio soubory</string> | ||||
|     <string name="download_path_audio_title">Adresář pro stažené audio</string> | ||||
|     <string name="default_resolution_title">Výchozí rozlišení</string> | ||||
|     <string name="play_with_kodi_title">Přehrát pomocí Kodi</string> | ||||
|     <string name="kore_not_found">Nainstalovat chybějící aplikaci Kore\?</string> | ||||
|     <string name="download_path_title">Adresář pro stažená videa</string> | ||||
|     <string name="download_path_summary">Stažená videa jsou uložena tady</string> | ||||
|     <string name="download_path_summary">Sem budou ukládána stažená videa</string> | ||||
|     <string name="download_path_dialog_title">Zvolte adresář pro stažená videa</string> | ||||
|     <string name="show_play_with_kodi_title">Zobrazit možnost „Přehrát pomocí Kodi“</string> | ||||
|     <string name="show_play_with_kodi_summary">Zobrazit možnost přehrání videa pomocí multimediálního centra Kodi</string> | ||||
| @@ -213,7 +213,7 @@ | ||||
|     <string name="no_valid_zip_file">Žádný platný soubor ZIP</string> | ||||
|     <string name="could_not_import_all_files">Upozornění: Nelze importovat všechny soubory.</string> | ||||
|     <string name="override_current_data">Tímto se anuluje vaše aktuální nastavení.</string> | ||||
|     <string name="video_player">Video přehrávač</string> | ||||
|     <string name="video_player">Přehrávač videa</string> | ||||
|     <string name="background_player">Přehrávač na pozadí</string> | ||||
|     <string name="popup_player">Přehrávač v okně</string> | ||||
|     <string name="preferred_player_fetcher_notification_title">Získávám informace…</string> | ||||
| @@ -298,7 +298,7 @@ | ||||
|     <string name="playback_pitch">Výška tónu</string> | ||||
|     <string name="unhook_checkbox">Odpojit (může způsobit zkreslení)</string> | ||||
|     <string name="no_streams_available_download">Ke stažení nejsou dostupné žádné streamy</string> | ||||
|     <string name="preferred_open_action_settings_title">Preferovaná \'otevřít\' akce</string> | ||||
|     <string name="preferred_open_action_settings_title">Preferovaná akce „otevření“</string> | ||||
|     <string name="preferred_open_action_settings_summary">Výchozí chování při otevírání obsahu — %s</string> | ||||
|     <string name="caption_setting_title">Titulky</string> | ||||
|     <string name="caption_setting_description">Upravuje velikost textu titulků a styly pozadí. Změny se projeví po restartu aplikace</string> | ||||
| @@ -550,7 +550,7 @@ | ||||
|     <string name="search_showing_result_for">Ukazuji výsledky pro: %s</string> | ||||
|     <string name="never">Nikdy</string> | ||||
|     <string name="wifi_only">Pouze na Wi-Fi</string> | ||||
|     <string name="autoplay_summary">Zahájit playback automaticky — %s</string> | ||||
|     <string name="autoplay_summary">Automaticky zahájit přehrávání — %s</string> | ||||
|     <string name="title_activity_play_queue">Přehrát frontu</string> | ||||
|     <string name="unsupported_url_dialog_message">Nelze rozpoznat zadané URL. Otevřít pomocí jiné aplikace\?</string> | ||||
|     <string name="auto_queue_toggle">Auto-fronta</string> | ||||
| @@ -668,7 +668,7 @@ | ||||
|     <string name="show_image_indicators_title">Ukázat indikátory obrázků</string> | ||||
|     <string name="remote_search_suggestions">Vzdálené návrhy vyhledávání</string> | ||||
|     <string name="local_search_suggestions">Lokální návrhy vyhledávání</string> | ||||
|     <string name="start_main_player_fullscreen_summary">Pokud je vypnuté automatické otáčení, nespouštějte video v mini přehrávači, ale přepněte se přímo do režimu celé obrazovky. Do mini přehrávače se lze i nadále dostat ukončením režimu celé obrazovky</string> | ||||
|     <string name="start_main_player_fullscreen_summary">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</string> | ||||
|     <string name="enqueued_next">Další ve frontě</string> | ||||
|     <string name="enqueue_next_stream">Přidat do fronty (další)</string> | ||||
|     <string name="main_page_content_swipe_remove">Tažením položky odstraníte</string> | ||||
| @@ -728,7 +728,7 @@ | ||||
|     <string name="feed_toggle_show_future_items">Zobrazit nadcházející položky</string> | ||||
|     <string name="streams_not_yet_supported_removed">Streamy, které zatím nejsou podporovány systémem stahování, nebudou zobrazeny</string> | ||||
|     <string name="select_quality_external_players">Vyberte kvalitu pro externí přehrávače</string> | ||||
|     <string name="no_video_streams_available_for_external_players">U externích přehrávačů nejsou dostupné žádné video streamy</string> | ||||
|     <string name="no_video_streams_available_for_external_players">U externích přehrávačů nejsou k dispozici žádné videostreamy</string> | ||||
|     <string name="feed_toggle_hide_played_items">Skrýt zhlédnuté položky</string> | ||||
|     <string name="feed_toggle_hide_future_items">Skrýt nadcházející položky</string> | ||||
|     <string name="faq_title">Často kladené dotazy</string> | ||||
| @@ -743,4 +743,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Zrušení nastavení trvalého náhledu</string> | ||||
|     <string name="card">Karta</string> | ||||
|     <string name="msg_failed_to_copy">Kopírování do schránky se nezdařilo</string> | ||||
|     <string name="duplicate_in_playlist">Zašedlé playlisty již obsahují tuto položku.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplikát přidán %dkrát</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Dauerhaftes Vorschaubild aufheben</string> | ||||
|     <string name="msg_failed_to_copy">Kopieren in die Zwischenablage fehlgeschlagen</string> | ||||
|     <string name="card">Karte</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplikat %d mal hinzugefügt</string> | ||||
|     <string name="duplicate_in_playlist">Die ausgegrauten Wiedergabelisten enthalten dieses Element bereits.</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Κατάργηση μόνιμης μικρογραφίας</string> | ||||
|     <string name="msg_failed_to_copy">Αποτυχία αντιγραφής στο πρόχειρο</string> | ||||
|     <string name="card">Κάρτα</string> | ||||
|     <string name="duplicate_in_playlist">Οι λίστες αναπαραγωγής που είναι γκριζαρισμένες περιέχουν ήδη αυτό το στοιχείο.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Προστέθηκε διπλότυπο %d φορά(ες)</string> | ||||
| </resources> | ||||
| @@ -746,4 +746,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Desactivar las miniaturas permanente</string> | ||||
|     <string name="msg_failed_to_copy">Error al copiar al portapapeles</string> | ||||
|     <string name="card">Tarjeta</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicado añadido %d vez/veces</string> | ||||
|     <string name="duplicate_in_playlist">Las listas de reproducción que están en gris ya contienen este elemento.</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="msg_failed_to_copy">Lõikelauale kopeerimine ei õnnestunud</string> | ||||
|     <string name="unset_playlist_thumbnail">Eemalda püsiv pisipilt</string> | ||||
|     <string name="card">Kaart</string> | ||||
|     <string name="duplicate_in_playlist">Hallina kuvatud esitusloendid juba sisaldavad seda kirjet.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Topeltkirje lisatud %d kord(a)</string> | ||||
| </resources> | ||||
| @@ -108,7 +108,7 @@ | ||||
|     <string name="title_activity_about">NewPipe aplikazioari buruz</string> | ||||
|     <string name="title_licenses">Hirugarrengoen lizentziak</string> | ||||
|     <string name="copyright" formatted="true">© %1$s %2$s. %3$s</string> | ||||
|     <string name="tab_about">Honi buruz</string> | ||||
|     <string name="tab_about">Honi buruz eta ohiko galderak</string> | ||||
|     <string name="tab_licenses">Lizentziak</string> | ||||
|     <string name="app_description">Androiderako streaming libre eta arina.</string> | ||||
|     <string name="view_on_github">Ikusi GitHub zerbitzarian</string> | ||||
| @@ -718,4 +718,18 @@ | ||||
|     <string name="select_quality_external_players">Hautatu kanpoko erreproduzigailuen kalitatea</string> | ||||
|     <string name="feed_toggle_hide_future_items">Ezkutatu etorkizuneko elementuak</string> | ||||
|     <string name="feed_toggle_hide_played_items">Ezkutatu ikusitako elementuak</string> | ||||
|     <string name="duplicate_in_playlist">Grisez idatzitako erreprodukzio-zerrendek jada badute elementu hau.</string> | ||||
|     <string name="faq">Webgunean ikusi</string> | ||||
|     <string name="msg_failed_to_copy">Akatsa arbelera kopiatzean</string> | ||||
|     <string name="faq_description">Arazoren bat baduzu aplikazioa erabiltzerakoan, irakur itzazu ohiko galdera hauen erantzunak!</string> | ||||
|     <string name="unset_playlist_thumbnail">Betiko miniatura kendu</string> | ||||
|     <string name="app_update_unavailable_toast">NewPipe-en azken bertsioa erabiltzen ari zara</string> | ||||
|     <string name="app_update_available_notification_text">Sakatu %s deskargatzeko</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Kopia %d behin/aldiz gehitua</string> | ||||
|     <string name="card">Txartela</string> | ||||
|     <string name="night_theme_available">Aukera hau Gaiarako %s aukeratua badago soilik dago erabilgarri</string> | ||||
|     <string name="sort">Ordenatu</string> | ||||
|     <string name="fast_mode">Modu azkarra</string> | ||||
|     <string name="import_subscriptions_hint">Hiru-puntutako menutik harpidetzak inportatu edo esportatu</string> | ||||
|     <string name="faq_title">Maiz galdetutako galderak</string> | ||||
| </resources> | ||||
| @@ -743,4 +743,6 @@ | ||||
|     <string name="app_update_available_notification_text">Appuyez pour télécharger %s</string> | ||||
|     <string name="msg_failed_to_copy">Échec de la copie dans le presse-papiers</string> | ||||
|     <string name="night_theme_available">Cette option est disponible seulement si %s est sélectionné pour le thème</string> | ||||
|     <string name="duplicate_in_playlist">Les listes de lecture grisées contiennent déjà cet élément.</string> | ||||
|     <string name="card">Carte</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="msg_failed_to_copy">Produciuse un erro ao copiar no portapapeis</string> | ||||
|     <string name="unset_playlist_thumbnail">Desactivala miniatura permanente</string> | ||||
|     <string name="card">Tarxeta</string> | ||||
|     <string name="duplicate_in_playlist">As listas de reprodución que se atopan atenuadas xa conteñen este elemento.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicado engadido %d vez/veces</string> | ||||
| </resources> | ||||
| @@ -756,4 +756,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">ביטול הגדרת תמונה ייצוגית קבועה</string> | ||||
|     <string name="card">כרטיס</string> | ||||
|     <string name="msg_failed_to_copy">ההעתקה ללוח הגזירים נכשלה</string> | ||||
|     <string name="duplicate_in_playlist">רשימות הנגינה שבוטלו וסומנו באפור כבר מכילות את הפריט הזה.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">הכפיל נוסף %d פעמים</string> | ||||
| </resources> | ||||
| @@ -717,4 +717,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Batalkan penetapan gambar kecil permanen</string> | ||||
|     <string name="msg_failed_to_copy">Gagal menyalin ke papan klip</string> | ||||
|     <string name="card">Kartu</string> | ||||
|     <string name="duplicate_in_playlist">Daftar putar yang bewarna abu-abu sudah berisi item ini.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplikat ditambahkan %d kali</string> | ||||
| </resources> | ||||
| @@ -742,5 +742,7 @@ | ||||
|     <string name="night_theme_available">Questa opzione è disponibile solo se %s è selezionato come Tema</string> | ||||
|     <string name="msg_failed_to_copy">Copia negli appunti non riuscita</string> | ||||
|     <string name="card">Schede</string> | ||||
|     <string name="unset_playlist_thumbnail">Disattiva la miniatura permanente</string> | ||||
|     <string name="unset_playlist_thumbnail">Disattiva copertina permanente</string> | ||||
|     <string name="duplicate_in_playlist">Le playlist in grigio contengono già questo elemento.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Doppione aggiunto %d volta/e</string> | ||||
| </resources> | ||||
| @@ -716,4 +716,6 @@ | ||||
|     <string name="import_subscriptions_hint">3 点メニューから登録チャンネルをインポートまたはエクスポートします</string> | ||||
|     <string name="card">カード</string> | ||||
|     <string name="msg_failed_to_copy">クリップボードへのコピーに失敗しました</string> | ||||
|     <string name="duplicate_in_playlist">灰色で表示されているプレイリストには、すでにこのアイテムが含まれています。</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">%d 回重複追加されました</string> | ||||
| </resources> | ||||
| @@ -715,4 +715,8 @@ | ||||
|     <string name="app_update_available_notification_text">%s를 다운로드하려면 탭하세요.</string> | ||||
|     <string name="unset_playlist_thumbnail">영구 썸네일 설정 해제</string> | ||||
|     <string name="night_theme_available">이 옵션은 테마로 %s를 선택한 경우에만 사용할 수 있음</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">중복 추가 %d 번</string> | ||||
|     <string name="duplicate_in_playlist">회색으로 표시된 재생 목록에 이미 이 항목이 포함되어 있습니다.</string> | ||||
|     <string name="card">카드</string> | ||||
|     <string name="msg_failed_to_copy">클립보드 복사 실패</string> | ||||
| </resources> | ||||
| @@ -21,18 +21,18 @@ | ||||
|     <string name="download_path_audio_dialog_title">Velg nedlastingsmappe for lydfiler</string> | ||||
|     <string name="default_resolution_title">Forvalgt oppløsning</string> | ||||
|     <string name="play_with_kodi_title">Spill av med Kodi</string> | ||||
|     <string name="kore_not_found">Installer manglende Kore-program\?</string> | ||||
|     <string name="kore_not_found">Installer manglende Kore-app\?</string> | ||||
|     <string name="show_play_with_kodi_title">Vis \"Spill av med Kodi\"-valg</string> | ||||
|     <string name="show_play_with_kodi_summary">Vis valg for avspilling via Kodi mediasenter</string> | ||||
|     <string name="play_audio">Lyd</string> | ||||
|     <string name="default_audio_format_title">Forvalgt lydformat</string> | ||||
|     <string name="theme_title">Drakt</string> | ||||
|     <string name="theme_title">Tema</string> | ||||
|     <string name="dark_theme_title">Mørk</string> | ||||
|     <string name="light_theme_title">Lys</string> | ||||
|     <string name="download_dialog_title">Last ned</string> | ||||
|     <string name="show_next_and_similar_title">Vis \"Neste\" og \"Lignende\" -videoer</string> | ||||
|     <string name="unsupported_url">Nettadressen støttes ikke</string> | ||||
|     <string name="content_language_title">Foretrukket innholdsspråk</string> | ||||
|     <string name="content_language_title">Forvalgt innholdsspråk</string> | ||||
|     <string name="settings_category_video_audio_title">Video og lyd</string> | ||||
|     <string name="settings_category_appearance_title">Utseende</string> | ||||
|     <string name="background_player_playing_toast">Spiller i bakgrunnen</string> | ||||
| @@ -65,7 +65,7 @@ | ||||
|     <string name="downloads">Nedlastinger</string> | ||||
|     <string name="downloads_title">Nedlastinger</string> | ||||
|     <string name="error_report_title">Feilrapport</string> | ||||
|     <string name="app_ui_crash">Program/brukergrensesnitt krasjet</string> | ||||
|     <string name="app_ui_crash">App/brukergrensesnitt krasjet</string> | ||||
|     <string name="pause">Pause</string> | ||||
|     <string name="delete">Slett</string> | ||||
|     <string name="checksum">Sjekksum</string> | ||||
| @@ -77,7 +77,7 @@ | ||||
|     <string name="msg_running_detail">Trykk for detaljer</string> | ||||
|     <string name="msg_wait">Vent…</string> | ||||
|     <string name="msg_copied">Kopiert til utklippstavle</string> | ||||
|     <string name="info_labels">Hva:\\nForespørsel:\\nInnholdsspråk:\\nInnholdsland:\\nProgramspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOS-versjon:</string> | ||||
|     <string name="info_labels">Hva:\\nForespørsel:\\nInnholdsspråk:\\nInnholdsland:\\nAppspråk:\\nTjeneste:\\nGMT-tid:\\nPakke:\\nVersjon:\\nOS-versjon:</string> | ||||
|     <string name="start">Start</string> | ||||
|     <string name="no_available_dir">Definer en nedlastingsmappe senere i innstillingene</string> | ||||
|     <string name="title_activity_recaptcha">reCAPTCHA-oppgave</string> | ||||
| @@ -241,15 +241,15 @@ | ||||
|     <string name="resize_fit">Tilpass</string> | ||||
|     <string name="resize_fill">Fyll</string> | ||||
|     <string name="resize_zoom">Forstørr</string> | ||||
|     <string name="use_inexact_seek_title">Bruk rask unøyaktig blafring</string> | ||||
|     <string name="settings_category_debug_title">Feilretting</string> | ||||
|     <string name="use_inexact_seek_title">Bruk rask unøyaktig spoling</string> | ||||
|     <string name="settings_category_debug_title">Feilsøking</string> | ||||
|     <string name="file">Fil</string> | ||||
|     <string name="invalid_directory">Ingen slik mappe</string> | ||||
|     <string name="invalid_source">Ingen slik fil/innholdskilde</string> | ||||
|     <string name="invalid_file">Filen finnes ikke eller så har du ikke tilgang til å lese eller skrive til den</string> | ||||
|     <string name="file_name_empty_error">Filnavn kan ikke være tomt</string> | ||||
|     <string name="error_occurred_detail">En feil inntraff: %1$s</string> | ||||
|     <string name="caption_auto_generated">Auto-generert</string> | ||||
|     <string name="caption_auto_generated">Autogenerert</string> | ||||
|     <string name="import_title">Importer</string> | ||||
|     <string name="import_from">Importer fra</string> | ||||
|     <string name="export_to">Eksporter til</string> | ||||
| @@ -282,10 +282,10 @@ | ||||
|     <string name="delete_search_history_alert">Slett hele søkehistorikken\?</string> | ||||
|     <string name="search_history_deleted">Søkehistorikken er slettet</string> | ||||
|     <string name="one_item_deleted">Ett element slettet.</string> | ||||
|     <string name="toast_no_player">Inget program installert for avspilling av denne filen</string> | ||||
|     <string name="toast_no_player">Ingen app installert for å spille av denne filen</string> | ||||
|     <string name="caption_setting_title">Undertekster</string> | ||||
|     <string name="caption_setting_description">Endre spillerens undertekststørrelse og bakgrunnsstiler. Krever omstart av appen for å tre i kraft</string> | ||||
|     <string name="app_license">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.</string> | ||||
|     <string name="app_license">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.</string> | ||||
|     <string name="import_settings">Ønsker du også å importere innstillinger?</string> | ||||
|     <string name="subscriptions_import_unsuccessful">Kunne ikke importere abonnementer</string> | ||||
|     <string name="subscriptions_export_unsuccessful">Kunne ikke eksportere abonnementer</string> | ||||
| @@ -295,7 +295,7 @@ | ||||
| \n2. Logg inn når forespurt | ||||
| \n3. Klikk på \"All data inkludert\", så på \"Fjern merket for alle\", så på kun \"Abonnementer\", og klikk så \"OK\" | ||||
| \n4. Klikk på \"Neste steg\" og så på \"Opprett eksport\" | ||||
| \n5. Klikk på \"Last ned\"-knappen etter den vises%1$s | ||||
| \n5. Klikk på \"Last ned\"-knappen etter den vises | ||||
| \n6. Klikk på IMPORTER FIL under og velg den nedlastede .zip filen | ||||
| \n7. [Dersom .zip importen feiler] Pakk ut .csv filen (vanligvis under \"YouTube og YouTube Music/subscriptions/subscriptions.csv\"), klikk på IMPORTER FIL under og velg den utpakkede csv filen</string> | ||||
|     <string name="import_soundcloud_instructions">Importer en SoundCloud-profil ved å skrive enten nettadressen eller din ID: | ||||
| @@ -304,15 +304,15 @@ | ||||
| \n2. Gå til denne nettadressen: %1$s | ||||
| \n3. Logg inn når forespurt | ||||
| \n4. Kopier profil-nettadressen du ble videresendt til.</string> | ||||
|     <string name="use_inexact_seek_summary">Unøyaktig blafring lar spilleren søke posisjoner raskere med redusert presisjon. Å søke i 5, 15 eller 25 sekunder fungerer ikke med dette</string> | ||||
|     <string name="use_inexact_seek_summary">Unøyaktig spoling lar spilleren søke posisjoner raskere med redusert presisjon. Å søke i 5, 15 eller 25 sekunder fungerer ikke med dette</string> | ||||
|     <string name="download_thumbnail_summary">Skru av for å stoppe innlasting av miniatyrbilder, noe som sparer data- og minnebruk. Endring av dette vil tømme både disk- og minne-hurtiglager</string> | ||||
|     <string name="auto_queue_summary">Fortsett fullendt (ikke-repeterende) avspillingskø ved å legge til en relatert strøm</string> | ||||
|     <string name="enable_leak_canary_summary">Minnelekkasjeoppsyn kan forårsake programmet å opptre uresponsivt under haugdumping</string> | ||||
|     <string name="enable_leak_canary_summary">Overvåkning av minnelekkasjer kan forårsake at appen ikke svarer under heap dumping</string> | ||||
|     <string name="enable_disposed_exceptions_title">Rapporter feil utenfor livssyklusen</string> | ||||
|     <string name="enable_disposed_exceptions_summary">Tving rapportering av uleverbare Rx-unntak utenom fragment eller aktivitetslevetid etter forkastelse</string> | ||||
|     <string name="unhook_checkbox">Avhekt (kan forårsake forvrenging)</string> | ||||
|     <string name="privacy_policy_title">NewPipes personvernspraksis</string> | ||||
|     <string name="privacy_policy_encouragement">NewPipe-prosjektet tar ditt personvern veldig alvorlig. Derfor samler ikke programmet inn data uten ditt samtykke. | ||||
|     <string name="privacy_policy_encouragement">NewPipe-prosjektet tar ditt personvern veldig alvorlig. Derfor samler ikke appen inn data uten ditt samtykke. | ||||
| \nNewPipes personvernspraksis forklarer i detalj hvilken data som sendes og lagres når du sender en krasjrapport.</string> | ||||
|     <string name="read_privacy_policy">Les personvernspraksis</string> | ||||
|     <string name="start_accept_privacy_policy">For å overholde EUs personvernforordning (GDPR), vil vi rette oppmerksomheten din mot NewPipe sin personvernerklæring. Vennligst les den nøye. | ||||
| @@ -321,8 +321,8 @@ | ||||
|     <string name="decline">Avslå</string> | ||||
|     <string name="limit_data_usage_none_description">Ubegrenset</string> | ||||
|     <string name="limit_mobile_data_usage_title">Begrens oppløsning når mobildata brukes</string> | ||||
|     <string name="minimize_on_exit_title">Minimer ved programbytte</string> | ||||
|     <string name="minimize_on_exit_summary">Handling ved bytting til annet program fra hovedspiller — %s</string> | ||||
|     <string name="minimize_on_exit_title">Minimer ved appbytte</string> | ||||
|     <string name="minimize_on_exit_summary">Handling ved bytting til annen app fra hovedspiller — %s</string> | ||||
|     <string name="minimize_on_exit_none_description">Ingen</string> | ||||
|     <string name="minimize_on_exit_background_description">Minimer til bakgrunnsspiller</string> | ||||
|     <string name="minimize_on_exit_popup_description">Minimer til oppsprettsspiller</string> | ||||
| @@ -342,7 +342,7 @@ | ||||
|     <string name="settings_category_updates_title">Oppdateringer</string> | ||||
|     <string name="events">Hendelser</string> | ||||
|     <string name="file_deleted">Fil slettet</string> | ||||
|     <string name="app_update_notification_channel_name">Programoppgraderingsmerknad</string> | ||||
|     <string name="app_update_notification_channel_name">Varsel om appoppdatering</string> | ||||
|     <string name="app_update_notification_channel_description">Merknader for nye NewPipe-versjoner</string> | ||||
|     <string name="download_to_sdcard_error_title">Ekstern lagring utilgjengelig</string> | ||||
|     <string name="download_to_sdcard_error_message">Nedlasting til eksternt SD-kort er ikke mulig. Tilbakestill plassering av nedlastingsmappe\?</string> | ||||
| @@ -353,11 +353,11 @@ | ||||
|     <string name="main_page_content_summary">Hvilke faner vises på hovedsiden</string> | ||||
|     <string name="conferences">Konferanser</string> | ||||
|     <string name="updates_setting_title">Oppdatering</string> | ||||
|     <string name="updates_setting_description">Varsle om programoppdatering når en ny versjon er tilgjengelig</string> | ||||
|     <string name="list_view_mode">Listevisningmodus</string> | ||||
|     <string name="updates_setting_description">Vis varsel om appoppdatering når en ny versjon er tilgjengelig</string> | ||||
|     <string name="list_view_mode">Listevisningsmodus</string> | ||||
|     <string name="list">Liste</string> | ||||
|     <string name="grid">Rutenett</string> | ||||
|     <string name="auto">Auto</string> | ||||
|     <string name="auto">Automatisk</string> | ||||
|     <string name="app_update_available_notification_title">Ny NewPipe-versjon er tilgjengelig!</string> | ||||
|     <string name="missions_header_finished">Fullført</string> | ||||
|     <string name="paused">pauset</string> | ||||
| @@ -430,7 +430,7 @@ | ||||
|         <item quantity="one">%s lytter</item> | ||||
|         <item quantity="other">%s lyttere</item> | ||||
|     </plurals> | ||||
|     <string name="localization_changes_requires_app_restart">Språket vil først bli endret etter at programmet har blitt omstartet</string> | ||||
|     <string name="localization_changes_requires_app_restart">Språket vil endres etter at appen har startet på nytt</string> | ||||
|     <string name="default_kiosk_page_summary">Standard kiosk</string> | ||||
|     <string name="peertube_instance_url_title">PeerTube-instanser</string> | ||||
|     <string name="local">Lokal</string> | ||||
| @@ -449,7 +449,7 @@ | ||||
|     <string name="playlist_no_uploader">Autogenerert (fant ingen opplaster)</string> | ||||
|     <string name="recovering">gjenoppretter</string> | ||||
|     <string name="error_download_resource_gone">Kan ikke gjenopprette denne nedlastingen</string> | ||||
|     <string name="seek_duration_title">Hurtigframoverspoling/-tilbakeblafringsvarighet</string> | ||||
|     <string name="seek_duration_title">Hurtigframoverspoling/-tilbakespolingsvarighet</string> | ||||
|     <string name="permission_display_over_apps">Gi tillatelse til å vise over andre apper</string> | ||||
|     <string name="app_language_title">Programspråk</string> | ||||
|     <string name="systems_language">Systemforvalg</string> | ||||
| @@ -486,7 +486,7 @@ | ||||
|     <string name="feed_group_dialog_empty_selection">Ingen abonnement valgt</string> | ||||
|     <string name="feed_group_dialog_select_subscriptions">Velg abonnementer</string> | ||||
|     <string name="feed_groups_header_title">Kanalgrupper</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_disable_button">Skru av raskt modus</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_disable_button">Skru av hurtigmodus</string> | ||||
|     <string name="feed_update_threshold_title">Strømoppdateringsterskel</string> | ||||
|     <string name="settings_category_feed_title">Strøm</string> | ||||
|     <string name="feed_processing_message">Behandler strøm…</string> | ||||
| @@ -505,7 +505,7 @@ | ||||
|     <string name="remove_watched">Fjern sette</string> | ||||
|     <string name="channel_created_by">Opprettet av %s</string> | ||||
|     <string name="video_detail_by">Av %s</string> | ||||
|     <string name="youtube_restricted_mode_enabled_title">Slå på YouTubes \"begrensede modus\"</string> | ||||
|     <string name="youtube_restricted_mode_enabled_title">Slå på YouTubes \"Begrenset modus\"</string> | ||||
|     <string name="never">Aldri</string> | ||||
|     <string name="wifi_only">Kun på Wi-Fi</string> | ||||
|     <string name="select_a_playlist">Velg en spilleliste</string> | ||||
| @@ -524,7 +524,7 @@ | ||||
| \n• Hent hele abonnementskanalen, noe som er tregt, men fullstendig. | ||||
| \n• Bruk av et dedikert tjenesteendepunkt, noe som er raskt men vanligvis ikke fullstendig. | ||||
| \n | ||||
| \nForskjellen mellom dem er at den raske vanligvis mangler info, som elementers varighet eller type (kan ikke skjelne mellom sanntidsvideoer og normale) og det kan gi færre elementer. | ||||
| \nForskjellen mellom dem er at den raske vanligvis mangler info, som elementers varighet eller type (kan ikke skille mellom direktesendinger og normale videoer) og det kan gi færre elementer. | ||||
| \n | ||||
| \nYouTube er et eksempel på en tjeneste som tilbyr denne raske metoden med sin RSS-informasjonskanal. | ||||
| \n | ||||
| @@ -537,17 +537,17 @@ | ||||
|     <string name="feed_use_dedicated_fetch_method_summary">Tilgjengelig i noen tjenester, det er vanligvis mye raskere, men kan gi et begrenset antall elementer, og ofte ufullstendig informasjon (f.eks. ingen varighet, elementtype, eller sanntidsstatus)</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_title">Hent fra dedikert strøm når tilgjengelig</string> | ||||
|     <string name="feed_update_threshold_summary">Tid siden siste oppdatering før et abonnement vurderes utdatert — %s</string> | ||||
|     <string name="new_seek_duration_toast">Som følge av begrensninger i ExoPlayer er blafringsdistansen begrenset til %d sekunder</string> | ||||
|     <string name="new_seek_duration_toast">Som følge av begrensninger i ExoPlayer er blafringsdistansen kun %d sekunder</string> | ||||
|     <string name="remove_watched_popup_warning">Videoer som har blitt sett før og etter at de er lagt til spillelisten, vil bli fjernet. | ||||
| \nEr du sikker\? Dette kan ikke angres!</string> | ||||
|     <string name="autoplay_summary">Start avspilling automatisk — %s</string> | ||||
|     <string name="unsupported_url_dialog_message">Kunne ikke gjenkjenne angitt nettadresse. Åpne den med annet program\?</string> | ||||
|     <string name="unsupported_url_dialog_message">Kunne ikke gjenkjenne angitt nettadresse. Åpne den med et annet program\?</string> | ||||
|     <string name="content_not_supported">Innholdet støttes ikke enda av NewPipe. | ||||
| \n | ||||
| \nStøtte vil forhåpentligvis komme til i en senere versjon.</string> | ||||
|     <string name="playlist_page_summary">Spillelisteside</string> | ||||
|     <string name="detail_sub_channel_thumbnail_view_description">Kanalens avatar-miniatyrbilde</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_enable_button">Skru på raskt modus</string> | ||||
|     <string name="feed_use_dedicated_fetch_method_enable_button">Skru på hurtigmodus</string> | ||||
|     <string name="feed_group_show_only_ungrouped_subscriptions">Vis kun ugrupperte abonnementer</string> | ||||
|     <string name="title_activity_play_queue">Spill kø</string> | ||||
|     <string name="no_playlist_bookmarked_yet">Ingen spillelistebokmerker enda</string> | ||||
| @@ -595,18 +595,18 @@ | ||||
|     <string name="soundcloud_go_plus_content">Dette er et spor fra SoundCloud Go+, ihvertfall i ditt land, så det kan ikke strømmes eller lastes ned av NewPipe.</string> | ||||
|     <string name="georestricted_content">Innholdet er ikke tilgjengelig i din region.</string> | ||||
|     <string name="download_has_started">Nedlastingen har startet</string> | ||||
|     <string name="select_night_theme_toast">Du kan velge din favorittnattdrakt nedenfor</string> | ||||
|     <string name="night_theme_summary">Velg din favorittnattdrakt — %s</string> | ||||
|     <string name="auto_device_theme_title">Automatisk (enhetsdrakt)</string> | ||||
|     <string name="select_night_theme_toast">Du kan velge ditt favorittnattema nedenfor</string> | ||||
|     <string name="night_theme_summary">Velg ditt favorittnattema — %s</string> | ||||
|     <string name="auto_device_theme_title">Automatisk (enhetstema)</string> | ||||
|     <string name="radio">Radio</string> | ||||
|     <string name="featured">Framhevet</string> | ||||
|     <string name="recaptcha_solve">Løs</string> | ||||
|     <string name="night_theme_title">Nattdrakt</string> | ||||
|     <string name="night_theme_title">Nattema</string> | ||||
|     <string name="show_channel_details">Vis kanaldetaljer</string> | ||||
|     <string name="disable_media_tunneling_summary">Skru av media-tunnelering hvis du opplever svart skjerm eller videohakking</string> | ||||
|     <string name="disable_media_tunneling_title">Skru av media-tunnelering</string> | ||||
|     <string name="description_select_note">Du kan nå velge tekst inne i beskrivelsen. Merk at siden kan flimre og lenker er kanskje ikke klikkbare i utvalgsmodus.</string> | ||||
|     <string name="feed_load_error_fast_unknown">Raskt modus for informasjonskanal tilbyr ikke mer info om dette.</string> | ||||
|     <string name="feed_load_error_fast_unknown">Hurtigmodus for informasjonskanal tilbyr ikke mer info om dette.</string> | ||||
|     <string name="feed_load_error_terminated">Skaperens konto har blitt terminert. | ||||
| \nNewPipe vil ikke kunne laste inn denne informasjonskanalen i fremtiden. | ||||
| \nØnsker du å oppheve ditt abonnement på denne kanalen\?</string> | ||||
| @@ -619,7 +619,7 @@ | ||||
|     <string name="feed_load_error">Kunne ikke laste inn informasjonskanal</string> | ||||
|     <string name="downloads_storage_use_saf_summary_api_29">Fra Android 10 er kun «lagringstilgangsrammeverk» støttet</string> | ||||
|     <string name="downloads_storage_ask_summary_no_saf_notice">Du vil bli spurt om hvor du vil lagre hver nedlastning</string> | ||||
|     <string name="seekbar_preview_thumbnail_title">Forhåndsvisning av miniatyrbilde i søkefelt</string> | ||||
|     <string name="seekbar_preview_thumbnail_title">Forhåndsvisning av miniatyrbilde på spolelinjen</string> | ||||
|     <string name="no_dir_yet">Ingen nedlastingsmappe er satt ennå, velg en standard nedlastingsmappe nå</string> | ||||
|     <string name="off">Av</string> | ||||
|     <string name="on">På</string> | ||||
| @@ -722,4 +722,12 @@ | ||||
|     <string name="sort">Sorter</string> | ||||
|     <string name="toggle_all">Velg alle</string> | ||||
|     <string name="faq_description">Hvis du har problemer med å bruke appen, så bør du sjekke ut disse svarene fra generelle spørsmål!</string> | ||||
|     <string name="unset_playlist_thumbnail">Skru av vedvarende miniatyrbilde</string> | ||||
|     <string name="night_theme_available">Dette valget er kun tilgjengelig dersom %s er valgt som tema</string> | ||||
|     <string name="msg_failed_to_copy">Klarte ikke å kopiere til utklippstavlen</string> | ||||
|     <string name="app_update_available_notification_text">Trykk for å laste ned %s</string> | ||||
|     <string name="app_update_unavailable_toast">Du bruker den nyeste versjonen av NewPipe</string> | ||||
|     <string name="card">Kort</string> | ||||
|     <string name="import_subscriptions_hint">Importer eller eksporter fra trepunktsmenyen</string> | ||||
|     <string name="fast_mode">Hurtigmodus</string> | ||||
| </resources> | ||||
| @@ -727,7 +727,9 @@ | ||||
|     <string name="app_update_unavailable_toast">U heeft de laatste versie van NewPipe</string> | ||||
|     <string name="app_update_available_notification_text">Klik om %s te downloaden</string> | ||||
|     <string name="msg_failed_to_copy">Kon niet naar klembord kopiëren</string> | ||||
|     <string name="night_theme_available">Deze instelling is alleen beschikbaar als %s als thema ingesteld is</string> | ||||
|     <string name="night_theme_available">Deze instelling is alleen beschikbaar als %s als Thema ingesteld is</string> | ||||
|     <string name="card">Kaart</string> | ||||
|     <string name="unset_playlist_thumbnail">Miniatuur niet ingesteld</string> | ||||
|     <string name="duplicate_in_playlist">De afspeellijsten die grijs zijn, bevatten dit item al.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicaat is %d tijd(en) toegevoegd</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="card">କାର୍ଡ</string> | ||||
|     <string name="msg_failed_to_copy">କ୍ଲିପବୋର୍ଡରେ କପି କରିବାରେ ବିଫଳ</string> | ||||
|     <string name="unset_playlist_thumbnail">ସ୍ଥାୟୀ ଥମ୍ୱନେଲ୍ ସେଟ୍ କରନ୍ତୁ</string> | ||||
|     <string name="duplicate_in_playlist">ଧୂସର ହୋଇଯାଇଥିବା ପ୍ଲେଲିଷ୍ଟଗୁଡିକ ପୂର୍ବରୁ ଏହି ଆଇଟମ୍ ଧାରଣ କରିଥାଏ ।</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">ନକଲ %d ସମୟ (ମୋଟ) ଯୋଡି ହୋଇଛି</string> | ||||
| </resources> | ||||
| @@ -422,7 +422,7 @@ | ||||
|     <string name="error_timeout">Minął czas połączenia</string> | ||||
|     <string name="downloads_storage_use_saf_title">Używaj systemowego selektora folderów (SAF)</string> | ||||
|     <string name="downloads_storage_use_saf_summary">Systemowy selektor folderów (SAF) umożliwia pobieranie na kartę pamięci</string> | ||||
|     <string name="clear_playback_states_title">Usuń pozycje odtwarzania</string> | ||||
|     <string name="clear_playback_states_title">Wyczyść pozycje odtwarzania</string> | ||||
|     <string name="clear_playback_states_summary">Usuwa wszystkie pozycje odtwarzania</string> | ||||
|     <string name="delete_playback_states_alert">Usunąć wszystkie pozycje odtwarzania\?</string> | ||||
|     <string name="drawer_header_description">Przełącz usługę, aktualnie wybrana:</string> | ||||
| @@ -531,7 +531,7 @@ | ||||
|     <string name="artists">Artyści</string> | ||||
|     <string name="albums">Albumy</string> | ||||
|     <string name="songs">Piosenki</string> | ||||
|     <string name="restricted_video">To wideo ma ograniczenia wiekowe. | ||||
|     <string name="restricted_video">To wideo jest objęte ograniczeniem wiekowym. | ||||
| \n | ||||
| \nWłącz „%1$s” w ustawieniach, jeśli chcesz je zobaczyć.</string> | ||||
|     <string name="remove_watched_popup_yes_and_partially_watched_videos">Tak, i częściowo obejrzane wideo</string> | ||||
| @@ -578,7 +578,7 @@ | ||||
|     <string name="enqueued">Dodano do kolejki</string> | ||||
|     <string name="enqueue_stream">Dodaj do kolejki</string> | ||||
|     <string name="show_memory_leaks">Pokaż wycieki pamięci</string> | ||||
|     <string name="clear_cookie_summary">Wyczyść ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA</string> | ||||
|     <string name="clear_cookie_summary">Usuwa ciasteczka, które NewPipe przechowuje po rozwiązaniu reCAPTCHA</string> | ||||
|     <string name="recaptcha_cookies_cleared">Ciasteczka reCAPTCHA zostały wyczyszczone</string> | ||||
|     <string name="clear_cookie_title">Wyczyść ciasteczka reCAPTCHA</string> | ||||
|     <string name="youtube_restricted_mode_enabled_summary">YouTube udostępnia „Tryb ograniczonego dostępu”, który ukrywa potencjalne treści dla dorosłych</string> | ||||
| @@ -751,4 +751,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Usuń stałą miniaturę</string> | ||||
|     <string name="msg_failed_to_copy">Nie udało się skopiować do schowka</string> | ||||
|     <string name="card">Karta</string> | ||||
|     <string name="duplicate_in_playlist">Wyszarzone playlisty zawierają już tę pozycję</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Dodano duplikat %d raz(y)</string> | ||||
| </resources> | ||||
| @@ -743,4 +743,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Desativar miniatura permanente</string> | ||||
|     <string name="card">Cartão</string> | ||||
|     <string name="msg_failed_to_copy">Falha ao copiar para a área de transferência</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicata adicionada %d vez(es)</string> | ||||
|     <string name="duplicate_in_playlist">As playlists em cinza já contêm este item.</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Desativar miniatura permanente</string> | ||||
|     <string name="msg_failed_to_copy">Não foi possível copiar para a área de transferência</string> | ||||
|     <string name="card">Cartão</string> | ||||
|     <string name="duplicate_in_playlist">As listas de reprodução acinzentadas já contêm este item.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicar adicionado %d vez(es)</string> | ||||
| </resources> | ||||
| @@ -739,8 +739,10 @@ | ||||
|     <string name="import_subscriptions_hint">Importar ou exportar subscrições do menu de 3 pontos</string> | ||||
|     <string name="app_update_unavailable_toast">Já está a executar a versão mais recente do NewPipe</string> | ||||
|     <string name="app_update_available_notification_text">Toque para descarregar %s</string> | ||||
|     <string name="night_theme_available">Esta opção só está disponível se %s for selecionado para o tema</string> | ||||
|     <string name="night_theme_available">Esta opção só está disponível se estiver selecionado %s para o tema</string> | ||||
|     <string name="unset_playlist_thumbnail">Desativar miniatura permanente</string> | ||||
|     <string name="msg_failed_to_copy">Não foi possível copiar para a área de transferência</string> | ||||
|     <string name="card">Cartão</string> | ||||
|     <string name="duplicate_in_playlist">As listas de reprodução acinzentadas já contêm este item.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicar adicionado %d vez(es)</string> | ||||
| </resources> | ||||
| @@ -740,4 +740,7 @@ | ||||
|     <string name="app_update_unavailable_toast">Rulați cea mai recentă versiune NewPipe</string> | ||||
|     <string name="app_update_available_notification_text">Atingeți pentru a descărca %s</string> | ||||
|     <string name="night_theme_available">Această opțiune este disponibilă numai dacă %s este selectată ca temă</string> | ||||
|     <string name="card">Cartelă</string> | ||||
|     <string name="msg_failed_to_copy">Nu s-a reușit copierea în clipboard</string> | ||||
|     <string name="unset_playlist_thumbnail">Dezactivare miniatură permanentă</string> | ||||
| </resources> | ||||
| @@ -661,7 +661,7 @@ | ||||
|     <string name="high_quality_larger">Высокое качество (крупнее)</string> | ||||
|     <string name="seekbar_preview_thumbnail_title">Миниатюра над полосой прокрутки</string> | ||||
|     <string name="detail_heart_img_view_description">Автору видео понравилось это</string> | ||||
|     <string name="mark_as_watched">Пометить просмотренными</string> | ||||
|     <string name="mark_as_watched">Пометить проигранным</string> | ||||
|     <string name="show_image_indicators_summary">Picasso: указать цветом источник изображений (красный — сеть, синий — диск, зелёный — память)</string> | ||||
|     <string name="show_image_indicators_title">Цветные метки на изображениях</string> | ||||
|     <string name="remote_search_suggestions">Серверные предложения поиска</string> | ||||
| @@ -747,4 +747,6 @@ | ||||
|     <string name="msg_failed_to_copy">Не удалось скопировать в буфер обмена</string> | ||||
|     <string name="night_theme_available">Доступно, когда Тема установлена в %s</string> | ||||
|     <string name="unset_playlist_thumbnail">Убрать постоянную миниатюру</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Дубликат добавлен %d раз(а)</string> | ||||
|     <string name="duplicate_in_playlist">Плейлисты, выделенные серым уже содержат этот объект.</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="card">Carta</string> | ||||
|     <string name="msg_failed_to_copy">Còpia in punta de billete fallida</string> | ||||
|     <string name="unset_playlist_thumbnail">Disativa sa miniadura permanente</string> | ||||
|     <string name="duplicate_in_playlist">Sas iscalitas in colore murru tenent giai custu elementu.</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplicadu annantu %d borta(s)</string> | ||||
| </resources> | ||||
| @@ -735,4 +735,14 @@ | ||||
|     <string name="faq">Pozrieť na webovej stránke</string> | ||||
|     <string name="sort">Usporiadať</string> | ||||
|     <string name="faq_description">Ak máte problémy s používaním aplikácie, určite si prečítajte tieto odpovede na časté otázky!</string> | ||||
|     <string name="unset_playlist_thumbnail">Vypnutie trvalého náhľadu</string> | ||||
|     <string name="msg_failed_to_copy">Kopírovanie do schránky zlyhalo</string> | ||||
|     <string name="duplicate_in_playlist">Zoznamy zobrazené šedou farbou už obsahujú danú položku.</string> | ||||
|     <string name="card">Karta</string> | ||||
|     <string name="app_update_available_notification_text">Dotykom stiahnite %s</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Duplikát bol pridaný %d-krát</string> | ||||
|     <string name="app_update_unavailable_toast">Používate najnovšiu verziu NewPipe</string> | ||||
|     <string name="night_theme_available">Táto možnosť je dostupná len pre motív %s</string> | ||||
|     <string name="fast_mode">Rýchly režim</string> | ||||
|     <string name="import_subscriptions_hint">Import alebo export odberov z 3-bodkovej ponuky</string> | ||||
| </resources> | ||||
| @@ -727,4 +727,7 @@ | ||||
|     <string name="app_update_unavailable_toast">Du använder den senaste versionen av NewPipe</string> | ||||
|     <string name="app_update_available_notification_text">Tryck för att ladda ner %s</string> | ||||
|     <string name="night_theme_available">Det här alternativet är endast tillgängligt om %s har valts som Tema</string> | ||||
|     <string name="unset_playlist_thumbnail">Inaktivera permanent miniatyrbild</string> | ||||
|     <string name="msg_failed_to_copy">Det gick inte att kopiera till urklipp</string> | ||||
|     <string name="card">Kort</string> | ||||
| </resources> | ||||
| @@ -15,7 +15,7 @@ | ||||
|     <string name="settings">ตั้งค่า</string> | ||||
|     <string name="did_you_mean">หรือคุณหมายถึง \"%1$s\"\?</string> | ||||
|     <string name="share_dialog_title">แชร์ด้วย</string> | ||||
|     <string name="use_external_video_player_title">Use external video player</string> | ||||
|     <string name="use_external_video_player_title">ใช้เครื่องเล่นวีดิโอภายนอก</string> | ||||
|     <string name="use_external_audio_player_title">ใช้แอปเล่นเสียงภายนอก</string> | ||||
|     <string name="subscribe_button_title">ติดตาม</string> | ||||
|     <string name="subscribed_button_title">ติดตามแล้ว</string> | ||||
| @@ -357,7 +357,7 @@ | ||||
|     <string name="pause_downloads_on_mobile">หยุดชั่วคราวเมื่อเปลี่ยนเป็นข้อมูลมือถือ</string> | ||||
|     <string name="pause_downloads_on_mobile_desc">การดาวน์โหลดที่ไม่สามารถหยุดพักได้จะเริ่มต้นใหม่</string> | ||||
|     <string name="close">ปิด</string> | ||||
|     <string name="use_external_video_player_summary">Removes audio at some resolutions</string> | ||||
|     <string name="use_external_video_player_summary">บางความละเอียดอาจไม่มีเสียง</string> | ||||
|     <string name="metadata_cache_wipe_complete_notice">แคช metadate ถูกลบแล้ว</string> | ||||
|     <string name="resume_on_audio_focus_gain_title">เล่นต่อหลังจากการขัดจังหวะ</string> | ||||
|     <string name="enable_playback_resume_title">เล่นต่อ</string> | ||||
| @@ -369,4 +369,13 @@ | ||||
|     <string name="open_with">เปิดด้วย</string> | ||||
|     <string name="mark_as_watched">ทำเครื่องหมายว่าดูแล้ว</string> | ||||
|     <string name="ok">ตกลง</string> | ||||
|     <string name="notification_action_3_title">ปุ่มการกระทำที่สี่</string> | ||||
|     <string name="notification_action_0_title">ปุ่มการกระทำแรก</string> | ||||
|     <string name="notification_action_2_title">ปุ่มการกระทำที่สาม</string> | ||||
|     <string name="notification_action_4_title">ปุ่มการกระทำที่ห้า</string> | ||||
|     <string name="notification_actions_summary">แก้ไขการกระทำของการแต่การแจ้งเตือนด้วยการแตะไปที่มัน เลือกสามรายการที่จะแสดงในการแจ้งเตือนในการแจ้งเตือนแบบกระทัดรัดโดยใช้ปุ่มกาเครื่องหมายทางขวา</string> | ||||
|     <string name="notification_scale_to_square_image_title">ครอบตัดตัวอย่างภาพเป็นอัตราส่วน 1:1</string> | ||||
|     <string name="notification_scale_to_square_image_summary">ครอบตัดตัวอย่างภาพที่แสดงในการแจ้งเตือนจากอัตราส่วน 16:9 เป็น 1:1</string> | ||||
|     <string name="crash_the_player">ทำเครื่องเล่นพัง</string> | ||||
|     <string name="notification_action_1_title">ปุ่มการกระทำรอง</string> | ||||
| </resources> | ||||
| @@ -730,4 +730,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Kalıcı küçük resmin ayarını kaldır</string> | ||||
|     <string name="card">Kart</string> | ||||
|     <string name="msg_failed_to_copy">Panoya kopyalanamadı</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">%d kez kopyası eklendi</string> | ||||
|     <string name="duplicate_in_playlist">Gri oynatma listeleri halihazırda bu ögeyi içeriyor.</string> | ||||
| </resources> | ||||
| @@ -52,7 +52,7 @@ | ||||
|     <string name="error_snackbar_action">Звіт</string> | ||||
|     <string name="what_device_headline">Інформація:</string> | ||||
|     <string name="what_happened_headline">Що сталося:</string> | ||||
|     <string name="main_bg_subtitle">Натисніть на «лупу», щоб почати.</string> | ||||
|     <string name="main_bg_subtitle">Торкніться лупи, щоб розпочати.</string> | ||||
|     <string name="black_theme_title">Чорна</string> | ||||
|     <string name="downloads">Завантаження</string> | ||||
|     <string name="downloads_title">Завантаження</string> | ||||
| @@ -747,4 +747,6 @@ | ||||
|     <string name="unset_playlist_thumbnail">Прибрати постійну мініатюру</string> | ||||
|     <string name="card">Картки</string> | ||||
|     <string name="msg_failed_to_copy">Не вдалося скопіювати до буфера обміну</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">Дублікат додано %d раз(ів)</string> | ||||
|     <string name="duplicate_in_playlist">У виділених сірим кольором добірках цей елемент уже є.</string> | ||||
| </resources> | ||||
| @@ -605,7 +605,7 @@ | ||||
|     <string name="metadata_support">支持</string> | ||||
|     <string name="metadata_language">语言</string> | ||||
|     <string name="metadata_age_limit">年龄限制</string> | ||||
|     <string name="metadata_privacy">私有性</string> | ||||
|     <string name="metadata_privacy">私密性</string> | ||||
|     <string name="metadata_licence">许可</string> | ||||
|     <string name="metadata_tags">标签</string> | ||||
|     <string name="metadata_category">类别</string> | ||||
| @@ -716,5 +716,7 @@ | ||||
|     <string name="night_theme_available">只有在主题中选择了 %s 该选项才可用</string> | ||||
|     <string name="unset_playlist_thumbnail">取消设置永久缩略图</string> | ||||
|     <string name="card">卡片</string> | ||||
|     <string name="msg_failed_to_copy">未能复制到剪贴板</string> | ||||
|     <string name="msg_failed_to_copy">无法复制到剪贴板</string> | ||||
|     <string name="duplicate_in_playlist">变灰的播放列表已经包含此项目。</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">重复添加了 %d 次</string> | ||||
| </resources> | ||||
| @@ -717,4 +717,6 @@ | ||||
|     <string name="night_theme_available">色系揀做%s嘅時候至有得揀</string> | ||||
|     <string name="msg_failed_to_copy">複製唔到去剪貼簿</string> | ||||
|     <string name="card">一張張</string> | ||||
|     <string name="duplicate_in_playlist">灰咗嘅播放清單,即係已經有呢個項目。</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">重複加入咗 %d 次</string> | ||||
| </resources> | ||||
| @@ -717,4 +717,6 @@ | ||||
|     <string name="card">卡片</string> | ||||
|     <string name="unset_playlist_thumbnail">取消設定永久縮圖</string> | ||||
|     <string name="msg_failed_to_copy">無法複製到剪貼簿</string> | ||||
|     <string name="playlist_add_stream_success_duplicate">重複新增 %d 次</string> | ||||
|     <string name="duplicate_in_playlist">變灰的播放清單已經包含此項目。</string> | ||||
| </resources> | ||||
| @@ -13,7 +13,6 @@ import java.util.Objects; | ||||
|  | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertFalse; | ||||
| import static org.junit.Assert.assertNotEquals; | ||||
| import static org.junit.Assert.assertNull; | ||||
| import static org.junit.Assert.assertSame; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| @@ -169,7 +168,8 @@ public class PlayQueueTest { | ||||
|             final List<PlayQueueItem> streams = Collections.nCopies(5, item1); | ||||
|             final PlayQueue queue1 = makePlayQueue(0, streams); | ||||
|             final PlayQueue queue2 = makePlayQueue(0, streams); | ||||
|             assertEquals(queue1, queue2); | ||||
|             assertTrue(queue1.equalStreams(queue2)); | ||||
|             assertTrue(queue1.equalStreamsAndIndex(queue2)); | ||||
|         } | ||||
|  | ||||
|         @Test | ||||
| @@ -177,7 +177,8 @@ public class PlayQueueTest { | ||||
|             final List<PlayQueueItem> streams = Collections.nCopies(5, item1); | ||||
|             final PlayQueue queue1 = makePlayQueue(1, streams); | ||||
|             final PlayQueue queue2 = makePlayQueue(4, streams); | ||||
|             assertEquals(queue1, queue2); | ||||
|             assertTrue(queue1.equalStreams(queue2)); | ||||
|             assertFalse(queue1.equalStreamsAndIndex(queue2)); | ||||
|         } | ||||
|  | ||||
|         @Test | ||||
| @@ -186,7 +187,7 @@ public class PlayQueueTest { | ||||
|             final List<PlayQueueItem> streams2 = Collections.nCopies(5, item2); | ||||
|             final PlayQueue queue1 = makePlayQueue(0, streams1); | ||||
|             final PlayQueue queue2 = makePlayQueue(0, streams2); | ||||
|             assertNotEquals(queue1, queue2); | ||||
|             assertFalse(queue1.equalStreams(queue2)); | ||||
|         } | ||||
|  | ||||
|         @Test | ||||
| @@ -195,7 +196,7 @@ public class PlayQueueTest { | ||||
|             final List<PlayQueueItem> streams2 = Collections.nCopies(6, item2); | ||||
|             final PlayQueue queue1 = makePlayQueue(0, streams1); | ||||
|             final PlayQueue queue2 = makePlayQueue(0, streams2); | ||||
|             assertNotEquals(queue1, queue2); | ||||
|             assertFalse(queue1.equalStreams(queue2)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/bn/changelogs/68.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/bn/changelogs/68.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| https://hosted.weblate.org/translate/newpipe/metadata/bn/?checksum=2a64aca6716bd69b | ||||
							
								
								
									
										17
									
								
								fastlane/metadata/android/cs/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fastlane/metadata/android/cs/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| Novinky | ||||
| • Počet odběratelů v podrobnostech videa | ||||
| • Stahování z fronty | ||||
| • Permanentní nastavení náhledu playlistu | ||||
| • Dlouhé podržení hashtagů a odkazů | ||||
| • Režim zobrazení v kartách | ||||
|  | ||||
| Vylepšení | ||||
| • Větší tlačítko k zavření minipřehrávače | ||||
| • Jemnější zmenšování náhledů | ||||
| • Cíl Android 13 (API 33) | ||||
| • Posouvání v přehrávači jej již nezastaví | ||||
|  | ||||
| Opravy | ||||
| • Oprava překrytí s DeX/myší | ||||
| • Povolení přehrávače na pozadí bez oddělených streamů zvuku | ||||
| • Různé opravy YouTube a další… | ||||
| @@ -1,14 +1,14 @@ | ||||
| Neu | ||||
| - Abonnementgruppen und sortierte Feeds | ||||
| - Stummschalttaste in Playern | ||||
| Neu: | ||||
| • Abonnementgruppen und sortierte Feeds | ||||
| • Stummschalttaste in Playern | ||||
|  | ||||
| Verbessert | ||||
| - Das Öffnen von music.youtube.com und media.ccc.de Links in NewPipe erlaubt | ||||
| - Zwei Einstellungen wurden von "Erscheinungsbild" zu "Inhalt" verschoben | ||||
| - Ausblenden der Suchoptionen 5, 15 und 25 Sekunden, wenn die ungenaue Suche aktiviert ist | ||||
| Verbessert: | ||||
| • Öffnen von music.youtube.com und media.ccc.de Links in NewPipe erlaubt | ||||
| • Zwei Einstellungen von „Erscheinungsbild“ zu „Inhalt“ verschoben | ||||
| • Ausblenden der Suchoptionen 5, 15 und 25 Sekunden, wenn die ungenaue Suche aktiviert ist | ||||
|  | ||||
| Behoben | ||||
| - einige WebM-Videos sind nicht suchbar | ||||
| - Datenbank-Backup auf Android P | ||||
| - Absturz beim Teilen einer heruntergeladenen Datei | ||||
| - YouTube-Extraktionsprobleme, ... | ||||
| Behoben: | ||||
| • Einige WebM-Videos sind nicht suchbar | ||||
| • Datenbank-Backup auf Android P | ||||
| • Absturz beim Teilen einer heruntergeladenen Datei | ||||
| • YouTube-Extraktionsprobleme und mehr … | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| Neu+verbessert | ||||
| •Option Miniansicht Ausblenden auf Sperrbildschirm wieder hinzugefügt | ||||
| •Ziehen zum Feed aktualisieren | ||||
| •Verbesserte Leistung beim Abruf lokaler Listen | ||||
| Neu und verbessert: | ||||
| • Option Vorschaubild auf Sperrbildschirm ausblenden wieder hinzugefügt | ||||
| • Ziehen zum Feed aktualisieren | ||||
| • Verbesserte Leistung beim Abruf lokaler Listen | ||||
|  | ||||
| Behoben | ||||
| •Absturz, Start von NewPipe, nachdem es aus dem RAM entfernt wurde | ||||
| •Absturz, Starten von NewPipe ohne Internetverbindung | ||||
| •Einstellungen Helligkeits- und Lautstärkegesten | ||||
| •[YT] Lange Wiedergabelisten | ||||
| Behoben: | ||||
| • Absturz, NewPipe-Start nachdem es aus dem RAM entfernt wurde | ||||
| • Absturz, NewPipe-Start ohne Internetverbindung | ||||
| • Einstellungen Helligkeits- und Lautstärkegesten | ||||
| • [YT] Lange Wiedergabelisten | ||||
|  | ||||
| Sonstiges | ||||
| •Codebereinigung, verschiedene interne Verbesserungen | ||||
| •Aktualisierung Abhängigkeiten | ||||
| •Aktualisierte Übersetzungen | ||||
| Sonstiges: | ||||
| • Codebereinigung, etliche interne Verbesserungen | ||||
| • Abhängigkeiten aktualisiert | ||||
| • Übersetzungen aktualisiert | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| Neu | ||||
| • Inhaltsmetadaten (Tags, Kategorien, Lizenz, ...) unter der Beschreibung anzeigen | ||||
| • Option "Kanaldetails anzeigen" in remote (nicht lokalen) Wiedergabelisten hinzugefügt | ||||
| • Option "Im Browser öffnen" zum Langdruck-Menü hinzugefügt | ||||
| Neu: | ||||
| • Inhaltsmetadaten (Tags, Kategorien, Lizenz, …) unter der Beschreibung anzeigen | ||||
| • Option „Kanaldetails anzeigen“ in remote (nicht lokalen) Wiedergabelisten hinzugefügt | ||||
| • Option „Im Browser öffnen“ zum Langdruck-Menü hinzugefügt | ||||
|  | ||||
| Behoben | ||||
| Behoben: | ||||
| • Rotationsabsturz auf der Videodetailseite | ||||
| • "Mit Kodi spielen"-Button im Player fordert immer auf, Kore zu installieren | ||||
| • „Mit Kodi spielen“-Button im Player fordert immer auf, Kore zu installieren | ||||
| • Setzen von Import- und Exportpfaden wurde behoben und verbessert | ||||
| • [YouTube] Anzahl Kommentar-Likes korrigiert | ||||
| Und vieles mehr | ||||
|   | ||||
| @@ -1,16 +1,17 @@ | ||||
| Neu | ||||
| - Anzeige eines Vorschaubilds während der Suche | ||||
| - Deaktivierte Kommentare erkennen | ||||
| - Erlaubt das Markieren eines Feed-Elements als beobachtet | ||||
| - Kommentarherzen anzeigen | ||||
| Neu: | ||||
| • Vorschaubild-Anzeige während der Suche | ||||
| • Deaktivierte Kommentare erkennen | ||||
| • Feed-Element als beobachtet markieren | ||||
| • Kommentarherzen anzeigen | ||||
|  | ||||
| Verbessert | ||||
| - Verbessertes Layout von Metadaten und Tags | ||||
| - Dienstfarbe auf UI-Komponenten anwenden | ||||
| Verbessert: | ||||
| • Layout von Metadaten und Tags | ||||
| • Dienstfarbe für UI-Komponenten | ||||
|  | ||||
| Behoben | ||||
| - Korrektur des Vorschaubilds im Mini-Player | ||||
| - Behebung der endlosen Pufferung bei doppelten Warteschlangenelementen | ||||
| - Einige Player-Fixes wie Rotation und schnelleres Schließen | ||||
| - Behebung von ReCAPTCHA | ||||
| ... | ||||
| Behoben: | ||||
| • Vorschaubild im Mini-Player | ||||
| • Endlose Pufferung bei doppelten Warteschlangenelementen | ||||
| • Einige Player-Fixes wie Rotation und schnelleres Schließen | ||||
| • ReCAPTCHA lädt im Hintergrund | ||||
| • Klicks bei Feed-Aktualisierung deaktivieren | ||||
| • Einige Downloader-Abstürze | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| - Option zum direkten Öffnen des Players im Vollbildmodus hinzugefügt | ||||
| - Auswahl der anzuzeigenden Suchvorschläge möglich | ||||
| - Dunkles Theme jetzt dunkler + dunkler Splash-Screen hinzugefügt | ||||
| - Verbesserte Dateiauswahl, um unerwünschte Dateien auszugrauen | ||||
| - Import von YouTube-Abonnements behoben | ||||
| - Das Wiederholen eines Streams erfordert ein erneutes Tippen auf die Wiedergabetaste | ||||
| - Behoben: Audio-Sitzung schließen | ||||
| ... | ||||
| • Option zum direkten Öffnen des Players im Vollbildmodus hinzugefügt | ||||
| • Auswahl der anzuzeigenden Suchvorschläge möglich | ||||
| • Dunkles Design nun dunkler + dunkler Splash-Screen hinzugefügt | ||||
| • Verbesserte Dateiauswahl, um unerwünschte Dateien auszugrauen | ||||
| • Import von YouTube-Abonnements behoben | ||||
| • Das Wiederholen eines Streams erfordert ein erneutes Tippen auf die Wiedergabetaste | ||||
| • Behoben: Audio-Sitzung schließen | ||||
| … | ||||
|  | ||||
| Änderungen finden Sie im Changelog (und im Blogbeitrag) auf dem Links-Tab unten. | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| - Die Schaltfläche "Weiter abspielen" wurde dem Langdruckmenü hinzugefügt | ||||
| - YouTube Shorts Pfadpräfix zum Absichtsfilter hinzugefügt | ||||
| - Import von Einstellungen behoben | ||||
| - Position der Suchleiste mit Player-Schaltflächen im Warteschlangen-Bildschirm vertauscht | ||||
| - Verschiedene Korrekturen im Zusammenhang mit MediasessionManager | ||||
| - Die Suchleiste wurde nach dem Ende des Videos nicht abgeschlossen | ||||
| ... | ||||
| • Die Schaltfläche „Weiter abspielen“ wurde dem Langdruckmenü hinzugefügt | ||||
| • YouTube Shorts Pfadpräfix zum Absichtsfilter hinzugefügt | ||||
| • Import von Einstellungen behoben | ||||
| • Position der Suchleiste mit Player-Schaltflächen im Warteschlangen-Bildschirm vertauscht | ||||
| • Verschiedene Korrekturen im Zusammenhang mit MediasessionManager | ||||
| • Die Suchleiste wurde nach dem Ende des Videos nicht abgeschlossen | ||||
| … | ||||
|  | ||||
| Weitere Änderungen finden Sie im Changelog (und im Blogbeitrag) auf der Registerkarte Links unten. | ||||
| Weitere Änderungen finden Sie im Changelog (und im Blogbeitrag) auf dem Links-Tab unten. | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| Neu | ||||
| - Option "Zur Wiedergabeliste hinzufügen" zum Freigabemenü hinzugefügt | ||||
| - Unterstützung für y2u.be und PeerTube Kurzlinks hinzugefügt | ||||
| Neu: | ||||
| • Option „Zur Wiedergabeliste hinzufügen“ zum Freigabemenü hinzugefügt | ||||
| • Unterstützung für y2u.be- und PeerTube-Kurzlinks hinzugefügt | ||||
|  | ||||
| Verbessert | ||||
| - Playback-Speed-Controls kompakter gemacht | ||||
| - Feed hebt jetzt neue Elemente hervor | ||||
| - "Beobachtete Artikel anzeigen" Option im Feed wird nun gespeichert | ||||
| Verbessert: | ||||
| • Playback-Speed-Controls kompakter gemacht | ||||
| • Feed hebt jetzt neue Elemente hervor | ||||
| • „Beobachtete Artikel anzeigen“-Option im Feed wird nun gespeichert | ||||
|  | ||||
| Behoben | ||||
| - Extraktion von YouTube Likes und Dislikes behoben | ||||
| - Automatische Wiederholung nach Rückkehr aus dem Hintergrund behoben | ||||
| Behoben: | ||||
| • Extraktion von YouTube Likes und Dislikes behoben | ||||
| • Automatische Wiederholung nach Rückkehr aus dem Hintergrund behoben | ||||
| Und vieles mehr | ||||
|   | ||||
							
								
								
									
										16
									
								
								fastlane/metadata/android/de/changelogs/986.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								fastlane/metadata/android/de/changelogs/986.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| Neu: | ||||
| • Benachrichtigungen für neue Streams | ||||
| • Nahtloser Übergang zwischen Hintergrund- und Videoplayer | ||||
| • Änderung der Tonhöhe um Halbtöne | ||||
| • Warteschlange des Hauptplayers an Wiedergabeliste anfügen | ||||
|  | ||||
| Verbessert: | ||||
| • Geschwindigkeit/Tonhöhenschrittgröße speichern | ||||
| • Anfängliche lange Videoplayer-Pufferung verringert | ||||
| • Player-UI für Android TV | ||||
| • Löschbestätigung für alle heruntergeladenen Dateien | ||||
|  | ||||
| Behoben: | ||||
| • Medienschaltfläche blendet die Steuerelemente des Players nicht aus | ||||
| • Rücksetzung der Wiedergabe bei Änderung des Playertyps | ||||
| • Drehung des Wiedergabelisten-Dialogs | ||||
| @@ -1,12 +1,12 @@ | ||||
| Neu | ||||
| - Unterstützung anderer Übertragungsmethoden als progressives HTTP: schnellere Ladezeit der Wiedergabe, Korrekturen für PeerTube und SoundCloud, Wiedergabe von kürzlich beendeten YouTube-Livestreams | ||||
| - Schaltfläche "Hinzufügen" zum Hinzufügen einer entfernten Wiedergabeliste zu einer lokalen Wiedergabeliste | ||||
| - Bildvorschau im Android 10+ Teilen-Dialog | ||||
| Neu: | ||||
| • Unterstützung anderer Übertragungsmethoden als progressives HTTP: schnellere Ladezeit der Wiedergabe, Korrekturen für PeerTube und SoundCloud, Wiedergabe von kürzlich beendeten YouTube-Livestreams | ||||
| • Schaltfläche um entfernte Wiedergabeliste einer lokalen Wiedergabeliste hinzuzufügen | ||||
| • Bildvorschau im Android 10+ Teilen-Dialog | ||||
|  | ||||
| Verbesserte | ||||
| - Verbesserung des Dialogs für Wiedergabewerte | ||||
| - Import/Export-Schaltflächen für Abonnements in das Drei-Punkte-Menü verschieben | ||||
| Verbessert: | ||||
| • Wiedergabewerte-Dialog | ||||
| • Import/Export-Schaltflächen für Abonnements in das Drei-Punkte-Menü verschoben | ||||
|  | ||||
| Behoben | ||||
| - Fix: Entfernen vollständig angesehener Videos aus der Wiedergabeliste | ||||
| - Repariert das Thema des Freigabemenüs und den Eintrag "Zur Wiedergabeliste hinzufügen" | ||||
| Behoben: | ||||
| • Entfernung von vollständig angesehenen Videos aus der Wiedergabeliste | ||||
| • Freigabemenü-Design und „Zur Wiedergabeliste hinzufügen“-Eintrag | ||||
|   | ||||
| @@ -1,15 +1,15 @@ | ||||
| Ab sofort entfällt die Unterstützung für Android 4.4 KitKat, die Mindestversion ist Android 5 Lollipop! | ||||
| Mit dieser Version entfällt die Unterstützung für Android 4.4 KitKat, die Mindestversion ist nun Android 5 Lollipop! | ||||
|  | ||||
| Neu | ||||
| - Herunterladen aus dem Langdruck-Menü | ||||
| - Zukünftige Videos im Feed ausblenden | ||||
| ... | ||||
| Neu: | ||||
| • Herunterladen aus dem Langdruckmenü | ||||
| • Zukünftige Videos im Feed ausblenden | ||||
| • Lokale Wiedergabelisten teilen | ||||
|  | ||||
| Verbessert | ||||
| - Refaktorierung des Player-Codes in kleine Komponenten: weniger RAM-Verbrauch, weniger Bugs | ||||
| - Verbesserter Skalierungsmodus für Miniaturansichten | ||||
| ... | ||||
| Verbessert: | ||||
| • Player-Code in kleine Komponenten refaktorisiert: weniger RAM-Verbrauch, weniger Bugs | ||||
| • Skalierungsmodus für Miniaturansicht | ||||
| … | ||||
|  | ||||
| Behoben | ||||
| - Behebung verschiedener Probleme mit der Player-Benachrichtigung: veraltete/fehlende Medieninformationen, verzerrte Miniaturansicht | ||||
| ... | ||||
| Behoben: | ||||
| • Verschiedene Probleme mit Player-Benachrichtigung: veraltete/fehlende Medieninfos, verzerrte Miniaturansicht | ||||
| … | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| Neu | ||||
| - Schaltfläche "Im Browser öffnen" im Fehlerbedienfeld hinzugefügt | ||||
| - Option zur Anzeige von Kanalgruppen als Liste hinzugefügt | ||||
| - [YouTube] Langes Klicken auf Streamsegmente zum Teilen der Zeitstempel-URL | ||||
| - Schaltfläche "Warteschlange abspielen" zum Mini-Player hinzugefügt | ||||
| Neu: | ||||
| • Neue Schaltfläche "Im Browser öffnen" im Fehler-Fenster | ||||
| • Anzeigeoption von Kanalgruppen als Liste | ||||
| • [YouTube] Langer Klick auf Streamsegmente um Zeitstempel-URL zu teilen | ||||
| • Schaltfläche „Warteschlange abspielen“ im Mini-Player | ||||
|  | ||||
| Verbessert | ||||
| - Isländische Lokalisierung hinzugefügt, viele Übersetzungen aktualisiert | ||||
| - Viele interne Verbesserungen | ||||
| Verbessert: | ||||
| • Isländische Lokalisierung hinzugefügt, viele Übersetzungen aktualisiert | ||||
| • Viele interne Verbesserungen | ||||
|  | ||||
| Behoben | ||||
| - Mehrere Abstürze behoben | ||||
| - [YouTube] Behebung von Problemen beim Laden von Kanälen... | ||||
| Behoben: | ||||
| • Mehrere Abstürze behoben | ||||
| • [YouTube] Fehlerbehebung für Laden von Kanälen, nicht zugeordnete Feeds und Wiedergabe in einigen Ländern | ||||
|   | ||||
							
								
								
									
										17
									
								
								fastlane/metadata/android/de/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fastlane/metadata/android/de/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| Neu: | ||||
| • Anzahl der Abonnenten in den Videodetails | ||||
| • Herunterladen aus der Warteschlange | ||||
| • Dauerhaftes Einstellen einer Wiedergabelisten-Miniaturansicht | ||||
| • Hashtags und Links lang drücken | ||||
| • Kartenansicht-Modus | ||||
|  | ||||
| Verbessert: | ||||
| • Größere Schaltfläche um Mini-Player zu schließen | ||||
| • Glattere Miniaturansicht-Skalierung | ||||
| • Android 13 (API 33) | ||||
| • Suchen hält den Player nicht mehr an | ||||
|  | ||||
| Behoben: | ||||
| • Overlay auf DeX/Maus | ||||
| • Hintergrundplayer ohne separate Audiostreams | ||||
| • YouTube-Korrekturen und mehr… | ||||
							
								
								
									
										17
									
								
								fastlane/metadata/android/es/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fastlane/metadata/android/es/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| Nuevo | ||||
| • Número de suscriptores en los detalles del video | ||||
| • Descarga desde la cola | ||||
| • Establecer permanentemente una miniatura de lista de reproducción | ||||
| • Hashtags y enlaces con pulsación de larga duración | ||||
| • Modo de vista de tarjeta | ||||
|  | ||||
| Mejorado | ||||
| • Botón de cierre del minirreproductor más grande | ||||
| • Reducción de escala de miniaturas más suave | ||||
| • Objetivo Android 13 (API 33) | ||||
| • Buscar ya no detiene el reproductor | ||||
|  | ||||
| Arreglos | ||||
| • Solucionar superposición en DeX/ratón | ||||
| • Permitir reproductor de fondo sin transmisiones de audio separadas | ||||
| • Varias correcciones de YouTube y más… | ||||
							
								
								
									
										17
									
								
								fastlane/metadata/android/eu/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fastlane/metadata/android/eu/changelogs/992.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| Zer berri | ||||
| • Harpidetza kopurua bideoen xehetasunetan | ||||
| • Ilaratik deskargatu | ||||
| • Erreprodukzio-zerrendei betirako izango den miniatura ezarri | ||||
| • Luze sakatu traola eta estekentzako | ||||
| • Txartel-bista modua | ||||
|  | ||||
| Hobekuntzak | ||||
| • Mini-erreproduzitzailearen ixteko botoi handiago bat | ||||
| • Miniaturen eskala murrizketa arinagoa | ||||
| • Android 13 (API 33) | ||||
| • Bilaketak ez du erreprodukzioa geldiaraziko | ||||
|  | ||||
| Konponketak | ||||
| • DeX/saguaren gainezarpena konpondua | ||||
| • Bigarren planoko erreprodukzioa baimendu bereizitako bi audio-jariorik gabe | ||||
| • YouTube-kin zeuden arazoak konpondu eta are gehiago… | ||||
							
								
								
									
										8
									
								
								fastlane/metadata/android/hi/changelogs/64.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								fastlane/metadata/android/hi/changelogs/64.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| ### सुधार  | ||||
| - मोबाइल डेटा का उपयोग करते समय वीडियो की गुणवत्ता को सीमित करने की क्षमता को जोड़ा गया। #1339  | ||||
| - सत्र # 1442 के लिए चमक याद रखें  | ||||
| - कमजोर सीपीयू # 1431 के लिए डाउनलोड प्रदर्शन में सुधार  | ||||
| - मीडिया सत्र # 1433 के लिए समर्थन जोड़ें (काम कर रहा है)  | ||||
|  | ||||
| ### फिक्स  | ||||
| - डाउनलोड खोलने पर क्रैश ठीक करें (रिलीज बिल्ड के लिए अब उपलब्ध है) # 1441 | ||||
							
								
								
									
										26
									
								
								fastlane/metadata/android/hi/changelogs/65.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								fastlane/metadata/android/hi/changelogs/65.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| ### Improvements | ||||
|  | ||||
| - Disable burgermenu icon animation #1486  | ||||
| - undo delete of downloads #1472  | ||||
| - Download option in share menu #1498 | ||||
| - Added share option to long tap menu #1454  | ||||
| - Minimize main player on exit #1354  | ||||
| - Library version update and database backup fix #1510  | ||||
| - ExoPlayer 2.8.2 Update #1392 | ||||
|   - Reworked the playback speed control dialog to support different step sizes for faster speed change. | ||||
|   - Added a toggle to fast-forward during silences in playback speed control. This should be helpful for audiobooks and certain music genres, and can bring a true seamless experience (and can break a song with lots of silences =\\).   | ||||
|   - Refactored media source resolution to allow passing metadata alongside media internally in the player, rather than doing so manually. Now we have a single source of metadata and is directly available when playback starts. | ||||
|   - Fixed remote playlist metadata not updating when new metadata is available when playlist fragment is opened. | ||||
|   - Various UI fixes: #1383, background player notification controls now always white, easier to shutdown popup player through flinging | ||||
| - Use new extractor with refactored architecture for multiservice | ||||
|  | ||||
| ### Fixes | ||||
|  | ||||
| - Fix #1440 Broken Video Info Layout #1491  | ||||
| - View history fix #1497 | ||||
|   - #1495, by updating the metadata (thumbnail, title and video count) as soon as the user access the playlist.  | ||||
|   - #1475, by registering a view in the database when the user starts a video on external player on detail fragment. | ||||
| - Fix creen timeout in case of popup mode. #1463 (Fixed #640) | ||||
| - Main video player fix #1509  | ||||
|   - [#1412] Fixed repeat mode causing player NPE when new intent is received while player activity is in background. | ||||
|   - Fixed minimizing player to popup does not destroy player when popup permission is not granted. | ||||
							
								
								
									
										33
									
								
								fastlane/metadata/android/hi/changelogs/66.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								fastlane/metadata/android/hi/changelogs/66.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| # Changelog of v0.13.7 | ||||
|  | ||||
| ### Fixed | ||||
| - Fix sort filter issues of v0.13.6 | ||||
|  | ||||
| # Changelog of v0.13.6 | ||||
|  | ||||
| ### Improvements | ||||
|  | ||||
| - Disable burgermenu icon animation #1486  | ||||
| - undo delete of downloads #1472  | ||||
| - Download option in share menu #1498 | ||||
| - Added share option to long tap menu #1454  | ||||
| - Minimize main player on exit #1354  | ||||
| - Library version update and database backup fix #1510  | ||||
| - ExoPlayer 2.8.2 Update #1392 | ||||
|   - Reworked the playback speed control dialog to support different step sizes for faster speed change. | ||||
|   - Added a toggle to fast-forward during silences in playback speed control. This should be helpful for audiobooks and certain music genres, and can bring a true seamless experience (and can break a song with lots of silences =\\).   | ||||
|   - Refactored media source resolution to allow passing metadata alongside media internally in the player, rather than doing so manually. Now we have a single source of metadata and is directly available when playback starts. | ||||
|   - Fixed remote playlist metadata not updating when new metadata is available when playlist fragment is opened. | ||||
|   - Various UI fixes: #1383, background player notification controls now always white, easier to shutdown popup player through flinging | ||||
| - Use new extractor with refactored architecture for multiservice | ||||
|  | ||||
| ### Fixes | ||||
|  | ||||
| - Fix #1440 Broken Video Info Layout #1491  | ||||
| - View history fix #1497 | ||||
|   - #1495, by updating the metadata (thumbnail, title and video count) as soon as the user access the playlist.  | ||||
|   - #1475, by registering a view in the database when the user starts a video on external player on detail fragment. | ||||
| - Fix creen timeout in case of popup mode. #1463 (Fixed #640) | ||||
| - Main video player fix #1509  | ||||
|   - [#1412] Fixed repeat mode causing player NPE when new intent is received while player activity is in background. | ||||
|   - Fixed minimizing player to popup does not destroy player when popup permission is not granted. | ||||
							
								
								
									
										31
									
								
								fastlane/metadata/android/hi/changelogs/68.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								fastlane/metadata/android/hi/changelogs/68.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| # changes of v0.14.1 | ||||
|  | ||||
| ### Fixed | ||||
| - Fixed failed to decrypt video url #1659  | ||||
| - Fixed description link not extract well #1657 | ||||
|  | ||||
| # changes of v0.14.0 | ||||
|  | ||||
| ### New | ||||
| - New Drawer design #1461 | ||||
| - New customizable front page #1461 | ||||
|  | ||||
| ### Improvements | ||||
| - Reworked Gesture controls #1604  | ||||
| - New way to close the popup player #1597 | ||||
|  | ||||
| ### Fixed | ||||
| - Fix error when subscription count is not available. Closes #1649. | ||||
|   - Show "Subscriber count not available" in those cases | ||||
| - Fix NPE when a YouTube playlist is empty | ||||
| - Quick fix for the kiosks in SoundCloud | ||||
| - Refactor and bugfix #1623  | ||||
|   - Fix Cyclic search result  #1562 | ||||
|   - Fix Seek bar not statically lay outed | ||||
|   - Fix YT Premium video are not blocked correctly | ||||
|   - Fix Videos sometimes not loading (due to DASH parsing) | ||||
|   - Fix links in video description | ||||
|   - Show warning when someone tries to download to external sdcard | ||||
|   - fix nothing shown exception triggers report | ||||
|   -  thumbnail not shown in background player for android 8.1 [see here](https://github.com/TeamNewPipe/NewPipe/issues/943) | ||||
| - Fix registering of broadcast receiver. Closes #1641. | ||||
							
								
								
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/69.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/69.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| ### New | ||||
| - Long-tap delete and share in subscriptions #1516  | ||||
| - Tablet UI and grid list layout #1617  | ||||
|  | ||||
| ### Improvements | ||||
| - store and reload the last used aspect ratio #1748  | ||||
| - Enable linear layout in Downloads activity with full video names #1771  | ||||
| - Delete and share subscriptions directly from within the subscriptions tab #1516  | ||||
| - Enqueuing now triggers video playing if the play queue has already ended #1783  | ||||
| - Separate settings for volume and brightness gestures #1644 | ||||
| - Add support for Localization #1792 | ||||
|  | ||||
| ### Fixes | ||||
| - Fix time parsing for . format, so NewPipe can be used in Finland | ||||
| - Fix subscription count | ||||
| - Add foreground service permission for API 28+ devices #1830 | ||||
|  | ||||
| ### Known Bugs | ||||
| - Playback state can not be saved on Android P | ||||
							
								
								
									
										25
									
								
								fastlane/metadata/android/hi/changelogs/70.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								fastlane/metadata/android/hi/changelogs/70.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| ATTENTION: This version probably is a bugfest, just like the last one. However due to the full shutdown since the 17. a broken version is better then no version. Right? ¯\_(ツ)_/¯ | ||||
|  | ||||
| ### Improvements | ||||
| * downloaded files can now be opened with one click #1879  | ||||
| * drop support for android 4.1 - 4.3 #1884  | ||||
| * remove old player #1884  | ||||
| * remove streams from current play queue by swiping them to the right #1915  | ||||
| * remove auto queued stream when a new stream is enqueued manually #1878  | ||||
| * Postprocessing for downloads and implement missing features #1759 by @kapodamy | ||||
|   * Post-processing infrastructure | ||||
|   * Proper error handling "infrastructure" (for downloader) | ||||
|   * Queue instead of multiple downloads | ||||
|   * Move serialized pending downloads (`.giga` files) to app data | ||||
|   * Implement max download retry | ||||
|   * Proper multi-thread download pausing | ||||
|   * Stop downloads when swicthing to mobile network (never works, see 2nd point) | ||||
|   * Save the thread count for next downloads | ||||
|   * A lot of incoherences fixed | ||||
|  | ||||
| ### Fixed | ||||
| * Fix crash with default resolution set to best and limited mobile data resolution #1835 | ||||
| * pop-up player crash fixed #1874  | ||||
| * NPE when trying to open background player #1901 | ||||
| * Fix for inserting new streams when auto queuing is enabled #1878 | ||||
| * Fixed the decypering shuttown issue | ||||
							
								
								
									
										10
									
								
								fastlane/metadata/android/hi/changelogs/71.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								fastlane/metadata/android/hi/changelogs/71.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| ### Improvements | ||||
| * Add app update notification for GitHub build (#1608 by @krtkush) | ||||
| * Various improvements to the downloader (#1944 by @kapodamy): | ||||
|   * add missing white icons and use hardcored way for change the icon colors | ||||
|   * check if the iterator is initialized (fixes #2031) | ||||
|   * allow retry downloads with "post-processing failed" error in the new muxer | ||||
|   * new MPEG-4 muxer fixing non-synchronous video and audio streams (#2039) | ||||
|  | ||||
| ### Fixed | ||||
| * YouTube live streams stop playing after a short time (#1996 by @yausername) | ||||
							
								
								
									
										2
									
								
								fastlane/metadata/android/hi/changelogs/730.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								fastlane/metadata/android/hi/changelogs/730.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # हल किया गया  | ||||
| - हॉट फिक्स डिक्रिप्ट फ़ंक्शन त्रुटि फिर से। | ||||
							
								
								
									
										23
									
								
								fastlane/metadata/android/hi/changelogs/740.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								fastlane/metadata/android/hi/changelogs/740.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| <h4>Improvements</h4> | ||||
| <ul> | ||||
| <li>make links in comments clickable, increase text size</li> | ||||
| <li>seek on clicking timestamp links in comments</li> | ||||
| <li>show preferred tab based on recently selected state</li> | ||||
| <li>add playlist to queue when long clicking on 'Background' in playlist window</li> | ||||
| <li>search for shared text when it is not an URL</li> | ||||
| <li>add "share at current time" button to the main video player</li> | ||||
| <li>add close button to main player when video queue is finished</li> | ||||
| <li>add "Play directly in Background" to longpress menu for video list items</li> | ||||
| <li>improve English translations for Play/Enqueue commands</li> | ||||
| <li>small performance improvements</li> | ||||
| <li>remove unused files</li> | ||||
| <li>update ExoPlayer to 2.9.6</li> | ||||
| <li>add support for Invidious links</li> | ||||
| </ul> | ||||
| <h4>Fixed</h4> | ||||
| <ul> | ||||
| <li>fixed scroll w/ comments and related streams disabled</li> | ||||
| <li>fixed CheckForNewAppVersionTask being executed when it shouldn't</li> | ||||
| <li>fixed youtube subscription import: ignore ones with invalid url and keep ones with empty title</li> | ||||
| <li>fix invalid YouTube url: signature tag name is not always "signature" preventing streams from loading</li> | ||||
| </ul> | ||||
							
								
								
									
										22
									
								
								fastlane/metadata/android/hi/changelogs/750.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								fastlane/metadata/android/hi/changelogs/750.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| New | ||||
| Playback resume #2288 | ||||
| • Resume streams where you stopped last time | ||||
| Downloader Enhancements #2149  | ||||
| • Use Storage Access Framework to store downloads on external SD-cards | ||||
| • New mp4 muxer | ||||
| • Optionally change the download directory before starting a download | ||||
| • Respect metered networks  | ||||
|  | ||||
|  | ||||
| Improved | ||||
| • Removed gema strings #2295 | ||||
| • Handle (auto)rotation changes during activity lifecycle #2444 | ||||
| • Make long-press menus consistent #2368 | ||||
|  | ||||
| Fixed | ||||
| • Fixed selected subtitle track name not being shown #2394 | ||||
| • Do not crash when check for app update fails (GitHub version) #2423  | ||||
| • Fixed downloads stuck at 99.9% #2440 | ||||
| • Update play queue metadata #2453  | ||||
| • [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 | ||||
| • [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 | ||||
							
								
								
									
										43
									
								
								fastlane/metadata/android/hi/changelogs/760.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								fastlane/metadata/android/hi/changelogs/760.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| Changes in 0.17.1 | ||||
|  | ||||
| New | ||||
| • Thai localization | ||||
|  | ||||
|  | ||||
| Improved | ||||
| • Add start playing here action in long-press menus for playlists again #2518 | ||||
| • Add switch for SAF / legacy file picker #2521 | ||||
|  | ||||
| Fixed | ||||
| • Fix disappearing buttons in downloads view when switching apps #2487 | ||||
| • Fix playback position is stored although watch history is disabled | ||||
| • Fix reduced performance caused by playback position in list views #2517 | ||||
| • [Extractor] Fix ReCaptchaActivity #2527, TeamNewPipe/NewPipeExtractor#186 | ||||
| • [Extractor] [YouTube] Fix casual search error when playlists are in results TeamNewPipe/NewPipeExtractor#185 | ||||
|  | ||||
|  | ||||
|  | ||||
| Changes in 0.17.0 | ||||
|  | ||||
| New | ||||
| Playback resume #2288 | ||||
| • Resume streams where you stopped last time | ||||
| Downloader Enhancements #2149  | ||||
| • Use Storage Access Framework to store downloads on external SD-cards | ||||
| • New mp4 muxer | ||||
| • Optionally change the download directory before starting a download | ||||
| • Respect metered networks  | ||||
|  | ||||
|  | ||||
| Improved | ||||
| • Removed gema strings #2295 | ||||
| • Handle (auto)rotation changes during activity lifecycle #2444 | ||||
| • Make long-press menus consistent #2368 | ||||
|  | ||||
| Fixed | ||||
| • Fixed selected subtitle track name not being shown #2394 | ||||
| • Do not crash when check for app update fails (GitHub version) #2423  | ||||
| • Fixed downloads stuck at 99.9% #2440 | ||||
| • Update play queue metadata #2453  | ||||
| • [SoundCloud] Fixed crash when loading playlists TeamNewPipe/NewPipeExtractor#170 | ||||
| • [YouTube] Fixed duration can not be paresd TeamNewPipe/NewPipeExtractor#177 | ||||
							
								
								
									
										4
									
								
								fastlane/metadata/android/hi/changelogs/770.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								fastlane/metadata/android/hi/changelogs/770.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| 0.17.2 में परिवर्तन  | ||||
|  | ||||
| फिक्स  | ||||
| • फिक्स कोई वीडियो उपलब्ध नहीं था | ||||
							
								
								
									
										12
									
								
								fastlane/metadata/android/hi/changelogs/780.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								fastlane/metadata/android/hi/changelogs/780.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| Changes in 0.17.3 | ||||
|  | ||||
| Improved | ||||
| • Added option to clear playback states #2550 | ||||
| • Show hidden directories in the file picker #2591 | ||||
| • Support URLs from `invidio.us` instances to be opened with NewPipe  #2488  | ||||
| • Add support for `music.youtube.com` URLs TeamNewPipe/NewPipeExtractor#194 | ||||
|  | ||||
| Fixed | ||||
| • [YouTube] Fixed 'java.lang.IllegalArgumentException #192 | ||||
| • [YouTube] Fixed live streams not working TeamNewPipe/NewPipeExtractor#195 | ||||
| • Fixed performance problem in android pie when downloading a stream #2592 | ||||
							
								
								
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/790.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/790.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| Improved | ||||
| • Add more titles to improve accessibility for blind people #2655 | ||||
| • Make language of download folder setting more consistent and less ambiguous #2637 | ||||
|  | ||||
| Fixed | ||||
| • Check if last byte in the block is downloaded #2646 | ||||
| • Fixed scrolling in video detail fragment #2672 | ||||
| • Remove double search clear box animations to one #2695 | ||||
| • [SoundCloud] Fix client_id extraction #2745 | ||||
|  | ||||
| Development | ||||
| • Add missing dependencies inherited from NewPipeExtractor into NewPipe #2535 | ||||
| • Migrate to AndroidX #2685 | ||||
| • Update to ExoPlayer 2.10.6 #2697, #2736 | ||||
							
								
								
									
										27
									
								
								fastlane/metadata/android/hi/changelogs/800.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								fastlane/metadata/android/hi/changelogs/800.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| New | ||||
| • PeerTube support without P2P (#2201) [Beta]: | ||||
|   ◦ Watch and download videos from PeerTube instances | ||||
|   ◦ Add instances in the settings to access the complete PeerTube world | ||||
|   ◦ There might be problems with SSL handshakes on Android 4.4 and 7.1 when accessing certain instances resulting in a network error. | ||||
|  | ||||
| • Downloader (#2679): | ||||
|   ◦ Calculate download ETA | ||||
|   ◦ Download opus (webm files) as ogg | ||||
|   ◦ Recover expired download links to resume downloads after a long pause | ||||
|  | ||||
| Improved | ||||
| • Make the KioskFragment aware of changes in the preferred content country and improve performance of all main tabs #2742 | ||||
| • Use new Localization and Downloader implementations from extractor #2713  | ||||
| • Make "Default kiosk" string translatable | ||||
| • Black navigation bar for black theme #2569 | ||||
|  | ||||
| Fixed | ||||
| • Fixed a bug that could not move the popup player if another finger was placed while moving the popup player #2772  | ||||
| • Allow playlists missing an uploader and fix crashes related to this problem #2724, TeamNewPipe/NewPipeExtractor#219 | ||||
| • Enabling TLS1.1/1.2 on Android 4.4 devices (API 19/KitKat) to fix TLS handshake with MediaCCC and some PeerTube instances  #2792 | ||||
| • [SoundCloud] Fixed client_id extraction TeamNewPipe/NewPipeExtractor#217 | ||||
| • [SoundCloud] Fix audio stream extraction | ||||
|  | ||||
| Development | ||||
| • Update ExoPlayer to 2.10.8 #2791, #2816 | ||||
| • Update Gradle to 3.5.1 and add Kotlin support #2714 | ||||
							
								
								
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/810.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/810.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| New | ||||
| • Show video thumbnail on the lock screen when playing in the background | ||||
|  | ||||
| Improved | ||||
| • Add local playlist to queue when long pressing on background / popup button | ||||
| • Make main page tabs scrollable and hide when there is only a single tab | ||||
| • Limit amount of notification thumbnail updates in background player | ||||
| • Add dummy thumbnail for empty local playlists | ||||
| • Use *.opus file extension instead of *.webm and show "opus" in format label instead of "WebM Opus" in the download dropdown | ||||
| • Add button to delete downloaded files or download history in "Downloads" | ||||
| • [YouTube] Add support to /c/shortened_url channel links | ||||
|  | ||||
| Fixed | ||||
| • Fixed multiple issues when sharing a video to NewPipe and downloading its streams directly | ||||
| • Fixed player access out of its creation thread | ||||
| • Fixed search result paging | ||||
| • [YouTube] Fixed switching on null causing NPE | ||||
| • [YouTube] Fixed viewing comments when opening an invidio.us url | ||||
| • [SoundCloud] Updated client_id | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/820.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/820.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| फिक्स्ड डिक्रिप्ट फ़ंक्शन नाम रेगेक्स YouTube को अनुपयोगी बना रहा। | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/830.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/830.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| साउंडक्लाउड समस्याओं को ठीक करने के लिए साउंडक्लाउड क्लाइंट_आईडी अपडेट किया गया। | ||||
							
								
								
									
										22
									
								
								fastlane/metadata/android/hi/changelogs/840.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								fastlane/metadata/android/hi/changelogs/840.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| New | ||||
| • Added language selector to change the app language | ||||
| • Added send to Kodi button to player collapsible menu | ||||
| • Added ability to copy comments on long press | ||||
|  | ||||
| Improved | ||||
| • Fix ReCaptcha activity and correctly save obtained cookies | ||||
| • Removed dot-menu in favour of drawer and hide history button when watch history is not enabled in settings | ||||
| • Ask for display over other apps permission in settings correctly on Android 6 and later | ||||
| • Rename local playlist by long-clicking in BookmarkFragment | ||||
| • Various PeerTube improvements | ||||
| • Improved several English source strings | ||||
|  | ||||
| Fixed | ||||
| • Fixed player starting again although it is paused when option "minimize on app switch" enabled and NewPipe is minimized | ||||
| • Fix initial brightness value for gesture | ||||
| • Fixed .srt subtitle downloads containing not all line breaks | ||||
| • Fixed download to SD card failing because some Android 5 devices are not CTF compliant | ||||
| • Fixed downloading on Android KitKat | ||||
| • Fixed corrupt video .mp4 file being recognized as audio file | ||||
| • Fixed multiple localization problems, including wrong Chinese language codes | ||||
| • [YouTube] Timestamps in description are clickable again | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/850.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/850.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| इस रिलीज़ में YouTube वेबसाइट संस्करण अपडेट किया गया था। पुराना वेबसाइट संस्करण मार्च में बंद होने जा रहा है और इसलिए आपको न्यूपाइप को अपग्रेड करना होगा। | ||||
							
								
								
									
										7
									
								
								fastlane/metadata/android/hi/changelogs/860.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								fastlane/metadata/android/hi/changelogs/860.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| उन्नत  | ||||
| • सेव करें और रिस्टोर करें कि क्या पिच और टेंपो अनहुक हैं या नहीं  | ||||
| • प्लेयर में सपोर्ट डिस्प्ले कटआउट  | ||||
| • गोल दृश्य और ग्राहकों की संख्या  | ||||
| • कम डेटा का उपयोग करने के लिए YouTube को अनुकूलित किया गया  | ||||
|  | ||||
| इस रिलीज़ में YouTube से संबंधित 15 से अधिक बग ठीक किए गए थे। | ||||
							
								
								
									
										2
									
								
								fastlane/metadata/android/hi/changelogs/870.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								fastlane/metadata/android/hi/changelogs/870.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| यह एक हॉटफिक्स रिलीज़ है जो न्यूपाइप को बिना किसी बड़ी परेशानी के फिर से साउंडक्लाउड का उपयोग करने की अनुमति देता है।  | ||||
| साउंडक्लाउड के v2 एपीआई का उपयोग अब एक्सट्रैक्टर में किया जाता है और अमान्य क्लाइंट आईडी का पता लगाने में सुधार किया गया है। | ||||
							
								
								
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/900.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/900.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| New | ||||
| • Subscription groups and sorted feeds | ||||
| • Mute button in players | ||||
|  | ||||
| Improved | ||||
| • Allow opening music.youtube.com and media.ccc.de links in NewPipe | ||||
| • Relocate two settings from Appearance to Content | ||||
| • Hide 5, 15, 25 second seek options if inexact seek is enabled | ||||
|  | ||||
| Fixed | ||||
| • some WebM videos are not seekable | ||||
| • database backup on Android P | ||||
| • crash when sharing a downloaded file | ||||
| • tons of YouTube extraction issue and more ... | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/910.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/910.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| फिक्स्ड डेटाबेस माइग्रेशन जो न्यूपाइप को कुछ दुर्लभ मामलों में शुरू होने से रोकता है। | ||||
							
								
								
									
										9
									
								
								fastlane/metadata/android/hi/changelogs/920.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								fastlane/metadata/android/hi/changelogs/920.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| Improved | ||||
|  | ||||
| • Added upload date and view count on stream grid items | ||||
| • Improvements for the drawer header layout | ||||
|  | ||||
| Fixed | ||||
|  | ||||
| • Fixed mute button causing crashes on API 19 | ||||
| • Fixed downloading of long 1080p 60fps videos | ||||
							
								
								
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/930.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								fastlane/metadata/android/hi/changelogs/930.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| New | ||||
| • Search on YouTube Music | ||||
| • Basic Android TV support | ||||
|  | ||||
| Improved | ||||
| • Added the ability to remove all watched videos from a local playlist | ||||
| • Show message when content isn't supported yet instead of crashing | ||||
| • Improved popup player resize with pinch gestures | ||||
| • Enqueue streams on long press on background and popup buttons in channel | ||||
| • Improved size handling of the drawer header title | ||||
|  | ||||
| Fixed | ||||
| • Fixed age restricted content setting not working | ||||
| • Fixed certain kinds of reCAPTCHAs | ||||
| • Fixed crash when opening bookmarks while playlist is `null` | ||||
| • Fixed detection of network related exceptions | ||||
| • Fixed visibility of group sort button in the subscriptions fragment | ||||
|  | ||||
| and more | ||||
							
								
								
									
										16
									
								
								fastlane/metadata/android/hi/changelogs/940.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								fastlane/metadata/android/hi/changelogs/940.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| New | ||||
| • Add support for SoundCloud comments | ||||
| • Add YouTube restricted mode setting | ||||
| • Show PeerTube parent channel details | ||||
|  | ||||
| Improved | ||||
| • Show Kore button only for supported services | ||||
| • Block player gestures that begin at the NavigationBar or StatusBar | ||||
| • Change retry & subscribe buttons background color based on service color | ||||
|  | ||||
| Fixed | ||||
| • Fix download dialog freeze | ||||
| • Open in browser button now really opens in browser | ||||
| • Fix crash on opening videos and "Could not play this stream" | ||||
|  | ||||
| and more | ||||
							
								
								
									
										4
									
								
								fastlane/metadata/android/hi/changelogs/950.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								fastlane/metadata/android/hi/changelogs/950.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| यह रिलीज़ तीन छोटे सुधार लाता है:  | ||||
| • Android 10+ पर फिक्स्ड स्टोरेज एक्सेस  | ||||
| • फिक्स्ड ओपनिंग कियोस्क  | ||||
| • लंबे वीडियो की निश्चित अवधि पार्सिंग | ||||
							
								
								
									
										17
									
								
								fastlane/metadata/android/hi/changelogs/951.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								fastlane/metadata/android/hi/changelogs/951.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| New | ||||
| • Add search for subscription picker in the feed group dialog | ||||
| • Add filter to the feed group dialog to show only ungrouped subscriptions | ||||
| • Add playlist tab to main page | ||||
| • Fast forward/rewind in background/pop-up player queue | ||||
| • Display search suggestion: did you mean & showing result for | ||||
|  | ||||
| Improved | ||||
| • Drop writing application metadata in muxed files | ||||
| • Do not remove failed streams from the queue | ||||
| • Update status bar color to match toolbar color | ||||
|  | ||||
| Fixed | ||||
| • Fixed audio/video desync caused by floating point cumulative errors | ||||
| • [PeerTube] Handle deleted comments | ||||
|  | ||||
| and more | ||||
							
								
								
									
										7
									
								
								fastlane/metadata/android/hi/changelogs/952.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								fastlane/metadata/android/hi/changelogs/952.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| Improved | ||||
| • Auto-play is available for all services (instead of only for YouTube) | ||||
|  | ||||
| Fixed | ||||
| • Fixed related streams by supporting YouTube's new continuations | ||||
| • Fixed age restricted YouTube videos | ||||
| • [Android TV] Fixed lingering focus highlight overlay | ||||
| @@ -1,8 +1,9 @@ | ||||
| • नए एप्लिकेशन वर्कफ़्लो: विस्तार पृष्ठ पर वीडियो चलाएं, प्लेयर को छोटा करने के लिए नीचे स्वाइप करें  | ||||
| • मीडियास्टाइल सूचनाएँ: सूचनाएँ, प्रदर्शन सुधार में अनुकूलन योग्य क्रियाएँ  | ||||
| • मीडियास्टाइल सूचनाएँ: सूचनाओं में अनुकूलन योग्य क्रियाएं, प्रदर्शन सुधार  | ||||
| • डेस्कटॉप ऐप के रूप में न्यूपाइप का उपयोग करते समय मूल आकार परिवर्तन  | ||||
|  | ||||
| • असमर्थित यूआरएल टोस्ट के मामले में खुले विकल्पों के साथ संवाद दिखाएं  | ||||
| • रिमोट सुझावों के अनुपलब्धता पर अनुभव में सुधार  | ||||
| • 720p60 (इन-ऐप प्लेयर) और 480p (पॉप-अप प्लेयर) के लिए डिफ़ॉल्ट वीडियो की गुणवत्ता वृद्धि | ||||
|   | ||||
| • त्रुटियों में सुधार और बोहोत कुछ | ||||
|  | ||||
| • त्रुटियों में सुधार और बहुत कुछ | ||||
|   | ||||
| @@ -1,5 +1,3 @@ | ||||
| त्रुटि रिपोर्टर खोलने के बाद क्रैश का निश्चित अंतहीन लूप। | ||||
| पीयरट्यूब उदाहरणों की अद्यतन सूची जो न्यूपाइप द्वारा स्वचालित रूप से खोली जा सकती है। | ||||
| अपडेट किए गए अनुवाद।त्रुटि रिपोर्टर खोलने के बाद क्रैश का निश्चित अंतहीन लूप। | ||||
| पीयरट्यूब उदाहरणों की अद्यतन सूची जो न्यूपाइप द्वारा स्वचालित रूप से खोली जा सकती है। | ||||
| पीरट्यूब इंस्टेंस सूची जो निऊपाईप द्वारा स्वचालित रूप से खोली जा सकती है। | ||||
| अपडेट किए गए अनुवाद। | ||||
|   | ||||
							
								
								
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/963.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								fastlane/metadata/android/hi/changelogs/963.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| • [यूट्यूब] फिक्स्ड निश्चित चैनल निरंतरता | ||||
							
								
								
									
										8
									
								
								fastlane/metadata/android/hi/changelogs/964.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								fastlane/metadata/android/hi/changelogs/964.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| • Added support for chapters in player controls | ||||
| • [PeerTube] Added Sepia search | ||||
| • Re-added share button in video detail view and moved stream description into the tab layout | ||||
| • Disable restoring brightness if brightness gesture is disabled | ||||
| • Added list item to play video on kodi | ||||
| • Fixed crash when no default browser is set on some devices and improve share dialogs | ||||
| • Toggle play/pause with hardware space button in fullscreen player | ||||
| • [media.ccc.de] Various fixes and improvements | ||||
							
								
								
									
										6
									
								
								fastlane/metadata/android/hi/changelogs/965.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								fastlane/metadata/android/hi/changelogs/965.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| Fixed crash which occurred when reordering channel groups. | ||||
| Fixed getting more YouTube videos from channels and playlists. | ||||
| Fixed getting YouTube comments. | ||||
| Added support for /watch/, /v/ and /w/ subpaths in YouTube URLs. | ||||
| Fixed extraction of SoundCloud client id and geo-restricted content. | ||||
| Added Northern Kurdish localization. | ||||
							
								
								
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/966.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								fastlane/metadata/android/hi/changelogs/966.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| New: | ||||
| • Add a new service: Bandcamp | ||||
|  | ||||
| Improved: | ||||
| • Add an option to have the app follow the device theme | ||||
| • Prevent some crashes by showing an improved error panel | ||||
| • Show more information on why content in unavailable | ||||
| • Hardware space button triggers play/pause | ||||
| • Show "Download started" toast | ||||
|  | ||||
| Fixed: | ||||
| • Fix very small thumbnail in video details while playing in the background | ||||
| • Fix empty title in minimized player | ||||
| • Fix last resize mode not being restored correctly | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Stypox
					Stypox