public async Task <Tuple <bool, string> > Download(DownloadItem item) { Logger.Log("Adding item for downloading: ID: " + item.Id); var downloadItem = await LibraryClient.GetDownload(item.Id); Logger.Log("Item download requested from server"); if (downloadItem != null) { Logger.Log("Checking available storage"); var canStore = await canStoreOnDevice(downloadItem); Logger.Log("Available storage checked"); if (!canStore) { return(Tuple.Create(false, downloadItem.Url)); } item.Url = downloadItem.Url; item.Headers = downloadItem.Headers; downloadItem.FileName = item.FileName; await DownloadDb(downloadItem); return(Tuple.Create(true, item.Url)); } Logger.Log("ERROR: Failed to start downloading of item: ID: " + item.Id + ". FileName: " + item.FileName); return(Tuple.Create(true, string.Empty)); }
public async Task <Tuple <bool, string> > Download(DownloadItem item) { Logger.Log("Adding item for downloading: ID: " + item.Id); var downloadItem = await LibraryClient.GetDownload(item.Id); Logger.Log("Item download requested from server"); if (downloadItem != null) { Logger.Log("Checking available storage"); var canStore = await canStoreOnDevice(downloadItem); Logger.Log("Available storage checked"); if (!canStore) { return(Tuple.Create(false, downloadItem.Url)); } item.Url = downloadItem.Url; item.Headers = downloadItem.Headers; using (var url = NSUrl.FromString(item.Url)) using (var request = new NSMutableUrlRequest(url)) { List <NSHttpCookie> cookies = new List <NSHttpCookie>(); foreach (var header in item.Headers) { cookies.Add(new NSHttpCookie(header.Key, header.Value)); } request.Headers = NSHttpCookie.RequestHeaderFieldsWithCookies(cookies.ToArray()); DownloadSessionMetadata.SaveDownloadItem(item); if ((RestService.Instance.User != null) && !string.IsNullOrEmpty(RestService.Instance.User.Email)) { LocalLibraryService.Instance.CreateCloudItemId(item.Id, RestService.Instance.User.Email); } CreateSession(sessionID); lock (syncRoot) { if (session != null) { var task = session.CreateDownloadTask(request); task.Resume(); } else { Logger.Log("ERROR: Failed to start downloading because session is NULL"); } } Logger.Log("Item added to the download queue: ID: " + item.Id + " FileName: " + item.FileName + " URL:" + item.Url); return(Tuple.Create(true, item.Url)); } } else { Logger.Log("ERROR: Failed to start downloading of item: ID: " + item.Id + ". FileName: " + item.FileName); } return(Tuple.Create(true, string.Empty)); }