示例#1
0
        public static Movie parseFile(String file)
        {
            Movie    movie = new Movie(file);
            FileInfo fi    = new FileInfo(file);

            movie.baseDir = fi.DirectoryName;
            Regex           reg  = null;
            Match           m    = null;
            MatchCollection mcol = null;

            try {
                String name = file;
                if (name.Contains("Heavy"))
                {
                    name = fi.FullName;
                }
                name = name.Remove(0, movie.baseDir.Length);
                if (name.IndexOf(@"\") > 0)
                {
                    name = name.Substring(0, name.IndexOf(@"\"));
                }

                String[] getDisk = { "cd([0-9]+)", "cd ([0-9]+)", "part ([0-9]+)", "part([0-9]+)", "disk([0-9]+)" };
                foreach (String pat in getDisk)
                {
                    reg = new Regex(pat, RegexOptions.IgnoreCase);
                    m   = null;
                    m   = reg.Match(name);
                    if (m.Success)
                    {
                        movie.disk = Int32.Parse(m.Groups[1].Captures[0].Value);
                        name       = name.Replace(m.Groups[0].Captures[0].Value, "");
                        break;
                    }
                }

                if (Directory.Exists(file))
                {
                    name = eregi_replace("-([a-zA-Z0-9!]*)", "", name);
                }
                else if (File.Exists(file))
                {
                    FileInfo fname = new FileInfo(name);
                    name = eregi_replace("-([a-zA-Z0-9!]*)" + fname.Extension, "", name);
                    if (fname.Extension.Length > 0)
                    {
                        name = name.Replace(fname.Extension, "");
                    }
                }

                reg  = new Regex("([0-9]{4})");
                mcol = null;
                mcol = reg.Matches(name);
                if (mcol.Count > 0)
                {
                    m          = mcol[mcol.Count - 1];
                    movie.year = Int32.Parse(m.Groups[1].Captures[0].Value);
                    name       = name.Remove(name.LastIndexOf(movie.year.ToString()));

                    // Don't use 1080 from 1080p for the year.
                    if (movie.year == 1080)
                    {
                        movie.year = 0;
                        if (mcol.Count > 1)
                        {
                            m          = mcol[mcol.Count - 2];
                            movie.year = Int32.Parse(m.Groups[1].Captures[0].Value);
                            name       = name.Remove(name.LastIndexOf(movie.year.ToString()));
                        }
                    }
                }

                if (name.IndexOf("[") > 0)
                {
                    name = name.Substring(0, name.IndexOf("["));
                }
                if (name.IndexOf("[") > 0)
                {
                    name = name.Substring(0, name.IndexOf("["));
                }
                if (name.IndexOf("(") > 0)
                {
                    name = name.Substring(0, name.IndexOf("("));
                }
                if (name.IndexOf(")") > 0)
                {
                    name = name.Substring(0, name.IndexOf(")"));
                }

                name = name.Replace("[", " ");
                name = name.Replace("]", " ");
                name = name.Replace("(", " ");
                name = name.Replace(")", " ");

                reg = new Regex("([0-9]{1})\\.([0-9]{1})");
                m   = null;
                m   = reg.Match(name);
                if (m.Success)
                {
                    name = name.Replace(m.Groups[0].Captures[0].Value,
                                        m.Groups[1].Captures[0].Value + "|" + m.Groups[2].Captures[0].Value);
                }

                //name = name.Replace(".", " ");
                name = eregi_replace("([a-zA-Z0-9]{1})([.]{1})([a-zA-Z0-9]{2})", "\\1 \\3", name);
                name = eregi_replace("([a-zA-Z0-9]{2})([.]{1})([a-zA-Z0-9]{1})", "\\1 \\3", name);
                name = name.Replace("|", ".");
                //name = name.Replace(",", " ");
                name = name.Replace("_", " ");
                name = name.Replace("- ", " ");

                int wordstart = name.Length;
                foreach (String word in words)
                {
                    int wpos = name.ToLower().IndexOf(word.ToLower());
                    if (wpos != -1 && wpos < wordstart)
                    {
                        wordstart = wpos;
                    }
                }
                name = name.Substring(0, wordstart);

                String getLan = name.ToLower();
                if (
                    getLan.IndexOf("german") > 0 ||
                    getLan.IndexOf("deutsch") > 0
                    )
                {
                    movie.language = "german";
                }

                int start = -1;
                int end   = -1;
                while (name.IndexOf("[") > 0)
                {
                    start = name.IndexOf("[");
                    end   = name.IndexOf("]", start);
                    if (start > 0 && end > start)
                    {
                        name = name.Remove(start, end - start);
                    }
                }
                name = eregi_replace(@"\(([^)]*)\)", " ", name);
                name = eregi_replace("(cd)([0-9]+)", " ", name);
                name = eregi_replace("(part)([0-9]+)", " ", name);
                //name = eregi_replace("([0-9]{4})", " ", name);
                name = eregi_replace("([0-9]{1,})of([0-9]{1,})", " ", name);
                name = eregi_replace("www.([a-zA-Z0-9]+).([a-zA-Z]{2,3})", " ", name);

                /*
                 * for (int i=name.Length-2; i>0; i--)
                 * {
                 *  if (Char.IsLower(name[i]) && Char.IsUpper(name[i+1]))
                 *  {
                 *      name = name.Insert(i+1, " ");
                 *      continue;
                 *  }
                 * }
                 */

                while (name.IndexOf("  ") > 0)
                {
                    name = name.Replace("  ", " ");
                }
                name        = name.Trim();
                movie.title = name;

                // find title using online parser
                OnlineParserBase parser         = null;
                String           selectedParser = Settings.GetValueAsString(SettingKeys.MoviesParser);
                if (selectedParser == OnlineParserIMDB.parserName)
                {
                    parser = new OnlineParserIMDB();
                }
                else if (selectedParser == OnlineParserTMDB.parserName)
                {
                    parser = new OnlineParserTMDB();
                }
                else
                {
                    parser = new OnlineParserIMDB();
                }
                parser.getMovieData(ref movie);
            }
            catch (Exception E) {
                Log.Error("Error Parsing file" + movie.filename, E);
            }
            return(movie);
        }
示例#2
0
        public static Movie parseFile(String file)
        {
            Movie movie = new Movie(file);
            FileInfo fi = new FileInfo(file);
            movie.baseDir = fi.DirectoryName;
            Regex reg = null;
            Match m = null;
            MatchCollection mcol = null;

            try {
                String name = file;
                if (name.Contains("Heavy")) {
                    name = fi.FullName;
                }
                name = name.Remove(0, movie.baseDir.Length);
                if (name.IndexOf(@"\") > 0) {
                    name = name.Substring(0, name.IndexOf(@"\"));
                }

                String[] getDisk = { "cd([0-9]+)", "cd ([0-9]+)", "part ([0-9]+)", "part([0-9]+)", "disk([0-9]+)" };
                foreach (String pat in getDisk) {
                    reg = new Regex(pat, RegexOptions.IgnoreCase);
                    m = null;
                    m = reg.Match(name);
                    if (m.Success) {
                        movie.disk = Int32.Parse(m.Groups[1].Captures[0].Value);
                        name = name.Replace(m.Groups[0].Captures[0].Value, "");
                        break;
                    }
                }

                if (Directory.Exists(file)) {
                    name = eregi_replace("-([a-zA-Z0-9!]*)", "", name);
                }
                else if (File.Exists(file)) {
                    FileInfo fname = new FileInfo(name);
                    name = eregi_replace("-([a-zA-Z0-9!]*)" + fname.Extension, "", name);
                    if (fname.Extension.Length > 0) {
                        name = name.Replace(fname.Extension, "");
                    }
                }

                reg = new Regex("([0-9]{4})");
                mcol = null;
                mcol = reg.Matches(name);
                if (mcol.Count > 0) {
                    m = mcol[mcol.Count - 1];
                    movie.year = Int32.Parse(m.Groups[1].Captures[0].Value);
                    name = name.Remove(name.LastIndexOf(movie.year.ToString()));

                    // Don't use 1080 from 1080p for the year.
                    if (movie.year == 1080) {
                        movie.year = 0;
                        if (mcol.Count > 1) {
                            m = mcol[mcol.Count - 2];
                            movie.year = Int32.Parse(m.Groups[1].Captures[0].Value);
                            name = name.Remove(name.LastIndexOf(movie.year.ToString()));
                        }
                    }
                }

                if (name.IndexOf("[") > 0) name = name.Substring(0, name.IndexOf("["));
                if (name.IndexOf("[") > 0) name = name.Substring(0, name.IndexOf("["));
                if (name.IndexOf("(") > 0) name = name.Substring(0, name.IndexOf("("));
                if (name.IndexOf(")") > 0) name = name.Substring(0, name.IndexOf(")"));

                name = name.Replace("[", " ");
                name = name.Replace("]", " ");
                name = name.Replace("(", " ");
                name = name.Replace(")", " ");

                reg = new Regex("([0-9]{1})\\.([0-9]{1})");
                m = null;
                m = reg.Match(name);
                if (m.Success) {
                    name = name.Replace(m.Groups[0].Captures[0].Value,
                                         m.Groups[1].Captures[0].Value + "|" + m.Groups[2].Captures[0].Value);
                }

                //name = name.Replace(".", " ");
                name = eregi_replace("([a-zA-Z0-9]{1})([.]{1})([a-zA-Z0-9]{2})", "\\1 \\3", name);
                name = eregi_replace("([a-zA-Z0-9]{2})([.]{1})([a-zA-Z0-9]{1})", "\\1 \\3", name);
                name = name.Replace("|", ".");
                //name = name.Replace(",", " ");
                name = name.Replace("_", " ");
                name = name.Replace("- ", " ");

                int wordstart = name.Length;
                foreach (String word in words) {
                    int wpos = name.ToLower().IndexOf(word.ToLower());
                    if (wpos != -1 && wpos < wordstart) {
                        wordstart = wpos;
                    }
                }
                name = name.Substring(0, wordstart);

                String getLan = name.ToLower();
                if (
                    getLan.IndexOf("german") > 0 ||
                    getLan.IndexOf("deutsch") > 0
                    ) {
                    movie.language = "german";
                }

                int start = -1;
                int end = -1;
                while (name.IndexOf("[") > 0) {
                    start = name.IndexOf("[");
                    end = name.IndexOf("]", start);
                    if (start > 0 && end > start) {
                        name = name.Remove(start, end - start);
                    }
                }
                name = eregi_replace(@"\(([^)]*)\)", " ", name);
                name = eregi_replace("(cd)([0-9]+)", " ", name);
                name = eregi_replace("(part)([0-9]+)", " ", name);
                //name = eregi_replace("([0-9]{4})", " ", name);
                name = eregi_replace("([0-9]{1,})of([0-9]{1,})", " ", name);
                name = eregi_replace("www.([a-zA-Z0-9]+).([a-zA-Z]{2,3})", " ", name);

                /*
                for (int i=name.Length-2; i>0; i--)
                {
                    if (Char.IsLower(name[i]) && Char.IsUpper(name[i+1]))
                    {
                        name = name.Insert(i+1, " ");
                        continue;
                    }
                }
                */

                while (name.IndexOf("  ") > 0) {
                    name = name.Replace("  ", " ");
                }
                name = name.Trim();
                movie.title = name;

                // find title using online parser
                OnlineParserBase parser = null;
                String selectedParser = Settings.GetValueAsString(SettingKeys.MoviesParser);
                if (selectedParser == OnlineParserIMDB.parserName) {
                    parser = new OnlineParserIMDB();
                }
                else if (selectedParser == OnlineParserTMDB.parserName) {
                    parser = new OnlineParserTMDB();
                }
                else {
                    parser = new OnlineParserIMDB();
                }
                parser.getMovieData(ref movie);
            }
            catch (Exception E) {
                Log.Error("Error Parsing file" + movie.filename, E);
            }
            return movie;
        }