////////////////////////////////////////////////////////////////////////////////// 
//                                                                              //
//      Copyright © 2005-2020 nzsjb                                           //
//                                                                              //
//  This Program is free software; you can redistribute it and/or modify        //
//  it under the terms of the GNU General Public License as published by        //
//  the Free Software Foundation; either version 2, or (at your option)         //
//  any later version.                                                          //
//                                                                              //
//  This Program is distributed in the hope that it will be useful,             //
//  but WITHOUT ANY WARRANTY; without even the implied warranty of              //
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                //
//  GNU General Public License for more details.                                //
//                                                                              //
//  You should have received a copy of the GNU General Public License           //
//  along with GNU Make; see the file COPYING.  If not, write to                //
//  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.       //
//  http://www.gnu.org/copyleft/gpl.html                                        //
//                                                                              //  
//////////////////////////////////////////////////////////////////////////////////

namespace DomainObjects
{
    /// <summary>
    /// TV Station types.
    /// </summary>
    public enum TVStationType
    {
        /// <summary>
        /// The type is DVB.
        /// </summary>
        Dvb,
        /// <summary>
        /// The type is ATSC.
        /// </summary>
        Atsc,
        /// <summary>
        /// The type is undefined.
        /// </summary>
        Undefined
    }

    /// <summary>
    /// Tuner node types.
    /// </summary>
    public enum TunerNodeType
    {
        /// <summary>
        /// The tuner node type for satellite.
        /// </summary>
        Satellite,
        /// <summary>
        /// The tuner node type for terrestrial.
        /// </summary>
        Terrestrial,
        /// <summary>
        /// The tuner node type for cable.
        /// </summary>
        Cable,
        /// <summary>
        /// The tuner node type for ATSC.
        /// </summary>
        ATSC,
        /// <summary>
        /// The tuner node type for ISDB satellite.
        /// </summary>
        ISDBS,
        /// <summary>
        /// The tuner node type for ISDB terrestrial.
        /// </summary>
        ISDBT,
        /// <summary>
        /// The tuner node type for undefined types.
        /// </summary>
        Other
    }

    /// <summary>
    /// Tuner types.
    /// </summary>
    public enum TunerType
    {
        /// <summary>
        /// The tuner type for satellite.
        /// </summary>
        Satellite,
        /// <summary>
        /// The tuner type for terrestrial.
        /// </summary>
        Terrestrial,
        /// <summary>
        /// The tuner type for cable.
        /// </summary>
        Cable,
        /// <summary>
        /// The tuner type for ATSC terrestrial.
        /// </summary>
        ATSC,
        /// <summary>
        /// The tuner type for ATSC cable.
        /// </summary>
        ATSCCable,
        /// <summary>
        /// The tuner type for Clear QAM.
        /// </summary>
        ClearQAM,
        /// <summary>
        /// The tuner type for ISDB-S.
        /// </summary>
        ISDBS,
        /// <summary>
        /// The tuner type for ISDB-T.
        /// </summary>
        ISDBT,
        /// <summary>
        /// The tuner type for SAT>IP servers.
        /// </summary>
        SATIP,
        /// <summary>
        /// The tuner type for file types.
        /// </summary>
        File,
        /// <summary>
        /// The tuner type for stream types.
        /// </summary>
        Stream,
        /// <summary>
        /// The tuner type for undefined types.
        /// </summary>
        Other
    }

    /// <summary>
    /// EPG sources.
    /// </summary>
    public enum EPGSource
    {
        /// <summary>
        /// The EPG originated from the MHEG5 protocol.
        /// </summary>
        MHEG5,
        /// <summary>
        /// The EPG originated from the DVB EIT protocol.
        /// </summary>
        EIT,
        /// <summary>
        /// The EPG originated from the OpenTV protocol.
        /// </summary>
        OpenTV,
        /// <summary>
        /// The EPG originated from the FreeSat protocol.
        /// </summary>
        FreeSat,
        /// <summary>
        /// The EPG originated from the MediaHighway1 protocol.
        /// </summary>
        MediaHighway1,
        /// <summary>
        /// The EPG originated from the MediaHighway2 protocol.
        /// </summary>
        MediaHighway2,
        /// <summary>
        /// The EPG originated from the ATSC PSIP protocol.
        /// </summary>        
        PSIP,
        /// <summary>
        /// The EPG originated from the Dish Network EEPG protocol.
        /// </summary>
        DishNetwork,
        /// <summary>
        /// The EPG originated from the Bell TV EEPG protocol.
        /// </summary>
        BellTV,
        /// <summary>
        /// The EPG originated from the Siehfern Info protocol.
        /// </summary>
        SiehfernInfo
    }

    /// <summary>
    /// The types of EPG collection.
    /// </summary>
    public enum CollectionType
    {
        /// <summary>
        /// The collection is for the MHEG5 protocol.
        /// </summary>
        MHEG5,
        /// <summary>
        /// The collection is for the DVB EIT protocol.
        /// </summary>
        EIT,
        /// <summary>
        /// The collection is for the OpenTV protocol.
        /// </summary>
        OpenTV,
        /// <summary>
        /// The collection is for the FreeSat protocol.
        /// </summary>
        FreeSat,
        /// <summary>
        /// The collection is for the MediaHighway1 protocol.
        /// </summary>
        MediaHighway1,
        /// <summary>
        /// The collection is for the MediaHighway2 protocol.
        /// </summary>
        MediaHighway2,        
        /// <summary>
        /// The collection is for the ATSC PSIP protocol.
        /// </summary>
        PSIP,
        /// <summary>
        /// The collection is for the Dish Network EEPG protocol.
        /// </summary>
        DishNetwork,
        /// <summary>
        /// The collection is for the Bell TV EEPG protocol.
        /// </summary>
        BellTV,
        /// <summary>
        /// The collection is for the Siehfern Info protocol.
        /// </summary>
        SiehfernInfo,
        /// <summary>
        /// The collection is for the NDS protocol.
        /// </summary>
        NDS
    }

    /// <summary>
    /// The values that a diseqc switch can have.
    /// </summary>
    public enum DiseqcSettings
    {
        /// <summary>
        /// The switch is not used
        /// </summary>
        None,
        /// <summary>
        /// Simple A.
        /// </summary>
        A,
        /// <summary>
        /// Simple B.
        /// </summary>
        B,
        /// <summary>
        /// Use satellite A port A (Disqec 1.0 committed switch)
        /// </summary>
        AA,
        /// <summary>
        /// Use satellite A port B (Disqec 1.0 committed switch)
        /// </summary>
        AB,
        /// <summary>
        /// Use satellite B port A (Disqec 1.0 committed switch)
        /// </summary>
        BA,
        /// <summary>
        /// Use satellite B port B (Disqec 1.0 committed switch)
        /// </summary>
        BB,
        /// <summary>
        /// Use port 1 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT1,
        /// <summary>
        /// Use port 2 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT2,
        /// <summary>
        /// Use port 3 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT3,
        /// <summary>
        /// Use port 4 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT4,
        /// <summary>
        /// Use port 5 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT5,
        /// <summary>
        /// Use port 6 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT6,
        /// <summary>
        /// Use port 7 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT7,
        /// <summary>
        /// Use port 8 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT8,
        /// <summary>
        /// Use port 9 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT9,
        /// <summary>
        /// Use port 10 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT10,
        /// <summary>
        /// Use port 11 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT11,
        /// <summary>
        /// Use port 12 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT12,
        /// <summary>
        /// Use port 13 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT13,
        /// <summary>
        /// Use port 14 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT14,
        /// <summary>
        /// Use port 15 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT15,
        /// <summary>
        /// Use port 16 (Disqec 1.1 uncommitted switch)
        /// </summary>
        PORT16,
        /// <summary>
        /// Use committed port AA uncommitted port 1 (Combination committed/uncommited switch)
        /// </summary>
        AAPORT1,
        /// <summary>
        /// Use committed port AB uncommitted port 1 (Combination committed/uncommited switch)
        /// </summary>
        ABPORT1,
        /// <summary>
        /// Use committed port BA uncommitted port 1 (Combination committed/uncommited switch)
        /// </summary>
        BAPORT1,
        /// <summary>
        /// Use committed port BB uncommitted port 1 (Combination committed/uncommited switch)
        /// </summary>
        BBPORT1,
        /// <summary>
        /// Use committed port AA uncommitted port 2 (Combination committed/uncommited switch)
        /// </summary>
        AAPORT2,
        /// <summary>
        /// Use committed port AB uncommitted port 2 (Combination committed/uncommited switch)
        /// </summary>
        ABPORT2,
        /// <summary>
        /// Use committed port BA uncommitted port 2 (Combination committed/uncommited switch)
        /// </summary>
        BAPORT2,
        /// <summary>
        /// Use committed port BB uncommitted port 2 (Combination committed/uncommited switch)
        /// </summary>
        BBPORT2,
        /// <summary>
        /// Use committed port AA uncommitted port 3 (Combination committed/uncommited switch)
        /// </summary>
        AAPORT3,
        /// <summary>
        /// Use committed port AB uncommitted port 3 (Combination committed/uncommited switch)
        /// </summary>
        ABPORT3,
        /// <summary>
        /// Use committed port BA uncommitted port 3 (Combination committed/uncommited switch)
        /// </summary>
        BAPORT3,
        /// <summary>
        /// Use committed port BB uncommitted port 3 (Combination committed/uncommited switch)
        /// </summary>
        BBPORT3,
        /// <summary>
        /// Use committed port AA uncommitted port 4 (Combination committed/uncommited switch)
        /// </summary>
        AAPORT4,
        /// <summary>
        /// Use committed port AB uncommitted port 4 (Combination committed/uncommited switch)
        /// </summary>
        ABPORT4,
        /// <summary>
        /// Use committed port BA uncommitted port 4 (Combination committed/uncommited switch)
        /// </summary>
        BAPORT4,
        /// <summary>
        /// Use committed port BB uncommitted port 4 (Combination committed/uncommited switch)
        /// </summary>
        BBPORT4

    }

    /// <summary>
    /// The state of a data update control.
    /// </summary>
    public enum DataState
    {
        /// <summary>
        /// There are unresolved errors.
        /// </summary>
        HasErrors,
        /// <summary>
        /// The data does not need saving.
        /// </summary>
        NotChanged,
        /// <summary>
        /// The data needs saving.
        /// </summary>
        Changed
    }

    /// <summary>
    /// The function of the parameters.
    /// </summary>
    public enum ParameterSet
    {
        /// <summary>
        /// The parameters are used by the Collector.
        /// </summary>
        Collector,
        /// <summary>
        /// The parameters are used by the DVBLogic plugin.
        /// </summary>
        Plugin
    }

    /// <summary>
    /// The type of run.
    /// </summary>
    public enum RunType
    {
        /// <summary>
        /// The parameters are being loaded to run a collection.
        /// </summary>
        Collection,
        /// <summary>
        /// The parameters are being loaded into EPG Centre.
        /// </summary>
        Centre
    }

    /// <summary>
    /// The matching method for lookups.
    /// </summary>
    public enum MatchMethod
    {
        /// <summary>
        /// The title must match exactly.
        /// </summary>
        Exact,
        /// <summary>
        /// The title must contain the string.
        /// </summary>
        Contains,
        /// <summary>
        /// The title must be the nearest match to the string.
        /// </summary>
        Nearest
    }

    /// <summary>
    /// The search priority for TV series episodes.
    /// </summary>
    public enum EpisodeSearchPriority
    {
        /// <summary>
        /// The season and episode numbers are the priority when searching for an episode.
        /// </summary>
        SeasonEpisode,
        /// <summary>
        /// The subtitle is the priority when searching for an episode.
        /// </summary>
        Subtitle        
    }

    /// <summary>
    /// The merge method for channel update.
    /// </summary>
    public enum ChannelMergeMethod
    {
        /// <summary>
        /// No matching.
        /// </summary>
        None,
        /// <summary>
        /// Match on station name.
        /// </summary>
        Name,
        /// <summary>
        /// Match on channel number.
        /// </summary>
        Number,
        /// <summary>
        /// Match on channel name and number.
        /// </summary>
        NameNumber
    }

    /// <summary>
    /// The EPG scan method for channel update.
    /// </summary>
    public enum ChannelEPGScanner
    {
        /// <summary>
        /// No scanning.
        /// </summary>
        None,
        /// <summary>
        /// Default scanning.
        /// </summary>
        Default,
        /// <summary>
        /// Scan using EPG Collector.
        /// </summary>
        EPGCollector,
        /// <summary>
        /// Scan using EIT scanner.
        /// </summary>
        EITScanner,
        /// <summary>
        /// XMLTV epg.
        /// </summary> 
        Xmltv
    }

    /// <summary>
    /// Program exit codes.
    /// </summary>
    public enum ExitCode
    {
        /// <summary>
        /// The run finished normally.
        /// </summary>
        OK,
        /// <summary>
        /// There are no suitable tuners installed.
        /// </summary>
        NoDVBTuners,
        /// <summary>
        /// The ini file cannot be opened.
        /// </summary>
        ParameterFileNotFound,
        /// <summary>
        /// There is an error in the ini file.
        /// </summary>
        ParameterError,
        /// <summary>
        /// The command line is incorrect.
        /// </summary>
        CommandLineWrong,
        /// <summary>
        /// A software exception has occurred.
        /// </summary>
        SoftwareException,
        /// <summary>
        /// Not all EPG data has been collected.
        /// </summary>
        EPGDataIncomplete,
        /// <summary>
        /// The user abandoned the run.
        /// </summary>
        AbandonedByUser,
        /// <summary>
        /// The ini file does not match the hardware configuration.
        /// </summary>
        ParameterTunerMismatch,
        /// <summary>
        /// The log file cannot be written.
        /// </summary>
        LogFileNotAvailable,
        /// <summary>
        /// Some frequencies could not be processed.
        /// </summary>
        SomeFrequenciesNotProcessed,
        /// <summary>
        /// The output file could not be created.
        /// </summary>
        OutputFileNotCreated,
        /// <summary>
        /// The simulation file could not be located or failed to load.
        /// </summary>
        SimulationFileError,
        /// <summary>
        /// No data was collected.
        /// </summary>
        NoDataCollected,
        /// <summary>
        /// The tuner filter could not be loaded.
        /// </summary>
        NoBDATunerFilter,
        /// <summary>
        /// The hardware filter chain could not be created.
        /// </summary>
        HardwareFilterChainNotBuilt,
        /// <summary>
        /// The DVBLogic plugin could not start.
        /// </summary>
        PluginNotStarted,
        /// <summary>
        /// The WMCUtility program has failed.
        /// </summary>
        WMCUtilityFailed
    }

    /// <summary>
    /// The precedence of data for an import files.
    /// </summary>
    public enum DataPrecedence
    {
        /// <summary>
        /// The file data takes precedence over the broadcast data.
        /// </summary>
        File,
        /// <summary>
        /// The broadcast data takes precedence over the file data.
        /// </summary>
        Broadcast,
        /// <summary>
        /// The imported data is appended to the broadcast data.
        /// </summary>
        ImportAppend,
        /// <summary>
        /// The imported data replaces broadcast data.
        /// </summary>
        ImportReplace
    }

    /// <summary>
    /// The format of the ID attribute in an xmltv import file.
    /// </summary>
    public enum XmltvIdFormat
    {
        /// <summary>
        /// The id attribute has no specific format.
        /// </summary>
        Undefined,
        /// <summary>
        /// The id attribue is the service id.
        /// </summary>
        ServiceId,
        /// <summary>
        /// The id attribute is the user channel number.
        /// </summary>
        UserChannelNumber,
        /// <summary>
        /// The id attribute contains the full channel identification (ie nid:tid:sid:name).
        /// </summary>
        FullChannelId,
        /// <summary>
        /// The id attribute contains the name of the channel.
        /// </summary>
        Name,
        /// <summary>
        /// The id attribute contains the Zap2it ATSC string.
        /// </summary>
        Zap2ItAtsc
    }

    /// <summary>
    /// The amount of data a collection controller collects.
    /// </summary>
    public enum CollectionSpan
    {
        /// <summary>
        /// The controller collects all possible data.
        /// </summary>
        AllData,
        /// <summary>
        /// The controller collects only the station data.
        /// </summary>
        StationsOnly,
        /// <summary>
        /// The controller collects only the station and/or channel data.
        /// </summary>
        ChannelsOnly
    }

    /// <summary>
    /// The location of a text substring.
    /// </summary>
    public enum TextLocation
    {
        /// <summary>
        /// The substring is at the start of the text.
        /// </summary>
        Start,
        /// <summary>
        /// The substring is at the end of the text.
        /// </summary>
        End,
        /// <summary>
        /// The substring can occur anywhere.
        /// </summary>
        Anywhere
    }

    /// <summary>
    /// The method used to replace text.
    /// </summary>
    public enum TextReplacementMode
    {
        /// <summary>
        /// Replace only the specified text.
        /// </summary>
        TextOnly,
        /// <summary>
        /// Replace the specified text plus everything that follows.
        /// </summary>
        TextAndFollowing,
        /// <summary>
        /// Replace the specified text plus everything that preceeded it.
        /// </summary>
        TextAndPreceeding,
        /// <summary>
        /// Replace the specified text plus everything else.
        /// </summary>
        Everything
    }

    /// <summary>
    /// The metadata lookup image type.
    /// </summary>
    public enum LookupImageType
    {
        /// <summary>
        /// Type is thumbnail.
        /// </summary>
        Thumbnail,
        /// <summary>
        /// Type is poster.
        /// </summary>
        Poster,
        /// <summary>
        /// Type is banner.
        /// </summary>
        Banner,
        /// <summary>
        /// Type is fanart.
        /// </summary>
        Fanart,
        /// <summary>
        /// Type is small poster.
        /// </summary>
        SmallPoster,
        /// <summary>
        /// Type is small banner.
        /// </summary>
        SmallFanart,
        /// <summary>
        /// No image downloaded.
        /// </summary>
        None
    }

    /// <summary>
    /// The service type of a service.
    /// </summary>
    public enum ServiceType
    {
        /// <summary>
        /// Type is satellite.
        /// </summary>
        Satellite,
        /// <summary>
        /// Type is terrestrial.
        /// </summary>
        Terrestrial,
        /// <summary>
        /// Type is cable.
        /// </summary>
        Cable 
    }

    /// <summary>
    /// The protocols supported by stream collections.
    /// </summary>
    public enum StreamProtocol
    {
        /// <summary>
        /// The protocol is RTSP.
        /// </summary>
        Rtsp,
        /// <summary>
        /// The protocol is RTP/RTCP.
        /// </summary>
        Rtp,
        /// <summary>
        /// The protocol is UDP.
        /// </summary>
        Udp,
        /// <summary>
        /// The protocol is HTTP.
        /// </summary>
        Http
    }

    /// <summary>
    /// The methods used to select a character set
    /// </summary>
    public enum CharacterSetUsage
    {
        /// <summary>
        /// The character set has not been used.
        /// </summary>
        NotUsed,
        /// <summary>
        /// The default method was used.
        /// </summary>
        Default,
        /// <summary>
        /// The character set was determined by the data broadcast.
        /// </summary>
        Broadcast,
        /// <summary>
        /// The character set was determined by a user parameter.
        /// </summary>
        User
    }

    /// <summary>
    /// The identifiers used with the Option parameter.
    /// </summary>
    public enum OptionName
    {
        /// <summary>
        /// Don't log breaks in the data.
        /// </summary>
        AcceptBreaks,
        /// <summary>
        /// Add season/episode numbers to description.
        /// </summary>
        AddSeasonEpisodeToDesc,
        /// <summary>
        /// Autmatically map the data to the channels.
        /// </summary>
        AutoMapEpg,
        /// <summary>
        /// Output the full name as the identity.
        /// </summary>
        ChannelIdFullName,
        /// <summary>
        /// Output the channel name as the identity.
        /// </summary>
        ChannelIdName,
        /// <summary>
        /// Output a sequential number as the identity.
        /// </summary>
        ChannelIdSeqNo,
        /// <summary>
        /// Output the service ID as the identity.
        /// </summary>
        ChannelIdSid,        
        /// <summary>
        /// Check for programme repeats.
        /// </summary>
        CheckForRepeats,
        /// <summary>
        /// Create an audio description tag.
        /// </summary>
        CreateAdTag,
        /// <summary>
        /// Create rhe area/region cross reference file.
        /// </summary>
        CreateArChannels,
        /// <summary>
        /// Create the Bladerunner file.
        /// </summary>
        CreateBrChannels,
        /// <summary>
        /// Create the channel definition file.
        /// </summary>
        CreateChannelDefFile,
        /// <summary>
        /// Create channels that don't appear in the SDT.
        /// </summary>
        CreateMissingChannels,
        /// <summary>
        /// Create a Plex compatible episode-num tag in XMLTV files.
        /// </summary>
        CreatePlexEpisodeNumTag, 
        /// <summary>
        /// Create the SageTV frequency file.
        /// </summary>        
        CreateSageTvFrq,
        /// <summary>
        /// Create satellite reference files.
        /// </summary>
        CreateSatIni,
        /// <summary>
        /// Custom categories override the broadcasters categories.
        /// </summary>
        CustomCategoryOverride,
        /// <summary>
        /// Disable the drivers DiSEqc commands.
        /// </summary>
        DisableDriverDiseqc,
        /// <summary>
        /// Disable the WMC guide loader.
        /// </summary>
        DisableInbandLoader,
        /// <summary>
        /// Don't create a channel when importing if channel changes present and channel not in list.
        /// </summary>
        DontCreateImportChannels,
        /// <summary>
        /// Duplicate data for channels with the same name.
        /// </summary>
        DuplicateSameChannels,
        /// <summary>
        /// Duplicate data for channels with the same name if the destination has no data.
        /// </summary>
        DuplicateSameChannelsNoData,
        /// <summary>
        /// Clear the DVBViewer before loading.
        /// </summary>
        DvbViewerClear,
        /// <summary>
        /// Import the data to DVBViewer.
        /// </summary>
        DvbViewerImport,
        /// <summary>
        /// Import the data to the DVBViewer Recording Service.
        /// </summary>
        DvbViewerRecSvcImport,
        /// <summary>
        /// Make subtitles visible in the DVBViewer EPG.
        /// </summary>
        DvbViewerSubtitleVisible,
        /// <summary>
        /// EIT collections finish on record count.
        /// </summary>
        EitDoneOnCount,
        /// <summary>
        /// Ouput each element of a category in a separate xmltv tag.
        /// </summary>
        ElementPerTag,
        /// <summary>
        /// Convert EIT format bytes.
        /// </summary>
        FormatConvert,
        /// <summary>
        /// Convert EIT format bytes using a conversion table.
        /// </summary>
        FormatConvertTable,
        /// <summary>
        /// Remove EIT format bytes.
        /// </summary>
        FormatRemove,
        /// <summary>
        /// Replace EIT format bytes with a space.
        /// </summary>
        FormatReplace,
        /// <summary>
        /// Ignore WMC recordings when checking for repeats.
        /// </summary>
        IgnoreWmcRecordings,
        /// <summary>
        /// Ensure no output file if no data collected.
        /// </summary>
        NoDataNoFile,
        /// <summary>
        /// Don't create an episode tag.
        /// </summary>
        NoEpisodeTag,
        /// <summary>
        /// Don't create EPG entries if the times are incorrect.
        /// </summary>
        NoInvalidEntries,
        /// <summary>
        /// Don't use the keyboard during the collection process.
        /// </summary>
        NoLogExcluded,
        /// <summary>
        /// Don't remove data from descriptions.
        /// </summary>
        NoRemoveData,
        /// <summary>
        /// Dont check simulcast channels for repeats.
        /// </summary>
        NoSimulcastRepeats,
        /// <summary>
        /// Don't create dummy WMC affiliates.
        /// </summary>
        NoWmcDummyAffiliates,
        /// <summary>
        /// Omit the part number from the xmltv episode tag.
        /// </summary>
        OmitPartNumber,  
        /// <summary>
        /// Import the data to DVBLogic.
        /// </summary>
        PluginImport,
        /// <summary>
        /// Prepend air date to description.
        /// </summary>
        PrefixDescriptionWithAirDate,
        /// <summary>
        /// Prepend season and episode number to subtitle.
        /// </summary>
        PrefixSubtitleWithSeasonEpisode,
        /// <summary>
        /// Process all channels irrespective of type.
        /// </summary>
        ProcessAllStations,
        /// <summary>
        /// Repeat DiSEqC commands if they fail.
        /// </summary>
        RepeatDiseqc,
        /// <summary>
        /// Round programme times.
        /// </summary>
        RoundTime,
        /// <summary>
        /// Run the collection process as a Windows service.
        /// </summary>
        RunFromService,
        /// <summary>
        /// Run the WMC tasks for reindexing and PVR scheduling after import.
        /// </summary>
        RunWmcTasks,
        /// <summary>
        /// Don't output to the SageTV file if a channel has no EPG data.
        /// </summary>
        SageTvOmitNoEpg,
        /// <summary>
        /// Set the previously shown XMLTV tag to a default date if it is present but empty.
        /// </summary>
        SetXmltvPreviouslyShownDefault,
        /// <summary>
        /// Use SID only to match EPG data with channel.
        /// </summary>
        SidMatchOnly,
        /// <summary>
        /// Save the channel information.
        /// </summary>        
        StoreStationInfo,
        /// <summary>
        /// Change the DiSEqC switch after starting the DirectShow graph.
        /// </summary>
        SwitchAfterPlay,
        /// <summary>
        /// Change the DiSEqC switch after tuning the frequency.
        /// </summary>
        SwitchAfterTune,
        /// <summary>
        /// Only terrestrial channels are relevant.
        /// </summary>
        TcRelevantOnly,
        /// <summary>
        /// Use the codepage from the broadcast.
        /// </summary>
        UseBroadcastCp,
        /// <summary>
        /// Create an XMLTV file suitable for BSEPG.
        /// </summary>
        UseBsepg,
        /// <summary>
        /// Use the channel ID as the idfentity.
        /// </summary>
        UseChannelId,
        /// <summary>
        /// Use the content subtype when processing content type.
        /// </summary>
        UseContentSubtype,
        /// <summary>
        /// Use the programme description as the category.
        /// </summary>
        UseDescAsCategory,
        /// <summary>
        /// Use the programme description as the subtitle.
        /// </summary>
        UseDescAsSubtitle,
        /// <summary>
        /// Use DiSEqC commands to change the switch.
        /// </summary>
        UseDiseqcCommand,
        /// <summary>
        /// Export to DVBViewer.
        /// </summary>
        UseDvbViewer,
        /// <summary>
        /// Use FreeSat tables to decode compressed EIT data.
        /// </summary>
        UseFreeSatTables,
        /// <summary>
        /// Download station images.
        /// </summary>
        UseImage,
        /// <summary>
        /// Use the logical channel number as the identity.
        /// </summary>
        UseLcn,
        /// <summary>
        /// Ignore the programme description.
        /// </summary>
        UseNoDesc,
        /// <summary>
        /// Use the numeric part of the CRID as the eisode identifier.
        /// </summary>
        UseNumericCrid,
        /// <summary>
        /// Use the whole CRID as the episode identifier.
        /// </summary>
        UseRawCrid,
        /// <summary>
        /// Only change the DiSEqC switch if the tuner is not in use.
        /// </summary>
        UseSafeDiseqc,        
        /// <summary>
        /// Use the stored channel information in place of the broadcast data.
        /// </summary>
        UseStoredStationInfo,
        /// <summary>
        /// Use the in-built WMC repeat checking with the programme titles.
        /// </summary>
        UseWmcRepeatCheck,
        /// <summary>
        /// Use the in-built WMC repeat checking with broadcaster references.
        /// </summary>
        UseWmcRepeatCheckBroadcast,
        /// <summary>
        /// Only create valid episode tags.
        /// </summary>
        ValidEpisodeTag,
        /// <summary>
        /// Only a VBox compatible episode tags.
        /// </summary>
        VBoxEpisodeTag,
        /// <summary>
        /// Import the data to WMC.
        /// </summary>
        WmcImport,
        /// <summary>
        /// Mark 4 star programmes as special for WMC.
        /// </summary>
        WmcStarSpecial,
    }

    /// <summary>
    /// The identifiers used with the TraceId parameter.
    /// </summary>
    public enum TraceName
    {
        /// <summary>
        /// Log new channels.
        /// </summary>
        AddChannel,
        /// <summary>
        /// Log BDA information.
        /// </summary>
        Bda,
        /// <summary>
        /// Log BDA pid mapping.
        /// </summary>
        BdaPidMap,
        /// <summary>
        /// Log BDA signal statistics.
        /// </summary>
        BdaSigStats,
        /// <summary>
        /// Dump BellTV sections.
        /// </summary>
        BellTvSections,
        /// <summary>
        /// Log the bouquet data.
        /// </summary>
        BouquetSections,
        /// <summary>
        /// Log continuity errors.
        /// </summary>
        ContinuityErrors,
        /// <summary>
        /// Log the D3 descriptor.
        /// </summary>
        DescriptorD3,
        /// <summary>
        /// Log Dish Network data.
        /// </summary>
        DishNetworkSections,
        /// <summary>
        /// Log the completion status of DSMCC blocks.
        /// </summary>
        DsmccComplete,
        /// <summary>
        /// Log the DSMCC directory layout.
        /// </summary>
        DsmccDirLayout,
        /// <summary>
        /// Log the contents of DSMCC files.
        /// </summary>
        DsmccDumpFiles,
        /// <summary>
        /// Log the contents of the DSMCC EPG files.
        /// </summary>
        DsmccFile,
        /// <summary>
        /// Log the DSMCC modules.
        /// </summary>
        DsmccModules,
        /// <summary>
        /// Log the DSMCC EPG fields.
        /// </summary>
        DsmccRecLayout,
        /// <summary>
        /// Log the DSMCC records.
        /// </summary>
        DsmccRecord,
        /// <summary>
        /// Dump the MHW1/2 category data.
        /// </summary>
        DumpCategorySections,
        /// <summary>
        /// Dump the MHW1/2 channel data.
        /// </summary>
        DumpChannelSections,
        /// <summary>
        /// Dump the MHW1/2 summary sections.
        /// </summary>
        DumpSummarySections,
        /// <summary>
        /// Dump the MHW1/2 title sections.
        /// </summary>
        DumpTitleSections,
        /// <summary>
        /// Log programme repeats.
        /// </summary>
        DuplicatesFlagged,
        /// <summary>
        /// Log the EIT format control bytes.
        /// </summary>
        EitControlBytes,
        /// <summary>
        /// Dump the FreeSat data.
        /// </summary>
        FreeSatSections,
        /// <summary>
        /// Log generic descriptors.
        /// </summary>
        GenericDescriptor,
        /// <summary>
        /// Log only generic descriptors.
        /// </summary>
        GenericDescriptorOnly,
        /// <summary>
        /// Only log the protocol for OpenTV.
        /// </summary>
        GenericOpenTvRecord,
        /// <summary>
        /// Log metadata lookup results.
        /// </summary>
        LookupName,
        /// <summary>
        /// Log metadata lookup results for specified name.
        /// </summary>
        Lookups,
        /// <summary>
        /// Log metadata lookup details.
        /// </summary>
        LookupsDetail,
        /// <summary>
        /// Log metadata lookup errors.
        /// </summary>
        LookupsError,
        /// <summary>
        /// Log metadata lookup thatv were not located.
        /// </summary>
        LookupsNotFound,
        /// <summary>
        /// Dump the MPEG2 data packets.
        /// </summary>
        Mpeg2Packets,
        /// <summary>
        /// Log the MPEG2 sections stored and ignored.
        /// </summary>
        Mpeg2SectionsStored,
        /// <summary>
        /// Log the PID's used.
        /// </summary>
        PidHandler,
        /// <summary>
        /// Log the data blocks created by the PID handlers.
        /// </summary>
        PidHandlerBlocks,
        /// <summary>
        /// Log the PID activity for service information.
        /// </summary>
        PidHandlerSi,
        /// <summary>
        /// Log the PID numbers used.
        /// </summary>
        PidNumbers,
        /// <summary>
        /// Log the names of DSMCC PNG files.
        /// </summary>
        PngNames,
        /// <summary>
        /// Dump the protocol.
        /// </summary>
        Protocol,
        /// <summary>
        /// Set the PSIFilter up for logging.
        /// </summary>
        PsiFilter,
        /// <summary>
        /// Log the service entries in Australian MHEG5 data.
        /// </summary>
        ServiceEntries,
        /// <summary>
        /// Log the transport packets.
        /// </summary>
        TransportPackets,
        /// <summary>
        /// Log the packets from a transport stream file.
        /// </summary>
        TsFilePackets,
        /// <summary>
        /// Log the packets if they are relevant.
        /// </summary>
        TsPidPackets        
    }

    /// <summary>
    /// The identifiers used with the DebugId parameter.
    /// </summary>
    public enum DebugName
    {
        /// <summary>
        /// Adjust programme start times.
        /// </summary>
        AdjustStartTimes,
        /// <summary>
        /// Dump OpenTV data as a bit pattern.
        /// </summary>
        BitPattern,
        /// <summary>
        /// Extract the CanalSat zip files from the DSMCC carousel.
        /// </summary>
        CanalSatEpg,
        /// <summary>
        /// Process unknown carousels.
        /// </summary>
        Carousels,
        /// <summary>
        /// Generate a category cross-reference.
        /// </summary>
        CatXref,
        /// <summary>
        /// Create channels if they don't exist.
        /// </summary>        
        DontLogGaps,
        /// <summary>
        /// Don't log programme start time overlaps.
        /// </summary>
        DontLogOverlaps,
        /// <summary>
        /// Finish MHEG5 collections even if the data is incomplete.
        /// </summary>
        DsmccIgnoreIncomplete,
        /// <summary>
        /// Dump AIT sections.
        /// </summary>
        DumpAitSections,
        /// <summary>
        /// Dump EIT sections.
        /// </summary>
        DumpEitSections,
        /// <summary>
        /// Dump OpenTV summary sections.
        /// </summary>
        DumpOpenTvSummarySections,
        /// <summary>
        /// Dump the service description data blocks.
        /// </summary>
        DumpSdtBlock,
        /// <summary>
        /// Log the contents of an EIT Zip file.
        /// </summary>
        EitZipContents,
        /// <summary>
        /// Log the result of an episode metadata lookup.
        /// </summary>        
        EpisodeResult,
        /// <summary>
        /// Dump the ATSC event information table.
        /// </summary>
        EventInformationTable,
        /// <summary>
        /// Create an extended log file (up to 64mb).
        /// </summary>
        ExtendedLogFile,
        /// <summary>
        /// Dump the ATSC extended text table.
        /// </summary>
        ExtendedTextTable,
        /// <summary>
        /// Dump unspecified FeeSat sections.
        /// </summary>
        GetOtherSections,
        /// <summary>
        /// Switch off the xml character checking.
        /// </summary>
        IgnoreXmlChars,
        /// <summary>
        /// Log titles and descriptions that should be combined.
        /// </summary>
        LogBrokenTitles,
        /// <summary>
        /// Log the CA data blocks.
        /// </summary>
        LogCaData,
        /// <summary>
        /// Log an OpenTV category.
        /// </summary>
        LogCatEvent,
        /// <summary>
        /// Log all channels.
        /// </summary>
        LogChannels,
        /// <summary>
        /// Log the channel information in detail.
        /// </summary>
        LogChannelData,
        /// <summary>
        /// Log the channel groups (OpenTV only).
        /// </summary>
        LogChannelGroups,
        /// <summary>
        /// Log the codepages used.
        /// </summary>
        LogCodepages,
        /// <summary>
        /// Log the programme descriptions.
        /// </summary>
        LogDescriptions,
        /// <summary>
        /// Log descriptors.
        /// </summary>
        LogDescriptorData,
        /// <summary>
        /// Log the progress of the DVBViewer import process.
        /// </summary>
        LogDvbViewerImport,
        /// <summary>
        /// Log EPG linkage information.
        /// </summary>
        LogEpgLinkage,
        /// <summary>
        /// Log episode information.
        /// </summary>
        LogEpisodeInfo,
        /// <summary>
        /// Log OpenTV extended descriptions.
        /// </summary>
        LogExtendedDescriptions,
        /// <summary>
        /// Log escaped Huffman strings.
        /// </summary>
        LogHuffman,
        /// <summary>
        /// Log a JSON structure.
        /// </summary>
        LogJsonStructure,
        /// <summary>
        /// Log JSON text.
        /// </summary>
        LogJsonText,
        /// <summary>
        /// Set the Sat>IP log level.
        /// </summary>        
        LogLevel,
        /// <summary>
        /// Log incomplete EIT entries.
        /// </summary>
        LogIncompleteEit,
        /// <summary>
        /// Log merged channels.
        /// </summary>
        LogMergedChannels,
        /// <summary>
        /// Log the series information from an MXF file.
        /// </summary>
        LogMxfSeries,
        /// <summary>
        /// Log the warninga when creating an MXF file.
        /// </summary>
        LogMxfWarnings,
        /// <summary>
        /// Log the network data.
        /// </summary>
        LogNetwork,
        /// <summary>
        /// Log the network map.
        /// </summary>
        LogNetworkMap,
        /// <summary>
        /// Log the BellTV or Dish Network original description.
        /// </summary>
        LogOriginal,
        /// <summary>
        /// Log descriptors that are out of scope.
        /// </summary>
        LogOutOfScope,
        /// <summary>
        /// Log the program map table.
        /// </summary>
        LogPmt,
        /// <summary>
        /// Dump the ATSC extended text data.
        /// </summary>
        LogPsipExtendedText,
        /// <summary>
        /// Log the response keys from lookup requests.
        /// </summary>
        LogResponseKeys,
        /// <summary>
        /// Log the use of Schedules Direct genres.
        /// </summary>
        LogSdGenres,
        /// <summary>
        /// Log the use of Schedules Direct prefixes.
        /// </summary>
        LogSdPrefixes,
        /// <summary>
        /// Log the use of season/episode Id's.
        /// </summary>
        LogSeIds,
        /// <summary>
        /// Log the use of season/episode CRId's.
        /// </summary>
        LogSeCrids,
        /// <summary>
        /// Log the station type.
        /// </summary>
        LogStationType,
        /// <summary>
        /// Log the stream data.
        /// </summary>
        LogStreamInfo,
        /// <summary>
        /// Log the programme titles.
        /// </summary>
        LogTitles,
        /// <summary>
        /// Log undefined OpenTV records.
        /// </summary>
        LogUndefinedRecords,
        /// <summary>
        /// Log unknown OpenTV records.
        /// </summary>
        LogUnknownRecords,
        /// <summary>
        /// Dump the ATSC master guide table.
        /// </summary>
        MasterGuideTable,
        /// <summary>
        /// Set the MHEG5 PID.
        /// </summary>
        Mheg5Pid,
        /// <summary>
        /// Dump MHW1 category sections.
        /// </summary>
        Mhw1CategorySections,
        /// <summary>
        /// Log missing MHW2 summary sections.
        /// </summary>
        Mhw2SummaryMissing,
        /// <summary>
        /// Log unknown MHW2 sections.
        /// </summary>
        Mhw2Unknown,
        /// <summary>
        /// Don't output a default original air date of the programme start time.
        /// </summary>
        MxfNoDefAirDate,
        /// <summary>
        /// Don't output a separate program entry if a program is flagged as new.
        /// </summary>
        MxfNoNewProgEntry,
        /// <summary>
        /// Dump NagraGuide data.
        /// </summary>
        NagraBlocks,
        /// <summary>
        /// Process NDS data.
        /// </summary>
        NDS,
        /// <summary>
        /// Log NDS binXml data.
        /// </summary>
        NDSBinXml,
        /// <summary>
        /// Log NDS binXml block data.
        /// </summary>
        NDSBinXmlBlocks,
        /// <summary>
        /// Log NDS SQL event data.
        /// </summary>
        NDSSqlEvents,
        /// <summary>
        /// Log NDS SQL group data.
        /// </summary>
        NDSSqlGroups,
        /// <summary>
        /// Log NDS SQL service data.
        /// </summary>
        NDSSqlServices,
        /// <summary>
        /// Log NDS SQL string data.
        /// </summary>
        NDSSqlStrings,
        /// <summary>
        /// Dump network information table sections.
        /// </summary>
        NitSections,
        /// <summary>
        /// Don't output log messages to the console window.
        /// </summary>
        NotQuiet,
        /// <summary>
        /// WMC is not present.
        /// </summary>
        NoWmc,
        /// <summary>
        /// Dump the data from other sections.
        /// </summary>
        OtherSections,
        /// <summary>
        /// Dump the ATSC rating region data.
        /// </summary>
        RatingRegionTable,
        /// <summary>
        /// Log replays.
        /// </summary>
        Replays,
        /// <summary>
        /// Don't delete the EIT carousel zip data.
        /// </summary>
        RetainZipData,
        /// <summary>
        /// Schedules Direct testing.
        /// </summary>
        SchedulesDirect,
        /// <summary>
        /// Log multiple colons in OpenTV data.
        /// </summary>
        ShowColons,
        /// <summary>
        /// Dump SiehFern data.
        /// </summary>
        SiehfernBlocks,
        /// <summary>
        /// Dump SiehFern channel data.
        /// </summary>
        SiehfernChannelBlocks,
        /// <summary>
        /// Dump SiehFern EPG blocks.
        /// </summary>
        SiehfernEpgBlocks,
        /// <summary>
        /// Dump SiehFern EPG details.
        /// </summary>
        SiehfernEpgDetail,
        /// <summary>
        /// Log the contents of the stack.
        /// </summary>
        StackTrace,
        /// <summary>
        /// Dump the OpenTV title data.
        /// </summary>
        TitleSection,        
        /// <summary>
        /// Log unknown descriptors.
        /// </summary>        
        UnknownDescriptors,
        /// <summary>
        /// Update the channel information.
        /// </summary>
        UpdateChannels,
        /// <summary>
        /// Update the station information.
        /// </summary>
        UpdateStation,
        /// <summary>
        /// Use DVBLink virtual tuners.
        /// </summary>
        UseDvbLink,
        /// <summary>
        /// Use the specific network provider.
        /// </summary>
        UseSpecificNp,
        /// <summary>
        /// Dump the ATSC virtual channel data.
        /// </summary>
        VirtualChannelTable,
        /// <summary>
        /// Create new WMC channels if they don't exist.
        /// </summary>
        WmcNewChannels,
        /// <summary>
        /// Create one MXF programme for each unique programme
        /// </summary>
        WmcUniqueProgramme,
        /// <summary>
        /// Don't set a default date if previously-shown has no value
        /// </summary>
        XmltvNoDefPlayDate
    }

    /// <summary>
    /// The level to be used in equality testing.
    /// </summary>
    public enum EqualityLevel
    {
        /// <summary>
        /// All properties must be checked.
        /// </summary>
        Entirely,
        /// <summary>
        /// Only identification fields are checked.
        /// </summary>
        Identity,
    }

    /// <summary>
    /// The streaming server type.
    /// </summary>
    public enum StreamServerType
    {
        /// <summary>
        /// Undefined.
        /// </summary>
        Any,
        /// <summary>
        /// Sat>IP.
        /// </summary>
        SatIP,
        /// <summary>
        /// VBox.
        /// </summary>
        VBox,
    }

    /// <summary>
    /// The mode used to extract the correct event category depending on the output.
    /// </summary>
    public enum EventCategoryMode
    {
        /// <summary>
        /// The category is for an XMLTV file
        /// </summary>
        Xmltv,
        /// <summary>
        /// The category is for Windows Media Centre 
        /// </summary>
        Wmc,
        /// <summary>
        /// The category is for the DVBLogic plugin
        /// </summary>
        DvbLogic,
        /// <summary>
        /// The category is for DVBViewer
        /// </summary>
        DvbViewer
    }

    /// <summary>
    /// The mode used to extract the correct event category depending on the output.
    /// </summary>
    public enum ImportImageMode
    {
        /// <summary>
        /// Do not download images
        /// </summary>
        None,
        /// <summary>
        /// Download just channel images.
        /// </summary>
        Channels,
        /// <summary>
        /// Download just programme images.
        /// </summary>
        Programmes,
        /// <summary>
        /// Download both channel and programme images.
        /// </summary>
        Both
    }

    /// <summary>
    /// The providers of TV metadata.
    /// </summary>
    public enum TVLookupProvider
    {
        /// <summary>
        /// The provider is TheTVDB database
        /// </summary>
        Tvdb,
        /// <summary>
        /// The provider is the TMDB database.
        /// </summary>
        Tmdb
    }
}

