mirror of
https://github.com/zoriya/Opus.git
synced 2025-12-06 06:26:15 +00:00
Making downloader follow playlist sort order. Reworking playlist track header's more menu.
This commit is contained in:
@@ -355,15 +355,16 @@ namespace Opus.Api
|
||||
/// <param name="playList">The name of the playlist</param>
|
||||
/// <param name="LocalID">The id of the local playlist or -1 if you want to add this song to a playlist that will be created after.</param>
|
||||
/// <param name="saveAsSynced">Used only if you want to create a playlist with this method. True if the newly created playlist should be synced on youtube.</param>
|
||||
public async static void AddToPlaylist(Song[] items, string playList, long LocalID, bool saveAsSynced = false)
|
||||
/// <param name="position">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.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -880,7 +880,8 @@ namespace Opus.Api
|
||||
/// <param name="name">The name of the playlist</param>
|
||||
/// <param name="items">The array of songs you want to add. Can be local one or youtube one, it will download them and add them after.</param>
|
||||
/// <param name="syncedPlaylist">True if you want the playlist to be created and synced on youtube too</param>
|
||||
public async static void CreateLocalPlaylist(string name, Song[] items, bool syncedPlaylist = false)
|
||||
/// <param name="position">Property used only for the downloader, see the LocalManager's AddToPlaylist method to see what it does.</param>
|
||||
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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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<TextView>(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<ImageButton>(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();
|
||||
}
|
||||
|
||||
@@ -586,12 +586,6 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\menu\playlist_header_more.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\menu\ytplaylist_header_more.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\menu\ytplaylistnowrite_header_more.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\layout\LineSongs.xml" />
|
||||
</ItemGroup>
|
||||
@@ -892,12 +886,6 @@
|
||||
<SubType>Designer</SubType>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\menu\ytplaylistnowrite_forked_header_more.xml">
|
||||
<Generator>MSBuild:UpdateGeneratedFiles</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</AndroidResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
<Import Project="..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.targets" Condition="Exists('..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.Animated.Vector.Drawable.targets')" />
|
||||
<Import Project="..\packages\Xamarin.Android.Support.v7.Preference.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.v7.Preference.targets" Condition="Exists('..\packages\Xamarin.Android.Support.v7.Preference.25.4.0.2\build\MonoAndroid70\Xamarin.Android.Support.v7.Preference.targets')" />
|
||||
|
||||
225
Opus/Resources/Resource.Designer.cs
generated
225
Opus/Resources/Resource.Designer.cs
generated
@@ -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;
|
||||
|
||||
@@ -3,10 +3,4 @@
|
||||
<item
|
||||
android:id="@+id/addToQueue"
|
||||
android:title="@string/add_to_queue" />
|
||||
<item
|
||||
android:id="@+id/rename"
|
||||
android:title="@string/rename" />
|
||||
<item
|
||||
android:id="@+id/delete"
|
||||
android:title="@string/delete" />
|
||||
</menu>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:id="@+id/download"
|
||||
android:title="@string/sync" />
|
||||
<item
|
||||
android:id="@+id/addToQueue"
|
||||
android:title="@string/add_to_queue" />
|
||||
<item
|
||||
android:id="@+id/rename"
|
||||
android:title="@string/rename" />
|
||||
<item
|
||||
android:id="@+id/delete"
|
||||
android:title="@string/delete" />
|
||||
</menu>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:id="@+id/download"
|
||||
android:title="@string/sync" />
|
||||
<item
|
||||
android:id="@+id/fork"
|
||||
android:title="@string/unfork" />
|
||||
<item
|
||||
android:id="@+id/addToQueue"
|
||||
android:title="@string/add_to_queue" />
|
||||
<item
|
||||
android:id="@+id/delete"
|
||||
android:title="@string/delete" />
|
||||
</menu>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item
|
||||
android:id="@+id/download"
|
||||
android:title="@string/sync" />
|
||||
<item
|
||||
android:id="@+id/fork"
|
||||
android:title="@string/add_to_library" />
|
||||
<item
|
||||
android:id="@+id/addToQueue"
|
||||
android:title="@string/add_to_queue" />
|
||||
<item
|
||||
android:id="@+id/delete"
|
||||
android:title="@string/delete" />
|
||||
</menu>
|
||||
@@ -149,6 +149,7 @@
|
||||
<string name="deleted_file">Fichier supprimé</string>
|
||||
<string name="initialization">Initialisation</string>
|
||||
<string name="metadata">Metadata</string>
|
||||
<string name="downloader_playlist">Playlist</string>
|
||||
<string name="downloading_status">Téléchargement</string>
|
||||
<string name="up_to_date_status">Déjà à jour</string>
|
||||
<string name="completed">Completé</string>
|
||||
|
||||
@@ -149,6 +149,7 @@
|
||||
<string name="deleted_file">Deleted file</string>
|
||||
<string name="initialization">Initialization</string>
|
||||
<string name="metadata">Metadata</string>
|
||||
<string name="downloader_playlist">Playlist</string>
|
||||
<string name="downloading_status">Downloading</string>
|
||||
<string name="up_to_date_status">Up to date</string>
|
||||
<string name="completed">Completed</string>
|
||||
|
||||
Reference in New Issue
Block a user