public FileToPost(Settings configuration, WatchFolderSettings folderConfiguration, FileInfo fileToPost) { this.configuration = configuration; this.folderConfiguration = folderConfiguration; partSize = configuration.YEncPartSize; File = fileToPost; DetermineTotalParts(); }
public PostingThread(Settings configuration, WatchFolderSettings folderConfiguration, NewsHostConnectionInfo connectionInfo, Queue<nntpMessage> messageQueue) { _configuration = configuration; _folderConfiguration = folderConfiguration; _connectionInfo = connectionInfo; _messageQueue = messageQueue; MyTask = new Task(PostingTask, TaskCreationOptions.LongRunning); }
static void Main(string[] args) { var settings = new Settings(); settings.NewsGroupAddress = "Address of news host"; settings.NewsGroupPort = 443; settings.NewsGroupUsername = "******"; settings.NewsGroupPassword = "******"; settings.NewsGroupUseSsl = true; settings.ObfuscatedNotificationUrl = "https://apiserver/notify?apikey=etc"; settings.SearchUrl = "https://apisever/search?apikey=etc"; settings.MaxConnectionCount = 10; settings.WorkingFolderString = "working"; settings.NzbOutputFolderString = ""; settings.BackupFolderString = "backup"; settings.MaxRepostCount = 3; settings.PostFailedFolderString = "uploadfailed"; settings.RarLocation = ""; settings.ParLocation = ""; settings.MkvPropEditLocation = ""; settings.FFmpegLocation = ""; settings.RemoveAfterVerify = true; settings.FilesystemCheckIntervalMillis = 5000; settings.FilesystemCheckTesholdMinutes = 5; settings.AutoposterIntervalMillis = 5000; settings.NotifierIntervalMinutes = 5; settings.VerifierIntervalMinutes = 15; settings.VerifySimilarityPercentageTreshold = 95; settings.RepostAfterMinutes = 240; settings.MaxRetryCount = 3; settings.InactiveProcessTimeout = 5; settings.YEncLineSize = 128; settings.YEncLinesPerMessage = 6000; settings.DatabaseFile = ""; settings.RarNParSettings.Add(new RarNParSetting { FromSize = 0, RarSize = 15, Par2Percentage = 10 }); settings.RarNParSettings.Add(new RarNParSetting { FromSize = 1024, RarSize = 50, Par2Percentage = 10 }); settings.RarNParSettings.Add(new RarNParSetting { FromSize = 5120, RarSize = 1000, Par2Percentage = 5 }); var watchfolder = new WatchFolderSettings { ShortName = "Default", PathString = "watch", StripFileMetadata = false, UseObfuscation = false, FromAddress = "*****@*****.**", PostTag = "", PreTag = "", ApplyRandomPassword = false, RarPassword="" }; watchfolder.TargetNewsgroups.Add("alt.binaries.multimedia"); settings.WatchFolderSettings.Add(watchfolder); settings.SaveSettings(); }
public nntpMessagePoster(Settings configuration, WatchFolderSettings folderConfiguration) { this.configuration = configuration; this.folderConfiguration = folderConfiguration; connectionInfo = new NewsHostConnectionInfo() { Address = configuration.NewsGroupAddress, Port = configuration.NewsGroupPort, UseSsl = configuration.NewsGroupUseSsl, Username = configuration.NewsGroupUsername, Password = configuration.NewsGroupPassword }; MessagesToPost = new Queue<nntpMessage>(); PostingThreads = ConstructPostingThreads(); IsPosting = false; }
public UsenetPoster(Settings configuration, WatchFolderSettings folderConfiguration) { this.configuration = configuration; this.folderConfiguration = folderConfiguration; }
static void Main(string[] args) { var settings = new Settings(); settings.NewsGroupAddress = "Address of news host"; settings.NewsGroupPort = 443; settings.NewsGroupUsername = "******"; settings.NewsGroupPassword = "******"; settings.NewsGroupUseSsl = true; settings.ObfuscatedNotificationUrl = "https://apiserver/notify?apikey=etc"; settings.SearchUrl = "https://apisever/search?apikey=etc"; settings.MaxConnectionCount = 10; settings.WorkingFolderString = "working"; settings.NzbOutputFolderString = ""; settings.BackupFolderString = "backup"; settings.MaxRepostCount = 3; settings.PostFailedFolderString = "uploadfailed"; settings.RarLocation = ""; settings.ParLocation = ""; settings.MkvPropEditLocation = ""; settings.FFmpegLocation = ""; settings.RemoveAfterVerify = true; settings.FilesystemCheckIntervalMillis = 5000; settings.FilesystemCheckTesholdMinutes = 5; settings.AutoposterIntervalMillis = 5000; settings.NotifierIntervalMinutes = 5; settings.VerifierIntervalMinutes = 15; settings.VerifySimilarityPercentageTreshold = 95; settings.RepostAfterMinutes = 240; settings.MaxRetryCount = 3; settings.InactiveProcessTimeout = 5; settings.YEncLineSize = 128; settings.YEncLinesPerMessage = 6000; settings.DatabaseFile = ""; settings.RarNParSettings.Add(new RarNParSetting { FromSize = 0, RarSize = 15, Par2Percentage = 10 }); settings.RarNParSettings.Add(new RarNParSetting { FromSize = 1024, RarSize = 50, Par2Percentage = 10 }); settings.RarNParSettings.Add(new RarNParSetting { FromSize = 5120, RarSize = 1000, Par2Percentage = 5 }); var watchfolder = new WatchFolderSettings { ShortName = "Default", PathString = "watch", StripFileMetadata = false, UseObfuscation = false, FromAddress = "*****@*****.**", PostTag = "", ApplyRandomPassword = false, RarPassword = "" }; watchfolder.TargetNewsgroups.Add("alt.binaries.multimedia"); settings.WatchFolderSettings.Add(watchfolder); settings.SaveSettings(); }
public WatchFolder(CloudMediaContext context, IEnumerable <IAsset> selectedassets, WatchFolderSettings watchfoldersettings) { InitializeComponent(); this.Icon = Bitmaps.Azure_Explorer_ico; _context = context; _WatchFolderSettings = watchfoldersettings; _SelectedAssets = selectedassets; }
private void PostRelease(WatchFolderSettings folderConfiguration, UploadEntry nextUpload, FileSystemInfo toUpload, Boolean isDirectory) { nextUpload.UploadAttempts++; if (folderConfiguration.CleanName) { nextUpload.CleanedName = ApplyTags(CleanName(StripNonAscii(toUpload.NameWithoutExtension())), folderConfiguration); } else { nextUpload.CleanedName = ApplyTags(StripNonAscii(toUpload.NameWithoutExtension()), folderConfiguration); } if (folderConfiguration.UseObfuscation) { nextUpload.ObscuredName = Guid.NewGuid().ToString("N"); nextUpload.NotifiedIndexerAt = null; } DBHandler.Instance.UpdateUploadEntry(nextUpload); //This ensures we already notify the indexer of our obfuscated post before we start posting. UsenetPoster poster = new UsenetPoster(configuration, folderConfiguration); FileSystemInfo toPost = null; try { if (isDirectory) { toPost = PrepareDirectoryForPosting(folderConfiguration, nextUpload, (DirectoryInfo)toUpload); } else { toPost = PrepareFileForPosting(folderConfiguration, nextUpload, (FileInfo)toUpload); } String password = folderConfiguration.RarPassword; if (folderConfiguration.ApplyRandomPassword) { password = Guid.NewGuid().ToString("N"); } var nzbFile = poster.PostToUsenet(toPost, password, false); nextUpload.NzbContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine + nzbFile.ToString(); if (configuration.NzbOutputFolder != null) { FileInfo file = new FileInfo(Path.Combine(configuration.NzbOutputFolder.FullName, nextUpload.CleanedName + ".nzb")); using (TextWriter tw = new StreamWriter(file.OpenWrite())) { tw.Write(nextUpload.NzbContents); } } nextUpload.RarPassword = password; nextUpload.UploadedAt = DateTime.UtcNow; nextUpload.Move(configuration, Location.Backup); DBHandler.Instance.UpdateUploadEntry(nextUpload); log.InfoFormat("[{0}] was uploaded as obfuscated release [{1}] to usenet." , nextUpload.CleanedName, nextUpload.ObscuredName); } finally { if (toPost != null) { toPost.Refresh(); if (toPost.Exists) { FileAttributes attributes = File.GetAttributes(toPost.FullName); if (attributes.HasFlag(FileAttributes.Directory)) { Directory.Delete(toPost.FullName, true); } else { File.Delete(toPost.FullName); } } } } }
private void AddItemToPostingDb(FileSystemInfo toPost, FileSystemInfo nfoFile, WatchFolderSettings folderConfiguration) { #pragma warning disable IDE0017 // Simplify object initialization UploadEntry newUploadentry = new UploadEntry(); #pragma warning restore IDE0017 // Simplify object initialization newUploadentry.WatchFolderShortName = folderConfiguration.ShortName; newUploadentry.CreatedAt = DateTime.UtcNow; newUploadentry.Name = toPost.Name; newUploadentry.RemoveAfterVerify = configuration.RemoveAfterVerify; newUploadentry.Cancelled = false; newUploadentry.Size = toPost.Size(); newUploadentry.PriorityNum = folderConfiguration.Priority; newUploadentry.CurrentLocation = Location.Queue; newUploadentry.HasNfo = nfoFile != null && nfoFile.Exists; if (newUploadentry.Size == 0) { log.ErrorFormat("File added with a size of 0 bytes, This cannot be uploaded! File name: [{0}]", toPost.FullName); return; } DBHandler.Instance.AddNewUploadEntry(newUploadentry); }
public void StartWatchFolder(string folderName) { _logHelper.WriteEntry(String.Format("Starting WatchFolder ServiceViewModel for {0}", folderName), MessageType.Information); WatchFolderSettings watchFolderSettings = _watchFolderSettingsHelper.Settings.WatchFoldersSettings[folderName]; // load task engines var pluginLoader = new PluginLoader <IPlugin>(); var taskFactory = new TaskFactory(); pluginLoader.LoadPlugins(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)); foreach (TaskEngineSettings taskEngineSettings in watchFolderSettings.TaskEnginesSettings) { taskFactory.AddToTaskEngines((ITaskEngine)pluginLoader.GetPlugin(taskEngineSettings.TypeName)); } _logHelper.WriteEntry(String.Format("{0} Task Engines detected for WatchFolder ServiceViewModel for {1}", taskFactory.TaskEngines.Count, folderName), MessageType.Information); if (taskFactory.TaskEngines.Count == 0) { _logHelper.WriteEntry(String.Format("{0} Task Engines detected for WatchFolder ServiceViewModel for {1}. Stopping", taskFactory.TaskEngines.Count, folderName), MessageType.Warning); return; } if (!_queues.ContainsKey(folderName)) { _queues[folderName] = new SyncItemQueue <FolderWatcherQueueItem>(); } else { _queues.Add(folderName, new SyncItemQueue <FolderWatcherQueueItem>()); } if (_exitThreadEvents.ContainsKey(folderName)) { _exitThreadEvents[folderName] = new ManualResetEvent(false); } else { _exitThreadEvents.Add(folderName, new ManualResetEvent(false)); } //deserialise queue from settings foreach (QueueStateItem queueItem in watchFolderSettings.Queue) { _queues[folderName].EnqueueSync(new FolderWatcherQueueItem { Path = queueItem.Path, Time = queueItem.DateTime }); } //var transcodeEngine = new FlacToMp3TranscodeEngine(); //var copyFolderArtEngine = new CopyFolderArtEngine(); //taskFactory.AddToTaskEngines(transcodeEngine); //taskFactory.AddToTaskEngines(copyFolderArtEngine); var scheduleTicker = new ScheduleTicker(watchFolderSettings.ScheduleSettings.GetSchedule(), watchFolderSettings.TimerInterval); var folderWatcher = new FolderWatcher(_queues[folderName], _exitThreadEvents[folderName], folderName, "*.*", true); var taskScheduler = new TaskScheduler(_queues[folderName], _exitThreadEvents[folderName], taskFactory, watchFolderSettings.InitialTaskDelay, scheduleTicker); if (!_producerThreads.ContainsKey(watchFolderSettings.FolderName)) { _producerThreads.Add(folderName, new Thread(folderWatcher.ThreadRun) { Name = String.Format("ProducerThread for {0}", watchFolderSettings.FolderName) }); } if (!_consumerThreads.ContainsKey(watchFolderSettings.FolderName)) { _consumerThreads.Add(folderName, new Thread(taskScheduler.ThreadRun) { Name = String.Format("ConsumerThread for {0}", watchFolderSettings.FolderName) }); } _producerThreads[folderName].Start(); _consumerThreads[folderName].Start(); _logHelper.WriteEntry(String.Format("Started WatchFolder ServiceViewModel for {0}", folderName), MessageType.Information); }