コード例 #1
0
ファイル: SeriesAnalyzer.cs プロジェクト: dmzoneill/filebotpp
        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;
            }
        }
コード例 #2
0
ファイル: FsPoller.cs プロジェクト: dmzoneill/filebotpp
        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 );
            }
        }
コード例 #3
0
ファイル: SeriesAnalyzer.cs プロジェクト: dmzoneill/filebotpp
        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 );
            }
        }