Пример #1
0
        public FileToPost(Settings configuration, WatchFolderSettings folderConfiguration, FileInfo fileToPost)
        {
            this.configuration = configuration;
            this.folderConfiguration = folderConfiguration;
            partSize = configuration.YEncPartSize;

            File = fileToPost;
            DetermineTotalParts();
        }
Пример #2
0
 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);
 }
Пример #3
0
        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();
        }
Пример #4
0
        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;
        }
Пример #5
0
 public UsenetPoster(Settings configuration, WatchFolderSettings folderConfiguration)
 {
     this.configuration = configuration;
     this.folderConfiguration = folderConfiguration;
 }
Пример #6
0
        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();
        }
Пример #7
0
 public WatchFolder(CloudMediaContext context, IEnumerable <IAsset> selectedassets, WatchFolderSettings watchfoldersettings)
 {
     InitializeComponent();
     this.Icon            = Bitmaps.Azure_Explorer_ico;
     _context             = context;
     _WatchFolderSettings = watchfoldersettings;
     _SelectedAssets      = selectedassets;
 }
Пример #8
0
        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);
                        }
                    }
                }
            }
        }
Пример #9
0
 public UsenetPoster(Settings configuration, WatchFolderSettings folderConfiguration)
 {
     this.configuration       = configuration;
     this.folderConfiguration = folderConfiguration;
 }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }