Пример #1
0
        private int MatchEpisodes(ref List <string> files, ref List <Episode> episodes, Series series, ref int filenum, ref List <Episode> matchedEpisodes, List <FileInfo> orphanedEpisodes, bool matchwithseriesname)
        {
            int matched = 0;
            ListBoxRenameItem item;

            foreach (string file in files)
            {
                if (Configuration.IsValidVideo(file))
                {
                    filenum++;

                    FileInfo  info = new FileInfo(file);
                    Episode[] ep   = VideoInformation.MatchEpisode(info.FullName, episodes, series, matchwithseriesname);

                    if (ep != null && ep.Length > 0)
                    {
                        foreach (Episode e in ep)
                        {
                            matchedEpisodes.Add(e);
                            episodes.Remove(e);
                            matched++;
                        }
                    }
                    else
                    {
                        ep = VideoInformation.MatchEpisode(info.FullName, matchedEpisodes, series, matchwithseriesname);

                        if (ep != null && ep.Length > 0)
                        {
                            item = new ListBoxRenameItem(info.Directory.FullName, info.Name, "Duplicate!", series.SeriesName, "", "", "", series.FirstAired.Year.ToString(), "", "");
                            Add(item);
                        }
                        else
                        {
                            orphanedEpisodes.Add(info);
                        }
                        continue;
                    }

                    string newName = VideoInformation.GetEpisodeName(info.Name, series, ep, cboFormat.Text, filenum, Configuration.InvalidCharReplacement, Configuration.EpisodeDateFormat, Configuration.SeriesDateFormat);
                    if (ep.Length == 1)
                    {
                        item = new ListBoxRenameItem(info.Directory.FullName, info.Name, newName, series.SeriesName, ep[0].AiredSeason.ToString(), ep[0].EpisodeName, ep[0].AiredEpisodeNumber.ToString(), series.FirstAired.Year.ToString(), "", "");//"res", "thumb"
                    }
                    else
                    {
                        item = new ListBoxRenameItem(info.Directory.FullName, info.Name, newName, series.SeriesName, ep[0].AiredSeason.ToString(), ep[0].EpisodeName + " & " + ep[1].EpisodeName, ep[0].AiredEpisodeNumber.ToString() + "-" + ep[1].AiredEpisodeNumber.ToString(), series.FirstAired.Year.ToString(), "", "");//"res", "thumb"
                    }
                    Add(item);
                }
                else if (Configuration.IsUnwantedExtension(file))
                {
                    FileInfo info = new FileInfo(file);
                    item = new ListBoxRenameItem(info.Directory.FullName, info.Name, "Unwanted!", "", "", "", "", "", "", "");//"res", "thumb"

                    Add(item);
                }
            }
            return(matched);
        }
Пример #2
0
        private async Task <bool> InitLstFileRenamerAsync(List <string> paths)
        {
            btnLookup.Enabled = false;
            ListBoxRenameItem item;
            //string newName;
            int filenum = 0;

            this.lstFileRenamer.Items.Clear();

            Series series = await VideoInformation.ThetvDB.GetSeries(SelectedSeries);

            List <Episode> episodes = new List <Episode>(Task.Run(async() => { return(await VideoInformation.ThetvDB.GetAllEpisodes(SelectedSeries)); }).Result);

            episodes = HelperFunctions.DistinctBy(episodes, c => c.Id).ToList();
            List <Episode>  matchedEpisodes  = new List <Episode>();
            List <FileInfo> orphanedEpisodes = new List <FileInfo>();

            List <string> files = new List <string>();

            //Check each path and if it's a dir then get all files in that dir.
            foreach (string path in paths)
            {
                FileInfo fi = new FileInfo(path);
                if ((fi.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    foreach (string file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
                    {
                        files.Add(file);
                    }
                }
                else
                {
                    files.Add(path);
                }
            }

            files = files.Distinct().ToList();
            files.Sort();

            if (MatchEpisodes(ref files, ref episodes, series, ref filenum, ref matchedEpisodes, orphanedEpisodes, true) == 0)
            {
                //If the match totally failed then try matching again without the series name.
                filenum          = 0;
                matchedEpisodes  = new List <Episode>();
                orphanedEpisodes = new List <FileInfo>();

                MatchEpisodes(ref files, ref episodes, series, ref filenum, ref matchedEpisodes, orphanedEpisodes, false);
            }
            foreach (FileInfo info in orphanedEpisodes)
            {
                filenum++;

                //if (episodes.Count > 0)
                //{
                //    Episode ep = episodes[0];
                //    episodes.RemoveAt(0);

                //    //newName = VideoInformation.GetEpisodeName(info.Name, series, new Episode[] { ep }, cboFormat.Text, filenum, Configuration.InvalidCharReplacement, Configuration.EpisodeDateFormat, Configuration.SeriesDateFormat);
                //    item = new ListBoxRenameItem(info.FullName, info.Name, newName, series.SeriesName, ep.AiredSeason.ToString(), ep.EpisodeName, ep.AiredEpisodeNumber.ToString(), series.FirstAired.Year.ToString(), "", "" );//"res", "thumb"
                //}
                //else
                {
                    item = new ListBoxRenameItem(info.Directory.FullName, info.Name, "Missing!", series.SeriesName, "", "", "", series.FirstAired.Year.ToString(), "", "");
                }

                Add(item);
            }

            foreach (Episode ep in episodes)
            {
                string newName = VideoInformation.GetEpisodeName("", series, new Episode[] { ep }, cboFormat.Text, filenum, Configuration.InvalidCharReplacement, Configuration.EpisodeDateFormat, Configuration.SeriesDateFormat);
                item = new ListBoxRenameItem("", "Missing!", newName, series.SeriesName, ep.AiredSeason.ToString(), ep.EpisodeName, ep.AiredEpisodeNumber.ToString(), series.FirstAired.Year.ToString(), "", "");  //"res", "thumb"
                Add(item);
            }

            checkBox1.Checked = true;
            btnLookup.Enabled = true;
            return(true);
        }