private void ProcessMovie(MovieConfiguration movie)
        {
            List <FileInfo> files = movie.Locations
                                    .Select(s => new DirectoryInfo(s))
                                    .Where(info => info.Exists)
                                    .SelectMany(d => d.GetFiles())
                                    .Where(f => f.IsMovieFile())
                                    .Distinct()
                                    .ToList();

            if (files.Count > 1)
            {
                DuplicateMovie duplicateMovie = new DuplicateMovie {
                    Movie = movie, Files = files
                };
                dupMovies.Add(duplicateMovie);

                duplicateMovie.IsSample  = files.Any(f => f.IsSampleFile());
                duplicateMovie.IsDeleted = files.Any(f => f.IsDeletedStubFile());

                if (files.Count == 2)
                {
                    duplicateMovie.IsDoublePart = FileHelper.IsDoublePartMovie(files[0], files[1]);
                }
            }
        }
 private void Update(DuplicateMovie duplicate)
 {
     if (dupMovies.Contains(duplicate))
     {
         dupMovies.Remove(duplicate);
     }
     ProcessMovie(duplicate.Movie);
     UpdateUI();
 }
 private void MergeItems(DuplicateMovie mlastSelected, UI ui)
 {
     foreach (var file1 in mlastSelected.Files)
     {
         foreach (FileInfo file2 in mlastSelected.Files)
         {
             if (string.CompareOrdinal(file1.FullName, file2.FullName) > 0)
             {
                 MergeConfigurationAndFiles(mlastSelected.Movie, file1, file2, ui);
             }
         }
     }
     Update(mlastSelected);
 }
        private void olvDuplicates_CellRightClick(object sender, BrightIdeasSoftware.CellRightClickEventArgs e)
        {
            if (e.Model is null)
            {
                return;
            }

            DuplicateMovie     mlastSelected = (DuplicateMovie)e.Model;
            MovieConfiguration si            = mlastSelected.Movie;

            possibleMergedEpisodeRightClickMenu.Items.Clear();

            AddRcMenuItem("Force Refresh", (o, args) =>
            {
                mainUi.ForceMovieRefresh(new List <MovieConfiguration> {
                    si
                }, false);
                Update(mlastSelected);
            });
            AddRcMenuItem("Update", (o, args) =>
            {
                Update(mlastSelected);
            });
            AddRcMenuItem("Edit Movie", (o, args) =>
            {
                mainUi.EditMovie(si);
                Update(mlastSelected);
            });
            AddRcMenuItem("Choose Best", (o, args) => MergeItems(mlastSelected, mainUi));

            possibleMergedEpisodeRightClickMenu.Items.Add(new ToolStripSeparator());

            foreach (FileInfo?f in mlastSelected.Files)
            {
                AddRcMenuItem("Visit " + f.FullName, (o, args) =>
                {
                    Helpers.OpenFolderSelectFile(f.FullName);
                    Update(mlastSelected);
                });
            }
        }
        private void BwScan_DoWork(object sender, DoWorkEventArgs e)
        {
            var bw      = (BackgroundWorker)sender;
            int total   = mDoc.FilmLibrary.Movies.Count();
            int current = 0;

            dupMovies.Clear();
            foreach (var movie in mDoc.FilmLibrary.Movies)
            {
                var files = movie.Locations
                            .Select(s => new DirectoryInfo(s))
                            .Where(info => info.Exists)
                            .SelectMany(d => d.GetFiles())
                            .Where(f => f.IsMovieFile())
                            .Distinct()
                            .ToList();

                if (files.Count > 1)
                {
                    DuplicateMovie duplicateMovie = new DuplicateMovie {
                        Movie = movie, Files = files
                    };
                    dupMovies.Add(duplicateMovie);

                    duplicateMovie.IsSample  = files.Any(f => f.IsSampleFile());
                    duplicateMovie.IsDeleted = files.Any(f => f.IsDeletedStubFile());

                    if (files.Count == 2)
                    {
                        duplicateMovie.IsDoublePart = FileHelper.IsDoublePartMovie(files[0], files[1]);
                    }
                }

                bw.ReportProgress(100 * current++ / total, movie.ShowName);
            }
        }