Solved bugs with the downloader.

This commit is contained in:
Anonymus Raccoon
2019-06-29 19:08:10 +02:00
parent 31fb81efc8
commit cdae3599fa
8 changed files with 40 additions and 18 deletions

View File

@@ -119,13 +119,23 @@ namespace Opus.Api.Services
#region Downloading of the queue
public async void StartDownload()
{
System.Console.WriteLine("&Queue count: " + queue.Count);
foreach (var item in queue)
{
System.Console.WriteLine("&Item: " + item.Name + " State: " + item.State.ToString());
}
while (downloadCount < maxDownload && queue.Count(x => x.State == DownloadState.None) > 0)
{
System.Console.WriteLine("&Initiating the download of a song");
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
Task.Run(() => { DownloadAudio(queue.FindIndex(x => x.State == DownloadState.None), downloadPath); }, cancellation.Token);
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
await Task.Delay(10);
}
System.Console.WriteLine("&Start download finished");
}
private async void DownloadAudio(int position, string path)
@@ -133,6 +143,8 @@ namespace Opus.Api.Services
if (position < 0 || position > queue.Count || queue[position].State != DownloadState.None)
return;
System.Console.WriteLine("&Downloading audio of: " + queue[position].Name);
queue[position].State = DownloadState.Initialization;
UpdateList(position);
const string permission = Manifest.Permission.WriteExternalStorage;
@@ -270,7 +282,7 @@ namespace Opus.Api.Services
meta.Tag.Album = title + " - " + artist;
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();
Bitmap bitmap = Picasso.With(Application.Context).Load(await YoutubeManager.GetBestThumb(thumbnails)).Transform(new RemoveBlackBorder(true)).MemoryPolicy(MemoryPolicy.NoCache).Get();
byte[] data;
using (var MemoryStream = new MemoryStream())
{

View File

@@ -92,10 +92,11 @@ namespace Opus.Api
/// <param name="items"></param>
public static void Download(Song[] items)
{
string[] names = items.ToList().Where(x => x.LocalID == -1).ToList().ConvertAll(x => x.Title).ToArray();
string[] videoIDs = items.ToList().Where(x => x.LocalID == -1).ToList().ConvertAll(x => x.YoutubeID).ToArray();
string[] names = items.ToList().Where(x => x.LocalID == -1 || x.LocalID == 0).ToList().ConvertAll(x => x.Title).ToArray();
string[] videoIDs = items.ToList().Where(x => x.LocalID == -1 || x.LocalID == 0).ToList().ConvertAll(x => x.YoutubeID).ToArray();
DownloadFiles(names, videoIDs);
if(names.Count() > 0)
DownloadFiles(names, videoIDs);
}
/// <summary>
@@ -112,7 +113,8 @@ namespace Opus.Api
files.Add(new DownloadFile(names[i], videoIDs[i], null));
}
await DownloadFiles(files);
if(files.Count > 0)
await DownloadFiles(files);
}
public static async Task DownloadFiles(IEnumerable<DownloadFile> files)
@@ -123,10 +125,14 @@ namespace Opus.Api
if (!await MainActivity.instance.GetWritePermission())
return;
Toast.MakeText(MainActivity.instance, Resource.String.downloading, ToastLength.Short).Show();
await Downloader.Init();
Console.WriteLine("&Trying to download " + files.Count());
Console.WriteLine("&First item: " + files.First().Name);
Downloader.queue.AddRange(files);
Downloader.instance.StartDownload();
Console.WriteLine("&Downloader started");
}
/// <summary>

View File

@@ -195,7 +195,10 @@ namespace Opus
if(SearchableActivity.instance.SearchQuery != null && SearchableActivity.instance.SearchQuery != "")
{
if (YoutubeSearch.instances == null || SearchableActivity.instance.SearchQuery != YoutubeSearch.instances[0].querryType) //We don't want to redo the query if the user already searched for the exact same query.
{
HideFilter();
SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(SearchableActivity.instance.SearchQuery, 0)).AddToBackStack("Youtube").Commit();
}
}
SearchableActivity.instance = null;
}
@@ -392,7 +395,7 @@ namespace Opus
searchItem.CollapseActionView();
}
public void HideSearch()
public void HideFilter()
{
if (menu == null)
return;
@@ -408,7 +411,7 @@ namespace Opus
item.CollapseActionView();
}
public void DisplaySearch()
public void DisplayFilter()
{
var item = menu.FindItem(Resource.Id.filter);
item.SetVisible(true);
@@ -465,7 +468,7 @@ namespace Opus
return;
}
HideSearch();
HideFilter();
fragment = Home.NewInstance();
break;
@@ -477,7 +480,7 @@ namespace Opus
return;
}
DisplaySearch();
DisplayFilter();
fragment = Pager.NewInstance(0, 0);
break;
@@ -488,7 +491,7 @@ namespace Opus
return;
}
HideSearch();
HideFilter();
fragment = Playlist.NewInstance();
break;
}

View File

@@ -38,7 +38,7 @@ namespace Opus.Fragments
}
MainActivity.instance.contentRefresh.Refresh += OnRefresh;
MainActivity.instance.DisplaySearch();
MainActivity.instance.DisplayFilter();
MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(true);
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
@@ -81,7 +81,7 @@ namespace Opus.Fragments
Activity.FindViewById(Resource.Id.playlistButtons).Visibility = ViewStates.Visible;
Activity.FindViewById<RelativeLayout>(Resource.Id.playlistHeader).Visibility = ViewStates.Gone;
MainActivity.instance.HideSearch();
MainActivity.instance.HideFilter();
MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(false);
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(false);
MainActivity.instance.SupportActionBar.SetDisplayShowTitleEnabled(false);

View File

@@ -38,7 +38,7 @@ namespace Opus.Fragments
MainActivity.instance.SupportActionBar.SetDisplayShowTitleEnabled(true);
MainActivity.instance.FindViewById(Resource.Id.toolbarLogo).Visibility = ViewStates.Gone;
MainActivity.instance.DisplaySearch();
MainActivity.instance.DisplayFilter();
}
public override void OnDestroy()
@@ -183,7 +183,7 @@ namespace Opus.Fragments
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(false);
MainActivity.instance.SupportActionBar.SetDisplayShowTitleEnabled(false);
MainActivity.instance.FindViewById(Resource.Id.toolbarLogo).Visibility = ViewStates.Visible;
MainActivity.instance.HideSearch();
MainActivity.instance.HideFilter();
base.OnDestroyView();
}
}

View File

@@ -150,7 +150,7 @@ namespace Opus.Fragments
Browse.instance.focused = true;
FolderBrowse.instance.IsFocused = false;
MainActivity.instance.DisplaySearch();
MainActivity.instance.DisplayFilter();
}
else if (position == 1)
{
@@ -159,7 +159,7 @@ namespace Opus.Fragments
Browse.instance.focused = false;
FolderBrowse.instance.IsFocused = true;
MainActivity.instance.HideSearch();
MainActivity.instance.HideFilter();
}
}
else if (YoutubeSearch.instances != null)

View File

@@ -55,7 +55,7 @@ namespace Opus.Fragments
MainActivity.instance.contentRefresh.Refresh += OnRefresh;
MainActivity.instance.AddFilterListener(Search);
MainActivity.instance.DisplaySearch();
MainActivity.instance.DisplayFilter();
MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(true);
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
@@ -145,7 +145,7 @@ namespace Opus.Fragments
{
Activity.FindViewById<RelativeLayout>(Resource.Id.playlistHeader).Visibility = ViewStates.Gone;
MainActivity.instance.HideSearch();
MainActivity.instance.HideFilter();
MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(false);
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(false);
MainActivity.instance.SupportActionBar.SetDisplayShowTitleEnabled(false);

View File

@@ -437,6 +437,7 @@ namespace Opus
}),
new BottomSheetAction(Resource.Drawable.Download, Resources.GetString(Resource.String.download), (sender, eventArg) =>
{
Console.WriteLine("&Trying to download " + item.Title);
YoutubeManager.Download(new[]{ item });
bottomSheet.Dismiss();
}),