private static void _mediaReadFields(MySqlDataReader dataReader, PersistentMedia media)
 {
     uint flags = dataReader.IsDBNull(dataReader.GetOrdinal("flags")) ? (uint)0 : dataReader.GetUInt32("flags");
     byte typVideo = dataReader.IsDBNull(dataReader.GetOrdinal("typVideo")) ? (byte)0 : dataReader.GetByte("typVideo");
     media._mediaName = dataReader.IsDBNull(dataReader.GetOrdinal("MediaName")) ? string.Empty : dataReader.GetString("MediaName");
     media._duration = dataReader.IsDBNull(dataReader.GetOrdinal("Duration")) ? default(TimeSpan) : dataReader.GetTimeSpan("Duration");
     media._durationPlay = dataReader.IsDBNull(dataReader.GetOrdinal("DurationPlay")) ? default(TimeSpan) : dataReader.GetTimeSpan("DurationPlay");
     media._folder = dataReader.IsDBNull(dataReader.GetOrdinal("Folder")) ? string.Empty : dataReader.GetString("Folder");
     media._fileName = dataReader.IsDBNull(dataReader.GetOrdinal("FileName")) ? string.Empty : dataReader.GetString("FileName");
     media._fileSize = dataReader.IsDBNull(dataReader.GetOrdinal("FileSize")) ? 0 : dataReader.GetUInt64("FileSize");
     media.idFormat = dataReader.IsDBNull(dataReader.GetOrdinal("idFormat")) ? 0 : dataReader.GetUInt64("idFormat");
     media._lastUpdated = _readDateTimeField(dataReader, "LastUpdated");
     media._mediaStatus = (TMediaStatus)(dataReader.IsDBNull(dataReader.GetOrdinal("statusMedia")) ? 0 : dataReader.GetInt32("statusMedia"));
     media._mediaType = (TMediaType)(dataReader.IsDBNull(dataReader.GetOrdinal("typMedia")) ? 0 : dataReader.GetInt32("typMedia"));
     media._tCStart = dataReader.IsDBNull(dataReader.GetOrdinal("TCStart")) ? default(TimeSpan) : dataReader.GetTimeSpan("TCStart");
     media._tCPlay = dataReader.IsDBNull(dataReader.GetOrdinal("TCPlay")) ? default(TimeSpan) : dataReader.GetTimeSpan("TCPlay");
     media.idProgramme = dataReader.IsDBNull(dataReader.GetOrdinal("idProgramme")) ? 0 : dataReader.GetUInt64("idProgramme");
     media._audioVolume = dataReader.IsDBNull(dataReader.GetOrdinal("AudioVolume")) ? 0 : dataReader.GetDecimal("AudioVolume");
     media._audioLevelIntegrated = dataReader.IsDBNull(dataReader.GetOrdinal("AudioLevelIntegrated")) ? 0 : dataReader.GetDecimal("AudioLevelIntegrated");
     media._audioLevelPeak = dataReader.IsDBNull(dataReader.GetOrdinal("AudioLevelPeak")) ? 0 : dataReader.GetDecimal("AudioLevelPeak");
     media._audioChannelMapping = dataReader.IsDBNull(dataReader.GetOrdinal("typAudio")) ? TAudioChannelMapping.Stereo : (TAudioChannelMapping)dataReader.GetByte("typAudio");
     media.HasExtraLines = (typVideo & (byte)0x80) > 0;
     media._videoFormat = (TVideoFormat)(typVideo & 0x7F);
     media._idAux = dataReader.IsDBNull(dataReader.GetOrdinal("idAux")) ? string.Empty : dataReader.GetString("idAux");
     media._killDate = _readDateTimeField(dataReader, "KillDate");
     media._mediaGuid = dataReader.IsDBNull(dataReader.GetOrdinal("MediaGuid")) ? Guid.Empty : dataReader.GetGuid("MediaGuid");
     media._mediaEmphasis = (TMediaEmphasis)((flags >> 8) & 0xF);
     media._parental = (TParental)((flags >> 12) & 0xF);
     if (media is ServerMedia)
         ((ServerMedia)media)._doNotArchive = (flags & 0x1) != 0;
     media._mediaCategory = (TMediaCategory)((flags >> 4) & 0xF); // bits 4-7 of 1st byte
 }
 private static Boolean _mediaFillParamsAndExecute(MySqlCommand cmd, PersistentMedia media)
 {
     cmd.Parameters.AddWithValue("@idProgramme", media.idProgramme);
     cmd.Parameters.AddWithValue("@idFormat", media.idFormat);
     cmd.Parameters.AddWithValue("@idAux", media.idAux);
     if (media.MediaGuid == Guid.Empty)
         cmd.Parameters.AddWithValue("@MediaGuid", DBNull.Value);
     else
         cmd.Parameters.Add("@MediaGuid", MySqlDbType.Binary).Value = media.MediaGuid.ToByteArray();
     if (media.KillDate == default(DateTime))
         cmd.Parameters.AddWithValue("@KillDate", DBNull.Value);
     else
         cmd.Parameters.AddWithValue("@KillDate", media.KillDate);
     uint flags = ((media is ServerMedia && (media as ServerMedia).DoNotArchive) ? (uint)0x1 : (uint)0x0)
                 | ((uint)(media.MediaCategory) << 4) // bits 4-7 of 1st byte
                 | ((uint)media.MediaEmphasis << 8) // bits 1-3 of second byte
                 | ((uint)media.Parental << 12) // bits 4-7 of second byte
                 ;
     cmd.Parameters.AddWithValue("@flags", flags);
     if (media is ServerMedia && media.Directory is ServerDirectory)
     {
         cmd.Parameters.AddWithValue("@idServer", ((media as ServerMedia).Directory as ServerDirectory).Server.idServer);
         cmd.Parameters.AddWithValue("@typVideo", ((byte)media.VideoFormat) | (media.HasExtraLines ? (byte)0x80 : (byte)0x0));
     }
     if (media is ServerMedia && media.Directory is AnimationDirectory)
     {
         cmd.Parameters.AddWithValue("@idServer", ((media as ServerMedia).Directory as AnimationDirectory).Server.idServer);
         cmd.Parameters.AddWithValue("@typVideo", DBNull.Value);
     }
     if (media is ArchiveMedia && media.Directory is ArchiveDirectory)
     {
         cmd.Parameters.AddWithValue("@idArchive", (((media as ArchiveMedia).Directory) as ArchiveDirectory).IdArchive);
         cmd.Parameters.AddWithValue("@typVideo", (byte)media.VideoFormat);
     }
     cmd.Parameters.AddWithValue("@MediaName", media.MediaName);
     cmd.Parameters.AddWithValue("@Duration", media.Duration);
     cmd.Parameters.AddWithValue("@DurationPlay", media.DurationPlay);
     cmd.Parameters.AddWithValue("@Folder", media.Folder);
     cmd.Parameters.AddWithValue("@FileSize", media.FileSize);
     cmd.Parameters.AddWithValue("@FileName", media.FileName);
     if (media.LastUpdated == default(DateTime))
         cmd.Parameters.AddWithValue("@LastUpdated", DBNull.Value);
     else
         cmd.Parameters.AddWithValue("@LastUpdated", media.LastUpdated);
     cmd.Parameters.AddWithValue("@statusMedia", (Int32)media.MediaStatus);
     cmd.Parameters.AddWithValue("@typMedia", (Int32)media.MediaType);
     cmd.Parameters.AddWithValue("@typAudio", (byte)media.AudioChannelMapping);
     cmd.Parameters.AddWithValue("@AudioVolume", media.AudioVolume);
     cmd.Parameters.AddWithValue("@AudioLevelIntegrated", media.AudioLevelIntegrated);
     cmd.Parameters.AddWithValue("@AudioLevelPeak", media.AudioLevelPeak);
     cmd.Parameters.AddWithValue("@TCStart", media.TCStart);
     cmd.Parameters.AddWithValue("@TCPlay", media.TCPlay);
     lock (connection)
     {
         try
         {
             cmd.ExecuteNonQuery();
         }
         catch (Exception e)
         { Debug.WriteLine(media, e.Message); }
     }
     return true;
 }