From 2a5a89dea2d2786b0e0ecc58e9621dab3fdd7369 Mon Sep 17 00:00:00 2001 From: Tristan Roux Date: Wed, 13 Mar 2019 17:04:48 +0100 Subject: [PATCH] Solving bugs and reworking download/edit metadata image downloading. --- Opus/Resources/Portable Class/Browse.cs | 1 - Opus/Resources/Portable Class/Downloader.cs | 49 +----- Opus/Resources/Portable Class/EditMetaData.cs | 103 ++++-------- Opus/Resources/Portable Class/MusicPlayer.cs | 39 +---- Opus/Resources/Portable Class/Player.cs | 20 ++- Opus/Resources/Portable Class/Playlist.cs | 58 ++++++- .../Resources/Portable Class/YoutubeEngine.cs | 11 +- Opus/Resources/Resource.Designer.cs | 156 ++++++++---------- Opus/Resources/values-es/strings.xml | 2 +- Opus/Resources/values/strings.xml | 4 - 10 files changed, 195 insertions(+), 248 deletions(-) diff --git a/Opus/Resources/Portable Class/Browse.cs b/Opus/Resources/Portable Class/Browse.cs index 071b556..ba022ea 100644 --- a/Opus/Resources/Portable Class/Browse.cs +++ b/Opus/Resources/Portable Class/Browse.cs @@ -285,7 +285,6 @@ namespace Opus.Resources.Portable_Class intent.PutExtra("file", item.Path); context.StartService(intent); - MainActivity.instance.ShowSmallPlayer(); MainActivity.instance.ShowPlayer(); MusicPlayer.UpdateQueueDataBase(); } diff --git a/Opus/Resources/Portable Class/Downloader.cs b/Opus/Resources/Portable Class/Downloader.cs index b3183b9..c14507e 100644 --- a/Opus/Resources/Portable Class/Downloader.cs +++ b/Opus/Resources/Portable Class/Downloader.cs @@ -211,48 +211,17 @@ namespace Opus.Resources.Portable_Class meta.Tag.Performers = new string[] { artist }; meta.Tag.Album = title + " - " + artist; meta.Tag.Comment = youtubeID; - - for (int i = 0; i < 3; i++) + IPicture[] pictures = new IPicture[1]; + Bitmap bitmap = Picasso.With(Application.Context).Load(await MainActivity.GetBestThumb(thumbnails)).Transform(new RemoveBlackBorder(true)).Get(); + byte[] data; + using (var MemoryStream = new MemoryStream()) { - bool? canContinue = false; - WebClient webClient = new WebClient(); - webClient.DownloadDataCompleted += (sender, e) => - { - System.Console.WriteLine("&Error with thumb " + i + ": " + e.Error); - if (e.Error == null) - { - IPicture[] pictures = new IPicture[1]; - Bitmap bitmap = Picasso.With(Application.Context).Load(thumbnails[i]).Transform(new RemoveBlackBorder(true)).Get(); - byte[] data; - using (var MemoryStream = new MemoryStream()) - { - bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream); - data = MemoryStream.ToArray(); - } - bitmap.Recycle(); - pictures[0] = new Picture(data); - meta.Tag.Pictures = pictures; - canContinue = null; - } - else - canContinue = true; - }; - try - { - await webClient.DownloadDataTaskAsync(new System.Uri(thumbnails[i])); - } - catch { } //catch 404 errors - - while (canContinue == false) - await Task.Delay(10); - - if (canContinue == null) - { - meta.Save(); - stream.Dispose(); - return; - } + bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream); + data = MemoryStream.ToArray(); } + bitmap.Recycle(); + pictures[0] = new Picture(data); + meta.Tag.Pictures = pictures; meta.Save(); stream.Dispose(); diff --git a/Opus/Resources/Portable Class/EditMetaData.cs b/Opus/Resources/Portable Class/EditMetaData.cs index 70acf2c..412c812 100644 --- a/Opus/Resources/Portable Class/EditMetaData.cs +++ b/Opus/Resources/Portable Class/EditMetaData.cs @@ -2,6 +2,7 @@ using Android.App; using Android.Content; using Android.Content.PM; +using Android.Graphics; using Android.OS; using Android.Preferences; using Android.Provider; @@ -19,6 +20,7 @@ using System.Threading.Tasks; using TagLib; using YoutubeExplode; using YoutubeExplode.Models; +using Picture = TagLib.Picture; namespace Opus.Resources.Portable_Class { @@ -31,6 +33,7 @@ namespace Opus.Resources.Portable_Class private TextView title, artist, album, youtubeID; private ImageView albumArt; private Android.Net.Uri artURI; + private string ytThumbUri; private bool tempFile = false; private bool hasPermission = false; private const int RequestCode = 8539; @@ -81,18 +84,10 @@ namespace Opus.Resources.Portable_Class youtubeID.Text = song.YoutubeID; albumArt.Click += AlbumArt_Click; - if (song.AlbumArt == -1 || song.IsYt) - { - var songAlbumArtUri = Android.Net.Uri.Parse(song.Album); - Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).Into(albumArt); - } - else - { - var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart"); - var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt); + var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart"); + var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt); - Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt); - } + Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Into(albumArt); } private void AlbumArt_Click(object sender, System.EventArgs e) @@ -198,11 +193,30 @@ namespace Opus.Resources.Portable_Class meta.Tag.Album = album.Text; meta.Tag.Comment = youtubeID.Text; - if (artURI != null) + if (ytThumbUri != null) + { + await Task.Run(() => + { + IPicture[] pictures = new IPicture[1]; + Bitmap bitmap = Picasso.With(Application.Context).Load(ytThumbUri).Transform(new RemoveBlackBorder(true)).Get(); + byte[] data; + using (var MemoryStream = new MemoryStream()) + { + bitmap.Compress(Bitmap.CompressFormat.Png, 0, MemoryStream); + data = MemoryStream.ToArray(); + } + bitmap.Recycle(); + pictures[0] = new Picture(data); + meta.Tag.Pictures = pictures; + + ytThumbUri = null; + }); + } + else if (artURI != null) { IPicture[] pictures = new IPicture[1]; - Android.Graphics.Bitmap bitmap = null; + Bitmap bitmap = null; if (tempFile) { await Task.Run(() => @@ -219,7 +233,7 @@ namespace Opus.Resources.Portable_Class } MemoryStream memoryStream = new MemoryStream(); - bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Jpeg, 100, memoryStream); + bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, memoryStream); byte[] data = memoryStream.ToArray(); pictures[0] = new Picture(data); meta.Tag.Pictures = pictures; @@ -288,48 +302,8 @@ namespace Opus.Resources.Portable_Class album.Text = video.Title + " - " + video.Author; } - string[] thumbnails = new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl }; - - for (int i = 0; i < 3; i++) - { - ISharedPreferences prefManager = PreferenceManager.GetDefaultSharedPreferences(this); - string tempArt = Path.Combine(prefManager.GetString("downloadPath", Environment.GetExternalStoragePublicDirectory(Environment.DirectoryMusic).ToString()), "albumArt" + Path.GetExtension(thumbnails[i])); - if (System.IO.File.Exists(tempArt)) - { - await Task.Run(() => { System.IO.File.Delete(tempArt); }); - } - - bool? canContinue = false; - WebClient webClient = new WebClient(); - webClient.DownloadDataCompleted += (sender, e) => - { - System.Console.WriteLine("&Error with thumb " + i + ": " + e.Error); - if (e.Error == null) - { - System.Console.WriteLine("&Error = null"); - System.IO.File.WriteAllBytes(tempArt, e.Result); - - Android.Net.Uri uri = Android.Net.Uri.FromFile(new Java.IO.File(tempArt)); - Picasso.With(this).Load(uri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).MemoryPolicy(MemoryPolicy.NoCache, MemoryPolicy.NoStore).Into(albumArt); - artURI = uri; - tempFile = true; - canContinue = null; - } - else - canContinue = true; - }; - try - { - await webClient.DownloadDataTaskAsync(new System.Uri(thumbnails[i])); - } - catch { } //catch 404 errors - - while (canContinue == false) - await Task.Delay(10); - - if (canContinue == null) - return; - } + ytThumbUri = await MainActivity.GetBestThumb(new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl }); + Picasso.With(this).Load(ytThumbUri).Placeholder(Resource.Drawable.noAlbum).Transform(new RemoveBlackBorder(true)).MemoryPolicy(MemoryPolicy.NoCache, MemoryPolicy.NoStore).Into(albumArt); } void UndoChange() @@ -339,20 +313,13 @@ namespace Opus.Resources.Portable_Class album.Text = song.Album; youtubeID.Text = song.YoutubeID; - if (song.AlbumArt == -1 || song.IsYt) - { - var songAlbumArtUri = Android.Net.Uri.Parse(song.Album); - Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt); - } - else - { - var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart"); - var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt); + var songCover = Android.Net.Uri.Parse("content://media/external/audio/albumart"); + var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt); - Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Resize(400, 400).CenterCrop().Into(albumArt); - } + Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Drawable.noAlbum).Into(albumArt); - albumArt = null; + artURI = null; + ytThumbUri = null; tempFile = false; } diff --git a/Opus/Resources/Portable Class/MusicPlayer.cs b/Opus/Resources/Portable Class/MusicPlayer.cs index c5d0d56..d7e64ce 100644 --- a/Opus/Resources/Portable Class/MusicPlayer.cs +++ b/Opus/Resources/Portable Class/MusicPlayer.cs @@ -1052,45 +1052,12 @@ namespace Opus.Resources.Portable_Class return currentID; } - public static void SetSeekBar(SeekBar bar) + public static void SeekTo(long positionMS) { if (!UseCastPlayer) - { - bar.Max = (int)player.Duration; - bar.Progress = (int)player.CurrentPosition; - bar.ProgressChanged += (sender, e) => - { - int Progress = e.Progress; - - if (player != null && player.Duration - Progress <= 1500 && player.Duration - Progress > 0) - ParseNextSong(); - }; - bar.StartTrackingTouch += (sender, e) => - { - autoUpdateSeekBar = false; - }; - bar.StopTrackingTouch += (sender, e) => - { - autoUpdateSeekBar = true; - if (!queue[CurrentID()].IsLiveStream) - player.SeekTo(e.SeekBar.Progress); - }; - } + player.SeekTo(positionMS); else - { - bar.Max = (int)RemotePlayer.StreamDuration; - bar.Progress = (int)RemotePlayer.ApproximateStreamPosition; - bar.StartTrackingTouch += (sender, e) => - { - autoUpdateSeekBar = false; - }; - bar.StopTrackingTouch += (sender, e) => - { - autoUpdateSeekBar = true; - if (!queue[CurrentID()].IsLiveStream) - RemotePlayer.Seek(e.SeekBar.Progress); - }; - } + RemotePlayer.Seek(positionMS); } void AddSongToDataBase(Song item) diff --git a/Opus/Resources/Portable Class/Player.cs b/Opus/Resources/Portable Class/Player.cs index 403f096..53f6bb5 100644 --- a/Opus/Resources/Portable Class/Player.cs +++ b/Opus/Resources/Portable Class/Player.cs @@ -49,7 +49,6 @@ namespace Opus { instance = this; View view = inflater.Inflate(Resource.Layout.player, container, false); - Console.WriteLine("&Play button: " + view.FindViewById(Resource.Id.playButton)); if (!view.FindViewById(Resource.Id.playButton).HasOnClickListeners) { view.FindViewById(Resource.Id.downButton).Click += Down_Click; @@ -68,6 +67,16 @@ namespace Opus if (!MusicPlayer.isLiveStream) timer.Text = string.Format("{0} | {1}", DurationToTimer(e.Progress), DurationToTimer((int)MusicPlayer.Duration)); }; + bar.StartTrackingTouch += (sender, e) => + { + MusicPlayer.autoUpdateSeekBar = false; + }; + bar.StopTrackingTouch += async (sender, e) => + { + MusicPlayer.autoUpdateSeekBar = true; + if (!(await MusicPlayer.GetItem()).IsLiveStream) + MusicPlayer.SeekTo(e.SeekBar.Progress); + }; DrawerLayout = view.FindViewById(Resource.Id.queueDrawer); DrawerLayout.AddDrawerListener(new QueueListener(view.FindViewById(Resource.Id.queueBackground))); @@ -91,7 +100,7 @@ namespace Opus Song current = await MusicPlayer.GetItem(); - if (current.IsYt && current.Album == null) + if (current == null || (current.IsYt && current.Album == null)) return; FrameLayout smallPlayer = MainActivity.instance.FindViewById(Resource.Id.smallPlayer); @@ -196,6 +205,9 @@ namespace Opus while (MusicPlayer.Duration < 2) await Task.Delay(100); + if(spBar == null) + spBar = Activity.FindViewById(Resource.Id.spProgress); + if (current.IsLiveStream) { bar.Max = 1; @@ -206,8 +218,8 @@ namespace Opus } else { + Console.WriteLine("&Bar: " + bar + " timer: " + timer + " spBar: " + spBar); bar.Max = (int)MusicPlayer.Duration; - MusicPlayer.SetSeekBar(bar); timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration)); spBar.Max = (int)MusicPlayer.Duration; spBar.Progress = (int)MusicPlayer.CurrentPosition; @@ -287,7 +299,7 @@ namespace Opus timer.Text = string.Format("{0} | {1}", DurationToTimer((int)MusicPlayer.CurrentPosition), DurationToTimer((int)MusicPlayer.Duration)); } spBar.Progress = (int)MusicPlayer.CurrentPosition; - handler.PostDelayed(UpdateSeekBar, 1000); + handler.PostDelayed(UpdateSeekBar, 100); } private string DurationToTimer(int duration) diff --git a/Opus/Resources/Portable Class/Playlist.cs b/Opus/Resources/Portable Class/Playlist.cs index e627fc8..e3ae1ff 100644 --- a/Opus/Resources/Portable Class/Playlist.cs +++ b/Opus/Resources/Portable Class/Playlist.cs @@ -533,10 +533,56 @@ namespace Opus.Resources.Portable_Class }), new BottomSheetAction(Resource.Drawable.Delete, Resources.GetString(Resource.String.delete), (sender, eventArg) => { - if (local) - RemovePlaylist(Position, item.LocalID); + if(item.SyncState == SyncState.True || item.SyncState == SyncState.Loading) + { + AlertDialog dialog = new AlertDialog.Builder(MainActivity.instance, MainActivity.dialogTheme) + .SetTitle(GetString(Resource.String.delete_playlist, item.Name)) + .SetPositiveButton(Resource.String.yes, async (s, e) => + { + try + { + PlaylistsResource.DeleteRequest deleteRequest = YoutubeEngine.youtubeService.Playlists.Delete(item.YoutubeID); + await deleteRequest.ExecuteAsync(); + + YoutubePlaylists.RemoveAt(Position - LocalPlaylists.Count); + adapter.NotifyItemRemoved(Position); + + if (YoutubePlaylists.Count == 1) + { + YoutubePlaylists.Add(new PlaylistItem("EMPTY", null) { Owner = Resources.GetString(Resource.String.youtube_playlist_empty) }); + adapter.NotifyItemInserted(LocalPlaylists.Count + YoutubePlaylists.Count); + } + } + catch (System.Net.Http.HttpRequestException) + { + MainActivity.instance.Timout(); + return; + } + + await Task.Run(() => + { + SQLiteConnection db = new SQLiteConnection(System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "SyncedPlaylists.sqlite")); + db.CreateTable(); + + db.Delete(db.Table().ToList().Find(x => x.LocalID == item.LocalID)); + }); + + ContentResolver resolver = Activity.ContentResolver; + Android.Net.Uri uri = Playlists.ExternalContentUri; + resolver.Delete(Playlists.ExternalContentUri, Playlists.InterfaceConsts.Id + "=?", new string[] { item.LocalID.ToString() }); + }) + .SetNegativeButton(Resource.String.no, (s, e) => { }) + .Create(); + dialog.Show(); + } else - DeleteYoutubePlaylist(Position, item.YoutubeID); + { + if (local) + RemovePlaylist(Position, item.LocalID); + else + DeleteYoutubePlaylist(Position, item.YoutubeID); + } + bottomSheet.Dismiss(); })}); } @@ -624,8 +670,7 @@ namespace Opus.Resources.Portable_Class while (MusicPlayer.instance == null) await Task.Delay(10); - foreach (Song song in songs) - MusicPlayer.instance.AddToQueue(song); + MusicPlayer.instance.AddToQueue(songs.ToArray()); } } @@ -987,9 +1032,6 @@ namespace Opus.Resources.Portable_Class YoutubePlaylists.RemoveAt(position - LocalPlaylists.Count); adapter.NotifyItemRemoved(position); - foreach (PlaylistItem item in YoutubePlaylists) - System.Console.WriteLine(item.Name); - if (YoutubePlaylists.Count == 1) { YoutubePlaylists.Add(new PlaylistItem("EMPTY", null) { Owner = Resources.GetString(Resource.String.youtube_playlist_empty) }); diff --git a/Opus/Resources/Portable Class/YoutubeEngine.cs b/Opus/Resources/Portable Class/YoutubeEngine.cs index b12413d..36f50b7 100644 --- a/Opus/Resources/Portable Class/YoutubeEngine.cs +++ b/Opus/Resources/Portable Class/YoutubeEngine.cs @@ -613,7 +613,8 @@ namespace Opus.Resources.Portable_Class public static async void DownloadFiles(string[] names, string[] videoIDs, string playlist) { ISharedPreferences prefManager = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context); - if (prefManager.GetString("downloadPath", null) == null) + string downloadPath = prefManager.GetString("downloadPath", null); + if (downloadPath == null) { Snackbar snackBar = Snackbar.Make(MainActivity.instance.FindViewById(Resource.Id.snackBar), Resource.String.download_path_not_set, Snackbar.LengthLong).SetAction(Resource.String.set_path, (v) => { @@ -622,6 +623,12 @@ namespace Opus.Resources.Portable_Class }); snackBar.View.FindViewById(Resource.Id.snackbar_text).SetTextColor(Color.White); snackBar.Show(); + + ISharedPreferencesEditor editor = prefManager.Edit(); + editor.PutString("downloadPath", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString()); + editor.Commit(); + + downloadPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString(); } Context context = Android.App.Application.Context; @@ -638,7 +645,7 @@ namespace Opus.Resources.Portable_Class files.Add(new DownloadFile(names[i], videoIDs[i], playlist)); } - Downloader.instance.downloadPath = prefManager.GetString("downloadPath", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).ToString()); + Downloader.instance.downloadPath = downloadPath; Downloader.instance.maxDownload = prefManager.GetInt("maxDownload", 4); Downloader.queue.AddRange(files); diff --git a/Opus/Resources/Resource.Designer.cs b/Opus/Resources/Resource.Designer.cs index 57c93fe..45b00ee 100644 --- a/Opus/Resources/Resource.Designer.cs +++ b/Opus/Resources/Resource.Designer.cs @@ -7198,17 +7198,11 @@ namespace Opus // aapt resource value: 0x7f0d00eb public const int all = 2131558635; - // aapt resource value: 0x7f0d0133 - public const int and = 2131558707; - - // aapt resource value: 0x7f0d0134 - public const int and_more = 2131558708; - // aapt resource value: 0x7f0d0080 public const int appbar_scrolling_view_behavior = 2131558528; - // aapt resource value: 0x7f0d013a - public const int appearances = 2131558714; + // aapt resource value: 0x7f0d0136 + public const int appearances = 2131558710; // aapt resource value: 0x7f0d0129 public const int apply = 2131558697; @@ -7225,8 +7219,8 @@ namespace Opus // aapt resource value: 0x7f0d0130 public const int behavior = 2131558704; - // aapt resource value: 0x7f0d0151 - public const int beta_available = 2131558737; + // aapt resource value: 0x7f0d014d + public const int beta_available = 2131558733; // aapt resource value: 0x7f0d0081 public const int bottom_sheet_behavior = 2131558529; @@ -7237,14 +7231,14 @@ namespace Opus // aapt resource value: 0x7f0d012a public const int cancel = 2131558698; - // aapt resource value: 0x7f0d0157 - public const int cancelling = 2131558743; + // aapt resource value: 0x7f0d0153 + public const int cancelling = 2131558739; // aapt resource value: 0x7f0d00f3 public const int cant_delete = 2131558643; - // aapt resource value: 0x7f0d0154 - public const int cant_play_non_youtube = 2131558740; + // aapt resource value: 0x7f0d0150 + public const int cant_play_non_youtube = 2131558736; // aapt resource value: 0x7f0d00b8 public const int cast = 2131558584; @@ -7396,8 +7390,8 @@ namespace Opus // aapt resource value: 0x7f0d0083 public const int character_counter_pattern = 2131558531; - // aapt resource value: 0x7f0d0140 - public const int check_updates = 2131558720; + // aapt resource value: 0x7f0d013c + public const int check_updates = 2131558716; // aapt resource value: 0x7f0d00b0 public const int clientID = 2131558576; @@ -7480,8 +7474,8 @@ namespace Opus // aapt resource value: 0x7f0d0113 public const int create_youtube = 2131558675; - // aapt resource value: 0x7f0d013e - public const int dark_theme = 2131558718; + // aapt resource value: 0x7f0d013a + public const int dark_theme = 2131558714; // aapt resource value: 0x7f0d00db public const int delete = 2131558619; @@ -7498,8 +7492,8 @@ namespace Opus // aapt resource value: 0x7f0d011b public const int download_albumart = 2131558683; - // aapt resource value: 0x7f0d0136 - public const int download_directory = 2131558710; + // aapt resource value: 0x7f0d0132 + public const int download_directory = 2131558706; // aapt resource value: 0x7f0d011c public const int download_meta = 2131558684; @@ -7516,14 +7510,14 @@ namespace Opus // aapt resource value: 0x7f0d00f1 public const int downloading = 2131558641; - // aapt resource value: 0x7f0d0155 - public const int downloading_notification = 2131558741; + // aapt resource value: 0x7f0d0151 + public const int downloading_notification = 2131558737; // aapt resource value: 0x7f0d0124 public const int downloading_status = 2131558692; - // aapt resource value: 0x7f0d0152 - public const int downloading_update = 2131558738; + // aapt resource value: 0x7f0d014e + public const int downloading_update = 2131558734; // aapt resource value: 0x7f0d00d2 public const int edit_metadata = 2131558610; @@ -7648,9 +7642,6 @@ namespace Opus // aapt resource value: 0x7f0d00e9 public const int folders = 2131558633; - // aapt resource value: 0x7f0d0132 - public const int genre_nothing = 2131558706; - // aapt resource value: 0x7f0d0086 public const int hide_bottom_view_on_scroll_behavior = 2131558534; @@ -7681,20 +7672,20 @@ namespace Opus // aapt resource value: 0x7f0d00fb public const int local_playlists = 2131558651; - // aapt resource value: 0x7f0d0144 - public const int log_in = 2131558724; + // aapt resource value: 0x7f0d0140 + public const int log_in = 2131558720; - // aapt resource value: 0x7f0d0145 - public const int log_out = 2131558725; + // aapt resource value: 0x7f0d0141 + public const int log_out = 2131558721; - // aapt resource value: 0x7f0d0143 - public const int logged_in = 2131558723; + // aapt resource value: 0x7f0d013f + public const int logged_in = 2131558719; - // aapt resource value: 0x7f0d0137 - public const int max_download = 2131558711; + // aapt resource value: 0x7f0d0133 + public const int max_download = 2131558707; - // aapt resource value: 0x7f0d0138 - public const int max_download_dialog = 2131558712; + // aapt resource value: 0x7f0d0134 + public const int max_download_dialog = 2131558708; // aapt resource value: 0x7f0d0123 public const int metadata = 2131558691; @@ -7786,9 +7777,6 @@ namespace Opus // aapt resource value: 0x7f0d0087 public const int mtrl_chip_close_icon_content_description = 2131558535; - // aapt resource value: 0x7f0d0131 - public const int music_genre = 2131558705; - // aapt resource value: 0x7f0d00e6 public const int music_genres = 2131558630; @@ -7807,8 +7795,8 @@ namespace Opus // aapt resource value: 0x7f0d00f7 public const int no_lives = 2131558647; - // aapt resource value: 0x7f0d0147 - public const int no_permission = 2131558727; + // aapt resource value: 0x7f0d0143 + public const int no_permission = 2131558723; // aapt resource value: 0x7f0d00f6 public const int no_playlist = 2131558646; @@ -7819,17 +7807,17 @@ namespace Opus // aapt resource value: 0x7f0d00ea public const int no_song = 2131558634; - // aapt resource value: 0x7f0d0148 - public const int no_song_mix = 2131558728; + // aapt resource value: 0x7f0d0144 + public const int no_song_mix = 2131558724; // aapt resource value: 0x7f0d00f5 public const int no_track = 2131558645; - // aapt resource value: 0x7f0d0142 - public const int not_log = 2131558722; + // aapt resource value: 0x7f0d013e + public const int not_log = 2131558718; - // aapt resource value: 0x7f0d014c - public const int not_streamable = 2131558732; + // aapt resource value: 0x7f0d0148 + public const int not_streamable = 2131558728; // aapt resource value: 0x7f0d00bc public const int nothing = 2131558588; @@ -7843,8 +7831,8 @@ namespace Opus // aapt resource value: 0x7f0d00c5 public const int open_youtube = 2131558597; - // aapt resource value: 0x7f0d013f - public const int others = 2131558719; + // aapt resource value: 0x7f0d013b + public const int others = 2131558715; // aapt resource value: 0x7f0d0088 public const int password_toggle_content_description = 2131558536; @@ -7987,32 +7975,32 @@ namespace Opus // aapt resource value: 0x7f0d00dd public const int sync_now = 2131558621; - // aapt resource value: 0x7f0d0139 - public const int sync_remove = 2131558713; + // aapt resource value: 0x7f0d0135 + public const int sync_remove = 2131558709; // aapt resource value: 0x7f0d00f2 public const int syncing = 2131558642; - // aapt resource value: 0x7f0d0156 - public const int tap_details = 2131558742; + // aapt resource value: 0x7f0d0152 + public const int tap_details = 2131558738; - // aapt resource value: 0x7f0d013b - public const int theme = 2131558715; + // aapt resource value: 0x7f0d0137 + public const int theme = 2131558711; - // aapt resource value: 0x7f0d013c - public const int theme_dialog = 2131558716; + // aapt resource value: 0x7f0d0138 + public const int theme_dialog = 2131558712; // aapt resource value: 0x7f0d00c4 public const int timer = 2131558596; - // aapt resource value: 0x7f0d014a - public const int timout = 2131558730; + // aapt resource value: 0x7f0d0146 + public const int timout = 2131558726; // aapt resource value: 0x7f0d0115 public const int title = 2131558677; - // aapt resource value: 0x7f0d0146 - public const int undo = 2131558726; + // aapt resource value: 0x7f0d0142 + public const int undo = 2131558722; // aapt resource value: 0x7f0d011d public const int undo_change = 2131558685; @@ -8023,29 +8011,29 @@ namespace Opus // aapt resource value: 0x7f0d010c public const int unfork_playlist = 2131558668; - // aapt resource value: 0x7f0d014b - public const int unknow = 2131558731; + // aapt resource value: 0x7f0d0147 + public const int unknow = 2131558727; // aapt resource value: 0x7f0d00bb public const int up_next = 2131558587; - // aapt resource value: 0x7f0d0150 - public const int up_to_date = 2131558736; + // aapt resource value: 0x7f0d014c + public const int up_to_date = 2131558732; // aapt resource value: 0x7f0d0125 public const int up_to_date_status = 2131558693; - // aapt resource value: 0x7f0d014e - public const int update = 2131558734; + // aapt resource value: 0x7f0d014a + public const int update = 2131558730; + + // aapt resource value: 0x7f0d014b + public const int update_message = 2131558731; + + // aapt resource value: 0x7f0d0149 + public const int update_no_internet = 2131558729; // aapt resource value: 0x7f0d014f - public const int update_message = 2131558735; - - // aapt resource value: 0x7f0d014d - public const int update_no_internet = 2131558733; - - // aapt resource value: 0x7f0d0153 - public const int updating = 2131558739; + public const int updating = 2131558735; // aapt resource value: 0x7f0d003e public const int v7_preference_off = 2131558462; @@ -8053,20 +8041,20 @@ namespace Opus // aapt resource value: 0x7f0d003f public const int v7_preference_on = 2131558463; - // aapt resource value: 0x7f0d0141 - public const int version = 2131558721; - - // aapt resource value: 0x7f0d0135 - public const int volume = 2131558709; - // aapt resource value: 0x7f0d013d - public const int white_theme = 2131558717; + public const int version = 2131558717; + + // aapt resource value: 0x7f0d0131 + public const int volume = 2131558705; + + // aapt resource value: 0x7f0d0139 + public const int white_theme = 2131558713; // aapt resource value: 0x7f0d012e public const int yes = 2131558702; - // aapt resource value: 0x7f0d0149 - public const int youtube_endpoint = 2131558729; + // aapt resource value: 0x7f0d0145 + public const int youtube_endpoint = 2131558725; // aapt resource value: 0x7f0d00fe public const int youtube_loading_error = 2131558654; diff --git a/Opus/Resources/values-es/strings.xml b/Opus/Resources/values-es/strings.xml index 948012b..7dc0cfa 100644 --- a/Opus/Resources/values-es/strings.xml +++ b/Opus/Resources/values-es/strings.xml @@ -201,4 +201,4 @@ Descargando : toque para mas detalles Anulando... - + \ No newline at end of file diff --git a/Opus/Resources/values/strings.xml b/Opus/Resources/values/strings.xml index 7058238..2b23759 100644 --- a/Opus/Resources/values/strings.xml +++ b/Opus/Resources/values/strings.xml @@ -159,10 +159,6 @@ No Behavior - Music genres your interested in - Actually nothing - and - and more. Volume Download Download directory