Switch new players to DDNet config dir, support Teeworlds as fallback

This way new players will get DDNet directory, old ones can switch
directory if they want, or keep using the old one.

If we ever enforce a switch in a future version, this will make it
easier since older DDNet versions will also support the DDNet directory
already.
This commit is contained in:
def 2021-12-21 17:19:42 +01:00 committed by Dennis Felsing
parent 9be59a990b
commit 790c1cc0aa
15 changed files with 54 additions and 19 deletions

View file

@ -2670,6 +2670,8 @@ set(CPACK_GEN_FILES
if(TARGET_OS STREQUAL "windows")
list(APPEND CPACK_FILES other/config_directory.bat)
else()
list(APPEND CPACK_FILES other/config_directory.sh)
endif()
if(NOT DEV)

View file

@ -1 +1,5 @@
@start explorer %APPDATA%\Teeworlds
if exist %APPDATA%\DDNet\ (
@start explorer %APPDATA%\DDNet\
) else (
@start explorer %APPDATA%\Teeworlds\
)

21
other/config_directory.sh Executable file
View file

@ -0,0 +1,21 @@
#!/bin/sh
case "$(uname -s)" in
CYGWIN*|MINGW*|MSYS*)
if [ -d "$APPDATA/DDNet/" ]; then
explorer "$APPDATA/DDNet/"
else
explorer "$APPDATA/Teeworlds/"
fi;;
Darwin*)
if [ -d "$HOME/Library/Application Support/DDNet/" ]; then
open "$HOME/Library/Application Support/DDNet/"
else
open "$HOME/Library/Application Support/Teeworlds/"
fi;;
*)
if [ -d "$HOME/.ddnet/" ]; then
xdg-open "$HOME/.ddnet/"
else
xdg-open "$HOME/.teeworlds/"
fi;;
esac

View file

@ -1799,7 +1799,7 @@ int fs_rename(const char *oldname, const char *newname);
modified - Pointer to time_t
Returns:
0 on success non-zero on failure
0 on success, non-zero on failure
Remarks:
- Returned time is in seconds since UNIX Epoch

View file

@ -4325,7 +4325,7 @@ int main(int argc, const char **argv)
// create the components
IEngine *pEngine = CreateEngine(GAME_NAME, Silent, 2);
IConsole *pConsole = CreateConsole(CFGFLAG_CLIENT);
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_CLIENT, argc, (const char **)argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_CLIENT, argc, (const char **)argv);
IConfigManager *pConfigManager = CreateConfigManager();
IEngineSound *pEngineSound = CreateEngineSound();
IEngineInput *pEngineInput = CreateEngineInput();

View file

@ -3646,7 +3646,7 @@ int main(int argc, const char **argv)
IGameServer *pGameServer = CreateGameServer();
IConsole *pConsole = CreateConsole(CFGFLAG_SERVER | CFGFLAG_ECON);
IEngineMasterServer *pEngineMasterServer = CreateEngineMasterServer();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_SERVER, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_SERVER, argc, argv);
IConfigManager *pConfigManager = CreateConfigManager();
IEngineAntibot *pEngineAntibot = CreateEngineAntibot();

View file

@ -28,10 +28,17 @@ public:
m_aUserdir[0] = 0;
}
int Init(const char *pApplicationName, int StorageType, int NumArgs, const char **ppArguments)
int Init(int StorageType, int NumArgs, const char **ppArguments)
{
// get userdir
fs_storage_path(pApplicationName, m_aUserdir, sizeof(m_aUserdir));
char aFallbackUserdir[IO_MAX_PATH_LENGTH];
fs_storage_path("DDNet", m_aUserdir, sizeof(m_aUserdir));
fs_storage_path("Teeworlds", aFallbackUserdir, sizeof(aFallbackUserdir));
if(!fs_is_dir(m_aUserdir) && fs_is_dir(aFallbackUserdir))
{
str_copy(m_aUserdir, aFallbackUserdir, sizeof(m_aUserdir));
}
// get datadir
FindDatadir(ppArguments[0]);
@ -559,10 +566,10 @@ public:
return pBuffer;
}
static IStorage *Create(const char *pApplicationName, int StorageType, int NumArgs, const char **ppArguments)
static IStorage *Create(int StorageType, int NumArgs, const char **ppArguments)
{
CStorage *p = new CStorage();
if(p && p->Init(pApplicationName, StorageType, NumArgs, ppArguments))
if(p && p->Init(StorageType, NumArgs, ppArguments))
{
dbg_msg("storage", "initialisation failed");
delete p;
@ -600,9 +607,9 @@ const char *IStorage::FormatTmpPath(char *aBuf, unsigned BufSize, const char *pP
return aBuf;
}
IStorage *CreateStorage(const char *pApplicationName, int StorageType, int NumArgs, const char **ppArguments)
IStorage *CreateStorage(int StorageType, int NumArgs, const char **ppArguments)
{
return CStorage::Create(pApplicationName, StorageType, NumArgs, ppArguments);
return CStorage::Create(StorageType, NumArgs, ppArguments);
}
IStorage *CreateLocalStorage()

View file

@ -42,7 +42,7 @@ public:
static const char *FormatTmpPath(char *aBuf, unsigned BufSize, const char *pPath);
};
extern IStorage *CreateStorage(const char *pApplicationName, int StorageType, int NumArgs, const char **ppArguments);
extern IStorage *CreateStorage(int StorageType, int NumArgs, const char **ppArguments);
extern IStorage *CreateLocalStorage();
extern IStorage *CreateTempStorage(const char *pDirectory);

View file

@ -333,7 +333,7 @@ int main(int argc, const char **argv)
mem_copy(m_CountDataLegacy.m_Header, SERVERBROWSE_COUNT_LEGACY, sizeof(SERVERBROWSE_COUNT_LEGACY));
IKernel *pKernel = IKernel::Create();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_BASIC, argc, argv);
IConfigManager *pConfigManager = CreateConfigManager();
m_pConsole = CreateConsole(CFGFLAG_MASTER);

View file

@ -75,7 +75,7 @@ int main(int argc, const char **argv)
{
cmdline_fix(&argc, &argv);
dbg_logger_stdout();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_SERVER, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_SERVER, argc, argv);
CreateEmptyMap(pStorage);
cmdline_free(argc, argv);
return 0;

View file

@ -138,7 +138,7 @@ int main(int argc, const char **argv)
cmdline_fix(&argc, &argv);
dbg_logger_stdout();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_BASIC, argc, argv);
if(argc < 2 || argc > 3)
{

View file

@ -81,7 +81,7 @@ int main(int argc, const char **argv)
cmdline_fix(&argc, &argv);
dbg_logger_stdout();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_BASIC, argc, argv);
int ID = 0, Type = 0, Size;
void *pPtr;
char aFileName[IO_MAX_PATH_LENGTH];

View file

@ -113,7 +113,7 @@ int main(int argc, const char **argv)
cmdline_fix(&argc, &argv);
dbg_logger_stdout();
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_BASIC, argc, argv);
if(argc != 5)
{

View file

@ -7,7 +7,7 @@
int main(int argc, const char **argv)
{
cmdline_fix(&argc, &argv);
IStorage *pStorage = CreateStorage("Teeworlds", IStorage::STORAGETYPE_BASIC, argc, argv);
IStorage *pStorage = CreateStorage(IStorage::STORAGETYPE_BASIC, argc, argv);
int Index, ID = 0, Type = 0, Size;
void *pPtr;
char aFileName[IO_MAX_PATH_LENGTH];

View file

@ -1,5 +1,5 @@
####
# This specifies where and in which order Teeworlds looks
# This specifies where and in which order DDNet looks
# for its data (sounds, skins, ...). The search goes top
# down which means the first path has the highest priority.
# Furthermore the top entry also defines the save path where
@ -7,8 +7,9 @@
# There are 3 special paths available:
# $USERDIR
# - ~/.appname on UNIX based systems
# - ~/Library/Applications Support/appname on macOS
# - ~/Library/Applications Support/Appname on macOS
# - %APPDATA%/Appname on Windows based systems
# Appname is DDNet, if that doesn't exist Teeworlds is used as a fallback
# $DATADIR
# - the 'data' directory which is part of an official
# release