private bool TalkCanBeScheduledInMorning(int duration, Track track)
 {
     return (duration <= track.MorningSession.TimeRemaining.TotalMinutes);
 }
Beispiel #2
0
        private static Collection<Track> NewMethod(Collection<Talk> allTalks)
        {
            Collection<Track> allTracks = new Collection<Track>();

            Queue<Talk> queue = new Queue<Talk>();
            foreach (var item in allTalks)
            {
                if (!item.IsLightning)
                    queue.Enqueue(item);
            }

            Track track = null;
            Talk mightNeedToBeRemovedTalk = null;
            while (queue.Count > 0)
            {
                if (track != null && track.IsFull)
                {
                    track = null;
                }

                if (track == null)
                {
                    track = new Track();
                    allTracks.Add(track);
                }

                Talk currentTalk = queue.Dequeue();

                if (!track.MorningSession.IsFull())
                {
                    if (track.MorningSession.Talks.Count == 0)
                    {
                        currentTalk.Start = track.MorningSession.Start;
                        currentTalk.End = currentTalk.Start + currentTalk.Duration;
                        track.MorningSession.Talks.Add(currentTalk);
                    }
                    else
                    {
                        Talk lastTalkInTrack = track.MorningSession.Talks.Last();
                        currentTalk.Start = lastTalkInTrack.End;
                        currentTalk.End = currentTalk.Start + currentTalk.Duration;
                        if (track.MorningSession.IsValid(currentTalk))
                        {
                            track.MorningSession.Talks.Add(currentTalk);
                        }
                        else
                        {
                            if (mightNeedToBeRemovedTalk == null)
                            {
                                mightNeedToBeRemovedTalk = currentTalk;
                                currentTalk.Start = 0;
                                currentTalk.End = 0;
                                queue.Enqueue(currentTalk);
                                continue;
                            }

                            if (mightNeedToBeRemovedTalk == currentTalk)
                            {
                                Talk lastTalk = track.MorningSession.Talks.Last();
                                lastTalk.Start = 0;
                                lastTalk.End = 0;
                                track.MorningSession.Talks.RemoveAt(track.MorningSession.Talks.Count - 1);
                                queue.Enqueue(lastTalk);
                            }

                            currentTalk.Start = 0;
                            currentTalk.End = 0;
                            queue.Enqueue(currentTalk);
                        }
                    }
                }
                else
                {
                    if (track.AfternoonSession.Talks.Count == 0)
                    {
                        currentTalk.Start = track.AfternoonSession.Start;
                        currentTalk.End = currentTalk.Start + currentTalk.Duration;
                        track.AfternoonSession.Talks.Add(currentTalk);
                    }
                    else
                    {
                        Talk lastTalkInTrack = track.AfternoonSession.Talks.Last();
                        currentTalk.Start = lastTalkInTrack.End;
                        currentTalk.End = currentTalk.Start + currentTalk.Duration;
                        if (track.AfternoonSession.IsValid(currentTalk))
                        {
                            track.AfternoonSession.Talks.Add(currentTalk);
                        }
                        else
                        {
                            currentTalk.Start = 0;
                            currentTalk.End = 0;
                            queue.Enqueue(currentTalk);
                        }
                    }
                }
            }

            foreach (var item in allTalks)
            {
                if (item.IsLightning)
                    queue.Enqueue(item);
            }

            while (queue.Count > 0)
            {
                Talk currentTalk = queue.Dequeue();
                var currentTrack = allTracks.FirstOrDefault(t => !t.IsFull);
                currentTalk.Start = currentTrack.AfternoonSession.Talks.Last().End;
                currentTrack.AfternoonSession.Talks.Add(currentTalk);
                currentTrack.NetworkEvent.Start = 17;
            }

            return allTracks;
        }