Пример #1
0
        static void Offline(List <Link> links, string path, Credential credential)
        {
            var count = 0;

            foreach (var link in links)
            {
                Console.Write("Adding " + link.name + " ... ");
                var list = Operation.QueryLinkFiles("magnet:?xt=urn:btih:" + link.hash, credential);
                if (!list.success)
                {
                    Console.WriteLine("Query magnet link failed.");
                    continue;
                }
                var res = Operation.AddOfflineTask("magnet:?xt=urn:btih:" + link.hash, path, credential, Enumerable.Range(1, list.files.Length).ToArray());
                if (!res.success)
                {
                    Console.WriteLine("Add offline task failed.");
                }
                else
                {
                    Console.WriteLine("Success with rapid = " + res.rapid_download);
                }
                if (res.success && res.rapid_download == 0)
                {
                    count++;
                    if (count >= 5)
                    {
                        Console.Write("Too many concurrent tasks, wait 3 seconds ... ");
                        Thread.Sleep(3000);
                        var tasks = Operation.GetOfflineList(credential).tasks.Where(t => t.status != 0).ToArray();
                        if (tasks.Length > 0)
                        {
                            Console.Write("Abort incomplete tasks ... ");
                            foreach (var task in tasks)
                            {
                                Operation.CancelOfflineTask(task.task_id, credential);
                            }
                        }
                        count = 0;
                        Console.WriteLine("Okay, move on.");
                    }
                }
            }
        }