<commit_before>
// Copyright 2014 Toggl Desktop developers.

#include "./ui.h"

#include <cstdlib>

namespace kopsik {

void UI::DisplayLogin(const _Bool open, const uint64_t user_id) {
    logger().debug("DisplayLogin");

    on_display_login_(open, user_id);
}

_Bool UI::DisplayError(const error err) {
    if (noError == err) {
        return true;
    }

    if (isNetworkingError(err)) {
        DisplayOnlineState(false);
        return false;
    }

    logger().debug("DisplayError");

    if (err.find("Request to server failed with status code: 403")
            != std::string::npos) {
        on_display_error_("Invalid e-mail or password!", true);
        return false;
    }

    on_display_error_(err.c_str(), isUserError(err));
    return false;
}

error UI::VerifyCallbacks() {
    logger().debug("VerifyCallbacks");

    if (!on_display_error_) {
        return error("!on_display_error_");
    }
    if (!on_display_update_) {
        return error("!on_display_update_");
    }
    if (!on_display_online_state_) {
        return error("!on_display_online_state_");
    }
    if (!on_display_login_) {
        return error("!on_display_login_");
    }
    if (!on_display_url_) {
        return error("!on_display_url_");
    }
    if (!on_display_reminder_) {
        return error("!on_display_reminder_");
    }
    if (!on_display_time_entry_list_) {
        return error("!on_display_time_entry_list_");
    }
    if (!on_display_autocomplete_) {
        return error("!on_display_autocomplete_");
    }
    if (!on_display_workspace_select_) {
        return error("!on_display_workspace_select_");
    }
    if (!on_display_client_select_) {
        return error("!on_display_client_select_");
    }
    if (!on_display_tags_) {
        return error("!on_display_tags_");
    }
    if (!on_display_time_entry_editor_) {
        return error("!on_display_time_entry_editor_");
    }
    if (!on_display_settings_) {
        return error("!on_display_settings_");
    }
    if (!on_display_timer_state_) {
        return error("!on_display_timer_state_");
    }
    return noError;
}

void UI::DisplayReminder() {
    logger().debug("DisplayReminder");

    on_display_reminder_("Reminder from Toggl Desktop",
                         "Don't forget to track your time!");
}

void UI::DisplayOnlineState(const _Bool is_online) {
    logger().debug("DisplayOnlineState");

    on_display_online_state_(is_online);
}

void UI::DisplayUpdate(const bool is_available,
                       const std::string url,
                       const std::string version) {
    logger().debug("DisplayUpdate");

    on_display_update_(true, url.c_str(), version.c_str());
}

void UI::DisplayAutocomplete(std::vector<kopsik::AutocompleteItem> *items) {
    logger().debug("DisplayAutocomplete");

    KopsikAutocompleteItem *first = 0;<commit_msg>Fix invalid empty update dialog<commit_after>
// Copyright 2014 Toggl Desktop developers.

#include "./ui.h"

#include <cstdlib>

namespace kopsik {

void UI::DisplayLogin(const _Bool open, const uint64_t user_id) {
    logger().debug("DisplayLogin");

    on_display_login_(open, user_id);
}

_Bool UI::DisplayError(const error err) {
    if (noError == err) {
        return true;
    }

    if (isNetworkingError(err)) {
        DisplayOnlineState(false);
        return false;
    }

    logger().debug("DisplayError");

    if (err.find("Request to server failed with status code: 403")
            != std::string::npos) {
        on_display_error_("Invalid e-mail or password!", true);
        return false;
    }

    on_display_error_(err.c_str(), isUserError(err));
    return false;
}

error UI::VerifyCallbacks() {
    logger().debug("VerifyCallbacks");

    if (!on_display_error_) {
        return error("!on_display_error_");
    }
    if (!on_display_update_) {
        return error("!on_display_update_");
    }
    if (!on_display_online_state_) {
        return error("!on_display_online_state_");
    }
    if (!on_display_login_) {
        return error("!on_display_login_");
    }
    if (!on_display_url_) {
        return error("!on_display_url_");
    }
    if (!on_display_reminder_) {
        return error("!on_display_reminder_");
    }
    if (!on_display_time_entry_list_) {
        return error("!on_display_time_entry_list_");
    }
    if (!on_display_autocomplete_) {
        return error("!on_display_autocomplete_");
    }
    if (!on_display_workspace_select_) {
        return error("!on_display_workspace_select_");
    }
    if (!on_display_client_select_) {
        return error("!on_display_client_select_");
    }
    if (!on_display_tags_) {
        return error("!on_display_tags_");
    }
    if (!on_display_time_entry_editor_) {
        return error("!on_display_time_entry_editor_");
    }
    if (!on_display_settings_) {
        return error("!on_display_settings_");
    }
    if (!on_display_timer_state_) {
        return error("!on_display_timer_state_");
    }
    return noError;
}

void UI::DisplayReminder() {
    logger().debug("DisplayReminder");

    on_display_reminder_("Reminder from Toggl Desktop",
                         "Don't forget to track your time!");
}

void UI::DisplayOnlineState(const _Bool is_online) {
    logger().debug("DisplayOnlineState");

    on_display_online_state_(is_online);
}

void UI::DisplayUpdate(const bool is_available,
                       const std::string url,
                       const std::string version) {
    logger().debug("DisplayUpdate");

    on_display_update_(is_available, url.c_str(), version.c_str());
}

void UI::DisplayAutocomplete(std::vector<kopsik::AutocompleteItem> *items) {
    logger().debug("DisplayAutocomplete");

    KopsikAutocompleteItem *first = 0;
{'fraction_non_alphanumeric': 0.12717770034843207, 'fraction_numerical': 0.003484320557491289, 'mean_word_length': 3.212032281731475, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1391168', 'n_tokens_mistral': 1861, 'n_tokens_neox': 1799, 'n_words': 321}