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; } }
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_season_files_find_missing( IDirectoryItem directory, IDirectoryItem subdirectory ) { if ( Factory.Instance.Tvdb == null ) { return; } int cSeasonNum; try { if ( subdirectory.FullName.ToLower().Contains( "season " ) == false ) { Factory.Instance.LogLines.Enqueue( "Unable to determine season number: " + subdirectory.Path ); Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = directory, File = null, SuggestName = ""} ); return; } if ( Regex.IsMatch( subdirectory.FullName.Substring( 7 ).Trim(), @"^\d+$", RegexOptions.IgnoreCase ) == false ) { Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = directory, File = null, SuggestName = ""} ); return; } cSeasonNum = int.Parse( subdirectory.FullName.Substring( 7 ).Trim() ); } catch ( Exception ex ) { Factory.Instance.LogLines.Enqueue( ex.Message ); Factory.Instance.LogLines.Enqueue( ex.StackTrace ); Factory.Instance.LogLines.Enqueue( "Unable to determine season number: " + subdirectory.Path ); Factory.Instance.ItemProvider.BadNameFiles.Enqueue( new BadNameUpdate {Directory = directory, File = null, SuggestName = ""} ); return; } var series = Factory.Instance.Tvdb.get_series_by_name( directory.FullName ); if ( series == null ) { return; } if ( series.has_seasons( cSeasonNum ) == false ) { return; } var episodes = series.get_season( cSeasonNum ).get_episodes(); foreach ( var episode in episodes ) { var epnum = cSeasonNum + "x" + string.Format( "{0:00}", episode.get_episode_num() ); var found = subdirectory.Items.OfType< IFileItem >().Any( file => Regex.IsMatch( file.FullName, ".*?" + epnum + ".*?" ) ); if ( found ) { continue; } var newfile = new FileItem {FullName = directory.FullName + " - " + epnum + " - " + episode.get_episode_name(), Parent = subdirectory, Missing = true}; var fi = new FileInsert {Directory = subdirectory, File = newfile, EpisodeNum = episode.get_episode_num()}; var torrent = this.clean_series_season_files_find_torrent( series.ImdbId, episode.get_episode_num(), cSeasonNum ); if ( torrent.Epname != null && String.CompareOrdinal( torrent.Epname, "" ) != 0 ) { newfile.Torrent = true; newfile.TorrentLink = torrent.Magnetlink; } Factory.Instance.ItemProvider.NewFilesUpdates.Enqueue( fi ); } }