private void AddSeries() { try { var asw = new WindowAddSeries {Top = this.Top + ( this.Height/2 ) - 30, Left = this.Left + ( this.Width/2 ) - 225}; asw.ShowDialog(); if ( Factory.Instance.AddSeriesName == null ) { return; } Directory.CreateDirectory( Factory.Instance.ScanLocation + "\\" + Factory.Instance.AddSeriesName ); Factory.Instance.Tvdb.downloads_series_data( Factory.Instance.AddSeriesName ); Thread.Sleep( 100 ); var newseries = new DirectoryItem {FullName = Factory.Instance.AddSeriesName, Path = Factory.Instance.ScanLocation + "\\" + Factory.Instance.AddSeriesName, Polling = true}; Factory.Instance.ItemProvider.insert_item_ordered( newseries ); var item = this.SeriesTreeView.ItemContainerGenerator.ContainerFromItem( newseries ) as TreeViewItem; if ( item == null ) { return; } item.IsSelected = true; item.BringIntoView(); Factory.Instance.SeriesAnalyzer.analyze_series_folder( newseries ); } catch ( Exception ex ) { Factory.Instance.LogLines.Enqueue( ex.Message ); Factory.Instance.LogLines.Enqueue( ex.StackTrace ); } }
private void clean_series_season_files( IDirectoryItem directory ) { foreach ( var subdirectory in directory.Items.OfType< IDirectoryItem >() ) { string seasonNum; try { seasonNum = subdirectory.FullName?.Length < 8 ? "99" : subdirectory.FullName?.Substring( 7 ).Trim(); } catch ( Exception ex ) { Factory.Instance.LogLines.Enqueue( ex.Message ); Factory.Instance.LogLines.Enqueue( ex.StackTrace ); Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = subdirectory, File = null, SuggestName = ""} ); seasonNum = "99"; } foreach ( var file in subdirectory.Items.OfType< IFileItem >() ) { if ( String.Compare( file.FullName, "Thumbs.db", StringComparison.Ordinal ) == 0 ) { Factory.Instance.ItemProvider.DirectoryDeletions.Enqueue( new DeletionUpdate {Directory = subdirectory, File = file} ); continue; } var test1 = @"^" + Regex.Escape( directory.FullName ) + @"\s+-\s+(" + seasonNum + @")x[0-9]{2}"; var test2 = @"^" + Regex.Escape( directory.FullName ) + @"\s+-\s+(" + seasonNum + @")xSpecial\s+[0-9]+"; if ( Regex.IsMatch( file.FullName, test1, RegexOptions.IgnoreCase ) || Regex.IsMatch( file.FullName, test2, RegexOptions.IgnoreCase ) ) { this.clean_series_season_files_check_episode_name( directory, subdirectory, file ); this.clean_series_season_file_check_extra( directory, subdirectory, file ); continue; } if ( Regex.IsMatch( file.FullName, @"^" + Regex.Escape( directory.FullName ) + @"\.? - (\[(.*?)\]).*?(\[(.*)\])", RegexOptions.IgnoreCase ) ) { continue; } if ( Regex.IsMatch( file.FullName, @"^" + Regex.Escape( directory.FullName ) + @".*" ) == false ) { Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = directory, File = file, SuggestName = ""} ); } else if ( Regex.IsMatch( file.FullName, @".*?(" + seasonNum + @")x([0-9]{2}|(" + seasonNum + @")xSpecial\s+?[0-9]+)" ) == false ) { const string stest1 = @".*?([0-9]+)x([0-9]{2})"; const string stest2 = @"([0-9]+)xSpecial\s+?([0-9]+)"; var match1 = Regex.Match( file.FullName, stest1 ); var match2 = Regex.Match( file.FullName, stest2 ); if ( !match1.Success && !match2.Success ) { Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = directory, File = file, SuggestName = ""} ); continue; } var seasonint = match1.Success ? match1.Groups[ 1 ].Value : match2.Groups[ 1 ].Value; var newdirectory = directory.Path + "\\Season " + seasonint; var newfilelocation = directory.Path + "\\Season " + seasonint + "\\" + file.FullName; Factory.Instance.ItemProvider.BadLocationFiles.Enqueue( new BadLocationUpdate {Directory = subdirectory, File = file, NewPath = newfilelocation} ); if ( Directory.Exists( newdirectory ) ) { continue; } var missingdirectory = new DirectoryItem {Parent = directory, FullName = "Season " + seasonint, Path = newdirectory}; var di = new DirectoryInsert {Directory = directory, SubDirectory = missingdirectory, Seasonnum = int.Parse( seasonint )}; Factory.Instance.ItemProvider.NewDirectoryUpdates.Enqueue( di ); } } this.clean_series_season_files_find_missing( directory, subdirectory ); this.clean_series_season_duplicates( directory ); } }
private void add_items() { try { foreach ( var dir in this._directoryInfo.GetDirectories() ) { var exists = this._directory == null ? Factory.Instance.ItemProvider.ContainsDirectory( dir.Name ) : this._directory.ContainsDirectory( dir.Name ); if ( exists != null ) { continue; } var item = new DirectoryItem {FullName = dir.Name, Path = dir.FullName, Parent = this._directory, Polling = true}; Factory.Instance.ItemProvider.insert_item_ordered_threadsafe( item ); Factory.Instance.ItemProvider.refresh_tree_directory( item, item.Path ); Factory.Instance.ItemProvider.folder_scan_update_threadsafe(); } foreach ( var file in this._directoryInfo.GetFiles() ) { var exists = this._directory == null ? Factory.Instance.ItemProvider.ContainsFile( file.Name ) : this._directory.ContainsFile( file.Name ); if ( exists != null ) { continue; } var shortname = file.Name; var extension = ""; if ( file.Name.Contains( "." ) ) { shortname = file.Name.Substring( 0, file.Name.LastIndexOf( ".", StringComparison.Ordinal ) ); extension = file.Name.Substring( file.Name.LastIndexOf( ".", StringComparison.Ordinal ) + 1 ); } var item = new FileItem { FullName = file.Name, ShortName = shortname, Extension = extension, Path = file.FullName, Parent = this._directory }; Factory.Instance.ItemProvider.insert_item_ordered_threadsafe( item ); Factory.Instance.ItemProvider.folder_scan_update_threadsafe(); } } catch ( Exception ex ) { Factory.Instance.LogLines.Enqueue( ex.Message ); Factory.Instance.LogLines.Enqueue( ex.StackTrace ); } }
private void clean_series_top_level_directories( IDirectoryItem directory ) { if ( directory?.Items == null ) { return; } foreach ( var inode in directory.Items.OfType< IDirectoryItem >() ) { if ( Regex.IsMatch( inode.FullName, @"^Season ([0-9]+)" ) ) { continue; } Factory.Instance.LogLines.Enqueue( @"Dirty directory name : " + inode.Path ); Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = inode, File = null, SuggestName = ""} ); } if ( Factory.Instance.Tvdb == null ) { return; } foreach ( var series in Factory.Instance.Tvdb.get_series() ) { if ( String.Compare( directory.FullName, series.get_name(), StringComparison.Ordinal ) != 0 ) { continue; } foreach ( var season in series.get_seasons() ) { var check = @"Season " + season.get_season_num(); if ( Factory.Instance.ItemProvider.contains_child( directory, check ) ) { continue; } var missingseason = new DirectoryItem {FullName = check, Path = directory.Path + "\\" + check, Missing = true, Parent = directory}; foreach ( var episode in season.get_episodes() ) { var epnum = season.get_season_num() + "x" + string.Format( "{0:00}", episode.get_episode_num() ); var fileitem = new FileItem {FullName = directory.FullName + " - " + epnum + " - " + episode.get_episode_name(), Missing = true, Parent = missingseason, Path = directory.Path + "\\" + check + "\\" + directory.FullName + " - " + epnum + " - " + episode.get_episode_name()}; missingseason.Items.Add( fileitem ); var torrent = this.clean_series_season_files_find_torrent( series.ImdbId, episode.get_episode_num(), season.get_season_num() ); if ( torrent.Epname != null && String.CompareOrdinal( torrent.Epname, "" ) != 0 ) { fileitem.Torrent = true; fileitem.TorrentLink = torrent.Magnetlink; } } var di = new DirectoryInsert {Directory = directory, SubDirectory = missingseason, Seasonnum = season.get_season_num()}; Factory.Instance.ItemProvider.NewDirectoryUpdates.Enqueue( di ); } break; } }