aboutsummaryrefslogtreecommitdiff
path: root/src/text_file_functions.cpp
diff options
context:
space:
mode:
authorLeifa♥ <26681464+TrickyLeifa@users.noreply.github.com>2022-07-31 04:57:01 +0200
committerGitHub <noreply@github.com>2022-07-31 05:57:01 +0300
commit1cfbfd51a70ae61279f53a1b14dbc0c81fe1d259 (patch)
tree65bb1eee810a15016498740c0c8d23d073e664b3 /src/text_file_functions.cpp
parent14731a0fca83f3ce193ec03a19bc2f5fefe70c6c (diff)
Added server list context menu, ... (#835)
* Added server list context menu, ... Resolve #832, #560 * The demo server listing now always appears at the top for consistency. * Add a context menu to server listing. Only appears during favorite server listing. Requires a valid item under cursor. Cannot be the demo server item. * Add a new UI element: `remove_from_fav` Only appears during favorite server listing. Require a selection to remove. Cannot be the demo server. Uses `removefromfav.png` and `removefromfav_pressed.png` images as textures. * Favorite servers are now loaded whenever the Lobby is created in addition to refresh and server listing switch. * `serverlist.txt` is now renamed to `(deprecated)serverlist.txt` if read from. * Updated comments * Typos
Diffstat (limited to 'src/text_file_functions.cpp')
-rw-r--r--src/text_file_functions.cpp127
1 files changed, 73 insertions, 54 deletions
diff --git a/src/text_file_functions.cpp b/src/text_file_functions.cpp
index 908bbce5..d9c81620 100644
--- a/src/text_file_functions.cpp
+++ b/src/text_file_functions.cpp
@@ -243,78 +243,97 @@ bool AOApplication::append_to_file(QString p_text, QString p_file,
return false;
}
-QVector<server_type> AOApplication::read_serverlist_txt()
+QVector<server_type> AOApplication::read_favorite_servers()
{
- QVector<server_type> f_server_list;
+ QVector<server_type> serverlist;
- QFile serverlist_txt(get_base_path() + "serverlist.txt");
- QFile serverlist_ini(get_base_path() + "favorite_servers.ini");
+ // demo server is always at the top
+ server_type demo_server;
+ demo_server.ip = "127.0.0.1";
+ demo_server.port = 99999;
+ demo_server.name = tr("Demo playback");
+ demo_server.desc = tr("Play back demos you have previously recorded");
+ serverlist.append(demo_server);
- if (serverlist_txt.exists() && !serverlist_ini.exists()) {
- migrate_serverlist_txt(serverlist_txt);
+ QString fav_servers_ini_path(get_base_path() + "favorite_servers.ini");
+ if (!QFile::exists(fav_servers_ini_path)) {
+ qWarning() << "failed to locate favorite_servers.ini, falling back to legacy serverlist.txt";
+ serverlist += read_legacy_favorite_servers();
}
+ else {
+ QSettings fav_servers_ini(fav_servers_ini_path, QSettings::IniFormat);
+ fav_servers_ini.setIniCodec("UTF-8");
+
+ auto grouplist = fav_servers_ini.childGroups();
+ { // remove all negative and non-numbers
+ auto filtered_grouplist = grouplist;
+ for (const QString &group : qAsConst(grouplist)) {
+ bool ok = false;
+ const int l_num = group.toInt(&ok);
+ if (ok && l_num >= 0) {
+ continue;
+ }
+ filtered_grouplist.append(group);
+ }
+ std::sort(filtered_grouplist.begin(), filtered_grouplist.end(), [](const auto &a, const auto &b) -> bool {
+ return a.toInt() < b.toInt();
+ });
+ grouplist = std::move(filtered_grouplist);
+ }
- if (serverlist_ini.exists()) {
- QSettings l_favorite_ini(get_base_path() + "favorite_servers.ini", QSettings::IniFormat);
- l_favorite_ini.setIniCodec("UTF-8");
- for(QString &fav_index: l_favorite_ini.childGroups()) {
+ for(const QString &group: qAsConst(grouplist)) {
server_type f_server;
- l_favorite_ini.beginGroup(fav_index);
- f_server.ip = l_favorite_ini.value("address", "127.0.0.1").toString();
- f_server.port = l_favorite_ini.value("port", 27016).toInt();
- f_server.name = l_favorite_ini.value("name", "Missing Name").toString();
- f_server.desc = l_favorite_ini.value("desc", "No description").toString();
- f_server.socket_type = to_connection_type.value(l_favorite_ini.value("protocol", "tcp").toString());
- f_server_list.append(f_server);
- l_favorite_ini.endGroup();
+ fav_servers_ini.beginGroup(group);
+ f_server.ip = fav_servers_ini.value("address", "127.0.0.1").toString();
+ f_server.port = fav_servers_ini.value("port", 27016).toInt();
+ f_server.name = fav_servers_ini.value("name", "Missing Name").toString();
+ f_server.desc = fav_servers_ini.value("desc", "No description").toString();
+ f_server.socket_type = to_connection_type.value(fav_servers_ini.value("protocol", "tcp").toString());
+ serverlist.append(std::move(f_server));
+ fav_servers_ini.endGroup();
}
}
- server_type demo_server;
- demo_server.ip = "127.0.0.1";
- demo_server.port = 99999;
- demo_server.name = tr("Demo playback");
- demo_server.desc = tr("Play back demos you have previously recorded");
- f_server_list.append(demo_server);
-
- return f_server_list;
+ return serverlist;
}
-void AOApplication::migrate_serverlist_txt(QFile &p_serverlist_txt)
+QVector<server_type> AOApplication::read_legacy_favorite_servers()
{
- // We migrate our legacy serverlist.txt to a QSettings object.
- // Then we write it to disk.
- QSettings l_settings(get_base_path() + "favorite_servers.ini", QSettings::IniFormat);
- l_settings.setIniCodec("UTF-8");
- if (p_serverlist_txt.open(QIODevice::ReadOnly)) {
- QTextStream l_favorite_textstream(&p_serverlist_txt);
- l_favorite_textstream.setCodec("UTF-8");
- int l_entry_index = 0;
+ QVector<server_type> serverlist;
- while (!l_favorite_textstream.atEnd()) {
- QString l_favorite_line = l_favorite_textstream.readLine();
- QStringList l_line_contents = l_favorite_line.split(":");
+ QFile serverlist_txt(get_base_path() + "serverlist.txt");
+ if (!serverlist_txt.exists()) {
+ qWarning() << "serverlist.txt does not exist";
+ } else if (!serverlist_txt.open(QIODevice::ReadOnly)) {
+ qWarning() << "failed to open serverlist.txt";
+ } else {
+ QTextStream stream(&serverlist_txt);
+ stream.setCodec("UTF-8");
+
+ while (!stream.atEnd())
+ {
+ QStringList contents = stream.readLine().split(":");
- if (l_line_contents.size() >= 3) {
- l_settings.beginGroup(QString::number(l_entry_index));
- l_settings.setValue("name", l_line_contents.at(2));
- l_settings.setValue("address", l_line_contents.at(0));
- l_settings.setValue("port", l_line_contents.at(1));
+ int item_count = contents.size();
+ if (item_count < 3 || item_count > 4) {
+ continue;
+ }
- if (l_line_contents.size() >= 4) {
- l_settings.setValue("protocol", l_line_contents.at(3));
- }
- else {
- l_settings.setValue("protocol","tcp");
- }
- l_settings.endGroup();
- l_entry_index++;
+ server_type server;
+ server.ip = contents.at(0);
+ server.port = contents.at(1).toInt();
+ server.name = contents.at(2);
+ if (item_count == 4) {
+ server.socket_type = connection_type(contents.at(3).toInt());
+ } else {
+ server.socket_type = TCP;
}
+ serverlist.append(std::move(server));
}
- l_settings.sync();
+ serverlist_txt.close();
}
- p_serverlist_txt.close();
- p_serverlist_txt.rename(get_base_path() + "serverlist_deprecated.txt");
+
+ return serverlist;
}
QString AOApplication::read_design_ini(QString p_identifier,