// checks that another pearl isn't already queued. If one of the same type is already
        // in the queue this method just returns false. If a conflicting pearl is in the queue
        // this method removes it and returns false, so we don't end up with, for example,
        // a 'keep it up' message in a block that contains a 'your lap times are worsening' message
        private Boolean checkPearlOfWisdomValid(PearlsOfWisdom.PearlType newPearlType)
        {
            Boolean isValid = true;

            if (queuedClips != null && queuedClips.Count > 0)
            {
                List <String> pearlsToPurge = new List <string>();
                foreach (String eventName in queuedClips.Keys)
                {
                    if (clipIsPearlOfWisdom(eventName))
                    {
                        Console.WriteLine("There's already a pearl in the queue, can't add another");
                        isValid = false;
                        if (eventName != PearlsOfWisdom.getMessageFolder(newPearlType))
                        {
                            pearlsToPurge.Add(eventName);
                        }
                    }
                }
                foreach (String pearlToPurge in pearlsToPurge)
                {
                    queuedClips.Remove(pearlToPurge);
                    Console.WriteLine("Queue contains a pearl " + pearlToPurge + " which conflicts with " + newPearlType);
                }
            }
            return(isValid);
        }
 public void playMessage(QueuedMessage queuedMessage, PearlsOfWisdom.PearlType pearlType, double pearlMessageProbability)
 {
     if (queuedMessage.canBePlayed)
     {
         lock (queuedClips)
         {
             if (queuedClips.Contains(queuedMessage.messageName))
             {
                 Console.WriteLine("Clip for event " + queuedMessage.messageName + " is already queued, ignoring");
                 return;
             }
             else
             {
                 PearlsOfWisdom.PearlMessagePosition pearlPosition = PearlsOfWisdom.PearlMessagePosition.NONE;
                 if (pearlType != PearlsOfWisdom.PearlType.NONE && checkPearlOfWisdomValid(pearlType))
                 {
                     pearlPosition = pearlsOfWisdom.getMessagePosition(pearlMessageProbability);
                 }
                 if (pearlPosition == PearlsOfWisdom.PearlMessagePosition.BEFORE)
                 {
                     QueuedMessage pearlQueuedMessage = new QueuedMessage(queuedMessage.abstractEvent);
                     pearlQueuedMessage.dueTime = queuedMessage.dueTime;
                     queuedClips.Add(PearlsOfWisdom.getMessageFolder(pearlType), pearlQueuedMessage);
                 }
                 queuedClips.Add(queuedMessage.messageName, queuedMessage);
                 if (pearlPosition == PearlsOfWisdom.PearlMessagePosition.AFTER)
                 {
                     QueuedMessage pearlQueuedMessage = new QueuedMessage(queuedMessage.abstractEvent);
                     pearlQueuedMessage.dueTime = queuedMessage.dueTime;
                     queuedClips.Add(PearlsOfWisdom.getMessageFolder(pearlType), pearlQueuedMessage);
                 }
             }
         }
     }
 }
 private Boolean clipIsPearlOfWisdom(String eventName)
 {
     foreach (PearlsOfWisdom.PearlType pearlType in Enum.GetValues(typeof(PearlsOfWisdom.PearlType)))
     {
         if (pearlType != PearlsOfWisdom.PearlType.NONE && PearlsOfWisdom.getMessageFolder(pearlType) == eventName)
         {
             return(true);
         }
     }
     return(false);
 }
 public void setPearlsOfWisdom(PearlsOfWisdom pearlsOfWisdom)
 {
     this.pearlsOfWisdom = pearlsOfWisdom;
 }
 public void setPearlsOfWisdom(PearlsOfWisdom pearlsOfWisdom)
 {
     this.pearlsOfWisdom = pearlsOfWisdom;
 }