private void calculateTimeRemaining(DownloadProgress progress) { DownloadItem item = DownloadSessionMetadata.GetDownloadItem(progress.Url.ToString()); if (item == null) { return; } if (!item.TimeStarted.HasValue) { item.TimeStarted = DateTime.UtcNow; } try { var timeElapsed = DateTime.UtcNow.Subtract(item.TimeStarted.Value); var lastSpeed = progress.DownloadedLength / timeElapsed.TotalSeconds; progress.ExpectedDuration = (long)((progress.TotalLength / lastSpeed) * 1000); progress.DownloadedDuration = (long)timeElapsed.TotalMilliseconds; progress.Percent = (double)progress.DownloadedLength / progress.TotalLength; progress.Id = item.Id; DownloadSessionMetadata.SaveDownloadItem(item); } catch (Exception ex) { Logger.Log("ERROR: calculateTimeRemaining: " + ex); } }
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)); }