void GetAllFilePaths(string directory, MonoTorrentCollection <string> paths) { var subs = Directory.GetDirectories(directory); foreach (var path in subs) { if (ignoreHiddenFiles) { var info = new DirectoryInfo(path); if ((info.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } } GetAllFilePaths(path, paths); } subs = Directory.GetFiles(directory); foreach (var path in subs) { if (ignoreHiddenFiles) { var info = new FileInfo(path); if ((info.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } } paths.Add(path); } }
///<summary> /// Calculates the approximate size of the final .torrent in bytes ///</summary> public long GetSize() { var paths = new MonoTorrentCollection <string>(); if (Directory.Exists(path)) { GetAllFilePaths(path, paths); } else if (File.Exists(path)) { paths.Add(path); } else { return(64 * 1024); } long size = 0; for (var i = 0; i < paths.Count; i++) { size += new FileInfo(paths[i]).Length; } return(size); }
protected void LoadInternal(BEncodedDictionary torrentInformation) { Check.TorrentInformation(torrentInformation); torrentPath = ""; try { foreach (var keypair in torrentInformation) { switch (keypair.Key.Text) { case ("announce"): // Ignore this if we have an announce-list if (torrentInformation.ContainsKey("announce-list")) { break; } announceUrls.Add(new MonoTorrentCollection <string>()); announceUrls[0].Add(keypair.Value.ToString()); break; case ("creation date"): try { try { creationDate = creationDate.AddSeconds(long.Parse(keypair.Value.ToString())); } catch (Exception e) { if (e is ArgumentOutOfRangeException) { creationDate = creationDate.AddMilliseconds(long.Parse(keypair.Value.ToString())); } else { throw; } } } catch (Exception e) { if (e is ArgumentOutOfRangeException) { throw new BEncodingException("Argument out of range exception when adding seconds to creation date.", e); } else if (e is FormatException) { throw new BEncodingException(String.Format("Could not parse {0} into a number", keypair.Value), e); } else { throw; } } break; case ("nodes"): nodes = (BEncodedList)keypair.Value; break; case ("comment.utf-8"): if (keypair.Value.ToString().Length != 0) { comment = keypair.Value.ToString(); // Always take the UTF-8 version } break; // even if there's an existing value case ("comment"): if (String.IsNullOrEmpty(comment)) { comment = keypair.Value.ToString(); } break; case ("publisher-url.utf-8"): // Always take the UTF-8 version publisherUrl = keypair.Value.ToString(); // even if there's an existing value break; case ("publisher-url"): if (String.IsNullOrEmpty(publisherUrl)) { publisherUrl = keypair.Value.ToString(); } break; case ("azureus_properties"): azureusProperties = keypair.Value; break; case ("created by"): createdBy = keypair.Value.ToString(); break; case ("encoding"): encoding = keypair.Value.ToString(); break; case ("info"): using (var s = HashAlgoFactory.Create <SHA1>()) infoHash = new InfoHash(s.ComputeHash(keypair.Value.Encode())); ProcessInfo(((BEncodedDictionary)keypair.Value)); break; case ("name"): // Handled elsewhere break; case ("announce-list"): if (keypair.Value is BEncodedString) { break; } var announces = (BEncodedList)keypair.Value; for (var j = 0; j < announces.Count; j++) { if (announces[j] is BEncodedList) { var bencodedTier = (BEncodedList)announces[j]; var tier = new List <string>(bencodedTier.Count); for (var k = 0; k < bencodedTier.Count; k++) { tier.Add(bencodedTier[k].ToString()); } Toolbox.Randomize <string>(tier); var collection = new MonoTorrentCollection <string>(tier.Count); for (var k = 0; k < tier.Count; k++) { collection.Add(tier[k]); } if (collection.Count != 0) { announceUrls.Add(collection); } } else { throw new BEncodingException(String.Format("Non-BEncodedList found in announce-list (found {0})", announces[j].GetType())); } } break; case ("httpseeds"): // This form of web-seeding is not supported. break; case ("url-list"): if (keypair.Value is BEncodedString) { getRightHttpSeeds.Add(((BEncodedString)keypair.Value).Text); } else if (keypair.Value is BEncodedList) { foreach (BEncodedString str in (BEncodedList)keypair.Value) { GetRightHttpSeeds.Add(str.Text); } } break; default: break; } } } catch (Exception e) { if (e is BEncodingException) { throw; } else { throw new BEncodingException("", e); } } }