Solving bugs and reworking download/edit metadata image downloading.

This commit is contained in:
Tristan Roux
2019-03-13 17:04:48 +01:00
parent e052523ca0
commit 2a5a89dea2
10 changed files with 195 additions and 248 deletions

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -49,7 +49,6 @@ namespace Opus
{
instance = this;
View view = inflater.Inflate(Resource.Layout.player, container, false);
Console.WriteLine("&Play button: " + view.FindViewById<ImageButton>(Resource.Id.playButton));
if (!view.FindViewById<ImageButton>(Resource.Id.playButton).HasOnClickListeners)
{
view.FindViewById<ImageButton>(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<DrawerLayout>(Resource.Id.queueDrawer);
DrawerLayout.AddDrawerListener(new QueueListener(view.FindViewById<ImageView>(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<FrameLayout>(Resource.Id.smallPlayer);
@@ -196,6 +205,9 @@ namespace Opus
while (MusicPlayer.Duration < 2)
await Task.Delay(100);
if(spBar == null)
spBar = Activity.FindViewById<ProgressBar>(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)

View File

@@ -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<PlaylistItem>();
db.Delete(db.Table<PlaylistItem>().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) });

View File

@@ -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<TextView>(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);

View File

@@ -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;

View File

@@ -201,4 +201,4 @@
<string name="downloading_notification">Descargando :</string>
<string name="tap_details">toque para mas detalles</string>
<string name="cancelling">Anulando...</string>
</resources>
</resources>

View File

@@ -159,10 +159,6 @@
<string name="no">No</string>
<string name="behavior">Behavior</string>
<string name="music_genre">Music genres your interested in</string>
<string name="genre_nothing">Actually nothing</string>
<string name="and"> and </string>
<string name="and_more"> and more.</string>
<string name="volume">Volume</string>
<string name="download">Download</string>
<string name="download_directory">Download directory</string>