Start with backend

This commit is contained in:
TheKodeToad 2024-06-20 01:07:11 +01:00
parent 552da59007
commit 0c5b6e4a73
No known key found for this signature in database
GPG key ID: 5E39D70B4C93C38E
9 changed files with 179 additions and 9 deletions

View file

@ -1,4 +1,16 @@
add_executable(installer main.cpp ui.cpp ui.hpp meta.cpp meta.hpp info.hpp)
add_executable(installer
main.cpp
ui.cpp
ui.hpp
meta.cpp
meta.hpp
info.hpp
installer.cpp
installer.hpp
installer_windows.cpp
installer_mac.cpp
installer_linux.cpp
)
configure_file(info.hpp.in info.hpp)

1
installer/installer.cpp Normal file
View file

@ -0,0 +1 @@
#include "installer.hpp"

7
installer/installer.hpp Normal file
View file

@ -0,0 +1,7 @@
#pragma once
#include <wx/filename.h>
wxFileName get_launcher_data_dir();
bool is_launcher_open();

View file

@ -0,0 +1,81 @@
#include "installer.hpp"
#include <wx/dir.h>
#include <wx/utils.h>
#ifdef __LINUX__
wxFileName get_launcher_data_dir() {
const wxString home = wxGetHomeDir();
const wxFileName dir = wxFileName::DirName(home + "/.minecraft");
if (!dir.DirExists()) {
const wxFileName flatpak_dir = wxFileName::DirName(home + "/.var/app/com.mojang.Minecraft/.minecraft");
// if the flatpak directory is the only directory present, use it
// otherwise we will make the for the official launcher
if (flatpak_dir.DirExists())
return flatpak_dir;
}
return dir;
}
bool is_launcher_open() {
auto filter = [](const wxString &arg) {
return arg == "minecraft-launcher" || arg.EndsWith("/minecraft-launcher") ||
(arg.StartsWith("--log-file=") && arg.EndsWith(".minecraft/launcher_cef_log.txt"));
};
wxDir dir("/proc");
if (!dir.IsOpened())
return {};
wxString proc_entry;
for (bool has_more = dir.GetFirst(&proc_entry, wxEmptyString, wxDIR_DIRS); has_more;
has_more = dir.GetNext(&proc_entry)) {
bool is_pid =
std::all_of(proc_entry.begin(), proc_entry.end(), [](auto chr) { return chr >= '0' && chr <= '9'; });
if (!is_pid)
continue;
wxFile cmdline_file(dir.GetNameWithSep() + proc_entry + "/cmdline", wxFile::read);
if (!cmdline_file.IsOpened())
continue;
// unfortunately, c style code is needed here, watch out for buffer overflow :|
// wx does not like \0
char buffer[BUFSIZ];
ssize_t read;
wxString current_content;
std::vector<wxString> args;
while ((read = cmdline_file.Read(buffer, BUFSIZ)) != wxInvalidOffset && read != 0) {
for (size_t index = 0; index < read; ++index) {
char value = buffer[index];
if (value == '\0') {
if (!current_content.empty()) {
args.push_back(current_content);
current_content.clear();
}
} else
current_content += value;
}
}
if (!current_content.empty())
args.push_back(current_content);
if (std::any_of(args.begin(), args.end(), filter))
return true;
}
return false;
}
#endif

View file

@ -0,0 +1,16 @@
#include "installer.hpp"
#include <wx/dir.h>
#include <wx/utils.h>
#ifdef __DARWIN__
wxFileName get_launcher_data_dir() {
return wxFileName::DirName(wxGetHomeDir() + "/Library/Application Support/minecraft");
}
bool is_launcher_open() {
wxASSERT_MSG(false, "TODO");
return false; // TODO
}
#endif

View file

@ -0,0 +1,16 @@
#include "installer.hpp"
#include <wx/dir.h>
#include <wx/utils.h>
#ifdef __WINDOWS__
wxFileName get_launcher_data_dir() {
return wxFileName::DirName(wxStandardPaths::Get().GetUserConfigDir() + "\\.minecraft");
}
bool is_launcher_open() {
wxASSERT_MSG(false, "TODO");
return false; // TODO
}
#endif

View file

@ -50,7 +50,7 @@
<property name="minimum_size"></property>
<property name="name">InstallerFrame_UI</property>
<property name="pos"></property>
<property name="size">500,450</property>
<property name="size">500,480</property>
<property name="style">wxDEFAULT_FRAME_STYLE</property>
<property name="subclass">; ; forward_declare</property>
<property name="title">FrogLoader Installer</property>
@ -74,6 +74,16 @@
<property name="name">options</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="true">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALL</property>
@ -839,6 +849,16 @@
</object>
</object>
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="spacer" expanded="true">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="false">

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resource xmlns="http://www.wxwidgets.org/wxxrc" version="2.5.3.0">
<object class="wxFrame" name="InstallerFrame_UI">
<size>500,450</size>
<size>500,480</size>
<style>wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL</style>
<title>FrogLoader Installer</title>
<centered>1</centered>
@ -14,6 +14,12 @@
<option>1</option>
<object class="wxBoxSizer" name="options">
<orient>wxVERTICAL</orient>
<object class="spacer">
<flag>wxEXPAND</flag>
<border>5</border>
<option>1</option>
<size>0,0</size>
</object>
<object class="sizeritem">
<flag>wxALL</flag>
<border>5</border>
@ -158,6 +164,12 @@
</object>
</object>
</object>
<object class="spacer">
<flag>wxEXPAND</flag>
<border>5</border>
<option>1</option>
<size>0,0</size>
</object>
</object>
</object>
<object class="sizeritem">

View file

@ -1,5 +1,10 @@
#include "ui.hpp"
#include "installer.hpp"
InstallerFrame::InstallerFrame() : InstallerFrame_UI(nullptr) {
heading->SetFont(heading->GetFont().Scaled(2));
heading->SetFont(heading->GetFont().Scaled(1.6F));
launcher_data_dir_input->ChangeValue(get_launcher_data_dir().GetFullPath());
game_data_dir_input->SetHint(_("Use Default"));
cancel->Bind(wxEVT_BUTTON, [this] (wxCommandEvent &) { Close(); });
}