Merge branch 'dev' into 9458_faulty_playlist_thumbnail_update

This commit is contained in:
Jared234 2023-02-05 20:45:44 +01:00 committed by GitHub
commit 3ff4b713e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 343 additions and 28 deletions

View File

@ -1,3 +1,7 @@
import com.android.tools.profgen.ArtProfileKt
import com.android.tools.profgen.ArtProfileSerializer
import com.android.tools.profgen.DexFile
plugins {
id "com.android.application"
id "kotlin-android"
@ -308,3 +312,24 @@ static String getGitWorkingBranch() {
return ""
}
}
project.afterEvaluate {
tasks.compileReleaseArtProfile.doLast {
outputs.files.each { file ->
if (file.toString().endsWith(".profm")) {
println("Sorting ${file} ...")
def version = ArtProfileSerializer.valueOf("METADATA_0_0_2")
def profile = ArtProfileKt.ArtProfile(file)
def keys = new ArrayList(profile.profileData.keySet())
def sortedData = new LinkedHashMap()
Collections.sort keys, new DexFile.Companion()
keys.each { key -> sortedData[key] = profile.profileData[key] }
new FileOutputStream(file).with {
write(version.magicBytes$profgen)
write(version.versionBytes$profgen)
version.write$profgen(it, sortedData, "")
}
}
}
}
}

View File

@ -0,0 +1,24 @@
package org.schabi.newpipe.database.playlist;
import androidx.room.ColumnInfo;
/**
* This class adds a field to {@link PlaylistMetadataEntry} that contains an integer representing
* how many times a specific stream is already contained inside a local playlist. Used to be able
* to grey out playlists which already contain the current stream in the playlist append dialog.
* @see org.schabi.newpipe.local.playlist.LocalPlaylistManager#getPlaylistDuplicates(String)
*/
public class PlaylistDuplicatesEntry extends PlaylistMetadataEntry {
public static final String PLAYLIST_TIMES_STREAM_IS_CONTAINED = "timesStreamIsContained";
@ColumnInfo(name = PLAYLIST_TIMES_STREAM_IS_CONTAINED)
public final long timesStreamIsContained;
public PlaylistDuplicatesEntry(final long uid,
final String name,
final String thumbnailUrl,
final long streamCount,
final long timesStreamIsContained) {
super(uid, name, thumbnailUrl, streamCount);
this.timesStreamIsContained = timesStreamIsContained;
}
}

View File

@ -6,6 +6,7 @@ import androidx.room.RewriteQueriesToDropUnusedColumns;
import androidx.room.Transaction;
import org.schabi.newpipe.database.BasicDAO;
import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity;
@ -14,6 +15,7 @@ import java.util.List;
import io.reactivex.rxjava3.core.Flowable;
import static org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry.PLAYLIST_TIMES_STREAM_IS_CONTAINED;
import static org.schabi.newpipe.database.playlist.PlaylistMetadataEntry.PLAYLIST_STREAM_COUNT;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.DEFAULT_THUMBNAIL;
import static org.schabi.newpipe.database.playlist.model.PlaylistEntity.PLAYLIST_ID;
@ -28,6 +30,7 @@ import static org.schabi.newpipe.database.playlist.model.PlaylistStreamEntity.PL
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_ID;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_TABLE;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_THUMBNAIL_URL;
import static org.schabi.newpipe.database.stream.model.StreamEntity.STREAM_URL;
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.JOIN_STREAM_ID_ALIAS;
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_PROGRESS_MILLIS;
import static org.schabi.newpipe.database.stream.model.StreamStateEntity.STREAM_STATE_TABLE;
@ -103,4 +106,24 @@ public interface PlaylistStreamDAO extends BasicDAO<PlaylistStreamEntity> {
+ " GROUP BY " + PLAYLIST_ID
+ " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC")
Flowable<List<PlaylistMetadataEntry>> getPlaylistMetadata();
@Transaction
@Query("SELECT " + PLAYLIST_TABLE + "." + PLAYLIST_ID + ", "
+ PLAYLIST_NAME + ", "
+ PLAYLIST_TABLE + "." + PLAYLIST_THUMBNAIL_URL + ", "
+ "COALESCE(COUNT(" + JOIN_PLAYLIST_ID + "), 0) AS " + PLAYLIST_STREAM_COUNT + ", "
+ "COALESCE(SUM(" + STREAM_URL + " = :streamUrl), 0) AS "
+ PLAYLIST_TIMES_STREAM_IS_CONTAINED
+ " FROM " + PLAYLIST_TABLE
+ " LEFT JOIN " + PLAYLIST_STREAM_JOIN_TABLE
+ " ON " + PLAYLIST_TABLE + "." + PLAYLIST_ID + " = " + JOIN_PLAYLIST_ID
+ " LEFT JOIN " + STREAM_TABLE
+ " ON " + STREAM_TABLE + "." + STREAM_ID + " = " + JOIN_STREAM_ID
+ " AND :streamUrl = :streamUrl"
+ " GROUP BY " + JOIN_PLAYLIST_ID
+ " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC")
Flowable<List<PlaylistDuplicatesEntry>> getPlaylistDuplicatesMetadata(String streamUrl);
}

View File

@ -4,6 +4,7 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -13,8 +14,8 @@ import androidx.recyclerview.widget.RecyclerView;
import org.schabi.newpipe.NewPipeDatabase;
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.model.PlaylistEntity;
import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry;
import org.schabi.newpipe.database.stream.model.StreamEntity;
import org.schabi.newpipe.local.LocalItemListAdapter;
import org.schabi.newpipe.local.playlist.LocalPlaylistManager;
@ -29,6 +30,7 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
private RecyclerView playlistRecyclerView;
private LocalItemListAdapter playlistAdapter;
private TextView playlistDuplicateIndicator;
private final CompositeDisposable playlistDisposables = new CompositeDisposable();
@ -64,8 +66,9 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
playlistAdapter = new LocalItemListAdapter(getActivity());
playlistAdapter.setSelectedListener(selectedItem -> {
final List<StreamEntity> entities = getStreamEntities();
if (selectedItem instanceof PlaylistMetadataEntry && entities != null) {
onPlaylistSelected(playlistManager, (PlaylistMetadataEntry) selectedItem, entities);
if (selectedItem instanceof PlaylistDuplicatesEntry && entities != null) {
onPlaylistSelected(playlistManager,
(PlaylistDuplicatesEntry) selectedItem, entities);
}
});
@ -73,10 +76,13 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
playlistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
playlistRecyclerView.setAdapter(playlistAdapter);
playlistDuplicateIndicator = view.findViewById(R.id.playlist_duplicate);
final View newPlaylistButton = view.findViewById(R.id.newPlaylist);
newPlaylistButton.setOnClickListener(ignored -> openCreatePlaylistDialog());
playlistDisposables.add(playlistManager.getPlaylists()
playlistDisposables.add(playlistManager
.getPlaylistDuplicates(getStreamEntities().get(0).getUrl())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onPlaylistsReceived));
}
@ -118,19 +124,36 @@ public final class PlaylistAppendDialog extends PlaylistDialog {
requireDialog().dismiss();
}
private void onPlaylistsReceived(@NonNull final List<PlaylistMetadataEntry> playlists) {
if (playlistAdapter != null && playlistRecyclerView != null) {
private void onPlaylistsReceived(@NonNull final List<PlaylistDuplicatesEntry> playlists) {
if (playlistAdapter != null
&& playlistRecyclerView != null
&& playlistDuplicateIndicator != null) {
playlistAdapter.clearStreamItemList();
playlistAdapter.addItems(playlists);
playlistRecyclerView.setVisibility(View.VISIBLE);
playlistDuplicateIndicator.setVisibility(
anyPlaylistContainsDuplicates(playlists) ? View.VISIBLE : View.GONE);
}
}
private boolean anyPlaylistContainsDuplicates(final List<PlaylistDuplicatesEntry> playlists) {
return playlists.stream()
.anyMatch(playlist -> playlist.timesStreamIsContained > 0);
}
private void onPlaylistSelected(@NonNull final LocalPlaylistManager manager,
@NonNull final PlaylistMetadataEntry playlist,
@NonNull final PlaylistDuplicatesEntry playlist,
@NonNull final List<StreamEntity> streams) {
final Toast successToast = Toast.makeText(getContext(),
R.string.playlist_add_stream_success, Toast.LENGTH_SHORT);
final String toastText;
if (playlist.timesStreamIsContained > 0) {
toastText = getString(R.string.playlist_add_stream_success_duplicate,
playlist.timesStreamIsContained);
} else {
toastText = getString(R.string.playlist_add_stream_success);
}
final Toast successToast = Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT);
playlistDisposables.add(manager.appendToPlaylist(playlist.uid, streams)
.observeOn(AndroidSchedulers.mainThread())

View File

@ -4,6 +4,7 @@ import android.view.View;
import android.view.ViewGroup;
import org.schabi.newpipe.database.LocalItem;
import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.local.LocalItemBuilder;
import org.schabi.newpipe.local.history.HistoryRecordManager;
@ -13,6 +14,9 @@ import org.schabi.newpipe.util.Localization;
import java.time.format.DateTimeFormatter;
public class LocalPlaylistItemHolder extends PlaylistItemHolder {
private static final float GRAYED_OUT_ALPHA = 0.6f;
public LocalPlaylistItemHolder(final LocalItemBuilder infoItemBuilder, final ViewGroup parent) {
super(infoItemBuilder, parent);
}
@ -38,6 +42,13 @@ public class LocalPlaylistItemHolder extends PlaylistItemHolder {
PicassoHelper.loadPlaylistThumbnail(item.thumbnailUrl).into(itemThumbnailView);
if (item instanceof PlaylistDuplicatesEntry
&& ((PlaylistDuplicatesEntry) item).timesStreamIsContained > 0) {
itemView.setAlpha(GRAYED_OUT_ALPHA);
} else {
itemView.setAlpha(1.0f);
}
super.updateFromItem(localItem, historyRecordManager, dateTimeFormatter);
}
}

View File

@ -3,6 +3,7 @@ package org.schabi.newpipe.local.playlist;
import androidx.annotation.Nullable;
import org.schabi.newpipe.database.AppDatabase;
import org.schabi.newpipe.database.playlist.PlaylistDuplicatesEntry;
import org.schabi.newpipe.database.playlist.PlaylistMetadataEntry;
import org.schabi.newpipe.database.playlist.PlaylistStreamEntry;
import org.schabi.newpipe.database.playlist.dao.PlaylistDAO;
@ -92,6 +93,18 @@ public class LocalPlaylistManager {
return playlistStreamTable.getPlaylistMetadata().subscribeOn(Schedulers.io());
}
/**
* Get playlists with attached information about how many times the provided stream is already
* contained in each playlist.
*
* @param streamUrl the stream url for which to check for duplicates
* @return a list of {@link PlaylistDuplicatesEntry}
*/
public Flowable<List<PlaylistDuplicatesEntry>> getPlaylistDuplicates(final String streamUrl) {
return playlistStreamTable.getPlaylistDuplicatesMetadata(streamUrl)
.subscribeOn(Schedulers.io());
}
public Flowable<List<PlaylistStreamEntry>> getPlaylistStreams(final long playlistId) {
return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io());
}

View File

@ -34,11 +34,26 @@
tools:ignore="RtlHardcoded" />
</RelativeLayout>
<org.schabi.newpipe.views.NewPipeTextView
android:id="@+id/playlist_duplicate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/newPlaylist"
android:layout_marginHorizontal="@dimen/video_item_search_padding"
android:layout_marginBottom="@dimen/video_item_search_padding"
android:gravity="center"
android:text="@string/duplicate_in_playlist"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="13sp"
android:visibility="gone"
tools:text="@tools:sample/lorem[20]"
tools:visibility="visible" />
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/newPlaylist"
android:layout_below="@+id/playlist_duplicate"
android:layout_marginLeft="@dimen/video_item_search_padding"
android:layout_marginRight="@dimen/video_item_search_padding"
android:background="?attr/separator_color" />

View File

@ -780,4 +780,6 @@
<string name="import_subscriptions_hint">استيراد الاشتراكات أو تصديرها من القائمة المكونة من 3 نقاط</string>
<string name="night_theme_available">هذا الخيار متاح فقط إذا تم تحديد %s للسمة</string>
<string name="unset_playlist_thumbnail">إلغاء تعيين الصورة المصغرة الدائمة</string>
<string name="msg_failed_to_copy">فشل النسخ إلى الحافظة</string>
<string name="card">البطاقة</string>
</resources>

View File

@ -25,4 +25,77 @@
<string name="did_you_mean">আপুনি \"%1$s\" বুজাইছিল নেকি\?</string>
<string name="use_external_video_player_title">বাহ্যিক ভিডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক</string>
<string name="use_external_audio_player_title">বাহ্যিক অডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক</string>
<string name="channel_unsubscribed">Channel আনচাবস্ক্ৰাইব কৰা হ\'ল</string>
<string name="subscription_change_failed">subscription সলনি কৰিব পৰা নগ\'ল</string>
<string name="subscription_update_failed">subscription আপডেট কৰিব পৰা নগ\'ল</string>
<string name="show_info">তথ্য দেখুৱাওক</string>
<string name="tab_subscriptions">চাবস্ক্ৰিপচন</string>
<string name="tab_bookmarks">বুকমাৰ্ক কৰা প্লেলিষ্ট</string>
<string name="tab_choose">টেব নিৰ্বাচন কৰক</string>
<string name="controls_background_title">বেকগ্ৰাউণ্ড</string>
<string name="controls_popup_title">পপ-আপ</string>
<string name="default_resolution_title">স্থায়ী ৰিজ\'লিউচন</string>
<string name="default_popup_resolution_title">স্থায়ী পপআপ ৰিজোলিউচন</string>
<string name="show_higher_resolutions_title">উচ্চ ৰিজ\'লিউচন দেখুৱাওক</string>
<string name="show_higher_resolutions_summary">কেৱল কিছুমান ডিভাইচেহে 2K/4K ভিডিঅ’ বজাব পাৰে</string>
<string name="play_with_kodi_title">Kodi ৰ সৈতে বজাওক</string>
<string name="kore_not_found">Kore এপ ইনষ্টল\?</string>
<string name="show_play_with_kodi_title">\"Kodi ৰ সৈতে খোলক\" বিকল্প দেখুৱাওক</string>
<string name="show_play_with_kodi_summary">Kodi মিডিয়া চেণ্টাৰৰ জৰিয়তে এটা ভিডিঅ\' চলাবলৈ এটা বিকল্প প্ৰদৰ্শন কৰক</string>
<string name="crash_the_player">প্লেয়াৰটো ক্ৰেচ কৰক</string>
<string name="notification_action_buffering">বাফাৰিং</string>
<string name="notification_action_nothing">নথিং</string>
<string name="notification_colorize_title">জাননী ৰ‌ঙিণ কৰক</string>
<string name="play_audio">অডিঅ\'</string>
<string name="default_audio_format_title">অডিঅ\' ৰ প্ৰকাৰ</string>
<string name="default_video_format_title">ভিডিঅ\'ৰ প্ৰকাৰ</string>
<string name="theme_title">থিম</string>
<string name="night_theme_title">নিশাৰ থিম</string>
<string name="light_theme_title">পোহৰ</string>
<string name="dark_theme_title">অন্ধকাৰ</string>
<string name="black_theme_title">ক\'লা</string>
<string name="popup_remember_size_pos_title">পপ-আপ বৈশিষ্ট্যসমূহ মনত ৰাখিব</string>
<string name="popup_remember_size_pos_summary">পপ-আপৰ অন্তিম আকাৰ আৰু অৱস্থান মনত ৰাখিব</string>
<string name="use_inexact_seek_summary">Inexact seek য়ে প্লেয়াৰটোক দ্ৰুত গতিত স্থান সলনি কৰিবলৈ অনুমতি দিয়ে। ৫, ১৫ বা ২৫ ছেকেণ্ড সলনি কৰিবলৈ বিচাৰিলে ইয়াৰ প্ৰয়োজন নহয়</string>
<string name="seek_duration_title">ফাষ্ট-ফৰৱাৰ্ড/-ৰিৱাইণ্ড কৰিবলৈ বিচৰা সময়সীমা</string>
<string name="progressive_load_interval_title">প্লেবেক লোড কৰাৰ ব্যৱধানৰ আকাৰ</string>
<string name="progressive_load_interval_summary">লোড ব্যৱধানৰ আকাৰ সলনি কৰক (বৰ্তমানে %s) । এটা কম মানে প্ৰাৰম্ভিক ভিডিঅ\' লোডিং দ্ৰুত কৰিব পাৰে। পৰিৱৰ্তনৰ বাবে এটা খেলুৱৈ পুনৰাৰম্ভৰ প্ৰয়োজন</string>
<string name="notification_colorize_summary">থাম্বনেইলত থকা মূল ৰং অনুসৰি এণ্ড্ৰইডক জাননীৰ ৰং কাষ্টমাইজ কৰিবলৈ কওক (মন কৰিব যে এইটো সকলো ডিভাইচতে উপলব্ধ নহয়)</string>
<string name="clear_queue_confirmation_description">সক্ৰিয় প্লেয়াৰৰ queue সলনি কৰা হ’ব</string>
<string name="download_thumbnail_title">থাম্বনেইল লোড কৰক</string>
<string name="show_comments_title">মন্তব্য দেখুৱাওক</string>
<string name="show_description_title">বিৱৰণ দেখুৱাওক</string>
<string name="show_meta_info_title">মেটা তথ্য দেখুৱাওক</string>
<string name="thumbnail_cache_wipe_complete_notice">সংৰক্ষিত ছবি মচি পেলোৱা হ\'ল</string>
<string name="metadata_cache_wipe_title">সংৰক্ষিত কৰি থোৱা মেটাডাটা মচি পেলাওক</string>
<string name="metadata_cache_wipe_summary">সকলো সংৰক্ষণ কৰি ৰখা ৱেবপেজৰ তথ্য আঁতৰাওক</string>
<string name="metadata_cache_wipe_complete_notice">সংৰক্ষণ কৰি থোৱা মেটাডাটা মচি পেলোৱা হ\'ল</string>
<string name="auto_queue_title">পৰৱৰ্তী ষ্ট্ৰিম স্বয়ংক্ৰিয়ভাৱে enque কৰক</string>
<string name="sort">সজোৱা</string>
<string name="download_path_title">ভিডিঅ\' ডাউনলোড folder</string>
<string name="controls_add_to_playlist_title">যোগ কৰক</string>
<string name="download_path_audio_summary">ডাউনলোড কৰা অডিঅ\' ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয়</string>
<string name="notification_scale_to_square_image_title">থাম্বনেইলক ১:১ অনুপাত লৈ ক্ৰপ কৰক</string>
<string name="download_path_summary">ডাউনলোড কৰা ভিডিঅ’ ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয়</string>
<string name="download_path_dialog_title">ভিডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder বাছক</string>
<string name="download_path_audio_title">অডিঅ\' ডাউনলোড folder</string>
<string name="download_path_audio_dialog_title">অডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder নিৰ্বাচন কৰক</string>
<string name="notification_scale_to_square_image_summary">জাননীত দেখুওৱা ভিডিঅ’ থাম্বনেইলটো ১৬:৯ৰ পৰা ১:১ অনুপাতলৈ ক্ৰপ কৰক</string>
<string name="notification_action_0_title">First action button</string>
<string name="notification_action_4_title">Fifth action button</string>
<string name="notification_actions_summary">Edit each notification action below by tapping on it. Select up to three of them to be shown in the compact notification by using the checkboxes on the right</string>
<string name="notification_action_1_title">Second action button</string>
<string name="notification_actions_at_most_three">You can select at most three actions to show in the compact notification!</string>
<string name="notification_action_repeat">পুনৰাবৃত্তি</string>
<string name="notification_action_shuffle">শ্বাফেল</string>
<string name="use_inexact_seek_title">দ্ৰুত inexact seek ব্যৱহাৰ কৰক</string>
<string name="clear_queue_confirmation_title">এটা queue বিলুপ্তি কৰাৰ আগতে নিশ্চিতকৰণৰ বাবে সুধিব</string>
<string name="clear_queue_confirmation_summary">এটা প্লেয়াৰ পৰা আন এটালৈ সলনি কৰিলে আপোনাৰ queue সলনি হ\'ব পাৰে</string>
<string name="notification_action_3_title">Fourth action button</string>
<string name="notification_action_2_title">Third action button</string>
<string name="show_description_summary">ভিডিঅ\'ৰ বিৱৰণ আৰু অতিৰিক্ত তথ্য লুকুৱাবলৈ বন্ধ কৰক</string>
<string name="show_comments_summary">মন্তব্য লুকুৱাবলৈ বন্ধ কৰক</string>
<string name="show_next_and_similar_title">\'পৰৱৰ্তী\' আৰু \'সাদৃশ্য থকা\' ভিডিঅ\' দেখুৱাওক</string>
<string name="download_thumbnail_summary">থাম্বনেইলসমূহ লোড কৰা, তথ্য আৰু মেমৰি ব্যৱহাৰ সংৰক্ষণ কৰা ৰোধ কৰিবলে বন্ধ কৰক। পৰিবৰ্তনসমূহে ইন-মেমৰি আৰু অন-ডিস্ক কেশ্ব দুয়োটা পৰিষ্কাৰ কৰে</string>
<string name="show_meta_info_summary">ষ্ট্ৰিমৰ সৃষ্টিকৰ্তা, ষ্ট্ৰিমৰ বিষয়বস্তু বা এটা সন্ধান অনুৰোধৰ বিষয়ে অতিৰিক্ত তথ্যৰ সৈতে মেটা তথ্যৰ বাকচসমূহ লুকুৱাবলৈ বন্ধ কৰক</string>
</resources>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="main_bg_subtitle">Başlamaq üçün böyüdücüyə toxun.</string>
<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\" yüklənilsin\?</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="install">Yüklə</string>
<string name="cancel">Ləğv et</string>
@ -45,7 +45,7 @@
<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="open_in_popup_mode">Ani pəncərə rejimində aç</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>
@ -613,7 +613,7 @@
<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">Səs ucalığı</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>
@ -728,4 +728,6 @@
<string name="app_update_available_notification_text">%s endirmək üçün toxun</string>
<string name="night_theme_available">Bu seçim yalnız tema üçün %s seçildikdə əlçatandır</string>
<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>
</resources>

View File

@ -741,4 +741,6 @@
<string name="import_subscriptions_hint">Import nebo export odběrů z 3-tečkové nabídky</string>
<string name="night_theme_available">Tato možnost je dostupná pouze při vybraném motivu %s</string>
<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>
</resources>

View File

@ -728,4 +728,6 @@
<string name="import_subscriptions_hint">Importieren oder Exportieren von Abonnements über das 3-Punkte-Menü</string>
<string name="night_theme_available">Diese Option ist nur verfügbar, wenn %s als Design ausgewählt wird</string>
<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>
</resources>

View File

@ -728,4 +728,6 @@
<string name="app_update_unavailable_toast">Έχετε την πιο πρόσφατη έκδοση του NewPipe</string>
<string name="night_theme_available">Αυτή η επιλογή είναι διαθέσιμη μόνο εάν έχει επιλεγεί %s για Θέμα</string>
<string name="unset_playlist_thumbnail">Κατάργηση μόνιμης μικρογραφίας</string>
<string name="msg_failed_to_copy">Αποτυχία αντιγραφής στο πρόχειρο</string>
<string name="card">Κάρτα</string>
</resources>

View File

@ -744,4 +744,6 @@
<string name="app_update_available_notification_text">Pulsa para descargar %s</string>
<string name="night_theme_available">Esta opción sólo está disponible si %s está seleccionado para el tema</string>
<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>
</resources>

View File

@ -727,4 +727,7 @@
<string name="import_subscriptions_hint">Tellimusi saad importida või eksportida 3 punktiga menüüst</string>
<string name="app_update_unavailable_toast">Sa kasutad NewPipe\'i uusimat versiooni</string>
<string name="night_theme_available">See valik on kasutusel vaid %s teema puhul</string>
<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>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_available_notification_text">ضربه برای بارگیری %s</string>
<string name="app_update_unavailable_toast">از جدیدترین نگارش نیوپایپ استفاده می‌کنید</string>
<string name="night_theme_available">این گزینه تنها هنگامی موجود است که %s به عنوان زمینه گزیده باشد</string>
<string name="card">کارت</string>
<string name="msg_failed_to_copy">شکست در رونوشت به تخته‌گیره</string>
<string name="unset_playlist_thumbnail">ناتنظیم بندانگشتی ثابت</string>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_available_notification_text">Toca para descargar %s</string>
<string name="import_subscriptions_hint">Importa ou exporta subscricións dende o menú dos 3 puntos</string>
<string name="night_theme_available">Esta opción só está dispoñible se %s está seleccionado para o tema</string>
<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>
</resources>

View File

@ -754,4 +754,6 @@
<string name="app_update_unavailable_toast">זאת הגרסה העדכנית ביותר של NewPipe</string>
<string name="night_theme_available">אפשרות זאת זמינה רק אם נבחרה ערכת נושא %s</string>
<string name="unset_playlist_thumbnail">ביטול הגדרת תמונה ייצוגית קבועה</string>
<string name="card">כרטיס</string>
<string name="msg_failed_to_copy">ההעתקה ללוח הגזירים נכשלה</string>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_unavailable_toast">आप न्यूपाइप का नवीनतम संस्करण चला रहे हैं</string>
<string name="app_update_available_notification_text">%s डाउनलोड करने के लिए टैप करें</string>
<string name="night_theme_available">यह विकल्प केवल तभी उपलब्ध होता है जब थीम के लिए %s का चयन किया जाता है</string>
<string name="unset_playlist_thumbnail">स्थायी थंमनेल अनसेट करें</string>
<string name="card">कार्ड</string>
<string name="msg_failed_to_copy">क्लिपबोर्ड पर कॉपी करने में विफल</string>
</resources>

View File

@ -715,4 +715,6 @@
<string name="app_update_available_notification_text">Ketuk untuk mengunduh %s</string>
<string name="night_theme_available">Opsi ini hanya tersedia jika %s dipilih untuk Tema</string>
<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>
</resources>

View File

@ -737,7 +737,10 @@
<string name="faq">Visualizza sul sito</string>
<string name="fast_mode">Recupero veloce</string>
<string name="app_update_available_notification_text">Premi per scaricare %s</string>
<string name="app_update_unavailable_toast">L\'ultima versione di NewPipe è già in esecuzione</string>
<string name="app_update_unavailable_toast">Stai già usando l\'ultima versione di NewPipe</string>
<string name="import_subscriptions_hint">Importa o esporta iscrizioni dal menu a 3 punti</string>
<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>
</resources>

View File

@ -712,4 +712,8 @@
<string name="faq_title">よくある質問</string>
<string name="faq_description">アプリの使い方に困ったときは、よくある質問に答えていますので、ぜひご覧ください!</string>
<string name="night_theme_available">%sがテーマに選択された場合のみ、この選択肢が利用可能です</string>
<string name="fast_mode">高速モード</string>
<string name="import_subscriptions_hint">3 点メニューから登録チャンネルをインポートまたはエクスポートします</string>
<string name="card">カード</string>
<string name="msg_failed_to_copy">クリップボードへのコピーに失敗しました</string>
</resources>

View File

@ -97,14 +97,14 @@
</plurals>
<string name="start">Pradėti</string>
<string name="pause">Pauzė</string>
<string name="delete">Ištrinti</string>
<string name="delete">Naikinti</string>
<string name="checksum">Kontrolinė suma</string>
<string name="ok">Gerai</string>
<string name="msg_name">Failo pavadinimas</string>
<string name="msg_threads">Gijos</string>
<string name="msg_error">Klaida</string>
<string name="msg_running">NewPipe Atsiunčiama</string>
<string name="msg_running_detail">Palieskite, kad peržiūrėtumėte išsamią informaciją</string>
<string name="msg_running">NewPipe atsisiunčiama</string>
<string name="msg_running_detail">Bakstelėkite, kad peržiūrėtumėte išsamią informaciją</string>
<string name="msg_wait">Prašome palaukti…</string>
<string name="msg_copied">Nukopijuota į iškarpinę</string>
<string name="no_available_dir">Prašome pasirinkti galimą atsisiuntimų aplankalą</string>
@ -212,9 +212,9 @@
<string name="video_streams_empty">Nerasta video srautų</string>
<string name="audio_streams_empty">Nerasta audio srautų</string>
<string name="detail_drag_description">Tempti kad perrūšiuoti</string>
<string name="create">Sukurti</string>
<string name="create">Kurti</string>
<string name="dismiss">Nutraukti</string>
<string name="rename">Pervadinti</string>
<string name="rename">Pervardyti</string>
<string name="title_last_played">Vėliausiai žiūrėta</string>
<string name="title_most_played">Dažniausiai žiūrėta</string>
<string name="export_complete_toast">Eksportavimas baigtas</string>
@ -230,7 +230,7 @@
<string name="always_ask_open_action">Visada klausti</string>
<string name="preferred_player_fetcher_notification_title">Gauname informaciją…</string>
<string name="preferred_player_fetcher_notification_message">Įkeliamas pasirinktas turinys</string>
<string name="create_playlist">Naujas grojaraštį</string>
<string name="create_playlist">Naujas grojaraštis</string>
<string name="rename_playlist">Pervadinti</string>
<string name="name">Pavadinimas</string>
<string name="add_to_playlist">Pridėti į grojaraštį</string>
@ -311,7 +311,7 @@
<string name="app_update_notification_channel_description">Pranešimas apie naują NewPipe versiją</string>
<string name="app_update_notification_channel_name">Programos atnaujinimo pranešimas</string>
<string name="file">Failą</string>
<string name="file_deleted">Failas pašalintas</string>
<string name="file_deleted">Failas panaikintas</string>
<string name="artists">Atlikėjai</string>
<string name="albums">Albumai</string>
<string name="songs">Dainos</string>
@ -686,7 +686,7 @@
\nĮdiekite „Storage Access Framework“ suderinamą su šia failų tvarkykle</string>
<string name="error_report_channel_description">Pranešimai pranešimui apie klaidas</string>
<string name="show_crash_the_player_title">Rodyti „Grotuvas užlūžo“</string>
<string name="create_error_notification">Sukurti klaidos pranešimą</string>
<string name="create_error_notification">Kurti klaidos pranešimą</string>
<string name="error_report_notification_title">NewPipe susidūrė su klaida, paspauskite norėdami pranešti</string>
<string name="no_appropriate_file_manager_message">Šiam veiksmui nebuvo rasta tinkama failų tvarkyklė.
\nĮdiekite failų tvarkyklę arba pabandykite išjungti \"%s\" atsisiuntimo nustatymuose</string>

View File

@ -726,4 +726,8 @@
<string name="import_subscriptions_hint">Importeer of exporteer abonnementen vanuit het 3-punten menu</string>
<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="card">Kaart</string>
<string name="unset_playlist_thumbnail">Miniatuur niet ingesteld</string>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_unavailable_toast">ଆପଣ NewPipe ର ସର୍ବଶେଷ ସଂସ୍କରଣ ଚଳାଉଛନ୍ତି</string>
<string name="app_update_available_notification_text">%s ଡାଉନଲୋଡ୍ କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ</string>
<string name="night_theme_available">ଥିମ୍ ପାଇଁ %s ଚୟନ ହେଲେ ହିଁ ଏହି ବିକଳ୍ପ ଉପଲବ୍ଧ</string>
<string name="card">କାର୍ଡ</string>
<string name="msg_failed_to_copy">କ୍ଲିପବୋର୍ଡରେ କପି କରିବାରେ ବିଫଳ</string>
<string name="unset_playlist_thumbnail">ସ୍ଥାୟୀ ଥମ୍ୱନେଲ୍ ସେଟ୍ କରନ୍ତୁ</string>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_unavailable_toast">ਤੁਸੀਂ ਨਿਊਪਾਈਪ ਦਾ ਨਵੀਨਤਮ ਸੰਸਕਰਣ ਚਲਾ ਰਹੇ ਹੋ</string>
<string name="app_update_available_notification_text">%s ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ</string>
<string name="night_theme_available">ਇਹ ਵਿਕਲਪ ਤਾਂ ਹੀ ਉਪਲਬਧ ਹੈ ਜੇਕਰ %s ਨੂੰ ਥੀਮ ਲਈ ਚੁਣਿਆ ਗਿਆ ਹੈ</string>
<string name="unset_playlist_thumbnail">ਸਥਾਈ ਥੰਮਨੇਲ ਨੂੰ ਅਨਸੈੱਟ ਕਰੋ</string>
<string name="msg_failed_to_copy">ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ</string>
<string name="card">ਕਾਰਡ</string>
</resources>

View File

@ -749,4 +749,6 @@
<string name="app_update_unavailable_toast">Używasz najnowszej wersji NewPipe</string>
<string name="night_theme_available">Ta opcja jest dostępna tylko wtedy, gdy %s jest wybrany jako motyw</string>
<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>
</resources>

View File

@ -741,4 +741,6 @@
<string name="app_update_unavailable_toast">Você está executando a versão mais recente do NewPipe</string>
<string name="night_theme_available">Esta opção só está disponível se %s for selecionado para Tema</string>
<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>
</resources>

View File

@ -727,4 +727,7 @@
<string name="app_update_available_notification_text">Toque para descarregar %s</string>
<string name="sort">Ordenação</string>
<string name="night_theme_available">Esta opção só está disponível se %s for selecionado como 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>
</resources>

View File

@ -740,4 +740,7 @@
<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="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>
</resources>

View File

@ -692,8 +692,8 @@
<string name="streams_notification_channel_name">Новые видео</string>
<string name="streams_notification_channel_description">Уведомления о новых видео в подписках</string>
<string name="streams_notifications_interval_title">Частота проверки</string>
<string name="enable_streams_notifications_title">Уведомлять о новых видео</string>
<string name="enable_streams_notifications_summary">Получать уведомления о новых видео из каналов, на которые Вы подписаны</string>
<string name="enable_streams_notifications_title">Новые видео</string>
<string name="enable_streams_notifications_summary">Уведомлять о новых видео в подписках</string>
<string name="streams_notifications_network_title">Тип подключения</string>
<string name="any_network">Любая сеть</string>
<string name="notifications_disabled">Уведомления отключены</string>
@ -720,7 +720,7 @@
<string name="loading_stream_details">Загрузка сведений о трансляции…</string>
<string name="check_new_streams">Проверить наличие новых трансляций</string>
<string name="delete_downloaded_files_confirm">Удалить все загруженные файлы\?</string>
<string name="settings_category_player_notification_title">Уведомления плеера</string>
<string name="settings_category_player_notification_title">Уведомление плеера</string>
<string name="enumeration_comma">,</string>
<string name="semitone">Полутон</string>
<string name="percent">Проценты</string>
@ -736,11 +736,15 @@
<string name="feed_toggle_hide_played_items">Скрыть проигранные</string>
<string name="feed_toggle_hide_future_items">Скрывать будущие видео</string>
<string name="faq_title">Ответы на частые вопросы</string>
<string name="faq_description">Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространенные вопросы!</string>
<string name="faq_description">Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространённые вопросы!</string>
<string name="faq">Посмотреть на веб-сайте</string>
<string name="sort">Сортировка</string>
<string name="app_update_unavailable_toast">У вас последняя версия</string>
<string name="fast_mode">Быстрый режим</string>
<string name="import_subscriptions_hint">Импорт и экспорт подписок в меню с 3-мя точками</string>
<string name="app_update_available_notification_text">Нажмите для загрузки %s</string>
<string name="card">Карта</string>
<string name="msg_failed_to_copy">Не удалось скопировать в буфер обмена</string>
<string name="night_theme_available">Доступно, когда Тема установлена в %s</string>
<string name="unset_playlist_thumbnail">Убрать постоянную миниатюру</string>
</resources>

View File

@ -727,4 +727,7 @@
<string name="import_subscriptions_hint">Importa o esporta iscritziones dae su menù a 3 puntos</string>
<string name="app_update_unavailable_toast">Ses impreende s\'ùrtima versione de NewPipe</string>
<string name="night_theme_available">Custa optzione est a disponimentu petzi si %s est seletzionadu comente tema</string>
<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>
</resources>

View File

@ -728,4 +728,6 @@
<string name="import_subscriptions_hint">3-nokta menüsünden abonelikleri içe veya dışa aktarın</string>
<string name="night_theme_available">Bu seçenek yalnızca tema için %s seçildiğinde kullanılabilir</string>
<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>
</resources>

View File

@ -745,4 +745,6 @@
<string name="fast_mode">Швидкий режим</string>
<string name="night_theme_available">Ця опція доступна, лише якщо темою обрано %s</string>
<string name="unset_playlist_thumbnail">Прибрати постійну мініатюру</string>
<string name="card">Картки</string>
<string name="msg_failed_to_copy">Не вдалося скопіювати до буфера обміну</string>
</resources>

View File

@ -715,4 +715,6 @@
<string name="app_update_available_notification_text">轻按下载 %s</string>
<string name="night_theme_available">只有在主题中选择了 %s 该选项才可用</string>
<string name="unset_playlist_thumbnail">取消设置永久缩略图</string>
<string name="card">卡片</string>
<string name="msg_failed_to_copy">未能复制到剪贴板</string>
</resources>

View File

@ -510,7 +510,7 @@
<string name="auto_device_theme_title">自動 (跟返部機嘅主題色系)</string>
<string name="featured">精選</string>
<string name="radio">廣播</string>
<string name="description_select_note">您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,個頁面可能眨眨下,同埋啲連結會撳唔到。</string>
<string name="description_select_note">您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,版面可能會有啲眨,同埋啲連結會撳唔到。</string>
<string name="description_select_enable">啟用揀選描述入面嘅文字</string>
<string name="metadata_licence">版權協議</string>
<string name="metadata_category">分類</string>
@ -713,4 +713,8 @@
<string name="import_subscriptions_hint">右上角嘅選單有得匯入或匯出訂閱</string>
<string name="app_update_unavailable_toast">您已經用緊最新版本嘅 NewPipe</string>
<string name="app_update_available_notification_text">撳一下去下載 %s</string>
<string name="unset_playlist_thumbnail">唔再揀定封面縮圖</string>
<string name="night_theme_available">色系揀做%s嘅時候至有得揀</string>
<string name="msg_failed_to_copy">複製唔到去剪貼簿</string>
<string name="card">一張張</string>
</resources>

View File

@ -714,4 +714,7 @@
<string name="fast_mode">快速模式</string>
<string name="import_subscriptions_hint">從三點式選單匯入或匯出訂閱</string>
<string name="night_theme_available">此選項僅在主題選擇為 %s 時可用</string>
<string name="card">卡片</string>
<string name="unset_playlist_thumbnail">取消設定永久縮圖</string>
<string name="msg_failed_to_copy">無法複製到剪貼簿</string>
</resources>

View File

@ -433,6 +433,7 @@
<string name="preferred_player_fetcher_notification_message">"Loading requested content"</string>
<!-- Local Playlist -->
<string name="create_playlist">New Playlist</string>
<string name="duplicate_in_playlist">The playlists that are grayed out already contain this item.</string>
<string name="rename_playlist">Rename</string>
<string name="name">Name</string>
<string name="add_to_playlist">Add to playlist</string>
@ -446,6 +447,7 @@
<string name="delete_playlist_prompt">Delete this playlist\?</string>
<string name="playlist_creation_success">Playlist created</string>
<string name="playlist_add_stream_success">Playlisted</string>
<string name="playlist_add_stream_success_duplicate">Duplicate added %d time(s)</string>
<string name="playlist_thumbnail_change_success">Playlist thumbnail changed.</string>
<string name="playlist_no_uploader">Auto-generated (no uploader found)</string>
<!-- Players -->

View File

@ -0,0 +1,17 @@
New
• Subscriber count in video details
• Download from the queue
• Permanently set a playlist thumbnail
• Long-press hashtags and links
• Card view mode
Improved
• Larger mini-player close button
• Smoother thumbnail downscaling
• Target Android 13 (API 33)
• Seeking no longer pauses the player
Fixed
• Fix overlay on DeX/mouse
• Allow background player with no separate audio streams
• Various YouTube fixes and more…

View File

@ -0,0 +1,13 @@
Novo
- Dodajanje gumba "Odpri v brskalniku" v podoknu z napakami
- Dodana možnost za prikaz skupin kanalov kot seznam
- [YouTube] Dolgi pritisk na segmente video pretoka za deljenje časovnega žiga URL-ja
- Dodajte gumb za predvajanje v vrsti v mini predvajalnik
Izboljšave
- Dodana islandska lokalizacija ter posodobitev številnih drugih prevodov
- Številne notranje izboljšave
Popravki
- Odprava večih sesutij
- [YouTube] Odprava težave z nalaganjem kanalov, nenamenskimi viri ter predvajanjem v nekaterih državah

View File

@ -0,0 +1 @@
Brezplačen in enostaven YouTube "frontend" za Android.