2017-12-01 01:54:03 +01:00
|
|
|
/*****************************************************************************
|
2018-06-15 14:07:34 +02:00
|
|
|
* Copyright (c) 2014-2018 OpenRCT2 developers
|
|
|
|
*
|
|
|
|
* For a complete list of all authors, please refer to contributors.md
|
|
|
|
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
|
|
|
*
|
|
|
|
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
|
|
|
*****************************************************************************/
|
2017-12-01 01:54:03 +01:00
|
|
|
|
2017-12-01 11:16:05 +01:00
|
|
|
#if defined(__APPLE__) && defined(__MACH__)
|
2017-12-01 01:54:03 +01:00
|
|
|
|
2018-01-29 01:03:00 +01:00
|
|
|
#include <Foundation/Foundation.h>
|
|
|
|
#include <mach-o/dyld.h>
|
|
|
|
|
2017-12-01 01:54:03 +01:00
|
|
|
#include "../core/Path.hpp"
|
2018-01-29 01:03:00 +01:00
|
|
|
#include "../OpenRCT2.h"
|
2017-12-01 01:54:03 +01:00
|
|
|
#include "Platform2.h"
|
|
|
|
|
|
|
|
namespace Platform
|
|
|
|
{
|
|
|
|
std::string GetFolderPath(SPECIAL_FOLDER folder)
|
|
|
|
{
|
|
|
|
// macOS stores everything in ~/Library/Application Support/OpenRCT2
|
|
|
|
switch (folder)
|
|
|
|
{
|
|
|
|
case SPECIAL_FOLDER::USER_CACHE:
|
|
|
|
case SPECIAL_FOLDER::USER_CONFIG:
|
|
|
|
case SPECIAL_FOLDER::USER_DATA:
|
|
|
|
{
|
|
|
|
auto home = GetFolderPath(SPECIAL_FOLDER::USER_HOME);
|
|
|
|
return Path::Combine(home, "Library/Application Support");
|
|
|
|
}
|
|
|
|
case SPECIAL_FOLDER::USER_HOME:
|
|
|
|
return GetHomePath();
|
|
|
|
default:
|
|
|
|
return std::string();
|
|
|
|
}
|
|
|
|
}
|
2018-01-21 03:13:32 +01:00
|
|
|
|
|
|
|
std::string GetDocsPath()
|
|
|
|
{
|
|
|
|
return std::string();
|
|
|
|
}
|
2017-12-02 00:48:46 +01:00
|
|
|
|
2018-01-29 01:03:00 +01:00
|
|
|
static std::string GetBundlePath()
|
|
|
|
{
|
|
|
|
@autoreleasepool
|
|
|
|
{
|
|
|
|
NSBundle * bundle = [NSBundle mainBundle];
|
|
|
|
if (bundle)
|
|
|
|
{
|
|
|
|
auto resources = bundle.resourcePath.UTF8String;
|
|
|
|
if (Path::DirectoryExists(resources))
|
|
|
|
{
|
|
|
|
return resources;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return std::string();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-02 00:48:46 +01:00
|
|
|
std::string GetInstallPath()
|
|
|
|
{
|
|
|
|
auto path = std::string(gCustomOpenrctDataPath);
|
|
|
|
if (!path.empty())
|
|
|
|
{
|
2018-01-29 01:03:00 +01:00
|
|
|
path = Path::GetAbsolute(path);
|
2017-12-02 00:48:46 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
auto exePath = GetCurrentExecutablePath();
|
|
|
|
auto exeDirectory = Path::GetDirectory(exePath);
|
|
|
|
path = Path::Combine(exeDirectory, "data");
|
2018-01-29 01:03:00 +01:00
|
|
|
NSString * nsPath = [NSString stringWithUTF8String:path.c_str()];
|
|
|
|
if (![[NSFileManager defaultManager] fileExistsAtPath:nsPath])
|
2017-12-02 00:48:46 +01:00
|
|
|
{
|
|
|
|
path = GetBundlePath();
|
|
|
|
if (path.empty())
|
|
|
|
{
|
|
|
|
path = "/";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return path;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string GetCurrentExecutablePath()
|
|
|
|
{
|
|
|
|
char exePath[MAX_PATH];
|
2018-06-20 17:28:51 +02:00
|
|
|
uint32_t size = MAX_PATH;
|
2017-12-02 00:48:46 +01:00
|
|
|
int result = _NSGetExecutablePath(exePath, &size);
|
|
|
|
if (result == 0)
|
|
|
|
{
|
|
|
|
return exePath;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return std::string();
|
|
|
|
}
|
|
|
|
}
|
2017-12-01 01:54:03 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|