예제 #1
0
        private void ThreadFunctionImportTVGuide(object aparam)
        {
            SetStandbyAllowed(false);

            try
            {
                if (GlobalServiceProvider.Instance.IsRegistered <IPowerScheduler>() &&
                    GlobalServiceProvider.Instance.Get <IPowerScheduler>().IsSuspendInProgress())
                {
                    return;
                }
                ThreadParams param = (ThreadParams)aparam;

                Setting         setting;
                TvBusinessLayer layer  = new TvBusinessLayer();
                string          folder = layer.GetSetting("xmlTv", DefaultOutputFolder).Value;

                // Allow for deleting of all existing programs before adding the new ones.
                // Already imported programs might have incorrect data depending on the grabber & setup
                // f.e when grabbing programs many days ahead
                bool deleteBeforeImport = (layer.GetSetting("xmlTvDeleteBeforeImport", "true").Value == "true");
                //if (layer.GetSetting("xmlTvDeleteBeforeImport", "true").Value == "true")
                //{
                //  SqlBuilder sb = new SqlBuilder(StatementType.Delete, typeof(Program));
                //  SqlStatement stmt = sb.GetStatement();
                //  stmt.Execute();
                //}

                int    numChannels = 0, numPrograms = 0;
                string errors = "";

                try
                {
                    if (param._importXML)
                    {
                        string fileName = folder + @"\tvguide.xml";
                        Log.Write("plugin:xmltv importing " + fileName);

                        XMLTVImport import = new XMLTVImport();
                        import.Import(fileName, deleteBeforeImport, false);

                        numChannels += import.ImportStats.Channels;
                        numPrograms += import.ImportStats.Programs;

                        if (import.ErrorMessage.Length != 0)
                        {
                            errors += "tvguide.xml:" + import.ErrorMessage + "; ";
                        }
                    }

                    if (param._importLST)
                    {
                        string fileName = folder + @"\tvguide.lst";
                        Log.Write("plugin:xmltv importing files in " + fileName);

                        Encoding fileEncoding = Encoding.Default;
                        using (FileStream streamIn = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
                            using (StreamReader fileIn = new StreamReader(streamIn, fileEncoding, true))
                            {
                                while (!fileIn.EndOfStream)
                                {
                                    string tvguideFileName = fileIn.ReadLine();
                                    if (tvguideFileName.Length == 0)
                                    {
                                        continue;
                                    }

                                    if (!System.IO.Path.IsPathRooted(tvguideFileName))
                                    {
                                        // extend by directory
                                        tvguideFileName = System.IO.Path.Combine(folder, tvguideFileName);
                                    }

                                    Log.WriteFile(@"plugin:xmltv importing " + tvguideFileName);

                                    XMLTVImport import = new XMLTVImport();

                                    import.Import(tvguideFileName, deleteBeforeImport, false);

                                    numChannels += import.ImportStats.Channels;
                                    numPrograms += import.ImportStats.Programs;

                                    if (import.ErrorMessage.Length != 0)
                                    {
                                        errors += tvguideFileName + ": " + import.ErrorMessage + "; ";
                                    }
                                }
                            }
                    }

                    setting       = layer.GetSetting("xmlTvResultLastImport", "");
                    setting.Value = DateTime.Now.ToString();
                    setting.Persist();
                    setting       = layer.GetSetting("xmlTvResultChannels", "");
                    setting.Value = numChannels.ToString();
                    setting.Persist();
                    setting       = layer.GetSetting("xmlTvResultPrograms", "");
                    setting.Value = numPrograms.ToString();
                    setting.Persist();
                    setting       = layer.GetSetting("xmlTvResultStatus", "");
                    setting.Value = errors;
                    setting.Persist();
                    Log.Write("Xmltv: imported {0} channels, {1} programs status:{2}", numChannels, numPrograms, errors);
                }
                catch (Exception ex)
                {
                    Log.Error(@"plugin:xmltv import failed");
                    Log.Write(ex);
                }

                setting       = layer.GetSetting("xmlTvLastUpdate", "");
                setting.Value = param._importDate.ToString();
                setting.Persist();
                Log.Info("Xmltv: waiting for database to finish inserting imported programs.");
                layer.WaitForInsertPrograms();
            }
            finally
            {
                Log.WriteFile(@"plugin:xmltv import done");
                _workerThreadRunning = false;
                SetStandbyAllowed(true);
            }
        }
예제 #2
0
 void IEpgDataSink.Close()
 {
     Log.Info("WebEPG: Waiting for database to be updated...");
     layer.WaitForInsertPrograms();
     Log.Info("WebEPG: Database update finished.");
 }