From 4f9d5366540ecf15e433cf9463deb2d3fbd7d8c1 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon <32224410+AnonymusRaccoon@users.noreply.github.com> Date: Thu, 13 Jun 2019 02:33:28 +0200 Subject: [PATCH] Making downloader follow playlist sort order. Reworking playlist track header's more menu. --- Opus/Code/Api/LocalManager.cs | 15 +- Opus/Code/Api/PlaylistManager.cs | 5 +- Opus/Code/Api/Services/Downloader.cs | 63 +++-- Opus/Code/DataStructure/DownloadFile.cs | 17 +- Opus/Code/DataStructure/Song.cs | 5 +- Opus/Code/UI/Adapter/DownloadQueueAdapter.cs | 13 +- Opus/Code/UI/Adapter/PlaylistAdapter.cs | 2 +- Opus/Code/UI/Fragments/DownloadQueue.cs | 6 +- Opus/Code/UI/Fragments/Playlist.cs | 2 +- Opus/Code/UI/Fragments/PlaylistTracks.cs | 32 ++- Opus/Opus.csproj | 12 - Opus/Resources/Resource.Designer.cs | 225 +++++++++--------- Opus/Resources/menu/playlist_header_more.xml | 6 - .../Resources/menu/ytplaylist_header_more.xml | 15 -- .../ytplaylistnowrite_forked_header_more.xml | 15 -- .../menu/ytplaylistnowrite_header_more.xml | 15 -- Opus/Resources/values-fr/strings.xml | 1 + Opus/Resources/values/strings.xml | 1 + 18 files changed, 223 insertions(+), 227 deletions(-) delete mode 100644 Opus/Resources/menu/ytplaylist_header_more.xml delete mode 100644 Opus/Resources/menu/ytplaylistnowrite_forked_header_more.xml delete mode 100644 Opus/Resources/menu/ytplaylistnowrite_header_more.xml diff --git a/Opus/Code/Api/LocalManager.cs b/Opus/Code/Api/LocalManager.cs index 303d873..ab91568 100644 --- a/Opus/Code/Api/LocalManager.cs +++ b/Opus/Code/Api/LocalManager.cs @@ -355,15 +355,16 @@ namespace Opus.Api /// The name of the playlist /// The id of the local playlist or -1 if you want to add this song to a playlist that will be created after. /// Used only if you want to create a playlist with this method. True if the newly created playlist should be synced on youtube. - public async static void AddToPlaylist(Song[] items, string playList, long LocalID, bool saveAsSynced = false) + /// If you want to add the first song to a specific position (should only be used if you know the exact position that you want). Experimental Feature. + public async static void AddToPlaylist(Song[] items, string playList, long LocalID, bool saveAsSynced = false, int position = -1) { if (LocalID == -1) { LocalID = await PlaylistManager.GetPlaylistID(playList); if (LocalID == -1) - PlaylistManager.CreateLocalPlaylist(playList, items, saveAsSynced); + PlaylistManager.CreateLocalPlaylist(playList, items, saveAsSynced, position); else - AddToPlaylist(items, playList, LocalID); + AddToPlaylist(items, playList, LocalID, saveAsSynced, position); } else { @@ -381,7 +382,13 @@ namespace Opus.Api { ContentValues value = new ContentValues(); value.Put(MediaStore.Audio.Playlists.Members.AudioId, item.LocalID); - value.Put(MediaStore.Audio.Playlists.Members.PlayOrder, playlistCount + i + 1); + if(position != -1) + { + value.Put(MediaStore.Audio.Playlists.Members.PlayOrder, position); + position = -1; + } + else + value.Put(MediaStore.Audio.Playlists.Members.PlayOrder, playlistCount + i + 1); values.Add(value); } } diff --git a/Opus/Code/Api/PlaylistManager.cs b/Opus/Code/Api/PlaylistManager.cs index c664f66..127e956 100644 --- a/Opus/Code/Api/PlaylistManager.cs +++ b/Opus/Code/Api/PlaylistManager.cs @@ -880,7 +880,8 @@ namespace Opus.Api /// The name of the playlist /// The array of songs you want to add. Can be local one or youtube one, it will download them and add them after. /// True if you want the playlist to be created and synced on youtube too - public async static void CreateLocalPlaylist(string name, Song[] items, bool syncedPlaylist = false) + /// Property used only for the downloader, see the LocalManager's AddToPlaylist method to see what it does. + public async static void CreateLocalPlaylist(string name, Song[] items, bool syncedPlaylist = false, int position = -1) { if (!await MainActivity.instance.GetWritePermission()) return; @@ -894,7 +895,7 @@ namespace Opus.Api if (items != null && items.Length > 0) { - LocalManager.AddToPlaylist(items, name, playlistID); //Will only add files already downloaded + LocalManager.AddToPlaylist(items, name, playlistID, false, position); //Will only add files already downloaded #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed YoutubeManager.DownloadFiles(items.ToList().ConvertAll(x => DownloadFile.From(x, name))); //Will download missing files and add them (if there was youtube songs in the items array. #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed diff --git a/Opus/Code/Api/Services/Downloader.cs b/Opus/Code/Api/Services/Downloader.cs index 0a8c23b..b2dba9e 100644 --- a/Opus/Code/Api/Services/Downloader.cs +++ b/Opus/Code/Api/Services/Downloader.cs @@ -151,13 +151,13 @@ namespace Opus.Api.Services downloadCount++; currentStrike++; - CreateNotification(queue[position].name); + CreateNotification(queue[position].Name); try { YoutubeClient client = new YoutubeClient(); - Video video = await client.GetVideoAsync(queue[position].videoID); - MediaStreamInfoSet mediaStreamInfo = await client.GetVideoMediaStreamInfosAsync(queue[position].videoID); + Video video = await client.GetVideoAsync(queue[position].YoutubeID); + MediaStreamInfoSet mediaStreamInfo = await client.GetVideoMediaStreamInfosAsync(queue[position].YoutubeID); MediaStreamInfo streamInfo; if (mediaStreamInfo.Audio.Count > 0) @@ -187,9 +187,9 @@ namespace Opus.Api.Services string outpath = path; - if (queue[position].playlist != null) + if (queue[position].PlaylistName != null) { - outpath = Path.Combine(path, queue[position].playlist); + outpath = Path.Combine(path, queue[position].PlaylistName); Directory.CreateDirectory(outpath); } @@ -209,7 +209,7 @@ namespace Opus.Api.Services MediaStream input = await client.GetMediaStreamAsync(streamInfo); - queue[position].path = filePath; + queue[position].Path = filePath; files.Add(filePath); FileStream output = File.Create(filePath); @@ -229,7 +229,7 @@ namespace Opus.Api.Services if (queue.Count == 1) SetNotificationProgress(100, true); - SetMetaData(position, filePath, video.Title, video.Author, new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl }, queue[position].videoID, queue[position].playlist); + SetMetaData(position, video.Title, video.Author, new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl }); files.Remove(filePath); downloadCount--; @@ -256,8 +256,10 @@ namespace Opus.Api.Services } } - private async void SetMetaData(int position, string filePath, string title, string artist, string[] thumbnails, string youtubeID, string playlist) + private async void SetMetaData(int position, string title, string artist, string[] thumbnails) { + string filePath = queue[position].Path; + await Task.Run(async () => { Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite); @@ -266,7 +268,7 @@ namespace Opus.Api.Services meta.Tag.Title = title; meta.Tag.Performers = new string[] { artist }; meta.Tag.Album = title + " - " + artist; - meta.Tag.Comment = youtubeID; + meta.Tag.Comment = queue[position].YoutubeID; IPicture[] pictures = new IPicture[1]; Bitmap bitmap = Picasso.With(Application.Context).Load(await YoutubeManager.GetBestThumb(thumbnails)).Transform(new RemoveBlackBorder(true)).Get(); byte[] data; @@ -285,9 +287,12 @@ namespace Opus.Api.Services MediaScannerConnection.ScanFile(this, new string[] { filePath }, null, this); - queue[position].State = DownloadState.Completed; + if (queue[position].PlaylistName == null) + queue[position].State = DownloadState.Completed; + else + queue[position].State = DownloadState.Playlist; - if (!queue.Exists(x => x.State == DownloadState.None || x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData)) + if (!queue.Exists(x => x.State == DownloadState.None || x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.Playlist)) { StopForeground(true); DownloadQueue.instance?.Finish(); @@ -297,20 +302,36 @@ namespace Opus.Api.Services UpdateList(position); } - public void OnScanCompleted(string path, Uri uri) + public async void OnScanCompleted(string path, Uri uri) { - Android.Util.Log.Debug("MusisApp", "Scan Completed with path = " + path + " and uri = " + uri.ToString()); - string playlist = path.Substring(downloadPath.Length + 1); + System.Console.WriteLine("&Scan Completed with path = " + path + " and uri = " + uri.ToString()); - if (playlist.IndexOf('/') != -1) + int position = queue.FindIndex(x => x.Path == path && x.State == DownloadState.Playlist); + if (position != -1) { - playlist = playlist.Substring(0, playlist.IndexOf('/')); - Handler handler = new Handler(MainActivity.instance.MainLooper); - handler.Post(async () => + LocalManager.AddToPlaylist(new[] { await LocalManager.GetSong(path) }, queue[position].PlaylistName, -1, true, position); + queue[position].State = DownloadState.Completed; + + if (!queue.Exists(x => x.State == DownloadState.None || x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.Playlist)) { - LocalManager.AddToPlaylist(new[] { await LocalManager.GetSong(path) }, playlist, -1, true); - }); + StopForeground(true); + DownloadQueue.instance?.Finish(); + queue.Clear(); + } + else + UpdateList(position); } + + + //if (playlist.IndexOf('/') != -1) + //{ + // playlist = playlist.Substring(0, playlist.IndexOf('/')); + // Handler handler = new Handler(MainActivity.instance.MainLooper); + // handler.Post(async () => + // { + + // }); + //} } #endregion @@ -329,7 +350,7 @@ namespace Opus.Api.Services for (int i = 0; i < files.Count; i++) { - Song song = songs.Find(x => x.YoutubeID == files[i].videoID); + Song song = songs.Find(x => x.YoutubeID == files[i].YoutubeID); if (song != null) { //Video is already downloaded: diff --git a/Opus/Code/DataStructure/DownloadFile.cs b/Opus/Code/DataStructure/DownloadFile.cs index 04f9d98..76480c3 100644 --- a/Opus/Code/DataStructure/DownloadFile.cs +++ b/Opus/Code/DataStructure/DownloadFile.cs @@ -3,19 +3,19 @@ [System.Serializable] public class DownloadFile { - public string name; - public string videoID; - public string playlist; + public string Name; + public string YoutubeID; + public string PlaylistName; public DownloadState State = DownloadState.None; public int progress = 0; - public string path; + public string Path; public bool skipCheck = false; public DownloadFile(string name, string videoID, string playlist) { - this.name = name; - this.videoID = videoID; - this.playlist = playlist; + this.Name = name; + this.YoutubeID = videoID; + this.PlaylistName = playlist; } public static DownloadFile From(Song song, string playlistName) @@ -33,6 +33,7 @@ Canceled, UpToDate, None, - Error + Error, + Playlist } } \ No newline at end of file diff --git a/Opus/Code/DataStructure/Song.cs b/Opus/Code/DataStructure/Song.cs index 41b19ba..85e3c07 100644 --- a/Opus/Code/DataStructure/Song.cs +++ b/Opus/Code/DataStructure/Song.cs @@ -5,6 +5,7 @@ using Android.Support.V7.Widget; using Android.Views; using Android.Widget; using Newtonsoft.Json; +using Opus.Fragments; using SQLite; using System; @@ -57,7 +58,9 @@ namespace Opus.DataStructure int albumID = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Album); int thisID = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Id); int pathID = cursor.GetColumnIndex(MediaStore.Audio.Media.InterfaceConsts.Data); + int playOrderID = cursor.GetColumnIndex(MediaStore.Audio.Playlists.Members.PlayOrder); + string playOrder = PlaylistTracks.instance != null ? cursor.GetString(playOrderID) : ""; string Artist = cursor.GetString(artistID); string Title = cursor.GetString(titleID); string Album = cursor.GetString(albumID); @@ -72,7 +75,7 @@ namespace Opus.DataStructure if (Album == null) Album = "Unknow Album"; - return new Song(Title, Artist, Album, null, AlbumArt, id, path); + return new Song(Title, playOrder, Album, null, AlbumArt, id, path); } diff --git a/Opus/Code/UI/Adapter/DownloadQueueAdapter.cs b/Opus/Code/UI/Adapter/DownloadQueueAdapter.cs index 5985228..7314b2e 100644 --- a/Opus/Code/UI/Adapter/DownloadQueueAdapter.cs +++ b/Opus/Code/UI/Adapter/DownloadQueueAdapter.cs @@ -17,7 +17,7 @@ namespace Opus.Adapter public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { DownloadHolder holder = (DownloadHolder)viewHolder; - holder.Title.Text = Downloader.queue[position].name; + holder.Title.Text = Downloader.queue[position].Name; switch (Downloader.queue[position].State) { @@ -43,6 +43,17 @@ namespace Opus.Adapter else holder.Title.SetTextColor(Color.Black); break; + case DownloadState.Playlist: + holder.Status.Text = Downloader.instance.GetString(Resource.String.downloader_playlist); + holder.Status.Visibility = ViewStates.Visible; + holder.Progress.Visibility = ViewStates.Visible; + holder.Progress.Indeterminate = true; + holder.Title.Alpha = 1f; + if (MainActivity.Theme == 1) + holder.Title.SetTextColor(Color.White); + else + holder.Title.SetTextColor(Color.Black); + break; case DownloadState.Downloading: holder.Status.Text = Downloader.instance.GetString(Resource.String.downloading_status); holder.Status.Visibility = ViewStates.Visible; diff --git a/Opus/Code/UI/Adapter/PlaylistAdapter.cs b/Opus/Code/UI/Adapter/PlaylistAdapter.cs index 1c56667..365db36 100644 --- a/Opus/Code/UI/Adapter/PlaylistAdapter.cs +++ b/Opus/Code/UI/Adapter/PlaylistAdapter.cs @@ -176,7 +176,7 @@ namespace Opus.Adapter else holder.edit.Visibility = ViewStates.Gone; - if (playlist.SyncState == SyncState.Loading || Downloader.queue.Find(x => x.playlist == playlist.Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) != null) + if (playlist.SyncState == SyncState.Loading || Downloader.queue.Find(x => x.PlaylistName == playlist.Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) != null) { holder.sync.Visibility = ViewStates.Gone; holder.SyncLoading.Visibility = ViewStates.Visible; diff --git a/Opus/Code/UI/Fragments/DownloadQueue.cs b/Opus/Code/UI/Fragments/DownloadQueue.cs index cb58950..10666d5 100644 --- a/Opus/Code/UI/Fragments/DownloadQueue.cs +++ b/Opus/Code/UI/Fragments/DownloadQueue.cs @@ -76,13 +76,13 @@ namespace Opus.Fragments case Resource.Id.delete: if(Downloader.queue[morePosition].State == DownloadState.Completed) { - System.IO.File.Delete(Downloader.queue[morePosition].path); - Downloader.queue[morePosition].name = GetString(Resource.String.deleted_file); + System.IO.File.Delete(Downloader.queue[morePosition].Path); + Downloader.queue[morePosition].Name = GetString(Resource.String.deleted_file); Downloader.queue[morePosition].State = DownloadState.Canceled; } else if(Downloader.queue[morePosition].State == DownloadState.None) { - Downloader.queue[morePosition].name = GetString(Resource.String.deleted_file); + Downloader.queue[morePosition].Name = GetString(Resource.String.deleted_file); Downloader.queue[morePosition].State = DownloadState.Canceled; } else diff --git a/Opus/Code/UI/Fragments/Playlist.cs b/Opus/Code/UI/Fragments/Playlist.cs index 1cb3a89..d67177e 100644 --- a/Opus/Code/UI/Fragments/Playlist.cs +++ b/Opus/Code/UI/Fragments/Playlist.cs @@ -508,7 +508,7 @@ namespace Opus.Fragments { for (int i = 1; i < YoutubePlaylists.Count; i++) { - if (YoutubePlaylists[i].SyncState != SyncState.False && YoutubePlaylists[i].SyncState != SyncState.Error && Downloader.queue.Find(x => x.playlist == YoutubePlaylists[i].Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) == null) + if (YoutubePlaylists[i].SyncState != SyncState.False && YoutubePlaylists[i].SyncState != SyncState.Error && Downloader.queue.Find(x => x.PlaylistName == YoutubePlaylists[i].Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) == null) { YoutubePlaylists[i].SyncState = SyncState.True; PlaylistHolder holder = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(LocalPlaylists.Count + i)); diff --git a/Opus/Code/UI/Fragments/PlaylistTracks.cs b/Opus/Code/UI/Fragments/PlaylistTracks.cs index 2d671d0..bf2e150 100644 --- a/Opus/Code/UI/Fragments/PlaylistTracks.cs +++ b/Opus/Code/UI/Fragments/PlaylistTracks.cs @@ -192,7 +192,7 @@ namespace Opus.Fragments SongManager.AddToQueue(adapter.tracks); break; - case Resource.Id.rename: + case Resource.Id.name: PlaylistManager.Rename(item, () => { MainActivity.instance.FindViewById(Resource.Id.headerTitle).Text = item.Name; @@ -219,20 +219,30 @@ namespace Opus.Fragments void PlaylistMore(object sender, System.EventArgs eventArgs) { PopupMenu menu = new PopupMenu(MainActivity.instance, MainActivity.instance.FindViewById(Resource.Id.headerMore)); - if (item.LocalID == -1 && item.HasWritePermission) - menu.Inflate(Resource.Menu.ytplaylist_header_more); - else if (item.LocalID == -1 && isForked) - menu.Inflate(Resource.Menu.ytplaylistnowrite_forked_header_more); - else if (item.LocalID == -1) - menu.Inflate(Resource.Menu.ytplaylistnowrite_header_more); - else - menu.Inflate(Resource.Menu.playlist_header_more); + menu.Inflate(Resource.Menu.playlist_header_more); //Contains "add to queue" if (item.SyncState == SyncState.True) { - menu.Menu.GetItem(0).SetTitle("Sync Now"); - menu.Menu.Add(Menu.None, Resource.Id.sync, menu.Menu.Size() - 3, "Stop Syncing"); + menu.Menu.Add(Menu.None, Resource.Id.download, 1, MainActivity.instance.GetString(Resource.String.sync_now)); + menu.Menu.Add(Menu.None, Resource.Id.sync, 5, MainActivity.instance.GetString(Resource.String.stop_sync)); } + else if(item.YoutubeID != null) + { + menu.Menu.Add(Menu.None, Resource.Id.download, 1, MainActivity.instance.GetString(Resource.String.sync)); + } + + if(item.YoutubeID != null) + { + if(isForked) + menu.Menu.Add(Menu.None, Resource.Id.fork, 2, MainActivity.instance.GetString(Resource.String.unfork)); + else + menu.Menu.Add(Menu.None, Resource.Id.fork, 2, MainActivity.instance.GetString(Resource.String.add_to_library)); + } + + if(item.HasWritePermission) + menu.Menu.Add(Menu.None, Resource.Id.name, 3, MainActivity.instance.GetString(Resource.String.rename)); + + menu.Menu.Add(Menu.None, Resource.Id.delete, 4, MainActivity.instance.GetString(Resource.String.delete)); menu.SetOnMenuItemClickListener(this); menu.Show(); } diff --git a/Opus/Opus.csproj b/Opus/Opus.csproj index 2fa8f1e..102e10c 100644 --- a/Opus/Opus.csproj +++ b/Opus/Opus.csproj @@ -586,12 +586,6 @@ - - - - - - @@ -892,12 +886,6 @@ Designer - - - MSBuild:UpdateGeneratedFiles - Designer - - diff --git a/Opus/Resources/Resource.Designer.cs b/Opus/Resources/Resource.Designer.cs index 8780895..6c4c4d6 100644 --- a/Opus/Resources/Resource.Designer.cs +++ b/Opus/Resources/Resource.Designer.cs @@ -5357,8 +5357,8 @@ namespace Opus // aapt resource value: 0x7f0b0192 public const int downButton = 2131427730; - // aapt resource value: 0x7f0b01d8 - public const int download = 2131427800; + // aapt resource value: 0x7f0b01d7 + public const int download = 2131427799; // aapt resource value: 0x7f0b01d0 public const int downloadMDfromYT = 2131427792; @@ -5489,8 +5489,8 @@ namespace Opus // aapt resource value: 0x7f0b0087 public const int filled = 2131427463; - // aapt resource value: 0x7f0b01d5 - public const int filter = 2131427797; + // aapt resource value: 0x7f0b01d4 + public const int filter = 2131427796; // aapt resource value: 0x7f0b0092 public const int fit = 2131427474; @@ -5657,8 +5657,8 @@ namespace Opus // aapt resource value: 0x7f0b017f public const int media_actions = 2131427711; - // aapt resource value: 0x7f0b01d6 - public const int media_route_menu_item = 2131427798; + // aapt resource value: 0x7f0b01d5 + public const int media_route_menu_item = 2131427797; // aapt resource value: 0x7f0b00cb public const int message = 2131427531; @@ -5996,8 +5996,8 @@ namespace Opus // aapt resource value: 0x7f0b01c7 public const int refine = 2131427783; - // aapt resource value: 0x7f0b01d3 - public const int rename = 2131427795; + // aapt resource value: 0x7f0b01d8 + public const int rename = 2131427800; // aapt resource value: 0x7f0b01c5 public const int reorder = 2131427781; @@ -6020,8 +6020,8 @@ namespace Opus // aapt resource value: 0x7f0b0183 public const int right_side = 2131427715; - // aapt resource value: 0x7f0b01d4 - public const int saveAsPlaylist = 2131427796; + // aapt resource value: 0x7f0b01d3 + public const int saveAsPlaylist = 2131427795; // aapt resource value: 0x7f0b0019 public const int save_image_matrix = 2131427353; @@ -6104,8 +6104,8 @@ namespace Opus // aapt resource value: 0x7f0b0077 public const int selected = 2131427447; - // aapt resource value: 0x7f0b01d7 - public const int settings = 2131427799; + // aapt resource value: 0x7f0b01d6 + public const int settings = 2131427798; // aapt resource value: 0x7f0b00b2 public const int shortcut = 2131427506; @@ -7186,8 +7186,8 @@ namespace Opus // aapt resource value: 0x7f0d0072 public const int abc_toolbar_collapse_description = 2131558514; - // aapt resource value: 0x7f0d0133 - public const int add = 2131558707; + // aapt resource value: 0x7f0d0134 + public const int add = 2131558708; // aapt resource value: 0x7f0d00fa public const int add_playlist = 2131558650; @@ -7213,11 +7213,11 @@ namespace Opus // aapt resource value: 0x7f0d0080 public const int appbar_scrolling_view_behavior = 2131558528; - // aapt resource value: 0x7f0d013d - public const int appearances = 2131558717; + // aapt resource value: 0x7f0d013e + public const int appearances = 2131558718; - // aapt resource value: 0x7f0d0130 - public const int apply = 2131558704; + // aapt resource value: 0x7f0d0131 + public const int apply = 2131558705; // aapt resource value: 0x7f0d011a public const int artist = 2131558682; @@ -7231,11 +7231,11 @@ namespace Opus // aapt resource value: 0x7f0d0110 public const int badplaylisturl = 2131558672; - // aapt resource value: 0x7f0d0137 - public const int behavior = 2131558711; + // aapt resource value: 0x7f0d0138 + public const int behavior = 2131558712; - // aapt resource value: 0x7f0d0156 - public const int beta_available = 2131558742; + // aapt resource value: 0x7f0d0157 + public const int beta_available = 2131558743; // aapt resource value: 0x7f0d0081 public const int bottom_sheet_behavior = 2131558529; @@ -7243,17 +7243,17 @@ namespace Opus // aapt resource value: 0x7f0d00b2 public const int browse = 2131558578; - // aapt resource value: 0x7f0d0131 - public const int cancel = 2131558705; + // aapt resource value: 0x7f0d0132 + public const int cancel = 2131558706; - // aapt resource value: 0x7f0d015c - public const int cancelling = 2131558748; + // aapt resource value: 0x7f0d015d + public const int cancelling = 2131558749; // aapt resource value: 0x7f0d00f0 public const int cant_delete = 2131558640; - // aapt resource value: 0x7f0d0159 - public const int cant_play_non_youtube = 2131558745; + // aapt resource value: 0x7f0d015a + public const int cant_play_non_youtube = 2131558746; // aapt resource value: 0x7f0d00b7 public const int cast = 2131558583; @@ -7336,11 +7336,11 @@ namespace Opus // aapt resource value: 0x7f0d0015 public const int cast_play = 2131558421; - // aapt resource value: 0x7f0d012e - public const int cast_queue_push = 2131558702; - // aapt resource value: 0x7f0d012f - public const int cast_queue_pushed = 2131558703; + public const int cast_queue_push = 2131558703; + + // aapt resource value: 0x7f0d0130 + public const int cast_queue_pushed = 2131558704; // aapt resource value: 0x7f0d0016 public const int cast_rewind = 2131558422; @@ -7405,8 +7405,8 @@ namespace Opus // aapt resource value: 0x7f0d0083 public const int character_counter_pattern = 2131558531; - // aapt resource value: 0x7f0d0143 - public const int check_updates = 2131558723; + // aapt resource value: 0x7f0d0144 + public const int check_updates = 2131558724; // aapt resource value: 0x7f0d002b public const int common_google_play_services_enable_button = 2131558443; @@ -7462,11 +7462,11 @@ namespace Opus // aapt resource value: 0x7f0d003b public const int common_signin_button_text_long = 2131558459; - // aapt resource value: 0x7f0d012d - public const int completed = 2131558701; + // aapt resource value: 0x7f0d012e + public const int completed = 2131558702; - // aapt resource value: 0x7f0d0150 - public const int country_blocked = 2131558736; + // aapt resource value: 0x7f0d0151 + public const int country_blocked = 2131558737; // aapt resource value: 0x7f0d0116 public const int create_local = 2131558678; @@ -7486,8 +7486,8 @@ namespace Opus // aapt resource value: 0x7f0d0117 public const int create_youtube = 2131558679; - // aapt resource value: 0x7f0d0141 - public const int dark_theme = 2131558721; + // aapt resource value: 0x7f0d0142 + public const int dark_theme = 2131558722; // aapt resource value: 0x7f0d00da public const int delete = 2131558618; @@ -7504,8 +7504,8 @@ namespace Opus // aapt resource value: 0x7f0d011f public const int download_albumart = 2131558687; - // aapt resource value: 0x7f0d0139 - public const int download_directory = 2131558713; + // aapt resource value: 0x7f0d013a + public const int download_directory = 2131558714; // aapt resource value: 0x7f0d0120 public const int download_meta = 2131558688; @@ -7519,17 +7519,20 @@ namespace Opus // aapt resource value: 0x7f0d0127 public const int download_queue = 2131558695; + // aapt resource value: 0x7f0d012b + public const int downloader_playlist = 2131558699; + // aapt resource value: 0x7f0d00ee public const int downloading = 2131558638; - // aapt resource value: 0x7f0d015a - public const int downloading_notification = 2131558746; + // aapt resource value: 0x7f0d015b + public const int downloading_notification = 2131558747; - // aapt resource value: 0x7f0d012b - public const int downloading_status = 2131558699; + // aapt resource value: 0x7f0d012c + public const int downloading_status = 2131558700; - // aapt resource value: 0x7f0d0157 - public const int downloading_update = 2131558743; + // aapt resource value: 0x7f0d0158 + public const int downloading_update = 2131558744; // aapt resource value: 0x7f0d00d1 public const int edit_metadata = 2131558609; @@ -7672,8 +7675,8 @@ namespace Opus // aapt resource value: 0x7f0d0129 public const int initialization = 2131558697; - // aapt resource value: 0x7f0d0134 - public const int later = 2131558708; + // aapt resource value: 0x7f0d0135 + public const int later = 2131558709; // aapt resource value: 0x7f0d00d5 public const int list_songs = 2131558613; @@ -7690,23 +7693,23 @@ namespace Opus // aapt resource value: 0x7f0d00ff public const int localpl_noperm = 2131558655; - // aapt resource value: 0x7f0d0147 - public const int log_in = 2131558727; - // aapt resource value: 0x7f0d0148 - public const int log_out = 2131558728; - - // aapt resource value: 0x7f0d0146 - public const int logged_in = 2131558726; + public const int log_in = 2131558728; // aapt resource value: 0x7f0d0149 - public const int login_disabled = 2131558729; + public const int log_out = 2131558729; - // aapt resource value: 0x7f0d013a - public const int max_download = 2131558714; + // aapt resource value: 0x7f0d0147 + public const int logged_in = 2131558727; + + // aapt resource value: 0x7f0d014a + public const int login_disabled = 2131558730; // aapt resource value: 0x7f0d013b - public const int max_download_dialog = 2131558715; + public const int max_download = 2131558715; + + // aapt resource value: 0x7f0d013c + public const int max_download_dialog = 2131558716; // aapt resource value: 0x7f0d012a public const int metadata = 2131558698; @@ -7810,8 +7813,8 @@ namespace Opus // aapt resource value: 0x7f0d00bc public const int next_loading = 2131558588; - // aapt resource value: 0x7f0d0136 - public const int no = 2131558710; + // aapt resource value: 0x7f0d0137 + public const int no = 2131558711; // aapt resource value: 0x7f0d00f5 public const int no_channel = 2131558645; @@ -7819,8 +7822,8 @@ namespace Opus // aapt resource value: 0x7f0d00f4 public const int no_lives = 2131558644; - // aapt resource value: 0x7f0d014b - public const int no_permission = 2131558731; + // aapt resource value: 0x7f0d014c + public const int no_permission = 2131558732; // aapt resource value: 0x7f0d00f3 public const int no_playlist = 2131558643; @@ -7831,17 +7834,17 @@ namespace Opus // aapt resource value: 0x7f0d00e7 public const int no_song = 2131558631; - // aapt resource value: 0x7f0d014c - public const int no_song_mix = 2131558732; + // aapt resource value: 0x7f0d014d + public const int no_song_mix = 2131558733; // aapt resource value: 0x7f0d00f2 public const int no_track = 2131558642; - // aapt resource value: 0x7f0d0145 - public const int not_log = 2131558725; + // aapt resource value: 0x7f0d0146 + public const int not_log = 2131558726; - // aapt resource value: 0x7f0d0151 - public const int not_streamable = 2131558737; + // aapt resource value: 0x7f0d0152 + public const int not_streamable = 2131558738; // aapt resource value: 0x7f0d00bb public const int nothing = 2131558587; @@ -7849,14 +7852,14 @@ namespace Opus // aapt resource value: 0x7f0d00be public const int off = 2131558590; - // aapt resource value: 0x7f0d0132 - public const int ok = 2131558706; + // aapt resource value: 0x7f0d0133 + public const int ok = 2131558707; // aapt resource value: 0x7f0d00c4 public const int open_youtube = 2131558596; - // aapt resource value: 0x7f0d0142 - public const int others = 2131558722; + // aapt resource value: 0x7f0d0143 + public const int others = 2131558723; // aapt resource value: 0x7f0d0088 public const int password_toggle_content_description = 2131558536; @@ -8008,32 +8011,32 @@ namespace Opus // aapt resource value: 0x7f0d00dc public const int sync_now = 2131558620; - // aapt resource value: 0x7f0d013c - public const int sync_remove = 2131558716; + // aapt resource value: 0x7f0d013d + public const int sync_remove = 2131558717; // aapt resource value: 0x7f0d00ef public const int syncing = 2131558639; - // aapt resource value: 0x7f0d015b - public const int tap_details = 2131558747; - - // aapt resource value: 0x7f0d013e - public const int theme = 2131558718; + // aapt resource value: 0x7f0d015c + public const int tap_details = 2131558748; // aapt resource value: 0x7f0d013f - public const int theme_dialog = 2131558719; + public const int theme = 2131558719; + + // aapt resource value: 0x7f0d0140 + public const int theme_dialog = 2131558720; // aapt resource value: 0x7f0d00c3 public const int timer = 2131558595; - // aapt resource value: 0x7f0d014e - public const int timout = 2131558734; + // aapt resource value: 0x7f0d014f + public const int timout = 2131558735; // aapt resource value: 0x7f0d0119 public const int title = 2131558681; - // aapt resource value: 0x7f0d014a - public const int undo = 2131558730; + // aapt resource value: 0x7f0d014b + public const int undo = 2131558731; // aapt resource value: 0x7f0d0121 public const int undo_change = 2131558689; @@ -8044,29 +8047,29 @@ namespace Opus // aapt resource value: 0x7f0d010d public const int unfork_playlist = 2131558669; - // aapt resource value: 0x7f0d014f - public const int unknow = 2131558735; + // aapt resource value: 0x7f0d0150 + public const int unknow = 2131558736; // aapt resource value: 0x7f0d00ba public const int up_next = 2131558586; - // aapt resource value: 0x7f0d0155 - public const int up_to_date = 2131558741; + // aapt resource value: 0x7f0d0156 + public const int up_to_date = 2131558742; - // aapt resource value: 0x7f0d012c - public const int up_to_date_status = 2131558700; - - // aapt resource value: 0x7f0d0153 - public const int update = 2131558739; + // aapt resource value: 0x7f0d012d + public const int up_to_date_status = 2131558701; // aapt resource value: 0x7f0d0154 - public const int update_message = 2131558740; + public const int update = 2131558740; - // aapt resource value: 0x7f0d0152 - public const int update_no_internet = 2131558738; + // aapt resource value: 0x7f0d0155 + public const int update_message = 2131558741; - // aapt resource value: 0x7f0d0158 - public const int updating = 2131558744; + // aapt resource value: 0x7f0d0153 + public const int update_no_internet = 2131558739; + + // aapt resource value: 0x7f0d0159 + public const int updating = 2131558745; // aapt resource value: 0x7f0d003e public const int v7_preference_off = 2131558462; @@ -8074,20 +8077,20 @@ namespace Opus // aapt resource value: 0x7f0d003f public const int v7_preference_on = 2131558463; - // aapt resource value: 0x7f0d0144 - public const int version = 2131558724; + // aapt resource value: 0x7f0d0145 + public const int version = 2131558725; - // aapt resource value: 0x7f0d0138 - public const int volume = 2131558712; + // aapt resource value: 0x7f0d0139 + public const int volume = 2131558713; - // aapt resource value: 0x7f0d0140 - public const int white_theme = 2131558720; + // aapt resource value: 0x7f0d0141 + public const int white_theme = 2131558721; - // aapt resource value: 0x7f0d0135 - public const int yes = 2131558709; + // aapt resource value: 0x7f0d0136 + public const int yes = 2131558710; - // aapt resource value: 0x7f0d014d - public const int youtube_endpoint = 2131558733; + // aapt resource value: 0x7f0d014e + public const int youtube_endpoint = 2131558734; // aapt resource value: 0x7f0d00fb public const int youtube_loading_error = 2131558651; diff --git a/Opus/Resources/menu/playlist_header_more.xml b/Opus/Resources/menu/playlist_header_more.xml index 5533154..2b3c2ac 100644 --- a/Opus/Resources/menu/playlist_header_more.xml +++ b/Opus/Resources/menu/playlist_header_more.xml @@ -3,10 +3,4 @@ - - \ No newline at end of file diff --git a/Opus/Resources/menu/ytplaylist_header_more.xml b/Opus/Resources/menu/ytplaylist_header_more.xml deleted file mode 100644 index ae5e8f0..0000000 --- a/Opus/Resources/menu/ytplaylist_header_more.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Opus/Resources/menu/ytplaylistnowrite_forked_header_more.xml b/Opus/Resources/menu/ytplaylistnowrite_forked_header_more.xml deleted file mode 100644 index 0baef21..0000000 --- a/Opus/Resources/menu/ytplaylistnowrite_forked_header_more.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Opus/Resources/menu/ytplaylistnowrite_header_more.xml b/Opus/Resources/menu/ytplaylistnowrite_header_more.xml deleted file mode 100644 index 9b966e1..0000000 --- a/Opus/Resources/menu/ytplaylistnowrite_header_more.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Opus/Resources/values-fr/strings.xml b/Opus/Resources/values-fr/strings.xml index 95a23ba..3008026 100644 --- a/Opus/Resources/values-fr/strings.xml +++ b/Opus/Resources/values-fr/strings.xml @@ -149,6 +149,7 @@ Fichier supprimé Initialisation Metadata + Playlist Téléchargement Déjà à jour Completé diff --git a/Opus/Resources/values/strings.xml b/Opus/Resources/values/strings.xml index bb1bac5..c7d85d3 100644 --- a/Opus/Resources/values/strings.xml +++ b/Opus/Resources/values/strings.xml @@ -149,6 +149,7 @@ Deleted file Initialization Metadata + Playlist Downloading Up to date Completed