예제 #1
0
        public void Run(RunMode mode, int value)
        {
            var stopwatch = new System.Diagnostics.Stopwatch();
            stopwatch.Start();

            try
            {    
                DatabaseFactory.CreateMetaDb();

                LogUtil.Log("----------------------------------");
                LogUtil.Log("Starting: " + DateTime.Now);
                LogUtil.Log("MODE: " + mode.ToString());
                if (mode == RunMode.Oid)
                    LogUtil.Log("OID: " + value);

                var tmDbSync = new TmDbSync();
                var tmDbMatch = new TmDbMatch();
                var tmDbRename = new TmDbRename();
                var tvDbSync = new TvDbSync();
                var tvDbMatch = new TvDbMatch();
                var tvDbRename = new TvDbRename();
                var recordData = new RecordingData();

                List<Recording> records = null;
                if (mode != RunMode.Oid)
                    records = recordData.GetRecordings().ToList();
                else
                    records = new[] { recordData.GetRecording(value) }.ToList();

                if (mode == RunMode.Failed)
                {
                    //var matches = MatchData.GetMatches().Where(a => !a.Success);
                    //records = records.Where(a => matches.Any(b => b.Oid == a.Oid)).ToList();
                    var successes = MatchData.GetMatches().Where(a => a.Success);
                    records = records.Where(a => !successes.Any(b => b.Oid == a.Oid)).ToList();
                }

                //Sync
                foreach (var record in records)
                {
                    try
                    {
                        if (!record.IsMovie)
                            tvDbSync.Sync(record);
                        else
                            tmDbSync.Sync(record);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.Log("Synchronization Error");
                        LogUtil.Log(ex.Message);
                    }
                }

                //Match & Rename
                foreach (var record in records)
                {
                    string targetId = null;

                    try
                    {
                        if (!record.IsMovie)
                        {
                            float best = -1f;
                            var result = tvDbMatch.Match(record, out best);
                            var series = result.Item1;
                            var episode = result.Item2;
                            tvDbRename.Rename(record, series, episode);
                            targetId = episode != null ? episode.Id : null; //save target id
                        }
                        else
                        {
                            float best = -1f;
                            var movie = tmDbMatch.Match(record, out best);
                            tmDbRename.Rename(record, movie);
                            targetId = movie != null ? movie.Id : null; //save target id                            
                        }
                    }
                    finally
                    {
                        //Record success/failure
                        var oid = record.Oid;
                        var type = record.IsMovie ? MediaType.MovieType : MediaType.SeriesType;
                        var success = targetId != null;
                        MatchData.SaveMatch(new Match(oid, type, success, targetId));
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.Log("Critical Error");
                LogUtil.Log(ex.Message);
                LogUtil.Log(ex.StackTrace.ToString());
            }

            LogUtil.Log("Finished: " + DateTime.Now);
            LogUtil.Log("Ellapsed Time: " + (stopwatch.ElapsedMilliseconds / 1000) + " seconds");
            LogUtil.Log("----------------------------------");
        }