private DateTime DetermineDate( FileInfo fi, string type, string ext )
 {
     var theDate = DateTime.Now;
     var key = InferKey( fi, type, ext );
     if (Master.HaveMedia( key ))
     {
         var mi = new MediaItem {Filename = key};
         mi = Master.GetMedia( mi );
         theDate = mi.LibraryDate;
     }
     return theDate;
 }
 private void LogIt( MediaItem mi )
 {
     Logger.Info( string.Format( "  Adding {0,-60} - format:{1,-6}, type:{3,-6}, title:{2,-30}, dated:{4}",
                                 mi.Filename, mi.Format, mi.Title, mi.Type, mi.LibraryDate.ToShortDateString() ) );
 }
        private void AddMedia( MediaItem mi, bool latest )
        {
            if (latest)
            {
                var xmlItem = Master.GetMedia( mi ); //  filename is the key
                //  compare dates
                var libDate = xmlItem.LibraryDate;
                if (libDate < CutoffDate)
                {
            #if DEBUG
               Logger.Info( string.Format( "    {0} is old (library date {1})", mi.Filename, libDate.ToShortDateString() ) );
            #endif
               return;
                }
            #if DEBUG
            Logger.Info( string.Format( "    {0} is new - included in the latest", mi.Filename ) );
            #endif
             }

            if (ReportType.Equals( "TV Show Report" ))
            {
                if (!ListHasTitle( mi.Title ))
                {
                    LogIt( mi );
                    MediaList.Add( mi );
                }
            }
            else
            {
                if (!ListHas( mi.Filename ))
                {
                    LogIt( mi );
                    MediaList.Add( mi );
                }
            }
        }
 private void AddToLibrary( MediaItem mi )
 {
     Master.PutMedia( mi );
 }
        public void ProcessFile( string path, string parentDirectory, string extension, bool latest )
        {
            var fi = new FileInfo( path );

            if (!fi.Extension.Equals( "." + extension )) return;

            var action = "";
            var mi = new MediaItem {Filename = fi.Name};

            if (!IsValid( fi, extension )) return;

            var addIt = true;
            if (fi.Directory != null) mi.Type = InferType( fi.Directory.FullName );
            mi.LibraryDate = DetermineDate( fi, mi.Type, extension );
            mi.Format = extension;

            if (mi.Type.Equals( "Movie" ))
            {
                mi.Episode = "movie";
                //  for VOBs title is parents parent directory
                if (extension.Equals( "VOB" ))
                {
                    if (fi.Directory != null)
                    {
                        var dir = new FileInfo( fi.Directory.FullName );
                        if (dir.Directory != null) mi.Title = dir.Directory.Name;
                    }
                }
                else
                    //  avi or MKV
                    if (fi.Directory != null) mi.Title = fi.Directory.Name;
            }
            if (mi.Type.Equals( "TV" ))
            {
                //  set title from parent directory
                if (fi.Directory != null)
                {
                    var parent = new FileInfo( fi.Directory.FullName );
                    if (parent.Directory != null) mi.Title = parent.Directory.Name;
                }
                if (mi.Title.Equals( "TV" ))
                    Logger.Error( "No season directory for " + fi.Name );
                else
                {
                    var fileNameWithoutExtension = Path.GetFileNameWithoutExtension( fi.Name );
                    if (fileNameWithoutExtension != null)
                        mi.Episode = fileNameWithoutExtension.Replace( '.', ' ' );
                    AddMedia( mi, latest );
                    AddToLibrary( mi );
                }
                addIt = false;
                action = "added";
            }

            if (addIt)
            {
                action = "added";
                AddMedia( mi, latest );
                if (!latest) AddToLibrary( mi ); //  xml

                Utility.Announce( string.Format( "Adding {0} from {1}", fi.Name, fi.DirectoryName ) );
            }
            action += " as " + mi.Title;
            #if DEBUG
             if ( latest )
                Logger.Info( string.Format( "File->{0,-50} - {1}", fi.FullName, action ) );
             //else
             //   action = "invalid";
            #endif
        }
 public void AddMediaItem( MediaItem m )
 {
     TheHT.Add( m.Filename, m );
 }
 private static void WriteMediaNode( XmlTextWriter writer, MediaItem m )
 {
     writer.WriteStartElement( "media-item" );
     WriteElement( writer, "filename", m.Filename );
     WriteElement( writer, "type", m.Type );
     WriteElement( writer, "title", m.Title );
     WriteElement( writer, "episode", m.Episode );
     WriteElement( writer, "libdate", m.LibraryDate.ToShortDateString() );
     writer.WriteEndElement();
 }
        public void PutMedia( MediaItem m )
        {
            if ( m.Filename.Equals( "VTS_01_0.VOB" ) )
            m.Filename = m.Title;

             if ( !TheHT.ContainsKey( m.Filename ) )
             {
            TheHT.Add( m.Filename, m );
            IsDirty = true;
             }
             else
             {
            Logger.Info( string.Format( "    {0} already in XML", m.Filename ) );
             }
        }
 public MediaItem GetMedia( MediaItem mi )
 {
     MediaItem m;
     if ( TheHT.ContainsKey( mi.Filename ) )
     {
     m = (MediaItem)TheHT[mi.Filename];
         CacheHits++;
     }
     else
     {
         //  new it up
         m = new MediaItem();
     m.Filename = mi.Filename;
     m.Title = mi.Title;
         m.LibraryDate = mi.LibraryDate;
         m.Episode = mi.Episode;
     m.Type = mi.Type;
     m.Format = mi.Format;
         PutMedia( m );
         CacheMisses++;
     }
     return m;
 }