コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }