Move platform-dependent code to system_*.cpp
parent
cd140f1384
commit
7d30a82747
|
@ -192,3 +192,13 @@ std::string CSystemUtils::GetSaveDir()
|
||||||
{
|
{
|
||||||
return "./saves";
|
return "./saves";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSystemUtils::OpenPath(std::string path)
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSystemUtils::OpenWebsite(std::string website)
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
|
@ -134,6 +134,12 @@ public:
|
||||||
//! Returns the save dir location
|
//! Returns the save dir location
|
||||||
virtual std::string GetSaveDir();
|
virtual std::string GetSaveDir();
|
||||||
|
|
||||||
|
//! Opens a path with default file browser
|
||||||
|
virtual void OpenPath(std::string path);
|
||||||
|
|
||||||
|
//! Opens a website with default web browser
|
||||||
|
virtual void OpenWebsite(std::string website);
|
||||||
|
|
||||||
//! Sleep for given amount of microseconds
|
//! Sleep for given amount of microseconds
|
||||||
virtual void Usleep(int usecs) = 0;
|
virtual void Usleep(int usecs) = 0;
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,28 @@ std::string CSystemUtilsLinux::GetSaveDir()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsLinux::OpenPath(std::string path)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("xdg-open \""+path+"\"").c_str());
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open path: %s\n", path.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsLinux::OpenWebsite(std::string website)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("xdg-open \""+website+"\"").c_str());
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open website: %s\n", website.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSystemUtilsLinux::Usleep(int usec)
|
void CSystemUtilsLinux::Usleep(int usec)
|
||||||
{
|
{
|
||||||
usleep(usec);
|
usleep(usec);
|
||||||
|
|
|
@ -45,6 +45,9 @@ public:
|
||||||
|
|
||||||
std::string GetSaveDir() override;
|
std::string GetSaveDir() override;
|
||||||
|
|
||||||
|
void OpenPath(std::string path) override;
|
||||||
|
void OpenWebsite(std::string website) override;
|
||||||
|
|
||||||
void Usleep(int usec) override;
|
void Usleep(int usec) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -113,6 +113,28 @@ std::string CSystemUtilsMacOSX::GetSaveDir()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsLinux::OpenPath(std::string path)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("open \""+path+"\"").c_str()); // TODO: Test on macOS
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open path: %s\n", path.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsLinux::OpenWebsite(std::string website)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("open \""+website+"\"").c_str()); // TODO: Test on macOS
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open website: %s\n", website.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSystemUtilsMacOSX::Usleep(int usec)
|
void CSystemUtilsMacOSX::Usleep(int usec)
|
||||||
{
|
{
|
||||||
usleep(usec);
|
usleep(usec);
|
||||||
|
|
|
@ -36,6 +36,9 @@ public:
|
||||||
std::string GetLangPath() override;
|
std::string GetLangPath() override;
|
||||||
std::string GetSaveDir() override;
|
std::string GetSaveDir() override;
|
||||||
|
|
||||||
|
void OpenPath(std::string path) override;
|
||||||
|
void OpenWebsite(std::string website) override;
|
||||||
|
|
||||||
void Usleep(int usec) override;
|
void Usleep(int usec) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -39,6 +39,16 @@ long long int CSystemUtilsOther::TimeStampExactDiff(SystemTimeStamp* before, Sys
|
||||||
return (after->sdlTicks - before->sdlTicks) * 1000000ll;
|
return (after->sdlTicks - before->sdlTicks) * 1000000ll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsOther::OpenPath(std::string path)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsOther::OpenWebsite(std::string website)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
void CSystemUtilsOther::Usleep(int usec)
|
void CSystemUtilsOther::Usleep(int usec)
|
||||||
{
|
{
|
||||||
SDL_Delay(usec / 1000); // close enough
|
SDL_Delay(usec / 1000); // close enough
|
||||||
|
|
|
@ -49,6 +49,9 @@ public:
|
||||||
void GetCurrentTimeStamp(SystemTimeStamp *stamp) override;
|
void GetCurrentTimeStamp(SystemTimeStamp *stamp) override;
|
||||||
long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
|
long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) override;
|
||||||
|
|
||||||
|
void OpenPath(std::string path) override;
|
||||||
|
void OpenWebsite(std::string website) override;
|
||||||
|
|
||||||
void Usleep(int usec) override;
|
void Usleep(int usec) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -131,6 +131,28 @@ std::string CSystemUtilsWindows::GetSaveDir()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsWindows::OpenPath(std::string path)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("explorer \""+path+"\"").c_str()); // TODO: Test on macOS
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open path: %s\n", path.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSystemUtilsWindows::OpenWebsite(std::string website)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = system(("rundll32 url.dll,FileProtocolHandler \""+website+"\"").c_str()); // TODO: Test on macOS
|
||||||
|
if (result == -1)
|
||||||
|
{
|
||||||
|
GetLogger()->Error("Failed to open website: %s\n", website.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CSystemUtilsWindows::Usleep(int usec)
|
void CSystemUtilsWindows::Usleep(int usec)
|
||||||
{
|
{
|
||||||
LARGE_INTEGER ft;
|
LARGE_INTEGER ft;
|
||||||
|
|
|
@ -43,6 +43,9 @@ public:
|
||||||
|
|
||||||
std::string GetSaveDir() override;
|
std::string GetSaveDir() override;
|
||||||
|
|
||||||
|
void OpenPath(std::string path) override;
|
||||||
|
void OpenWebsite(std::string website) override;
|
||||||
|
|
||||||
void Usleep(int usec) override;
|
void Usleep(int usec) override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
#include "app/pathman.h"
|
#include "app/pathman.h"
|
||||||
|
|
||||||
|
#include "common/system/system.h"
|
||||||
|
|
||||||
#include "common/restext.h"
|
#include "common/restext.h"
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/logger.h"
|
#include "common/logger.h"
|
||||||
|
@ -126,8 +128,8 @@ bool CScreenSetupMods::EventProcess(const Event &event)
|
||||||
CWindow* pw;
|
CWindow* pw;
|
||||||
CButton* pb;
|
CButton* pb;
|
||||||
CList* pl;
|
CList* pl;
|
||||||
int result;
|
std::string modName, modPath, website = "https://www.moddb.com/games/colobot-gold-edition";
|
||||||
std::string modName, modPath;
|
auto systemUtils = CSystemUtils::Create(); // platform-specific utils
|
||||||
|
|
||||||
if (!CScreenSetup::EventProcess(event)) return false;
|
if (!CScreenSetup::EventProcess(event)) return false;
|
||||||
|
|
||||||
|
@ -157,18 +159,7 @@ bool CScreenSetupMods::EventProcess(const Event &event)
|
||||||
if (event.type == EVENT_INTERFACE_MODS_DIR)
|
if (event.type == EVENT_INTERFACE_MODS_DIR)
|
||||||
{
|
{
|
||||||
modPath = CResourceManager::GetSaveLocation() + "/" + "mods";
|
modPath = CResourceManager::GetSaveLocation() + "/" + "mods";
|
||||||
#if defined(PLATFORM_WINDOWS)
|
systemUtils->OpenPath(modPath);
|
||||||
std::replace(modPath.begin(), modPath.end(), '/', '\\');
|
|
||||||
result = system(("explorer \""+modPath+"\"").c_str());
|
|
||||||
#elif defined(PLATFORM_LINUX)
|
|
||||||
result = system(("xdg-open \""+modPath+"\"").c_str());
|
|
||||||
#elif defined(PLATFORM_MACOSX)
|
|
||||||
result = system(("open \""+modPath+"\"").c_str()); //TODO: Test on macOS
|
|
||||||
#endif
|
|
||||||
if (result == -1)
|
|
||||||
{
|
|
||||||
GetLogger()->Error("Failed to open Mods directory! Does directory exists?\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
switch (event.type)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
|
@ -201,17 +192,7 @@ bool CScreenSetupMods::EventProcess(const Event &event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVENT_INTERFACE_WORKSHOP:
|
case EVENT_INTERFACE_WORKSHOP:
|
||||||
#if defined(PLATFORM_WINDOWS)
|
systemUtils->OpenWebsite(website);
|
||||||
result = system("rundll32 url.dll,FileProtocolHandler \"https://www.moddb.com/games/colobot-gold-edition\"");
|
|
||||||
#elif defined(PLATFORM_LINUX)
|
|
||||||
result = system("xdg-open \"https://www.moddb.com/games/colobot-gold-edition\"");
|
|
||||||
#elif defined(PLATFORM_MACOSX)
|
|
||||||
result = system("open \"https://www.moddb.com/games/colobot-gold-edition\""); //TODO: Test on macOS
|
|
||||||
#endif
|
|
||||||
if (result == -1)
|
|
||||||
{
|
|
||||||
GetLogger()->Error("Failed to open Workshop page! Is any Web Broswer installed?\n");
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in New Issue