public static PostDownloadLinks Create(IEnumerable <string> links) { PostDownloadLinks postDownloadLinks = new PostDownloadLinks(); postDownloadLinks.AddItem(); foreach (string link in links) { postDownloadLinks.AddServer(DownloadFileServerInfo.GetServerNameFromLink(link)); postDownloadLinks.AddLink(link); } return(postDownloadLinks); }
private DownloadLinkRef GetNextDownloadLink(QueueDownloadFile queueDownloadFile) { if (queueDownloadFile.AllDownloadLinkTreated) { return(null); } int itemIndex = 0; foreach (DownloadItemLink itemLink in queueDownloadFile.DownloadItemLinks) { if (!itemLink.Downloaded) { if (!itemLink.NoDownloadLinkFound) { if (itemLink.SelectedServerIndex == -1) { var q = (from server in itemLink.ServerLinks select new { server = server, rate = DownloadFileServerInfo.GetLinkRate(server.Name) }).OrderBy(server => server.rate).Select(server => server.server); int serverIndex = 0; foreach (DownloadServerLink serverLink in q) { DownloadFilePartLink filePartLink = serverLink.FilePartLinks[0]; if (!UnprotectLink(queueDownloadFile, serverLink, filePartLink, 0)) { continue; } string debridedLink = null; string file = null; if (DebridLink(queueDownloadFile, itemLink, serverLink, filePartLink, out debridedLink, out file)) { itemLink.SelectedServerIndex = serverIndex; queueDownloadFile.Modified = true; return(new DownloadLinkRef { QueueDownloadFileId = queueDownloadFile.Id, ItemIndex = itemIndex, ServerIndex = serverIndex, FilePartIndex = 0, DebridedDownloadLink = debridedLink, File = file }); } serverIndex++; } itemLink.NoDownloadLinkFound = true; queueDownloadFile.UncompleteDownload = true; queueDownloadFile.Modified = true; string message = string.Format("can't find download link for item no {0}", itemIndex + 1); //pb.Trace.WriteLine("{0:dd-MM-yyyy HH:mm:ss} - {1,-50} - {2,-25} - file \"{3}\" key {4}", DateTime.Now, message, null, queueDownloadFile.File, queueDownloadFile.Key); pb.Trace.WriteLine("{0:dd-MM-yyyy HH:mm:ss} - {1,-50} - {2,-25} - directory \"{3}\" filename \"{4}\" key {5}", DateTime.Now, message, null, queueDownloadFile.Directory, queueDownloadFile.Filename, queueDownloadFile.Key); } else { DownloadServerLink serverLink = itemLink.ServerLinks[itemLink.SelectedServerIndex]; // dont use foreach because UnprotectLink() may change serverLink.FilePartLinks for (int filePartIndex = 0; filePartIndex < serverLink.FilePartLinks.Length; filePartIndex++) { DownloadFilePartLink filePartLink = serverLink.FilePartLinks[filePartIndex]; if (filePartLink.State != DownloadState.NotDownloaded) { continue; } string errorMessage = null; if (UnprotectLink(queueDownloadFile, serverLink, filePartLink, filePartIndex)) { string debridedLink = null; string file = null; if (DebridLink(queueDownloadFile, itemLink, serverLink, filePartLink, out debridedLink, out file)) { return(new DownloadLinkRef { QueueDownloadFileId = queueDownloadFile.Id, ItemIndex = itemIndex, ServerIndex = itemLink.SelectedServerIndex, FilePartIndex = filePartIndex, DebridedDownloadLink = debridedLink, File = file }); } else { errorMessage = "can't find download link"; } } else { errorMessage = "error unable to unprotect link"; } if (errorMessage != null) { queueDownloadFile.UncompleteDownload = true; queueDownloadFile.Modified = true; errorMessage = errorMessage + string.Format(" for item no {0} server no {1} part no {2}", itemIndex + 1, itemLink.SelectedServerIndex + 1, filePartIndex + 1); //pb.Trace.WriteLine("{0:dd-MM-yyyy HH:mm:ss} - {1,-50} - {2,-25} - link \"{3}\" file \"{4}\" key {5}", DateTime.Now, errorMessage, null, filePartLink.DownloadLink, queueDownloadFile.File, queueDownloadFile.Key); pb.Trace.WriteLine("{0:dd-MM-yyyy HH:mm:ss} - {1,-50} - {2,-25} - link \"{3}\" directory \"{4}\" filename \"{5}\" key {6}", DateTime.Now, errorMessage, null, filePartLink.DownloadLink, queueDownloadFile.Directory, queueDownloadFile.Filename, queueDownloadFile.Key); } } } } } itemIndex++; } queueDownloadFile.AllDownloadLinkTreated = true; queueDownloadFile.Modified = true; return(null); }
private DownloadItemLink[] CreateDownloadItemLinkArray() { //IRequestDownloadItemLink[] requestItemLinks = requestDownloadLinks.GetLinks(); //DownloadItemLink[] downloadItemLinks = new DownloadItemLink[downloadLinks.Length + 1]; //List<DownloadItemLink> downloadItemLinks = new List<DownloadItemLink>(); //for (int i1 = 0; i1 < downloadLinks.Length; i1++) //foreach (string link in downloadLinks) //{ //IRequestDownloadItemLink requestItemLink = requestItemLinks[i1]; DownloadItemLink downloadItemLink = new DownloadItemLink(); //downloadItemLink.Name = requestItemLink.GetName(); downloadItemLink.Downloaded = false; //IRequestDownloadServerLink[] requestFileLinks = requestItemLink.GetServerLinks(); downloadItemLink.ServerLinks = new DownloadServerLink[downloadLinks.Length + 1]; int i2 = 0; DownloadServerLink fileLink = new DownloadServerLink(); fileLink.Name = "DownloadedLink"; fileLink.FilePartLinks = new DownloadFilePartLink[1]; DownloadFilePartLink filePartLink = new DownloadFilePartLink(); filePartLink.Downloaded = false; filePartLink.DownloadLink = downloadLink; filePartLink.State = state; filePartLink.DownloadedFile = file; filePartLink.File = file; filePartLink.StartDownloadTime = startDownloadTime; filePartLink.EndDownloadTime = endDownloadTime; filePartLink.DownloadDuration = downloadDuration; fileLink.FilePartLinks[0] = filePartLink; downloadItemLink.ServerLinks[i2++] = fileLink; //for (int i2 = 0; i2 < requestFileLinks.Length; i2++) foreach (string link in downloadLinks) { //IRequestDownloadServerLink requestFileLink = requestFileLinks[i2]; fileLink = new DownloadServerLink(); //fileLink.Name = requestFileLink.GetName(); fileLink.Name = DownloadFileServerInfo.GetServerNameFromLink(link); //string[] filePartLinks = requestFileLink.GetFilePartLinks(); fileLink.FilePartLinks = new DownloadFilePartLink[1]; //for (int i3 = 0; i3 < filePartLinks.Length; i3++) //{ filePartLink = new DownloadFilePartLink(); filePartLink.Downloaded = false; filePartLink.DownloadLink = link; filePartLink.State = DownloadState.NotDownloaded; fileLink.FilePartLinks[0] = filePartLink; //} downloadItemLink.ServerLinks[i2++] = fileLink; } //downloadItemLinks.Add(downloadItemLink); //} return(new DownloadItemLink[] { downloadItemLink }); }