diff --git a/app/build.gradle b/app/build.gradle index 79e07a190..2c0f03e38 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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, "") + } + } + } + } +} diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java new file mode 100644 index 000000000..0fcb4ced4 --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/PlaylistDuplicatesEntry.java @@ -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; + } +} diff --git a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java index 3412e1303..459959d99 100644 --- a/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java +++ b/app/src/main/java/org/schabi/newpipe/database/playlist/dao/PlaylistStreamDAO.java @@ -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 { + " GROUP BY " + PLAYLIST_ID + " ORDER BY " + PLAYLIST_NAME + " COLLATE NOCASE ASC") Flowable> 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> getPlaylistDuplicatesMetadata(String streamUrl); } diff --git a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java index 2fdaa4ed0..b503c4e05 100644 --- a/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java +++ b/app/src/main/java/org/schabi/newpipe/local/dialog/PlaylistAppendDialog.java @@ -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 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 playlists) { - if (playlistAdapter != null && playlistRecyclerView != null) { + private void onPlaylistsReceived(@NonNull final List 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 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 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()) diff --git a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java index f8c5176ec..240ca0462 100644 --- a/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java +++ b/app/src/main/java/org/schabi/newpipe/local/holder/LocalPlaylistItemHolder.java @@ -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); } } diff --git a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java index abf9c77b2..a92d330d8 100644 --- a/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java +++ b/app/src/main/java/org/schabi/newpipe/local/playlist/LocalPlaylistManager.java @@ -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> getPlaylistDuplicates(final String streamUrl) { + return playlistStreamTable.getPlaylistDuplicatesMetadata(streamUrl) + .subscribeOn(Schedulers.io()); + } + public Flowable> getPlaylistStreams(final long playlistId) { return playlistStreamTable.getOrderedStreamsOf(playlistId).subscribeOn(Schedulers.io()); } diff --git a/app/src/main/res/layout/dialog_playlists.xml b/app/src/main/res/layout/dialog_playlists.xml index 18b08d93c..ab4691fa9 100644 --- a/app/src/main/res/layout/dialog_playlists.xml +++ b/app/src/main/res/layout/dialog_playlists.xml @@ -34,11 +34,26 @@ tools:ignore="RtlHardcoded" /> + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 2fbe794a3..cbd3ade35 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -780,4 +780,6 @@ استيراد الاشتراكات أو تصديرها من القائمة المكونة من 3 نقاط هذا الخيار متاح فقط إذا تم تحديد %s للسمة إلغاء تعيين الصورة المصغرة الدائمة + فشل النسخ إلى الحافظة + البطاقة \ No newline at end of file diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml index 578213394..be845845a 100644 --- a/app/src/main/res/values-as/strings.xml +++ b/app/src/main/res/values-as/strings.xml @@ -25,4 +25,77 @@ আপুনি \"%1$s\" বুজাইছিল নেকি\? বাহ্যিক ভিডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক বাহ্যিক অডিঅ’ প্লেয়াৰ ব্যৱহাৰ কৰক + Channel আনচাবস্ক্ৰাইব কৰা হ\'ল + subscription সলনি কৰিব পৰা নগ\'ল + subscription আপডেট কৰিব পৰা নগ\'ল + তথ্য দেখুৱাওক + চাবস্ক্ৰিপচন + বুকমাৰ্ক কৰা প্লেলিষ্ট + টেব নিৰ্বাচন কৰক + বেকগ্ৰাউণ্ড + পপ-আপ + স্থায়ী ৰিজ\'লিউচন + স্থায়ী পপআপ ৰিজোলিউচন + উচ্চ ৰিজ\'লিউচন দেখুৱাওক + কেৱল কিছুমান ডিভাইচেহে 2K/4K ভিডিঅ’ বজাব পাৰে + Kodi ৰ সৈতে বজাওক + Kore এপ ইনষ্টল\? + \"Kodi ৰ সৈতে খোলক\" বিকল্প দেখুৱাওক + Kodi মিডিয়া চেণ্টাৰৰ জৰিয়তে এটা ভিডিঅ\' চলাবলৈ এটা বিকল্প প্ৰদৰ্শন কৰক + প্লেয়াৰটো ক্ৰেচ কৰক + বাফাৰিং + নথিং + জাননী ৰ‌ঙিণ কৰক + অডিঅ\' + অডিঅ\' ৰ প্ৰকাৰ + ভিডিঅ\'ৰ প্ৰকাৰ + থিম + নিশাৰ থিম + পোহৰ + অন্ধকাৰ + ক\'লা + পপ-আপ বৈশিষ্ট্যসমূহ মনত ৰাখিব + পপ-আপৰ অন্তিম আকাৰ আৰু অৱস্থান মনত ৰাখিব + Inexact seek য়ে প্লেয়াৰটোক দ্ৰুত গতিত স্থান সলনি কৰিবলৈ অনুমতি দিয়ে। ৫, ১৫ বা ২৫ ছেকেণ্ড সলনি কৰিবলৈ বিচাৰিলে ইয়াৰ প্ৰয়োজন নহয় + ফাষ্ট-ফৰৱাৰ্ড/-ৰিৱাইণ্ড কৰিবলৈ বিচৰা সময়সীমা + প্লেবেক লোড কৰাৰ ব্যৱধানৰ আকাৰ + লোড ব্যৱধানৰ আকাৰ সলনি কৰক (বৰ্তমানে %s) । এটা কম মানে প্ৰাৰম্ভিক ভিডিঅ\' লোডিং দ্ৰুত কৰিব পাৰে। পৰিৱৰ্তনৰ বাবে এটা খেলুৱৈ পুনৰাৰম্ভৰ প্ৰয়োজন + থাম্বনেইলত থকা মূল ৰং অনুসৰি এণ্ড্ৰইডক জাননীৰ ৰং কাষ্টমাইজ কৰিবলৈ কওক (মন কৰিব যে এইটো সকলো ডিভাইচতে উপলব্ধ নহয়) + সক্ৰিয় প্লেয়াৰৰ queue সলনি কৰা হ’ব + থাম্বনেইল লোড কৰক + মন্তব্য দেখুৱাওক + বিৱৰণ দেখুৱাওক + মেটা তথ্য দেখুৱাওক + সংৰক্ষিত ছবি মচি পেলোৱা হ\'ল + সংৰক্ষিত কৰি থোৱা মেটাডাটা মচি পেলাওক + সকলো সংৰক্ষণ কৰি ৰখা ৱেবপেজৰ তথ্য আঁতৰাওক + সংৰক্ষণ কৰি থোৱা মেটাডাটা মচি পেলোৱা হ\'ল + পৰৱৰ্তী ষ্ট্ৰিম স্বয়ংক্ৰিয়ভাৱে enque কৰক + সজোৱা + ভিডিঅ\' ডাউনলোড folder + যোগ কৰক + ডাউনলোড কৰা অডিঅ\' ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয় + থাম্বনেইলক ১:১ অনুপাত লৈ ক্ৰপ কৰক + ডাউনলোড কৰা ভিডিঅ’ ফাইলসমূহ ইয়াত সংৰক্ষণ কৰা হয় + ভিডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder বাছক + অডিঅ\' ডাউনলোড folder + অডিঅ\' ফাইলসমূহৰ বাবে ডাউনলোড folder নিৰ্বাচন কৰক + জাননীত দেখুওৱা ভিডিঅ’ থাম্বনেইলটো ১৬:৯ৰ পৰা ১:১ অনুপাতলৈ ক্ৰপ কৰক + First action button + Fifth action button + 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 + Second action button + You can select at most three actions to show in the compact notification! + পুনৰাবৃত্তি + শ্বাফেল + দ্ৰুত inexact seek ব্যৱহাৰ কৰক + এটা queue বিলুপ্তি কৰাৰ আগতে নিশ্চিতকৰণৰ বাবে সুধিব + এটা প্লেয়াৰ পৰা আন এটালৈ সলনি কৰিলে আপোনাৰ queue সলনি হ\'ব পাৰে + Fourth action button + Third action button + ভিডিঅ\'ৰ বিৱৰণ আৰু অতিৰিক্ত তথ্য লুকুৱাবলৈ বন্ধ কৰক + মন্তব্য লুকুৱাবলৈ বন্ধ কৰক + \'পৰৱৰ্তী\' আৰু \'সাদৃশ্য থকা\' ভিডিঅ\' দেখুৱাওক + থাম্বনেইলসমূহ লোড কৰা, তথ্য আৰু মেমৰি ব্যৱহাৰ সংৰক্ষণ কৰা ৰোধ কৰিবলে বন্ধ কৰক। পৰিবৰ্তনসমূহে ইন-মেমৰি আৰু অন-ডিস্ক কেশ্ব দুয়োটা পৰিষ্কাৰ কৰে + ষ্ট্ৰিমৰ সৃষ্টিকৰ্তা, ষ্ট্ৰিমৰ বিষয়বস্তু বা এটা সন্ধান অনুৰোধৰ বিষয়ে অতিৰিক্ত তথ্যৰ সৈতে মেটা তথ্যৰ বাকচসমূহ লুকুৱাবলৈ বন্ধ কৰক \ No newline at end of file diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index cd18e8d93..d8d88bd6d 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -1,8 +1,8 @@ - Başlamaq üçün böyüdücüyə toxun. + Başlamaq üçün böyüdücü güzgüyə toxun. %1$s tarixində yayımlanıb - Yayım oynadıcı tapılmadı. \"VLC\" yüklənilsin\? + Yayım oynadıcı tapılmadı. \"VLC\" quraşdırılsın\? Yayım oynadıcı tapılmadı (Oynatmaq üçün VLC\'ni quraşdıra bilərsiniz). Yüklə Ləğv et @@ -45,7 +45,7 @@ Qaranlıq Qara Abunəlikdən çıxın - Ani pəncərə rejimində aç + Ani görüntü rejimində aç Avtomatik oynat Endir Fasilələrdən sonra (məsələn, telefon zəngləri) oynatmağa davam etdir @@ -613,7 +613,7 @@ Xəta baş verdi: %1$s Fayl mövcud deyil, yaxud oxumaq və ya yazmaq icazəsi yoxdur Veb saytı təhlil etmək alınmadı - Səs ucalığı + Ucalıq Radio \"Oynadıcını çökdür\" Göstər Oynadıcıdan istifadə edərkən çökdürmə seçimini göstər @@ -728,4 +728,6 @@ %s endirmək üçün toxun Bu seçim yalnız tema üçün %s seçildikdə əlçatandır Daimi miniatürü ləğv et + Kart + Buferə kopyalamaq alınmadı \ No newline at end of file diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 637678c23..adf6601a8 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -741,4 +741,6 @@ Import nebo export odběrů z 3-tečkové nabídky Tato možnost je dostupná pouze při vybraném motivu %s Zrušení nastavení trvalého náhledu + Karta + Kopírování do schránky se nezdařilo \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d02b276cd..3b1959a69 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -728,4 +728,6 @@ Importieren oder Exportieren von Abonnements über das 3-Punkte-Menü Diese Option ist nur verfügbar, wenn %s als Design ausgewählt wird Dauerhaftes Vorschaubild aufheben + Kopieren in die Zwischenablage fehlgeschlagen + Karte \ No newline at end of file diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index cf3c0576b..78d89cc59 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -728,4 +728,6 @@ Έχετε την πιο πρόσφατη έκδοση του NewPipe Αυτή η επιλογή είναι διαθέσιμη μόνο εάν έχει επιλεγεί %s για Θέμα Κατάργηση μόνιμης μικρογραφίας + Αποτυχία αντιγραφής στο πρόχειρο + Κάρτα \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f92ad9128..9d68c28a9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -744,4 +744,6 @@ Pulsa para descargar %s Esta opción sólo está disponible si %s está seleccionado para el tema Desactivar las miniaturas permanente + Error al copiar al portapapeles + Tarjeta \ No newline at end of file diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 87beff94f..986de133b 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -727,4 +727,7 @@ Tellimusi saad importida või eksportida 3 punktiga menüüst Sa kasutad NewPipe\'i uusimat versiooni See valik on kasutusel vaid %s teema puhul + Lõikelauale kopeerimine ei õnnestunud + Eemalda püsiv pisipilt + Kaart \ No newline at end of file diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index f22200c06..72dc77660 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -727,4 +727,7 @@ ضربه برای بارگیری %s از جدیدترین نگارش نیوپایپ استفاده می‌کنید این گزینه تنها هنگامی موجود است که %s به عنوان زمینه گزیده باشد + کارت + شکست در رونوشت به تخته‌گیره + ناتنظیم بندانگشتی ثابت \ No newline at end of file diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 65d5ce204..a8cf01ef0 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -727,4 +727,7 @@ Toca para descargar %s Importa ou exporta subscricións dende o menú dos 3 puntos Esta opción só está dispoñible se %s está seleccionado para o tema + Produciuse un erro ao copiar no portapapeis + Desactivala miniatura permanente + Tarxeta \ No newline at end of file diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 67e6d45ad..35dc19c8c 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -754,4 +754,6 @@ זאת הגרסה העדכנית ביותר של NewPipe אפשרות זאת זמינה רק אם נבחרה ערכת נושא %s ביטול הגדרת תמונה ייצוגית קבועה + כרטיס + ההעתקה ללוח הגזירים נכשלה \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 7c9ebf231..dc08899ed 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -727,4 +727,7 @@ आप न्यूपाइप का नवीनतम संस्करण चला रहे हैं %s डाउनलोड करने के लिए टैप करें यह विकल्प केवल तभी उपलब्ध होता है जब थीम के लिए %s का चयन किया जाता है + स्थायी थंमनेल अनसेट करें + कार्ड + क्लिपबोर्ड पर कॉपी करने में विफल \ No newline at end of file diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index af8781a23..c195d62e1 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -715,4 +715,6 @@ Ketuk untuk mengunduh %s Opsi ini hanya tersedia jika %s dipilih untuk Tema Batalkan penetapan gambar kecil permanen + Gagal menyalin ke papan klip + Kartu \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3304321d8..bf20d2be4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -737,7 +737,10 @@ Visualizza sul sito Recupero veloce Premi per scaricare %s - L\'ultima versione di NewPipe è già in esecuzione + Stai già usando l\'ultima versione di NewPipe Importa o esporta iscrizioni dal menu a 3 punti Questa opzione è disponibile solo se %s è selezionato come Tema + Copia negli appunti non riuscita + Schede + Disattiva la miniatura permanente \ No newline at end of file diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 480d869e5..d02b56e75 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -712,4 +712,8 @@ よくある質問 アプリの使い方に困ったときは、よくある質問に答えていますので、ぜひご覧ください! %sがテーマに選択された場合のみ、この選択肢が利用可能です + 高速モード + 3 点メニューから登録チャンネルをインポートまたはエクスポートします + カード + クリップボードへのコピーに失敗しました \ No newline at end of file diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 0da729ba8..bb45a0970 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -97,14 +97,14 @@ Pradėti Pauzė - Ištrinti + Naikinti Kontrolinė suma Gerai Failo pavadinimas Gijos Klaida - NewPipe Atsiunčiama - Palieskite, kad peržiūrėtumėte išsamią informaciją + NewPipe atsisiunčiama + Bakstelėkite, kad peržiūrėtumėte išsamią informaciją Prašome palaukti… Nukopijuota į iškarpinę Prašome pasirinkti galimą atsisiuntimų aplankalą @@ -212,9 +212,9 @@ Nerasta video srautų Nerasta audio srautų Tempti kad perrūšiuoti - Sukurti + Kurti Nutraukti - Pervadinti + Pervardyti Vėliausiai žiūrėta Dažniausiai žiūrėta Eksportavimas baigtas @@ -230,7 +230,7 @@ Visada klausti Gauname informaciją… Įkeliamas pasirinktas turinys - Naujas grojaraštį + Naujas grojaraštis Pervadinti Pavadinimas Pridėti į grojaraštį @@ -311,7 +311,7 @@ Pranešimas apie naują NewPipe versiją Programos atnaujinimo pranešimas Failą - Failas pašalintas + Failas panaikintas Atlikėjai Albumai Dainos @@ -686,7 +686,7 @@ \nĮdiekite „Storage Access Framework“ suderinamą su šia failų tvarkykle Pranešimai pranešimui apie klaidas Rodyti „Grotuvas užlūžo“ - Sukurti klaidos pranešimą + Kurti klaidos pranešimą NewPipe susidūrė su klaida, paspauskite norėdami pranešti Šiam veiksmui nebuvo rasta tinkama failų tvarkyklė. \nĮdiekite failų tvarkyklę arba pabandykite išjungti \"%s\" atsisiuntimo nustatymuose diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 2390f8e69..c5e77b29f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -726,4 +726,8 @@ Importeer of exporteer abonnementen vanuit het 3-punten menu U heeft de laatste versie van NewPipe Klik om %s te downloaden + Kon niet naar klembord kopiëren + Deze instelling is alleen beschikbaar als %s als thema ingesteld is + Kaart + Miniatuur niet ingesteld \ No newline at end of file diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml index 0ad616d01..bc8d9fcee 100644 --- a/app/src/main/res/values-or/strings.xml +++ b/app/src/main/res/values-or/strings.xml @@ -727,4 +727,7 @@ ଆପଣ NewPipe ର ସର୍ବଶେଷ ସଂସ୍କରଣ ଚଳାଉଛନ୍ତି %s ଡାଉନଲୋଡ୍ କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ ଥିମ୍ ପାଇଁ %s ଚୟନ ହେଲେ ହିଁ ଏହି ବିକଳ୍ପ ଉପଲବ୍ଧ + କାର୍ଡ + କ୍ଲିପବୋର୍ଡରେ କପି କରିବାରେ ବିଫଳ + ସ୍ଥାୟୀ ଥମ୍ୱନେଲ୍ ସେଟ୍ କରନ୍ତୁ \ No newline at end of file diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 169d45dad..2dcac20ab 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -727,4 +727,7 @@ ਤੁਸੀਂ ਨਿਊਪਾਈਪ ਦਾ ਨਵੀਨਤਮ ਸੰਸਕਰਣ ਚਲਾ ਰਹੇ ਹੋ %s ਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ ਇਹ ਵਿਕਲਪ ਤਾਂ ਹੀ ਉਪਲਬਧ ਹੈ ਜੇਕਰ %s ਨੂੰ ਥੀਮ ਲਈ ਚੁਣਿਆ ਗਿਆ ਹੈ + ਸਥਾਈ ਥੰਮਨੇਲ ਨੂੰ ਅਨਸੈੱਟ ਕਰੋ + ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ + ਕਾਰਡ \ No newline at end of file diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index ab1e0aa72..e7ae07c85 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -749,4 +749,6 @@ Używasz najnowszej wersji NewPipe Ta opcja jest dostępna tylko wtedy, gdy %s jest wybrany jako motyw Usuń stałą miniaturę + Nie udało się skopiować do schowka + Karta \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 1929df070..fc02f29d7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -741,4 +741,6 @@ Você está executando a versão mais recente do NewPipe Esta opção só está disponível se %s for selecionado para Tema Desativar miniatura permanente + Cartão + Falha ao copiar para a área de transferência \ No newline at end of file diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 5a0d19285..4c2593330 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -727,4 +727,7 @@ Toque para descarregar %s Ordenação Esta opção só está disponível se %s for selecionado como tema + Desativar miniatura permanente + Não foi possível copiar para a área de transferência + Cartão \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index e993da934..c47241dcc 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -740,4 +740,7 @@ Já está a executar a versão mais recente do NewPipe Toque para descarregar %s Esta opção só está disponível se %s for selecionado para o tema + Desativar miniatura permanente + Não foi possível copiar para a área de transferência + Cartão \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 159b27a2a..50376dc03 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -692,8 +692,8 @@ Новые видео Уведомления о новых видео в подписках Частота проверки - Уведомлять о новых видео - Получать уведомления о новых видео из каналов, на которые Вы подписаны + Новые видео + Уведомлять о новых видео в подписках Тип подключения Любая сеть Уведомления отключены @@ -720,7 +720,7 @@ Загрузка сведений о трансляции… Проверить наличие новых трансляций Удалить все загруженные файлы\? - Уведомления плеера + Уведомление плеера , Полутон Проценты @@ -736,11 +736,15 @@ Скрыть проигранные Скрывать будущие видео Ответы на частые вопросы - Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространенные вопросы! + Если у вас возникли проблемы с использованием приложения, обязательно ознакомьтесь с ответами на распространённые вопросы! Посмотреть на веб-сайте Сортировка У вас последняя версия Быстрый режим Импорт и экспорт подписок в меню с 3-мя точками Нажмите для загрузки %s + Карта + Не удалось скопировать в буфер обмена + Доступно, когда Тема установлена в %s + Убрать постоянную миниатюру \ No newline at end of file diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index bdae4fd37..e649cfac2 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -727,4 +727,7 @@ Importa o esporta iscritziones dae su menù a 3 puntos Ses impreende s\'ùrtima versione de NewPipe Custa optzione est a disponimentu petzi si %s est seletzionadu comente tema + Carta + Còpia in punta de billete fallida + Disativa sa miniadura permanente \ No newline at end of file diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index c9718d0b0..aeeb9bdc3 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -728,4 +728,6 @@ 3-nokta menüsünden abonelikleri içe veya dışa aktarın Bu seçenek yalnızca tema için %s seçildiğinde kullanılabilir Kalıcı küçük resmin ayarını kaldır + Kart + Panoya kopyalanamadı \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e812e8e4f..16b48fc57 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -745,4 +745,6 @@ Швидкий режим Ця опція доступна, лише якщо темою обрано %s Прибрати постійну мініатюру + Картки + Не вдалося скопіювати до буфера обміну \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c3ada7180..029aa8343 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -715,4 +715,6 @@ 轻按下载 %s 只有在主题中选择了 %s 该选项才可用 取消设置永久缩略图 + 卡片 + 未能复制到剪贴板 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index ab902d373..dc7d589b8 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -510,7 +510,7 @@ 自動 (跟返部機嘅主題色系) 精選 廣播 - 您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,個頁面可能眨眨下,同埋啲連結會撳唔到。 + 您而家可以揀選喺描述入面嘅文字喇。不過要單聲,喺揀選模式嘅時候,版面可能會有啲眨,同埋啲連結會撳唔到。 啟用揀選描述入面嘅文字 版權協議 分類 @@ -713,4 +713,8 @@ 右上角嘅選單有得匯入或匯出訂閱 您已經用緊最新版本嘅 NewPipe 撳一下去下載 %s + 唔再揀定封面縮圖 + 色系揀做%s嘅時候至有得揀 + 複製唔到去剪貼簿 + 一張張 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1ed552ab8..ab975bff1 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -714,4 +714,7 @@ 快速模式 從三點式選單匯入或匯出訂閱 此選項僅在主題選擇為 %s 時可用 + 卡片 + 取消設定永久縮圖 + 無法複製到剪貼簿 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5a4ce92f2..661f05c8c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -433,6 +433,7 @@ "Loading requested content" New Playlist + The playlists that are grayed out already contain this item. Rename Name Add to playlist @@ -446,6 +447,7 @@ Delete this playlist\? Playlist created Playlisted + Duplicate added %d time(s) Playlist thumbnail changed. Auto-generated (no uploader found) diff --git a/fastlane/metadata/android/en-US/changelogs/992.txt b/fastlane/metadata/android/en-US/changelogs/992.txt new file mode 100644 index 000000000..807411d50 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/992.txt @@ -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… \ No newline at end of file diff --git a/fastlane/metadata/android/sl/changelogs/991.txt b/fastlane/metadata/android/sl/changelogs/991.txt new file mode 100644 index 000000000..14f174a5a --- /dev/null +++ b/fastlane/metadata/android/sl/changelogs/991.txt @@ -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 diff --git a/fastlane/metadata/android/sl/short_description.txt b/fastlane/metadata/android/sl/short_description.txt new file mode 100644 index 000000000..8826524fc --- /dev/null +++ b/fastlane/metadata/android/sl/short_description.txt @@ -0,0 +1 @@ +Brezplačen in enostaven YouTube "frontend" za Android.