Merge branch 'master' into dev
This commit is contained in:
commit
e0cb2892b8
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
https://hosted.weblate.org/translate/newpipe/metadata/bn/?checksum=2a64aca6716bd69b
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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…
|
|
@ -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…
|
|
@ -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…
|
|
@ -0,0 +1,8 @@
|
|||
### सुधार
|
||||
- मोबाइल डेटा का उपयोग करते समय वीडियो की गुणवत्ता को सीमित करने की क्षमता को जोड़ा गया। #1339
|
||||
- सत्र # 1442 के लिए चमक याद रखें
|
||||
- कमजोर सीपीयू # 1431 के लिए डाउनलोड प्रदर्शन में सुधार
|
||||
- मीडिया सत्र # 1433 के लिए समर्थन जोड़ें (काम कर रहा है)
|
||||
|
||||
### फिक्स
|
||||
- डाउनलोड खोलने पर क्रैश ठीक करें (रिलीज बिल्ड के लिए अब उपलब्ध है) # 1441
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
|
@ -0,0 +1,2 @@
|
|||
# हल किया गया
|
||||
- हॉट फिक्स डिक्रिप्ट फ़ंक्शन त्रुटि फिर से।
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
0.17.2 में परिवर्तन
|
||||
|
||||
फिक्स
|
||||
• फिक्स कोई वीडियो उपलब्ध नहीं था
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
फिक्स्ड डिक्रिप्ट फ़ंक्शन नाम रेगेक्स YouTube को अनुपयोगी बना रहा।
|
|
@ -0,0 +1 @@
|
|||
साउंडक्लाउड समस्याओं को ठीक करने के लिए साउंडक्लाउड क्लाइंट_आईडी अपडेट किया गया।
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
इस रिलीज़ में YouTube वेबसाइट संस्करण अपडेट किया गया था। पुराना वेबसाइट संस्करण मार्च में बंद होने जा रहा है और इसलिए आपको न्यूपाइप को अपग्रेड करना होगा।
|
|
@ -0,0 +1,7 @@
|
|||
उन्नत
|
||||
• सेव करें और रिस्टोर करें कि क्या पिच और टेंपो अनहुक हैं या नहीं
|
||||
• प्लेयर में सपोर्ट डिस्प्ले कटआउट
|
||||
• गोल दृश्य और ग्राहकों की संख्या
|
||||
• कम डेटा का उपयोग करने के लिए YouTube को अनुकूलित किया गया
|
||||
|
||||
इस रिलीज़ में YouTube से संबंधित 15 से अधिक बग ठीक किए गए थे।
|
|
@ -0,0 +1,2 @@
|
|||
यह एक हॉटफिक्स रिलीज़ है जो न्यूपाइप को बिना किसी बड़ी परेशानी के फिर से साउंडक्लाउड का उपयोग करने की अनुमति देता है।
|
||||
साउंडक्लाउड के v2 एपीआई का उपयोग अब एक्सट्रैक्टर में किया जाता है और अमान्य क्लाइंट आईडी का पता लगाने में सुधार किया गया है।
|
|
@ -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 ...
|
|
@ -0,0 +1 @@
|
|||
फिक्स्ड डेटाबेस माइग्रेशन जो न्यूपाइप को कुछ दुर्लभ मामलों में शुरू होने से रोकता है।
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
यह रिलीज़ तीन छोटे सुधार लाता है:
|
||||
• Android 10+ पर फिक्स्ड स्टोरेज एक्सेस
|
||||
• फिक्स्ड ओपनिंग कियोस्क
|
||||
• लंबे वीडियो की निश्चित अवधि पार्सिंग
|
|
@ -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
|
|
@ -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 @@
|
|||
त्रुटि रिपोर्टर खोलने के बाद क्रैश का निश्चित अंतहीन लूप।
|
||||
पीयरट्यूब उदाहरणों की अद्यतन सूची जो न्यूपाइप द्वारा स्वचालित रूप से खोली जा सकती है।
|
||||
अपडेट किए गए अनुवाद।त्रुटि रिपोर्टर खोलने के बाद क्रैश का निश्चित अंतहीन लूप।
|
||||
पीयरट्यूब उदाहरणों की अद्यतन सूची जो न्यूपाइप द्वारा स्वचालित रूप से खोली जा सकती है।
|
||||
पीरट्यूब इंस्टेंस सूची जो निऊपाईप द्वारा स्वचालित रूप से खोली जा सकती है।
|
||||
अपडेट किए गए अनुवाद।
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
• [यूट्यूब] फिक्स्ड निश्चित चैनल निरंतरता
|
|
@ -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
|
|
@ -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.
|
|
@ -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
Loading…
Reference in New Issue