private async void ButtonSessionStarter_Click(object sender, EventArgs e)
        {
            if (SessionRunning || sessionPaused)
            {
                buttonSessionStarter.Text    = "Start a log session";
                buttonUnPauseSession.Text    = "Pause session";
                buttonUnPauseSession.Enabled = false;
                SessionRunning = false;
                sessionPaused  = false;
                stopWatch.Stop();
                string elapsedTime = NiceTime.ParseTimeSpanHMS(stopWatch.Elapsed);
                stopWatch.Reset();
                int sortBy = radioButtonSortByUpload.Checked ? 1 : 0;
                LogSessionSettings logSessionSettings = new LogSessionSettings()
                {
                    Name        = textBoxSessionName.Text,
                    ContentText = textBoxSessionContent.Text,
                    ShowSuccess = !checkBoxOnlySuccess.Checked,
                    ElapsedTime = elapsedTime,
                    SortBy      = (LogSessionSortBy)sortBy,
                    UseSelectedWebhooksInstead = radioButtonOnlySelectedWebhooks.Checked,
                    SelectedWebhooks           = ConvertCheckboxListToList()
                };
                string fileName = $"{textBoxSessionName.Text.ToLower().Replace(" ", "")} {sessionTimeStarted.Year}-{sessionTimeStarted.Month}-{sessionTimeStarted.Day} {sessionTimeStarted.Hour}-{sessionTimeStarted.Minute}-{sessionTimeStarted.Second}";
                File.AppendAllText($"{mainLink.LocalDir}{fileName}.csv", "Boss;BossId;Success;Duration;RecordedBy;EliteInsightsVersion;arcdpsVersion;Permalink\n");
                foreach (DPSReport.DPSReportJSON reportJSON in mainLink.SessionLogs)
                {
                    string success = (reportJSON.Encounter.Success ?? false) ? "true" : "false";
                    File.AppendAllText($"{mainLink.LocalDir}{fileName}.csv",
                                       $"{reportJSON.ExtraJSON?.FightName ?? reportJSON.Encounter.Boss};{reportJSON.Encounter.BossId};{success};{reportJSON.ExtraJSON?.Duration ?? ""};{reportJSON.ExtraJSON?.RecordedBy ?? ""};{reportJSON.ExtraJSON?.EliteInsightsVersion ?? ""};{reportJSON.EVTC.Type}{reportJSON.EVTC.Version};{reportJSON.Permalink}\n");
                }
                await mainLink.ExecuteSessionLogWebhooksAsync(logSessionSettings);

                mainLink.SessionLogs.Clear();
            }
            else
            {
                buttonSessionStarter.Text    = "Stop the log session";
                buttonUnPauseSession.Text    = "Pause session";
                buttonUnPauseSession.Enabled = true;
                SessionRunning = true;
                sessionPaused  = false;
                stopWatch.Start();
                sessionTimeStarted = DateTime.Now;
            }
        }
        public override void WriteJson(JsonWriter writer,
                                       object untypedValue,
                                       JsonSerializer serializer)
        {
            if (untypedValue == null)
            {
                serializer.Serialize(writer,
                                     null);

                return;
            }

            NiceTime value = (NiceTime)untypedValue;

            switch (value)
            {
            case NiceTime.Day:
                serializer.Serialize(writer,
                                     "day");

                return;

            case NiceTime.Hour:
                serializer.Serialize(writer,
                                     "hour");

                return;

            case NiceTime.Minute:
                serializer.Serialize(writer,
                                     "minute");

                return;

            case NiceTime.Month:
                serializer.Serialize(writer,
                                     "month");

                return;

            case NiceTime.Second:
                serializer.Serialize(writer,
                                     "second");

                return;

            case NiceTime.Week:
                serializer.Serialize(writer,
                                     "week");

                return;

            case NiceTime.Year:
                serializer.Serialize(writer,
                                     "year");

                return;
            }

            throw new Exception("Cannot marshal type NiceTime");
        }