#include "aoapplication.h" #include "lobby.h" #include "courtroom.h" #include "networkmanager.h" #include "debug_functions.h" #include "aooptionsdialog.h" #include #include #include AOApplication::AOApplication(int &argc, char **argv) : QApplication(argc, argv) { net_manager = new NetworkManager(this); discord = new AttorneyOnline::Discord(); QObject::connect(net_manager, SIGNAL(ms_connect_finished(bool, bool)), SLOT(ms_connect_finished(bool, bool))); // Create the QSettings class that points to the config.ini. configini = new QSettings(get_base_path() + "config.ini", QSettings::IniFormat); } AOApplication::~AOApplication() { destruct_lobby(); destruct_courtroom(); delete discord; } void AOApplication::construct_lobby() { if (lobby_constructed) { qDebug() << "W: lobby was attempted constructed when it already exists"; return; } w_lobby = new Lobby(this); lobby_constructed = true; QRect screenGeometry = QApplication::desktop()->screenGeometry(); int x = (screenGeometry.width()-w_lobby->width()) / 2; int y = (screenGeometry.height()-w_lobby->height()) / 2; w_lobby->move(x, y); discord->state_lobby(); w_lobby->show(); // Change the default audio output device to be the one the user has given // in his config.ini file for now. int a = 0; BASS_DEVICEINFO info; for (a = 0; BASS_GetDeviceInfo(a, &info); a++) { if (get_audio_output_device() == info.name) { BASS_SetDevice(a); qDebug() << info.name << "was set as the default audio output device."; break; } } } void AOApplication::destruct_lobby() { if(!lobby_constructed) { qDebug() << "W: lobby was attempted destructed when it did not exist"; return; } delete w_lobby; lobby_constructed = false; } void AOApplication::construct_courtroom() { if (courtroom_constructed) { qDebug() << "W: courtroom was attempted constructed when it already exists"; return; } w_courtroom = new Courtroom(this); courtroom_constructed = true; QRect screenGeometry = QApplication::desktop()->screenGeometry(); int x = (screenGeometry.width()-w_courtroom->width()) / 2; int y = (screenGeometry.height()-w_courtroom->height()) / 2; w_courtroom->move(x, y); } void AOApplication::destruct_courtroom() { if (!courtroom_constructed) { qDebug() << "W: courtroom was attempted destructed when it did not exist"; return; } delete w_courtroom; courtroom_constructed = false; } QString AOApplication::get_version_string() { return QString::number(RELEASE) + "." + QString::number(MAJOR_VERSION) + "." + QString::number(MINOR_VERSION); } QString AOApplication::get_cccc_version_string() { return QString::number(CCCC_RELEASE) + "." + QString::number(CCCC_MAJOR_VERSION) + "." + QString::number(CCCC_MINOR_VERSION); } void AOApplication::reload_theme() { current_theme = read_theme(); // This may not be the best place for it, but let's read the audio output device just in case. int a = 0; BASS_DEVICEINFO info; for (a = 0; BASS_GetDeviceInfo(a, &info); a++) { if (get_audio_output_device() == info.name) { BASS_SetDevice(a); qDebug() << info.name << "was set as the default audio output device."; break; } } } void AOApplication::set_favorite_list() { favorite_list = read_serverlist_txt(); } QString AOApplication::get_current_char() { if (courtroom_constructed) return w_courtroom->get_current_char(); else return ""; } void AOApplication::add_favorite_server(int p_server) { if (p_server < 0 || p_server >= server_list.size()) return; server_type fav_server = server_list.at(p_server); QString str_port = QString::number(fav_server.port); QString server_line = fav_server.ip + ":" + str_port + ":" + fav_server.name; write_to_serverlist_txt(server_line); } void AOApplication::server_disconnected() { if (courtroom_constructed) { call_notice("Disconnected from server."); construct_lobby(); destruct_courtroom(); } } void AOApplication::loading_cancelled() { destruct_courtroom(); w_lobby->hide_loading_overlay(); } void AOApplication::ms_connect_finished(bool connected, bool will_retry) { if (connected) { AOPacket *f_packet = new AOPacket("ALL#%"); send_ms_packet(f_packet); } else { if (will_retry) { w_lobby->append_error("Error connecting to master server. Will try again in " + QString::number(net_manager->ms_reconnect_delay_ms / 1000.f) + " seconds."); } else { call_error("There was an error connecting to the master server.\n" "We deploy multiple master servers to mitigate any possible downtime, " "but the client appears to have exhausted all possible methods of finding " "and connecting to one.\n" "Please check your Internet connection and firewall, and please try again."); } } } void AOApplication::call_settings_menu() { AOOptionsDialog* settings = new AOOptionsDialog(nullptr, this); settings->exec(); delete settings; }