예제 #1
0
        public void DownloadMetadata_SameTwice()
        {
            var link = MagnetLink.Parse("magnet:?xt=urn:btih:1234512345123451234512345123451234512345");

            using var engine = new ClientEngine(EngineSettingsBuilder.CreateForTests());
            var first = engine.DownloadMetadataAsync(link, CancellationToken.None);

            Assert.ThrowsAsync <TorrentException> (() => engine.DownloadMetadataAsync(link, CancellationToken.None));
        }
예제 #2
0
        public void DownloadMetadata_Cancelled()
        {
            var cts    = new CancellationTokenSource();
            var engine = new ClientEngine(EngineSettingsBuilder.CreateForTests());
            var task   = engine.DownloadMetadataAsync(new MagnetLink(new InfoHash(new byte[20])), cts.Token);

            cts.Cancel();
            Assert.ThrowsAsync <OperationCanceledException> (() => task);
        }
예제 #3
0
        public async void Download(SearchResponse sr, long chatId)
        {
            System.Console.WriteLine($"downloading {sr.Title}...");


            //services
            var transmission = _scope.CreateScope().ServiceProvider.GetRequiredService <TransmissionService>().Client;
            var database     = _scope.CreateScope().ServiceProvider.GetRequiredService <DatabaseContext>();

            System.Console.WriteLine(Directory.GetCurrentDirectory());

            var torrentSettings = new TorrentSettings();

            NewTorrent torrent;

            System.Console.WriteLine("trying with magnet");
            var metadata = await _engine.DownloadMetadataAsync(MagnetLink.Parse(sr.MagnetUrl), CancellationToken.None);

            System.Console.WriteLine("downloaded metadata");

            torrent = new NewTorrent()
            {
                Metainfo = Convert.ToBase64String(metadata)
            };


            var torrentInfo = transmission.TorrentAdd(torrent);

            if (database.ActiveTorrents.Any(at => at.TorrentId == torrentInfo.ID))
            {
                return;
            }

            var activeTorrent = new ActiveTorrent()
            {
                ChatId     = chatId,
                TorrentId  = torrentInfo.ID,
                IsFinished = false,
            };

            database.ActiveTorrents.Add(activeTorrent);
            database.SaveChanges();
        }