public override IEnumerable <Item> Perform(IEnumerable <Item> items, IEnumerable <Item> modItems) { TransmissionAPI api = TransmissionPlugin.getTransmission(); // Operation is common for all files. TransmissionAPI.FileOperation operation = new TransmissionAPI.FileOperation(true, null); // Group selected items by owner torrent. var files_by_torrent = items .Cast <ITorrentEntry>() .GroupBy( item => item.Torrent, (torrent, entries) => new { Torrent = torrent, Files = entries.SelectMany(entry => entry.GetFiles()) } ); // Perform action for each torrent separately. foreach (var group in files_by_torrent) { var operations = group.Files.ToDictionary(f => f.Index, f => operation); api.SetTorrent(group.Torrent.HashString, null, null, null, null, null, operations); } yield break; }
public override IEnumerable <Item> Perform(IEnumerable <Item> items, IEnumerable <Item> modItems) { TransmissionAPI.FilePriority priority = (modItems.First() as PriorityItem).Value; TransmissionAPI.FileOperation operation = new TransmissionAPI.FileOperation(null, priority); // Group torrent entries by torrent. var files_by_torrent = items .Cast <ITorrentEntry>() .GroupBy( item => item.Torrent, (torrent, entries) => new { Torrent = torrent, Files = entries.SelectMany(entry => entry.GetFiles()) } ); TransmissionAPI api = TransmissionPlugin.getTransmission(); // Expand entries for each torrent into set of torrent file entries. // Perform action for each torrent separately. foreach (var group in files_by_torrent) { var operations = group.Files.ToDictionary(f => f.Index, f => operation); api.SetTorrent(group.Torrent.HashString, null, null, null, null, null, operations); } yield break; }
public override IEnumerable <Item> Perform(IEnumerable <Item> items, IEnumerable <Item> modItems) { TransmissionAPI api = TransmissionPlugin.getTransmission(); var hashes = items.Cast <TorrentItem>().Select(t => t.HashString); api.VerifyTorrents(hashes); return(null); }
public override void UpdateItems() { Log <TorrentItemSource> .Debug("Updating torrents list"); // Clear current torrents list. _torrents.Clear(); TransmissionAPI api = TransmissionPlugin.getTransmission(); foreach (TransmissionAPI.TorrentInfo t in api.GetAllTorrents()) { Log <TorrentItemSource> .Debug("Torrent: {0}", t.Name); TorrentItem torrent = new TorrentItem(t); // Transmission returns files as flat list with full names, this map // is used to organize files into hierarchy. // It maps directory path to directory item. Dictionary <string, TorrentDirectoryItem> dirs = new Dictionary <string, TorrentDirectoryItem>(); dirs.Add("", torrent.Root); int index = 0; // File index within list. foreach (TransmissionAPI.TorrentFileInfo f in t.Files) { // Split path and name. int sep_pos = f.Name.LastIndexOf('/'); string name = f.Name.Substring(sep_pos + 1); string path = f.Name.Substring(0, sep_pos == -1 ? 0 : sep_pos); Log <TorrentItemSource> .Debug("File {0} in dir {1}", name, path); TorrentDirectoryItem dir = FindOrCreateDirectory(path, dirs); dir.Files.Add(new TorrentFileItem(torrent, index, dir, name, f)); ++index; } _torrents.Add(torrent); } }
public override IEnumerable <Item> Perform(IEnumerable <Item> items, IEnumerable <Item> modItems) { int?speed = null; // Get speed item, it can be either ITextItem or PredefinedSpeed. Item modItem = modItems.First(); if (modItem is PredefinedSpeed) { speed = ((PredefinedSpeed)modItem).Value; } else { string speed_str = ((ITextItem)modItem).Text; try { // Try to parse entered speed value. speed = Utils.ParseSpeed(speed_str); } catch (ArgumentException) { Log <TransmissionPlugin> .Debug("Invalid speed string: {0}", speed_str); // Show notification about invalid speed value with some hints on // accepted formats. string message = AddinManager.CurrentLocalizer.GetString( "Can't recognize \"{0}\" as speed\nUse values like: 100k, 50 kb, 20m, 10 mib" ); Services.Notifications.Notify("Transmission", string.Format(message, speed_str), "transmission"); } } // If speed is recognized successfully, set speed limit and update item. if (speed.HasValue) { TransmissionAPI api = TransmissionPlugin.getTransmission(); IEnumerable <TorrentItem> torrents = items.Cast <TorrentItem>(); SetSpeedLimit(api, torrents, speed.Value); } yield break; }