private void ChangeSession(string name)
 {
     if (String.IsNullOrEmpty(name))
     {
         SelectedSession     = null;
         SessionName         = String.Empty;
         selectedSessionName = null;
         newSession          = true;
         IsRuleset           = false;
         SessionClips        = new ObservableCollection <AudioClip>();
         SessionClipsView    = CollectionViewSource.GetDefaultView(SessionClips);
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedSessionName)));
     }
     else
     {
         SelectedSession     = SessionsMgr.GetSessionCopy(name);
         originalSessionName = name;
         selectedSessionName = name;
         SessionName         = name;
         if (SelectedSession != null)
         {
             IsRuleset        = SelectedSession.IsRuleset;
             newSession       = false;
             SessionClips     = new ObservableCollection <AudioClip>(SelectedSession.SessionAudioClips);
             SessionClipsView = CollectionViewSource.GetDefaultView(SessionClips);
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SessionNames)));
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedSessionName)));
         }
     }
     UpdateAudioClips();
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SessionClips)));
 }
        private void SaveSession(object obj)
        {
            MessageWin messageWin;
            var        msg = "Session saved.";
            int        ret;

            if (newSession)
            {
                ret = SessionsMgr.AddSession(SessionName, null);
                if (ret < 0)
                {
                    msg = ret == -1
                        ? "Error: Problem saving session to database." :
                          "Error: Session name already exists - please choose another name.";
                    messageWin = new MessageWin("Save Session", msg);
                    messageWin.Show();
                    return;
                }
                else
                {
                    SelectedSession = SessionsMgr.GetSessionCopy(SessionName);
                    msg             = "New session saved.";
                }
            }
            SelectedSession.IsRuleset = IsRuleset;
            string newSessionName = SessionName;

            SelectedSession.SessionName = SessionName;
            selectedSessionName         = SessionName;
            SelectedSession.SessionAudioClipsList.Clear();
            if (SessionClips != null)
            {
                foreach (var sessionClip in SessionClips)
                {
                    SelectedSession.SessionAudioClipsList.Add(sessionClip.ClipId);
                }
            }
            ret = SessionsMgr.UpdateSession(SelectedSession);
            if (ret > 0)
            {
                EventSystem.Publish(new SessionsInventoryChanged());
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SessionNames)));
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedSessionName)));
                ChangeSession(newSessionName);
                EventSystem.Publish(new SessionInventoryChanged()
                {
                    SessionName = newSessionName
                });
            }
            else if (ret == -1)
            {
                msg = "Error: Session name already exists - please choose another name.";
            }
            else if (ret == -2)
            {
                msg = "Error: Problem saving session to database.";
            }
            else
            {
                msg = "Error: Problem saving session audioClips to database.";
            }
            messageWin = new MessageWin("Save Session", msg);
            messageWin.Show();
        }