Update Corrade/Magnum and adapt to changes.
Also a few misc things, but nothing really noteworthy.
This commit is contained in:
parent
db6836ec33
commit
b859bf7ab5
17 changed files with 194 additions and 172 deletions
|
@ -62,8 +62,8 @@
|
||||||
#
|
#
|
||||||
# Features of found Corrade library are exposed in these variables:
|
# Features of found Corrade library are exposed in these variables:
|
||||||
#
|
#
|
||||||
# CORRADE_MSVC2019_COMPATIBILITY - Defined if compiled with compatibility
|
# CORRADE_MSVC_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
# mode for MSVC 2019
|
# mode for MSVC 2019+ without the /permissive- flag set
|
||||||
# CORRADE_MSVC2017_COMPATIBILITY - Defined if compiled with compatibility
|
# CORRADE_MSVC2017_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
# mode for MSVC 2017
|
# mode for MSVC 2017
|
||||||
# CORRADE_MSVC2015_COMPATIBILITY - Defined if compiled with compatibility
|
# CORRADE_MSVC2015_COMPATIBILITY - Defined if compiled with compatibility
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
# CORRADE_TARGET_MINGW - Defined if compiling under MinGW
|
# CORRADE_TARGET_MINGW - Defined if compiling under MinGW
|
||||||
# CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT - Defined if PluginManager
|
# CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT - Defined if PluginManager
|
||||||
# doesn't support dynamic plugin loading due to platform limitations
|
# doesn't support dynamic plugin loading due to platform limitations
|
||||||
# CORRADE_TESTSUITE_TARGET_XCTEST - Defined if TestSuite is targetting Xcode
|
# CORRADE_TESTSUITE_TARGET_XCTEST - Defined if TestSuite is targeting Xcode
|
||||||
# XCTest
|
# XCTest
|
||||||
# CORRADE_UTILITY_USE_ANSI_COLORS - Defined if ANSI escape sequences are used
|
# CORRADE_UTILITY_USE_ANSI_COLORS - Defined if ANSI escape sequences are used
|
||||||
# for colored output with Utility::Debug on Windows
|
# for colored output with Utility::Debug on Windows
|
||||||
|
@ -264,7 +264,7 @@
|
||||||
# This file is part of Corrade.
|
# This file is part of Corrade.
|
||||||
#
|
#
|
||||||
# Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
|
# Copyright © 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
|
||||||
# 2017, 2018, 2019, 2020, 2021
|
# 2017, 2018, 2019, 2020, 2021, 2022
|
||||||
# Vladimír Vondruš <mosra@centrum.cz>
|
# Vladimír Vondruš <mosra@centrum.cz>
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
@ -312,7 +312,7 @@ string(REGEX REPLACE "\n" ";" _corradeConfigure "${_corradeConfigure}")
|
||||||
set(_corradeFlags
|
set(_corradeFlags
|
||||||
MSVC2015_COMPATIBILITY
|
MSVC2015_COMPATIBILITY
|
||||||
MSVC2017_COMPATIBILITY
|
MSVC2017_COMPATIBILITY
|
||||||
MSVC2019_COMPATIBILITY
|
MSVC_COMPATIBILITY
|
||||||
BUILD_DEPRECATED
|
BUILD_DEPRECATED
|
||||||
BUILD_STATIC
|
BUILD_STATIC
|
||||||
BUILD_STATIC_UNIQUE_GLOBALS
|
BUILD_STATIC_UNIQUE_GLOBALS
|
||||||
|
@ -529,7 +529,7 @@ foreach(_component ${Corrade_FIND_COMPONENTS})
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
COMPATIBLE_INTERFACE_NUMBER_MAX CORRADE_CXX_STANDARD)
|
COMPATIBLE_INTERFACE_NUMBER_MAX CORRADE_CXX_STANDARD)
|
||||||
|
|
||||||
# Directory::libraryLocation() needs this
|
# Path::libraryLocation() needs this
|
||||||
if(CORRADE_TARGET_UNIX)
|
if(CORRADE_TARGET_UNIX)
|
||||||
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
set_property(TARGET Corrade::${_component} APPEND PROPERTY
|
||||||
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
|
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS})
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
# This file is part of Magnum.
|
# This file is part of Magnum.
|
||||||
#
|
#
|
||||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
||||||
# 2020, 2021 Vladimír Vondruš <mosra@centrum.cz>
|
# 2020, 2021, 2022 Vladimír Vondruš <mosra@centrum.cz>
|
||||||
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com>
|
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com>
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
@ -59,11 +59,18 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
# In 1.71 ImGui depends on the ApplicationServices framework for macOS
|
# In 1.71 ImGui depends on the ApplicationServices framework for macOS
|
||||||
# clipboard support. It's removed again in 1.72. TODO: remove once obsolete
|
# clipboard support. Since 1.72 the dependency is optional and used only if
|
||||||
|
# IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS is enabled, but link to it
|
||||||
|
# always to be nice to users.
|
||||||
if(CORRADE_TARGET_APPLE)
|
if(CORRADE_TARGET_APPLE)
|
||||||
find_library(_IMGUI_ApplicationServices_LIBRARY ApplicationServices)
|
find_library(_IMGUI_ApplicationServices_LIBRARY ApplicationServices)
|
||||||
mark_as_advanced(_IMGUI_ApplicationServices_LIBRARY)
|
mark_as_advanced(_IMGUI_ApplicationServices_LIBRARY)
|
||||||
set(_IMGUI_EXTRA_LIBRARIES ${_IMGUI_ApplicationServices_LIBRARY})
|
set(_IMGUI_EXTRA_LIBRARIES ${_IMGUI_ApplicationServices_LIBRARY})
|
||||||
|
|
||||||
|
# Since 1.82, ImGui on MinGW needs the imm32 library. For MSVC the library
|
||||||
|
# seems to be linked implicitly so this is not needed.
|
||||||
|
elseif(CORRADE_TARGET_WINDOWS AND CORRADE_TARGET_MINGW)
|
||||||
|
set(_IMGUI_EXTRA_LIBRARIES imm32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Vcpkg distributes imgui as a library with a config file, so try that first --
|
# Vcpkg distributes imgui as a library with a config file, so try that first --
|
||||||
|
@ -75,7 +82,6 @@ endif()
|
||||||
if(NOT IMGUI_DIR AND TARGET imgui::imgui)
|
if(NOT IMGUI_DIR AND TARGET imgui::imgui)
|
||||||
if(NOT TARGET ImGui::ImGui)
|
if(NOT TARGET ImGui::ImGui)
|
||||||
add_library(ImGui::ImGui INTERFACE IMPORTED)
|
add_library(ImGui::ImGui INTERFACE IMPORTED)
|
||||||
# TODO: remove once 1.71 is obsolete
|
|
||||||
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
||||||
INTERFACE_LINK_LIBRARIES imgui::imgui ${_IMGUI_EXTRA_LIBRARIES})
|
INTERFACE_LINK_LIBRARIES imgui::imgui ${_IMGUI_EXTRA_LIBRARIES})
|
||||||
|
|
||||||
|
@ -104,7 +110,6 @@ else()
|
||||||
add_library(ImGui::ImGui INTERFACE IMPORTED)
|
add_library(ImGui::ImGui INTERFACE IMPORTED)
|
||||||
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
||||||
INTERFACE_INCLUDE_DIRECTORIES ${ImGui_INCLUDE_DIR})
|
INTERFACE_INCLUDE_DIRECTORIES ${ImGui_INCLUDE_DIR})
|
||||||
# TODO: remove once 1.71 is obsolete
|
|
||||||
if(_IMGUI_EXTRA_LIBRARIES)
|
if(_IMGUI_EXTRA_LIBRARIES)
|
||||||
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
set_property(TARGET ImGui::ImGui APPEND PROPERTY
|
||||||
INTERFACE_LINK_LIBRARIES ${_IMGUI_EXTRA_LIBRARIES})
|
INTERFACE_LINK_LIBRARIES ${_IMGUI_EXTRA_LIBRARIES})
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
# MeshTools - MeshTools library
|
# MeshTools - MeshTools library
|
||||||
# Primitives - Primitives library
|
# Primitives - Primitives library
|
||||||
# SceneGraph - SceneGraph library
|
# SceneGraph - SceneGraph library
|
||||||
|
# SceneTools - SceneTools library
|
||||||
# Shaders - Shaders library
|
# Shaders - Shaders library
|
||||||
# ShaderTools - ShaderTools library
|
# ShaderTools - ShaderTools library
|
||||||
# Text - Text library
|
# Text - Text library
|
||||||
|
@ -201,7 +202,7 @@
|
||||||
# This file is part of Magnum.
|
# This file is part of Magnum.
|
||||||
#
|
#
|
||||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
||||||
# 2020, 2021 Vladimír Vondruš <mosra@centrum.cz>
|
# 2020, 2021, 2022 Vladimír Vondruš <mosra@centrum.cz>
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
# copy of this software and associated documentation files (the "Software"),
|
# copy of this software and associated documentation files (the "Software"),
|
||||||
|
@ -229,7 +230,7 @@ foreach(_component ${Magnum_FIND_COMPONENTS})
|
||||||
|
|
||||||
# Unrolling the transitive dependencies here so this doesn't need to be
|
# Unrolling the transitive dependencies here so this doesn't need to be
|
||||||
# after resolving inter-component dependencies. Listing also all plugins.
|
# after resolving inter-component dependencies. Listing also all plugins.
|
||||||
if(_component MATCHES "^(Audio|DebugTools|MeshTools|Primitives|ShaderTools|Text|TextureTools|Trade|.+Importer|.+ImageConverter|.+Font|.+ShaderConverter)$")
|
if(_component MATCHES "^(Audio|DebugTools|MeshTools|Primitives|SceneTools|ShaderTools|Text|TextureTools|Trade|.+Importer|.+ImageConverter|.+Font|.+ShaderConverter)$")
|
||||||
set(_MAGNUM_${_COMPONENT}_CORRADE_DEPENDENCIES PluginManager)
|
set(_MAGNUM_${_COMPONENT}_CORRADE_DEPENDENCIES PluginManager)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -354,8 +355,8 @@ endif()
|
||||||
# Component distinction (listing them explicitly to avoid mistakes with finding
|
# Component distinction (listing them explicitly to avoid mistakes with finding
|
||||||
# components from other repositories)
|
# components from other repositories)
|
||||||
set(_MAGNUM_LIBRARY_COMPONENTS
|
set(_MAGNUM_LIBRARY_COMPONENTS
|
||||||
Audio DebugTools GL MeshTools Primitives SceneGraph Shaders ShaderTools
|
Audio DebugTools GL MeshTools Primitives SceneGraph SceneTools Shaders
|
||||||
Text TextureTools Trade
|
ShaderTools Text TextureTools Trade
|
||||||
WindowlessEglApplication EglContext OpenGLTester)
|
WindowlessEglApplication EglContext OpenGLTester)
|
||||||
set(_MAGNUM_PLUGIN_COMPONENTS
|
set(_MAGNUM_PLUGIN_COMPONENTS
|
||||||
AnyAudioImporter AnyImageConverter AnyImageImporter AnySceneConverter
|
AnyAudioImporter AnyImageConverter AnyImageImporter AnySceneConverter
|
||||||
|
@ -387,8 +388,7 @@ if(CORRADE_TARGET_EMSCRIPTEN)
|
||||||
endif()
|
endif()
|
||||||
if(CORRADE_TARGET_IOS)
|
if(CORRADE_TARGET_IOS)
|
||||||
list(APPEND _MAGNUM_LIBRARY_COMPONENTS WindowlessIosApplication)
|
list(APPEND _MAGNUM_LIBRARY_COMPONENTS WindowlessIosApplication)
|
||||||
endif()
|
elseif(CORRADE_TARGET_APPLE AND NOT MAGNUM_TARGET_GLES)
|
||||||
if(CORRADE_TARGET_APPLE AND NOT CORRADE_TARGET_IOS)
|
|
||||||
list(APPEND _MAGNUM_LIBRARY_COMPONENTS WindowlessCglApplication CglContext)
|
list(APPEND _MAGNUM_LIBRARY_COMPONENTS WindowlessCglApplication CglContext)
|
||||||
endif()
|
endif()
|
||||||
if(CORRADE_TARGET_UNIX AND NOT CORRADE_TARGET_APPLE)
|
if(CORRADE_TARGET_UNIX AND NOT CORRADE_TARGET_APPLE)
|
||||||
|
@ -430,7 +430,7 @@ if(MAGNUM_TARGET_HEADLESS OR CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID
|
||||||
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessEglApplication)
|
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessEglApplication)
|
||||||
elseif(CORRADE_TARGET_IOS)
|
elseif(CORRADE_TARGET_IOS)
|
||||||
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessIosApplication)
|
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessIosApplication)
|
||||||
elseif(CORRADE_TARGET_APPLE)
|
elseif(CORRADE_TARGET_APPLE AND NOT MAGNUM_TARGET_GLES)
|
||||||
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessCglApplication)
|
list(APPEND _MAGNUM_OpenGLTester_DEPENDENCIES WindowlessCglApplication)
|
||||||
elseif(CORRADE_TARGET_UNIX)
|
elseif(CORRADE_TARGET_UNIX)
|
||||||
if(MAGNUM_TARGET_GLES AND NOT MAGNUM_TARGET_DESKTOP_GLES)
|
if(MAGNUM_TARGET_GLES AND NOT MAGNUM_TARGET_DESKTOP_GLES)
|
||||||
|
@ -451,8 +451,11 @@ if(MAGNUM_TARGET_GL)
|
||||||
# GL not required by Primitives themselves, but transitively by MeshTools
|
# GL not required by Primitives themselves, but transitively by MeshTools
|
||||||
list(APPEND _MAGNUM_Primitives_DEPENDENCIES GL)
|
list(APPEND _MAGNUM_Primitives_DEPENDENCIES GL)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(_MAGNUM_SceneGraph_DEPENDENCIES )
|
set(_MAGNUM_SceneGraph_DEPENDENCIES )
|
||||||
|
set(_MAGNUM_SceneTools_DEPENDENCIES Trade)
|
||||||
set(_MAGNUM_Shaders_DEPENDENCIES GL)
|
set(_MAGNUM_Shaders_DEPENDENCIES GL)
|
||||||
|
|
||||||
set(_MAGNUM_Text_DEPENDENCIES TextureTools)
|
set(_MAGNUM_Text_DEPENDENCIES TextureTools)
|
||||||
if(MAGNUM_TARGET_GL)
|
if(MAGNUM_TARGET_GL)
|
||||||
list(APPEND _MAGNUM_Text_DEPENDENCIES GL)
|
list(APPEND _MAGNUM_Text_DEPENDENCIES GL)
|
||||||
|
@ -466,6 +469,7 @@ endif()
|
||||||
set(_MAGNUM_Trade_DEPENDENCIES )
|
set(_MAGNUM_Trade_DEPENDENCIES )
|
||||||
set(_MAGNUM_VulkanTester_DEPENDENCIES Vk)
|
set(_MAGNUM_VulkanTester_DEPENDENCIES Vk)
|
||||||
set(_MAGNUM_AndroidApplication_DEPENDENCIES GL)
|
set(_MAGNUM_AndroidApplication_DEPENDENCIES GL)
|
||||||
|
|
||||||
set(_MAGNUM_EmscriptenApplication_DEPENDENCIES)
|
set(_MAGNUM_EmscriptenApplication_DEPENDENCIES)
|
||||||
if(MAGNUM_TARGET_GL)
|
if(MAGNUM_TARGET_GL)
|
||||||
list(APPEND _MAGNUM_EmscriptenApplication_DEPENDENCIES GL)
|
list(APPEND _MAGNUM_EmscriptenApplication_DEPENDENCIES GL)
|
||||||
|
@ -608,7 +612,7 @@ foreach(_component ${Magnum_FIND_COMPONENTS})
|
||||||
|
|
||||||
# Dynamic plugins don't have any prefix (e.g. `lib` on Linux),
|
# Dynamic plugins don't have any prefix (e.g. `lib` on Linux),
|
||||||
# search with empty prefix and then reset that back so we don't
|
# search with empty prefix and then reset that back so we don't
|
||||||
# accidentaly break something else
|
# accidentally break something else
|
||||||
set(_tmp_prefixes "${CMAKE_FIND_LIBRARY_PREFIXES}")
|
set(_tmp_prefixes "${CMAKE_FIND_LIBRARY_PREFIXES}")
|
||||||
set(CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES};")
|
set(CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES};")
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
# This file is part of Magnum.
|
# This file is part of Magnum.
|
||||||
#
|
#
|
||||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
||||||
# 2020, 2021 Vladimír Vondruš <mosra@centrum.cz>
|
# 2020, 2021, 2022 Vladimír Vondruš <mosra@centrum.cz>
|
||||||
# Copyright © 2018 Konstantinos Chatzilygeroudis <costashatz@gmail.com>
|
# Copyright © 2018 Konstantinos Chatzilygeroudis <costashatz@gmail.com>
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# This file is part of Magnum.
|
# This file is part of Magnum.
|
||||||
#
|
#
|
||||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
||||||
# 2020, 2021 Vladimír Vondruš <mosra@centrum.cz>
|
# 2020, 2021, 2022 Vladimír Vondruš <mosra@centrum.cz>
|
||||||
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com>
|
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com>
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
@ -168,37 +168,38 @@ find_path(SDL2_INCLUDE_DIR
|
||||||
if(CORRADE_TARGET_WINDOWS)
|
if(CORRADE_TARGET_WINDOWS)
|
||||||
find_file(SDL2_DLL_RELEASE
|
find_file(SDL2_DLL_RELEASE
|
||||||
NAMES SDL2.dll
|
NAMES SDL2.dll
|
||||||
PATH_SUFFIXES ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
PATH_SUFFIXES bin ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
||||||
find_file(SDL2_DLL_DEBUG
|
find_file(SDL2_DLL_DEBUG
|
||||||
NAMES SDL2d.dll # not sure?
|
NAMES SDL2d.dll # not sure?
|
||||||
PATH_SUFFIXES ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
PATH_SUFFIXES bin ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# (Static) macOS / iOS dependencies
|
# (Static) macOS / iOS dependencies. On macOS these were mainly needed when
|
||||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")
|
# building SDL statically using its CMake project, on iOS always.
|
||||||
if(CORRADE_TARGET_IOS)
|
if(CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
|
||||||
set(_SDL2_FRAMEWORKS
|
set(_SDL2_FRAMEWORKS
|
||||||
|
iconv # should be in the system, needed by iOS as well now
|
||||||
AudioToolbox
|
AudioToolbox
|
||||||
AVFoundation
|
AVFoundation
|
||||||
|
CoreHaptics # needed since 2.0.18(?) on iOS and macOS
|
||||||
|
Foundation
|
||||||
|
Metal # needed since 2.0.8 on iOS, since 2.0.14 on macOS
|
||||||
|
GameController) # needed since 2.0.18(?) on macOS as well
|
||||||
|
if(CORRADE_TARGET_IOS)
|
||||||
|
list(APPEND _SDL2_FRAMEWORKS
|
||||||
|
CoreBluetooth # needed since 2.0.10
|
||||||
CoreGraphics
|
CoreGraphics
|
||||||
CoreMotion
|
CoreMotion
|
||||||
Foundation
|
Foundation
|
||||||
GameController
|
|
||||||
Metal # needed since 2.0.8
|
|
||||||
QuartzCore
|
QuartzCore
|
||||||
UIKit)
|
UIKit)
|
||||||
else()
|
else()
|
||||||
# Those are needed when building SDL statically using its CMake project
|
list(APPEND _SDL2_FRAMEWORKS
|
||||||
set(_SDL2_FRAMEWORKS
|
|
||||||
iconv # should be in the system
|
|
||||||
AudioToolbox
|
|
||||||
AVFoundation
|
|
||||||
Carbon
|
Carbon
|
||||||
Cocoa
|
Cocoa
|
||||||
CoreAudio
|
CoreAudio
|
||||||
CoreVideo
|
CoreVideo
|
||||||
ForceFeedback
|
ForceFeedback
|
||||||
Foundation
|
|
||||||
IOKit)
|
IOKit)
|
||||||
endif()
|
endif()
|
||||||
set(_SDL2_FRAMEWORK_LIBRARIES )
|
set(_SDL2_FRAMEWORK_LIBRARIES )
|
||||||
|
@ -247,7 +248,7 @@ if(NOT TARGET SDL2::SDL2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Link frameworks on macOS / iOS if we have a static SDL
|
# Link frameworks on macOS / iOS if we have a static SDL
|
||||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY MATCHES ".*libSDL2.a$")
|
if(CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
|
||||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
set_property(TARGET SDL2::SDL2 APPEND PROPERTY
|
||||||
INTERFACE_LINK_LIBRARIES ${_SDL2_FRAMEWORK_LIBRARIES})
|
INTERFACE_LINK_LIBRARIES ${_SDL2_FRAMEWORK_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -15,11 +15,10 @@
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <Corrade/Containers/Array.h>
|
#include <Corrade/Containers/Array.h>
|
||||||
#include <Corrade/Containers/StringStl.h>
|
#include <Corrade/Containers/Pair.h>
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
|
|
||||||
#include "../UESaveFile/Types/ArrayProperty.h"
|
#include "../UESaveFile/Types/ArrayProperty.h"
|
||||||
#include "../UESaveFile/Types/BoolProperty.h"
|
#include "../UESaveFile/Types/BoolProperty.h"
|
||||||
|
@ -37,9 +36,10 @@
|
||||||
|
|
||||||
using namespace Containers::Literals;
|
using namespace Containers::Literals;
|
||||||
|
|
||||||
Mass::Mass(const std::string& path) {
|
Mass::Mass(Containers::StringView path) {
|
||||||
_folder = Utility::Directory::path(path);
|
auto split = Utility::Path::split(path);
|
||||||
_filename = Utility::Directory::filename(path);
|
_folder = split.first();
|
||||||
|
_filename = split.second();
|
||||||
|
|
||||||
refreshValues();
|
refreshValues();
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ auto Mass::lastError() -> Containers::StringView {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Mass::getNameFromFile(Containers::StringView path) -> Containers::Optional<Containers::String> {
|
auto Mass::getNameFromFile(Containers::StringView path) -> Containers::Optional<Containers::String> {
|
||||||
if(!Utility::Directory::exists(path)) {
|
if(!Utility::Path::exists(path)) {
|
||||||
Utility::Error{} << path << "couldn't be found."_s;
|
Utility::Error{} << path << "couldn't be found."_s;
|
||||||
return Containers::NullOpt;
|
return Containers::NullOpt;
|
||||||
}
|
}
|
||||||
|
@ -79,13 +79,13 @@ auto Mass::getNameFromFile(Containers::StringView path) -> Containers::Optional<
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mass::refreshValues() {
|
void Mass::refreshValues() {
|
||||||
if(!Utility::Directory::exists(Utility::Directory::join(_folder, _filename))) {
|
if(!Utility::Path::exists(Utility::Path::join(_folder, _filename))) {
|
||||||
_state = State::Empty;
|
_state = State::Empty;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!_mass) {
|
if(!_mass) {
|
||||||
_mass.emplace(Utility::Directory::join(_folder, _filename));
|
_mass.emplace(Utility::Path::join(_folder, _filename));
|
||||||
if(!_mass->valid()) {
|
if(!_mass->valid()) {
|
||||||
_state = State::Invalid;
|
_state = State::Invalid;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -48,7 +48,7 @@ class Mass {
|
||||||
Empty, Invalid, Valid
|
Empty, Invalid, Valid
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit Mass(const std::string& path);
|
explicit Mass(Containers::StringView path);
|
||||||
|
|
||||||
Mass(const Mass&) = delete;
|
Mass(const Mass&) = delete;
|
||||||
Mass& operator=(const Mass&) = delete;
|
Mass& operator=(const Mass&) = delete;
|
||||||
|
|
|
@ -16,10 +16,8 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Format.h>
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
#include <Corrade/Utility/String.h>
|
|
||||||
#include <Corrade/Containers/StringStl.h>
|
|
||||||
|
|
||||||
#include "MassManager.h"
|
#include "MassManager.h"
|
||||||
|
|
||||||
|
@ -35,12 +33,12 @@ MassManager::MassManager(Containers::StringView save_path, Containers::StringVie
|
||||||
|
|
||||||
Containers::String mass_filename = "";
|
Containers::String mass_filename = "";
|
||||||
for(int i = 0; i < 32; i++) {
|
for(int i = 0; i < 32; i++) {
|
||||||
mass_filename = Utility::Directory::join(_saveDirectory, Utility::formatString("{}Unit{:.2d}{}.sav", demo ? "Demo"_s : ""_s, i, _account));
|
mass_filename = Utility::Path::join(_saveDirectory, Utility::format("{}Unit{:.2d}{}.sav", demo ? "Demo"_s : ""_s, i, _account));
|
||||||
Containers::arrayAppend(_hangars, Mass{mass_filename});
|
Containers::arrayAppend(_hangars, Mass{mass_filename});
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::exists(_stagingAreaDirectory)) {
|
if(!Utility::Path::exists(_stagingAreaDirectory)) {
|
||||||
Utility::Directory::mkpath(_stagingAreaDirectory);
|
Utility::Path::make(_stagingAreaDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshStagedMasses();
|
refreshStagedMasses();
|
||||||
|
@ -60,7 +58,8 @@ void MassManager::refreshHangar(Int hangar) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::String mass_filename =
|
Containers::String mass_filename =
|
||||||
Utility::Directory::join(_saveDirectory, Utility::formatString("{}Unit{:.2d}{}.sav", _demo ? "Demo" : "", hangar, _account));
|
Utility::Path::join(_saveDirectory,
|
||||||
|
Utility::format("{}Unit{:.2d}{}.sav", _demo ? "Demo" : "", hangar, _account));
|
||||||
_hangars[hangar] = Mass{mass_filename};
|
_hangars[hangar] = Mass{mass_filename};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,26 +76,26 @@ auto MassManager::importMass(Containers::StringView staged_fn, Int hangar) -> bo
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::String source = Utility::Directory::join(_stagingAreaDirectory, staged_fn);
|
Containers::String source = Utility::Path::join(_stagingAreaDirectory, staged_fn);
|
||||||
Utility::Directory::copy(source, source + ".tmp"_s);
|
Utility::Path::copy(source, source + ".tmp"_s);
|
||||||
|
|
||||||
{
|
{
|
||||||
Mass mass{source + ".tmp"_s};
|
Mass mass{source + ".tmp"_s};
|
||||||
if(!mass.updateAccount(_account)) {
|
if(!mass.updateAccount(_account)) {
|
||||||
_lastError = mass.lastError();
|
_lastError = mass.lastError();
|
||||||
Utility::Directory::rm(source + ".tmp"_s);
|
Utility::Path::remove(source + ".tmp"_s);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::String dest = Utility::Directory::join(_saveDirectory, _hangars[hangar].filename());
|
Containers::String dest = Utility::Path::join(_saveDirectory, _hangars[hangar].filename());
|
||||||
|
|
||||||
if(Utility::Directory::exists(dest)) {
|
if(Utility::Path::exists(dest)) {
|
||||||
Utility::Directory::rm(dest);
|
Utility::Path::remove(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::move(source + ".tmp"_s, dest)) {
|
if(!Utility::Path::move(source + ".tmp"_s, dest)) {
|
||||||
_lastError = Utility::formatString("Couldn't move {} to hangar {:.2d}", staged_fn, hangar + 1);
|
_lastError = Utility::format("Couldn't move {} to hangar {:.2d}", staged_fn, hangar + 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,16 +109,16 @@ auto MassManager::exportMass(Int hangar) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_hangars[hangar].state() != Mass::State::Valid) {
|
if(_hangars[hangar].state() != Mass::State::Valid) {
|
||||||
_lastError = Utility::formatString("There is no valid data to export in hangar {:.2d}", hangar + 1);
|
_lastError = Utility::format("There is no valid data to export in hangar {:.2d}", hangar + 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::String source = Utility::Directory::join(_saveDirectory, _hangars[hangar].filename());
|
Containers::String source = Utility::Path::join(_saveDirectory, _hangars[hangar].filename());
|
||||||
Containers::String dest = Utility::Directory::join(_stagingAreaDirectory,
|
Containers::String dest = Utility::Path::join(_stagingAreaDirectory,
|
||||||
Utility::formatString("{}_{}.sav", _hangars[hangar].name(), _account));
|
Utility::format("{}_{}.sav", _hangars[hangar].name(), _account));
|
||||||
|
|
||||||
if(!Utility::Directory::copy(source, dest)) {
|
if(!Utility::Path::copy(source, dest)) {
|
||||||
_lastError = Utility::formatString("Couldn't export data from hangar {:.2d} to {}", hangar, dest);
|
_lastError = Utility::format("Couldn't export data from hangar {:.2d} to {}", hangar, dest);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,25 +136,25 @@ auto MassManager::moveMass(Int source, Int destination) -> bool {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::String source_file = Utility::Directory::join(_saveDirectory, _hangars[source].filename());
|
Containers::String source_file = Utility::Path::join(_saveDirectory, _hangars[source].filename());
|
||||||
Containers::String dest_file = Utility::Directory::join(_saveDirectory, _hangars[destination].filename());
|
Containers::String dest_file = Utility::Path::join(_saveDirectory, _hangars[destination].filename());
|
||||||
Mass::State dest_state = _hangars[destination].state();
|
Mass::State dest_state = _hangars[destination].state();
|
||||||
|
|
||||||
switch(dest_state) {
|
switch(dest_state) {
|
||||||
case Mass::State::Empty:
|
case Mass::State::Empty:
|
||||||
break;
|
break;
|
||||||
case Mass::State::Invalid:
|
case Mass::State::Invalid:
|
||||||
Utility::Directory::rm(dest_file);
|
Utility::Path::remove(dest_file);
|
||||||
break;
|
break;
|
||||||
case Mass::State::Valid:
|
case Mass::State::Valid:
|
||||||
Utility::Directory::move(dest_file, dest_file + ".tmp"_s);
|
Utility::Path::move(dest_file, dest_file + ".tmp"_s);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Utility::Directory::move(source_file, dest_file);
|
Utility::Path::move(source_file, dest_file);
|
||||||
|
|
||||||
if(dest_state == Mass::State::Valid) {
|
if(dest_state == Mass::State::Valid) {
|
||||||
Utility::Directory::move(dest_file + ".tmp"_s, source_file);
|
Utility::Path::move(dest_file + ".tmp"_s, source_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -167,8 +166,8 @@ auto MassManager::deleteMass(Int hangar) -> bool {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::rm(Utility::Directory::join(_saveDirectory, _hangars[hangar].filename()))) {
|
if(!Utility::Path::remove(Utility::Path::join(_saveDirectory, _hangars[hangar].filename()))) {
|
||||||
_lastError = Utility::formatString("Deletion failed: {}", std::strerror(errno));
|
_lastError = Utility::format("Deletion failed: {}", std::strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,17 +181,22 @@ auto MassManager::stagedMasses() -> std::map<Containers::String, Containers::Str
|
||||||
void MassManager::refreshStagedMasses() {
|
void MassManager::refreshStagedMasses() {
|
||||||
_stagedMasses.clear();
|
_stagedMasses.clear();
|
||||||
|
|
||||||
using Utility::Directory::Flag;
|
using Utility::Path::ListFlag;
|
||||||
auto file_list = Utility::Directory::list(_stagingAreaDirectory, Flag::SkipSpecial|Flag::SkipDirectories|Flag::SkipDotAndDotDot);
|
auto file_list = Utility::Path::list(_stagingAreaDirectory, ListFlag::SkipSpecial|ListFlag::SkipDirectories|ListFlag::SkipDotAndDotDot);
|
||||||
|
|
||||||
auto iter = std::remove_if(file_list.begin(), file_list.end(), [](std::string& file){
|
if(!file_list) {
|
||||||
return !Utility::String::endsWith(file, ".sav"_s);
|
_lastError = _stagingAreaDirectory + " couldn't be opened"_s;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto iter = std::remove_if(file_list->begin(), file_list->end(), [](Containers::StringView file){
|
||||||
|
return file.hasSuffix(".sav"_s);
|
||||||
});
|
});
|
||||||
|
|
||||||
file_list.erase(iter, file_list.end());
|
auto list_view = file_list->except(file_list->end() - iter);
|
||||||
|
|
||||||
for(auto& file : file_list) {
|
for(Containers::StringView file : list_view) {
|
||||||
auto name = Mass::getNameFromFile(Utility::Directory::join(_stagingAreaDirectory, file));
|
auto name = Mass::getNameFromFile(Utility::Path::join(_stagingAreaDirectory, file));
|
||||||
|
|
||||||
if(name) {
|
if(name) {
|
||||||
_stagedMasses[file] = *name;
|
_stagedMasses[file] = *name;
|
||||||
|
@ -206,7 +210,7 @@ auto MassManager::deleteStagedMass(Containers::StringView filename) -> bool {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::rm(Utility::Directory::join(_stagingAreaDirectory, filename))) {
|
if(!Utility::Path::remove(Utility::Path::join(_stagingAreaDirectory, filename))) {
|
||||||
_lastError = filename + " couldn't be deleted: " + std::strerror(errno);
|
_lastError = filename + " couldn't be deleted: " + std::strerror(errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,11 +17,10 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <Corrade/Containers/Array.h>
|
#include <Corrade/Containers/Array.h>
|
||||||
|
#include <Corrade/Containers/Pair.h>
|
||||||
#include <Corrade/Containers/StaticArray.h>
|
#include <Corrade/Containers/StaticArray.h>
|
||||||
#include <Corrade/Containers/StringStl.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Format.h>
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
|
||||||
#include <Corrade/Utility/String.h>
|
|
||||||
|
|
||||||
#include "../UESaveFile/Types/ArrayProperty.h"
|
#include "../UESaveFile/Types/ArrayProperty.h"
|
||||||
#include "../UESaveFile/Types/ResourceItemValue.h"
|
#include "../UESaveFile/Types/ResourceItemValue.h"
|
||||||
|
@ -41,7 +40,7 @@ Profile::Profile(Containers::StringView path):
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_filename = Utility::Directory::filename(path);
|
_filename = Utility::Path::split(path).second();
|
||||||
|
|
||||||
if(_filename.hasPrefix("Demo"_s)) {
|
if(_filename.hasPrefix("Demo"_s)) {
|
||||||
_type = ProfileType::Demo;
|
_type = ProfileType::Demo;
|
||||||
|
|
|
@ -23,9 +23,8 @@
|
||||||
|
|
||||||
#include <Corrade/Containers/ScopeGuard.h>
|
#include <Corrade/Containers/ScopeGuard.h>
|
||||||
#include <Corrade/Containers/StaticArray.h>
|
#include <Corrade/Containers/StaticArray.h>
|
||||||
#include <Corrade/Containers/StringStl.h>
|
#include <Corrade/Utility/Format.h>
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
|
||||||
#include <Corrade/Utility/String.h>
|
#include <Corrade/Utility/String.h>
|
||||||
|
|
||||||
#include <zip.h>
|
#include <zip.h>
|
||||||
|
@ -56,8 +55,14 @@ auto ProfileManager::profiles() -> Containers::ArrayView<Profile> {
|
||||||
auto ProfileManager::refreshProfiles() -> bool {
|
auto ProfileManager::refreshProfiles() -> bool {
|
||||||
_profiles = Containers::Array<Profile>{};
|
_profiles = Containers::Array<Profile>{};
|
||||||
|
|
||||||
using Utility::Directory::Flag;
|
using Utility::Path::ListFlag;
|
||||||
auto files = Utility::Directory::list(_saveDirectory, Flag::SkipSpecial|Flag::SkipDirectories|Flag::SkipDotAndDotDot);
|
auto files = Utility::Path::list(_saveDirectory,
|
||||||
|
ListFlag::SkipSpecial|ListFlag::SkipDirectories|ListFlag::SkipDotAndDotDot);
|
||||||
|
|
||||||
|
if(!files) {
|
||||||
|
_lastError = _saveDirectory + " can't be opened.";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
auto predicate = [](Containers::StringView file)->bool{
|
auto predicate = [](Containers::StringView file)->bool{
|
||||||
std::regex legacy_regex("(Demo)?Profile[0-9]{17}\\.sav", std::regex::nosubs);
|
std::regex legacy_regex("(Demo)?Profile[0-9]{17}\\.sav", std::regex::nosubs);
|
||||||
|
@ -66,13 +71,13 @@ auto ProfileManager::refreshProfiles() -> bool {
|
||||||
return !std::regex_match(file.data(), m, legacy_regex) && !std::regex_match(file.data(), m, new_regex);
|
return !std::regex_match(file.data(), m, legacy_regex) && !std::regex_match(file.data(), m, new_regex);
|
||||||
};
|
};
|
||||||
|
|
||||||
files.erase(std::remove_if(files.begin(), files.end(), predicate), files.end());
|
auto files_view = files->except(files->end() - std::remove_if(files->begin(), files->end(), predicate));
|
||||||
|
|
||||||
for(const auto& file : files) {
|
for(const auto& file : files_view) {
|
||||||
Profile profile{Utility::Directory::join(_saveDirectory, file)};
|
Profile profile{Utility::Path::join(_saveDirectory, file)};
|
||||||
|
|
||||||
if(!profile.valid()) {
|
if(!profile.valid()) {
|
||||||
Utility::Warning{} << "Profile"_s << file.c_str() << "is invalid:"_s << profile.lastError();
|
Utility::Warning{} << "Profile"_s << file << "is invalid:"_s << profile.lastError();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +97,7 @@ auto ProfileManager::getProfile(std::size_t index) -> Profile* {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ProfileManager::deleteProfile(std::size_t index, bool delete_builds) -> bool {
|
auto ProfileManager::deleteProfile(std::size_t index, bool delete_builds) -> bool {
|
||||||
if(!Utility::Directory::rm(Utility::Directory::join(_saveDirectory, _profiles[index].filename()))) {
|
if(!Utility::Path::remove(Utility::Path::join(_saveDirectory, _profiles[index].filename()))) {
|
||||||
_lastError = Utility::format("Couldn't delete {} (filename: {}).",
|
_lastError = Utility::format("Couldn't delete {} (filename: {}).",
|
||||||
_profiles[index].companyName(),
|
_profiles[index].companyName(),
|
||||||
_profiles[index].filename());
|
_profiles[index].filename());
|
||||||
|
@ -105,7 +110,7 @@ auto ProfileManager::deleteProfile(std::size_t index, bool delete_builds) -> boo
|
||||||
auto filename = Utility::format("{}Unit{:.2d}{}.sav",
|
auto filename = Utility::format("{}Unit{:.2d}{}.sav",
|
||||||
_profiles[index].type() == ProfileType::Demo ? "Demo": "",
|
_profiles[index].type() == ProfileType::Demo ? "Demo": "",
|
||||||
i, _profiles[index].account());
|
i, _profiles[index].account());
|
||||||
Utility::Directory::rm(Utility::Directory::join(_saveDirectory, filename));
|
Utility::Path::remove(Utility::Path::join(_saveDirectory, filename));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,20 +129,20 @@ auto ProfileManager::backupProfile(std::size_t index, bool backup_builds) -> boo
|
||||||
std::tm* time = std::localtime(×tamp);
|
std::tm* time = std::localtime(×tamp);
|
||||||
|
|
||||||
auto filename = Utility::format("{}_{}{:.2d}{:.2d}_{:.2d}{:.2d}{:.2d}.mbprofbackup",
|
auto filename = Utility::format("{}_{}{:.2d}{:.2d}_{:.2d}{:.2d}{:.2d}.mbprofbackup",
|
||||||
Utility::String::replaceAll(_profiles[index].companyName(), " ", "_"),
|
Utility::String::replaceAll(_profiles[index].companyName().data(), " ", "_").c_str(),
|
||||||
time->tm_year + 1900, time->tm_mon + 1, time->tm_mday,
|
time->tm_year + 1900, time->tm_mon + 1, time->tm_mday,
|
||||||
time->tm_hour, time->tm_min, time->tm_sec);
|
time->tm_hour, time->tm_min, time->tm_sec);
|
||||||
|
|
||||||
int error_code = 0;
|
int error_code = 0;
|
||||||
zip_error_t error;
|
zip_error_t error;
|
||||||
zip_t* zip = zip_open(Utility::Directory::join(_backupsDirectory, filename).c_str(), ZIP_CREATE|ZIP_TRUNCATE, &error_code);
|
zip_t* zip = zip_open(Utility::Path::join(_backupsDirectory, filename).data(), ZIP_CREATE|ZIP_TRUNCATE, &error_code);
|
||||||
if(zip == nullptr) {
|
if(zip == nullptr) {
|
||||||
zip_error_init_with_code(&error, error_code);
|
zip_error_init_with_code(&error, error_code);
|
||||||
_lastError = zip_error_strerror(&error);
|
_lastError = zip_error_strerror(&error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
zip_source_t* profile_source = zip_source_file(zip, Utility::Directory::toNativeSeparators(Utility::Directory::join(_saveDirectory, _profiles[index].filename())).c_str(), 0, 0);
|
zip_source_t* profile_source = zip_source_file(zip, Utility::Path::toNativeSeparators(Utility::Path::join(_saveDirectory, _profiles[index].filename())).data(), 0, 0);
|
||||||
if(profile_source == nullptr) {
|
if(profile_source == nullptr) {
|
||||||
_lastError = zip_strerror(zip);
|
_lastError = zip_strerror(zip);
|
||||||
zip_source_free(profile_source);
|
zip_source_free(profile_source);
|
||||||
|
@ -163,11 +168,11 @@ auto ProfileManager::backupProfile(std::size_t index, bool backup_builds) -> boo
|
||||||
_profiles[index].type() == ProfileType::Demo ? "Demo"_s : ""_s, i,
|
_profiles[index].type() == ProfileType::Demo ? "Demo"_s : ""_s, i,
|
||||||
_profiles[index].account());
|
_profiles[index].account());
|
||||||
|
|
||||||
if(!Utility::Directory::exists(Utility::Directory::join(_saveDirectory, build_filename))) {
|
if(!Utility::Path::exists(Utility::Path::join(_saveDirectory, build_filename))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
zip_source_t* build_source = zip_source_file(zip, Utility::Directory::toNativeSeparators(Utility::Directory::join(_saveDirectory, build_filename)).c_str(), 0, 0);
|
zip_source_t* build_source = zip_source_file(zip, Utility::Path::toNativeSeparators(Utility::Path::join(_saveDirectory, build_filename)).data(), 0, 0);
|
||||||
if(build_source == nullptr) {
|
if(build_source == nullptr) {
|
||||||
zip_source_free(build_source);
|
zip_source_free(build_source);
|
||||||
continue;
|
continue;
|
||||||
|
@ -197,28 +202,40 @@ auto ProfileManager::backups() -> Containers::ArrayView<Backup> {
|
||||||
void ProfileManager::refreshBackups() {
|
void ProfileManager::refreshBackups() {
|
||||||
_backups = Containers::Array<Backup>{};
|
_backups = Containers::Array<Backup>{};
|
||||||
|
|
||||||
using Utility::Directory::Flag;
|
using Utility::Path::ListFlag;
|
||||||
std::vector<std::string> files = Utility::Directory::list(_backupsDirectory, Flag::SkipSpecial|Flag::SkipDirectories|Flag::SkipDotAndDotDot);
|
auto files = Utility::Path::list(_backupsDirectory,
|
||||||
|
ListFlag::SkipSpecial|ListFlag::SkipDirectories|ListFlag::SkipDotAndDotDot);
|
||||||
|
|
||||||
|
if(!files) {
|
||||||
|
_lastError = _backupsDirectory + " can't be opened.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
auto predicate = [](Containers::StringView file)->bool{
|
auto predicate = [](Containers::StringView file)->bool{
|
||||||
return !file.hasSuffix(".mbprofbackup"_s);
|
return !file.hasSuffix(".mbprofbackup"_s);
|
||||||
};
|
};
|
||||||
|
|
||||||
files.erase(std::remove_if(files.begin(), files.end(), predicate), files.end());
|
auto files_view = files->except(files->end() - std::remove_if(files->begin(), files->end(), predicate));
|
||||||
|
|
||||||
int error_code = 0;
|
int error_code = 0;
|
||||||
zip_t* zip = nullptr;
|
zip_t* zip = nullptr;
|
||||||
for(const std::string& file : files) {
|
for(Containers::StringView file : files_view) {
|
||||||
Backup backup;
|
Backup backup;
|
||||||
backup.filename = file;
|
backup.filename = file;
|
||||||
|
|
||||||
zip = zip_open(Utility::Directory::join(_backupsDirectory, file).c_str(), ZIP_RDONLY, &error_code);
|
zip = zip_open(Utility::Path::join(_backupsDirectory, file).data(), ZIP_RDONLY, &error_code);
|
||||||
if(zip == nullptr) {
|
if(zip == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Containers::ScopeGuard guard{zip, zip_close};
|
Containers::ScopeGuard guard{zip, zip_close};
|
||||||
|
|
||||||
|
Long num_entries = zip_get_num_entries(zip, ZIP_FL_UNCHANGED);
|
||||||
|
|
||||||
|
if(num_entries == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
int comment_length;
|
int comment_length;
|
||||||
Containers::StringView comment = zip_get_archive_comment(zip, &comment_length, ZIP_FL_UNCHANGED);
|
Containers::StringView comment = zip_get_archive_comment(zip, &comment_length, ZIP_FL_UNCHANGED);
|
||||||
if(comment == nullptr) {
|
if(comment == nullptr) {
|
||||||
|
@ -248,18 +265,12 @@ void ProfileManager::refreshBackups() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
backup.timestamp.year = std::stoi(ts[0]);
|
backup.timestamp.year = std::strtol(ts[0].data(), nullptr, 10);
|
||||||
backup.timestamp.month = std::stoi(ts[1]);
|
backup.timestamp.month = std::strtol(ts[1].data(), nullptr, 10);
|
||||||
backup.timestamp.day = std::stoi(ts[2]);
|
backup.timestamp.day = std::strtol(ts[2].data(), nullptr, 10);
|
||||||
backup.timestamp.hour = std::stoi(ts[3]);
|
backup.timestamp.hour = std::strtol(ts[3].data(), nullptr, 10);
|
||||||
backup.timestamp.minute = std::stoi(ts[4]);
|
backup.timestamp.minute = std::strtol(ts[4].data(), nullptr, 10);
|
||||||
backup.timestamp.second = std::stoi(ts[5]);
|
backup.timestamp.second = std::strtol(ts[5].data(), nullptr, 10);
|
||||||
|
|
||||||
Long num_entries = zip_get_num_entries(zip, ZIP_FL_UNCHANGED);
|
|
||||||
|
|
||||||
if(num_entries == 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
arrayReserve(backup.includedFiles, num_entries);
|
arrayReserve(backup.includedFiles, num_entries);
|
||||||
|
|
||||||
|
@ -272,7 +283,7 @@ void ProfileManager::refreshBackups() {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ProfileManager::deleteBackup(std::size_t index) -> bool {
|
auto ProfileManager::deleteBackup(std::size_t index) -> bool {
|
||||||
if(!Utility::Directory::rm(Utility::Directory::join(_backupsDirectory, _backups[index].filename))) {
|
if(!Utility::Path::remove(Utility::Path::join(_backupsDirectory, _backups[index].filename))) {
|
||||||
_lastError = "Couldn't delete " + _backups[index].filename;
|
_lastError = "Couldn't delete " + _backups[index].filename;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -295,7 +306,7 @@ auto ProfileManager::restoreBackup(std::size_t index) -> bool {
|
||||||
int error_code = 0;
|
int error_code = 0;
|
||||||
zip_t* zip = nullptr;
|
zip_t* zip = nullptr;
|
||||||
|
|
||||||
zip = zip_open(Utility::Directory::join(_backupsDirectory, backup.filename).c_str(), ZIP_RDONLY, &error_code);
|
zip = zip_open(Utility::Path::join(_backupsDirectory, backup.filename).data(), ZIP_RDONLY, &error_code);
|
||||||
if(zip == nullptr) {
|
if(zip == nullptr) {
|
||||||
zip_error_t error;
|
zip_error_t error;
|
||||||
zip_error_init_with_code(&error, error_code);
|
zip_error_init_with_code(&error, error_code);
|
||||||
|
@ -306,9 +317,9 @@ auto ProfileManager::restoreBackup(std::size_t index) -> bool {
|
||||||
Containers::ScopeGuard zip_guard{zip, zip_close};
|
Containers::ScopeGuard zip_guard{zip, zip_close};
|
||||||
|
|
||||||
for(Containers::StringView file : backup.includedFiles) {
|
for(Containers::StringView file : backup.includedFiles) {
|
||||||
FILE* out = std::fopen(Utility::Directory::join(_saveDirectory, file).c_str(), "wb");
|
FILE* out = std::fopen(Utility::Path::join(_saveDirectory, file).data(), "wb");
|
||||||
if(out == nullptr) {
|
if(out == nullptr) {
|
||||||
_lastError = Utility::formatString(error_format.data(), file, std::strerror(errno));
|
_lastError = Utility::format(error_format.data(), file, std::strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,10 +18,10 @@
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
#include <Corrade/Containers/Pair.h>
|
||||||
#include <Corrade/Containers/ScopeGuard.h>
|
#include <Corrade/Containers/ScopeGuard.h>
|
||||||
#include <Corrade/Containers/StringStl.h>
|
|
||||||
#include <Corrade/Utility/Directory.h>
|
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
#include <Corrade/Utility/FormatStl.h>
|
||||||
|
#include <Corrade/Utility/Path.h>
|
||||||
#include <Corrade/Utility/String.h>
|
#include <Corrade/Utility/String.h>
|
||||||
#include <Corrade/Utility/Unicode.h>
|
#include <Corrade/Utility/Unicode.h>
|
||||||
|
|
||||||
|
@ -104,9 +104,9 @@ SaveTool::SaveTool(const Arguments& arguments):
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_configDir = Utility::Directory::join(_gameDataDir, "Saved/Config/WindowsNoEditor");
|
_configDir = Utility::Path::join(_gameDataDir, "Saved/Config/WindowsNoEditor");
|
||||||
_saveDir = Utility::Directory::join(_gameDataDir, "Saved/SaveGames");
|
_saveDir = Utility::Path::join(_gameDataDir, "Saved/SaveGames");
|
||||||
_screenshotsDir = Utility::Directory::join(_gameDataDir, "Saved/Screenshots/WindowsNoEditor");
|
_screenshotsDir = Utility::Path::join(_gameDataDir, "Saved/Screenshots/WindowsNoEditor");
|
||||||
|
|
||||||
if(SDL_InitSubSystem(SDL_INIT_TIMER) != 0) {
|
if(SDL_InitSubSystem(SDL_INIT_TIMER) != 0) {
|
||||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error initialising the app", SDL_GetError(), window());
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Error initialising the app", SDL_GetError(), window());
|
||||||
|
@ -535,19 +535,19 @@ void SaveTool::initialiseManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveTool::initialiseToolDirectories() {
|
void SaveTool::initialiseToolDirectories() {
|
||||||
_backupsDir = Utility::Directory::join(Utility::Directory::path(Utility::Directory::executableLocation()), "backups");
|
_backupsDir = Utility::Path::join(Utility::Path::split(*Utility::Path::executableLocation()).first(), "backups");
|
||||||
_stagingDir = Utility::Directory::join(Utility::Directory::path(Utility::Directory::executableLocation()), "staging");
|
_stagingDir = Utility::Path::join(Utility::Path::split(*Utility::Path::executableLocation()).first(), "staging");
|
||||||
//_armouryDir = Utility::Directory::join(Utility::Directory::path(Utility::Directory::executableLocation()), "armoury");
|
//_armouryDir = Utility::Directory::join(Utility::Directory::path(Utility::Directory::executableLocation()), "armoury");
|
||||||
//_armoursDir = Utility::Directory::join(_armouryDir, "armours");
|
//_armoursDir = Utility::Directory::join(_armouryDir, "armours");
|
||||||
//_weaponsDir = Utility::Directory::join(_armouryDir, "weapons");
|
//_weaponsDir = Utility::Directory::join(_armouryDir, "weapons");
|
||||||
//_stylesDir = Utility::Directory::join(_armouryDir, "styles");
|
//_stylesDir = Utility::Directory::join(_armouryDir, "styles");
|
||||||
|
|
||||||
if(!Utility::Directory::exists(_backupsDir)) {
|
if(!Utility::Path::exists(_backupsDir)) {
|
||||||
Utility::Directory::mkpath(_backupsDir);
|
Utility::Path::make(_backupsDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::exists(_stagingDir)) {
|
if(!Utility::Path::exists(_stagingDir)) {
|
||||||
Utility::Directory::mkpath(_stagingDir);
|
Utility::Path::make(_stagingDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(!Utility::Directory::exists(_armouryDir)) {
|
//if(!Utility::Directory::exists(_armouryDir)) {
|
||||||
|
@ -576,9 +576,9 @@ auto SaveTool::findGameDataDirectory() -> bool {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_gameDataDir = Utility::Directory::join(Utility::Directory::fromNativeSeparators(Utility::Unicode::narrow(localappdata_path)), "MASS_Builder");
|
_gameDataDir = Utility::Path::join(Utility::Path::fromNativeSeparators(Utility::Unicode::narrow(localappdata_path)), "MASS_Builder"_s);
|
||||||
|
|
||||||
if(!Utility::Directory::exists(_gameDataDir)) {
|
if(!Utility::Path::exists(_gameDataDir)) {
|
||||||
_lastError = _gameDataDir + " wasn't found. Make sure to play the game at least once."_s;
|
_lastError = _gameDataDir + " wasn't found. Make sure to play the game at least once."_s;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -774,7 +774,7 @@ void SaveTool::drawTooltip(Containers::StringView text, Float wrap_pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveTool::openUri(Containers::StringView uri) {
|
void SaveTool::openUri(Containers::StringView uri) {
|
||||||
ShellExecuteW(nullptr, nullptr, Utility::Unicode::widen(uri.data()).c_str(), nullptr, nullptr, SW_SHOWDEFAULT);
|
ShellExecuteW(nullptr, nullptr, Utility::Unicode::widen(uri.data()), nullptr, nullptr, SW_SHOWDEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SaveTool::checkGameState() {
|
void SaveTool::checkGameState() {
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include <Corrade/Containers/Reference.h>
|
#include <Corrade/Containers/Reference.h>
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Format.h>
|
||||||
#include <Corrade/Utility/FormatStl.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
#include <Corrade/Utility/String.h>
|
#include <Corrade/Utility/String.h>
|
||||||
|
|
||||||
#include "../FontAwesome/IconsFontAwesome5.h"
|
#include "../FontAwesome/IconsFontAwesome5.h"
|
||||||
|
@ -28,8 +28,6 @@
|
||||||
#include "../Maps/LastMissionId.h"
|
#include "../Maps/LastMissionId.h"
|
||||||
#include "../Maps/StoryProgress.h"
|
#include "../Maps/StoryProgress.h"
|
||||||
|
|
||||||
static const std::string empty_str;
|
|
||||||
|
|
||||||
void SaveTool::drawManager() {
|
void SaveTool::drawManager() {
|
||||||
ImGui::SetNextWindowPos({0.0f, ImGui::GetItemRectSize().y}, ImGuiCond_Always);
|
ImGui::SetNextWindowPos({0.0f, ImGui::GetItemRectSize().y}, ImGuiCond_Always);
|
||||||
ImGui::SetNextWindowSize({Float(windowSize().x()), Float(windowSize().y()) - ImGui::GetItemRectSize().y},
|
ImGui::SetNextWindowSize({Float(windowSize().x()), Float(windowSize().y()) - ImGui::GetItemRectSize().y},
|
||||||
|
@ -43,7 +41,7 @@ void SaveTool::drawManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
drawAlignedText("Current profile: %s (%s)",
|
drawAlignedText("Current profile: %s (%s)",
|
||||||
_currentProfile->companyName(),
|
_currentProfile->companyName().data(),
|
||||||
_currentProfile->type() == ProfileType::Demo ? "demo" : "full game");
|
_currentProfile->type() == ProfileType::Demo ? "demo" : "full game");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if(ImGui::Button(ICON_FA_ARROW_LEFT " Back to profile manager")) {
|
if(ImGui::Button(ICON_FA_ARROW_LEFT " Back to profile manager")) {
|
||||||
|
@ -464,7 +462,7 @@ void SaveTool::drawMassManager() {
|
||||||
static int drag_drop_index = 0;
|
static int drag_drop_index = 0;
|
||||||
|
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
ImGui::Selectable(Utility::formatString("{:.2d}", i + 1).c_str(),
|
ImGui::Selectable(Utility::format("{:.2d}", i + 1).data(),
|
||||||
false, ImGuiSelectableFlags_SpanAllColumns|ImGuiSelectableFlags_AllowItemOverlap);
|
false, ImGuiSelectableFlags_SpanAllColumns|ImGuiSelectableFlags_AllowItemOverlap);
|
||||||
if(_massManager->hangar(i).state() == Mass::State::Valid &&
|
if(_massManager->hangar(i).state() == Mass::State::Valid &&
|
||||||
ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
|
ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
|
||||||
|
@ -573,16 +571,16 @@ void SaveTool::drawMassManager() {
|
||||||
ImGui::TextUnformatted("Staging area");
|
ImGui::TextUnformatted("Staging area");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if(ImGui::SmallButton(ICON_FA_FOLDER_OPEN " Open staging folder")) {
|
if(ImGui::SmallButton(ICON_FA_FOLDER_OPEN " Open staging folder")) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_stagingDir));
|
openUri(Utility::Path::toNativeSeparators(_stagingDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
for(const auto& pair : _massManager->stagedMasses()) {
|
for(const auto& pair : _massManager->stagedMasses()) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableSetColumnIndex(0);
|
ImGui::TableSetColumnIndex(0);
|
||||||
std::string staged_formatted = Utility::formatString("{} ({})", pair.second, pair.first);
|
Containers::String staged_formatted = Utility::format("{} ({})", pair.second, pair.first);
|
||||||
ImGui::Selectable(staged_formatted.c_str());
|
ImGui::Selectable(staged_formatted.data());
|
||||||
if((ImGui::CalcTextSize(staged_formatted.c_str()).x + ImGui::GetStyle().FramePadding.x) > ImGui::GetContentRegionAvailWidth()) {
|
if((ImGui::CalcTextSize(staged_formatted.data()).x + ImGui::GetStyle().FramePadding.x) > ImGui::GetContentRegionAvailWidth()) {
|
||||||
drawTooltip(staged_formatted.c_str());
|
drawTooltip(staged_formatted.data());
|
||||||
}
|
}
|
||||||
if(ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceNoHoldToOpenOthers)) {
|
if(ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceNoHoldToOpenOthers)) {
|
||||||
ImGui::SetDragDropPayload("StagedMass", &(pair.first), sizeof(std::string));
|
ImGui::SetDragDropPayload("StagedMass", &(pair.first), sizeof(std::string));
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include "SaveTool.h"
|
#include "SaveTool.h"
|
||||||
|
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
|
|
||||||
#include "../FontAwesome/IconsFontAwesome5.h"
|
#include "../FontAwesome/IconsFontAwesome5.h"
|
||||||
#include "../FontAwesome/IconsFontAwesome5Brands.h"
|
#include "../FontAwesome/IconsFontAwesome5Brands.h"
|
||||||
|
@ -24,29 +24,29 @@
|
||||||
void SaveTool::drawMainMenu() {
|
void SaveTool::drawMainMenu() {
|
||||||
if(ImGui::BeginMainMenuBar()) {
|
if(ImGui::BeginMainMenuBar()) {
|
||||||
if(ImGui::BeginMenu("Save Tool##SaveToolMenu")) {
|
if(ImGui::BeginMenu("Save Tool##SaveToolMenu")) {
|
||||||
if(ImGui::BeginMenu(ICON_FA_FOLDER_OPEN " Open game data directory", Utility::Directory::exists(_gameDataDir))) {
|
if(ImGui::BeginMenu(ICON_FA_FOLDER_OPEN " Open game data directory", Utility::Path::exists(_gameDataDir))) {
|
||||||
if(ImGui::MenuItem(ICON_FA_COG " Configuration", nullptr, false, Utility::Directory::exists(_configDir))) {
|
if(ImGui::MenuItem(ICON_FA_COG " Configuration", nullptr, false, Utility::Path::exists(_configDir))) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_configDir));
|
openUri(Utility::Path::toNativeSeparators(_configDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ImGui::MenuItem(ICON_FA_SAVE " Saves", nullptr, false, Utility::Directory::exists(_saveDir))) {
|
if(ImGui::MenuItem(ICON_FA_SAVE " Saves", nullptr, false, Utility::Path::exists(_saveDir))) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_saveDir));
|
openUri(Utility::Path::toNativeSeparators(_saveDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ImGui::MenuItem(ICON_FA_IMAGE " Screenshots", nullptr, false, Utility::Directory::exists(_screenshotsDir))) {
|
if(ImGui::MenuItem(ICON_FA_IMAGE " Screenshots", nullptr, false, Utility::Path::exists(_screenshotsDir))) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_screenshotsDir));
|
openUri(Utility::Path::toNativeSeparators(_screenshotsDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ImGui::BeginMenu(ICON_FA_FOLDER_OPEN " Open manager directory")) {
|
if(ImGui::BeginMenu(ICON_FA_FOLDER_OPEN " Open manager directory")) {
|
||||||
if(ImGui::MenuItem(ICON_FA_FILE_ARCHIVE " Profile backups", nullptr, false, Utility::Directory::exists(_backupsDir))) {
|
if(ImGui::MenuItem(ICON_FA_FILE_ARCHIVE " Profile backups", nullptr, false, Utility::Path::exists(_backupsDir))) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_backupsDir));
|
openUri(Utility::Path::toNativeSeparators(_backupsDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ImGui::MenuItem(ICON_FA_EXCHANGE_ALT " Staging area", nullptr, false, Utility::Directory::exists(_stagingDir))) {
|
if(ImGui::MenuItem(ICON_FA_EXCHANGE_ALT " Staging area", nullptr, false, Utility::Path::exists(_stagingDir))) {
|
||||||
openUri(Utility::Directory::toNativeSeparators(_stagingDir));
|
openUri(Utility::Path::toNativeSeparators(_stagingDir));
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
#include <Corrade/Containers/ArrayView.h>
|
#include <Corrade/Containers/ArrayView.h>
|
||||||
#include <Corrade/Containers/Optional.h>
|
#include <Corrade/Containers/Optional.h>
|
||||||
#include <Corrade/Utility/Directory.h>
|
#include <Corrade/Utility/Path.h>
|
||||||
|
|
||||||
#include "BinaryReader.h"
|
#include "BinaryReader.h"
|
||||||
#include "BinaryWriter.h"
|
#include "BinaryWriter.h"
|
||||||
|
@ -124,16 +124,16 @@ auto UESaveFile::saveToFile() -> bool {
|
||||||
|
|
||||||
writer.closeFile();
|
writer.closeFile();
|
||||||
|
|
||||||
if(!Utility::Directory::copy(_filepath, _filepath + ".bak"_s)) {
|
if(!Utility::Path::copy(_filepath, _filepath + ".bak"_s)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::rm(_filepath)) {
|
if(!Utility::Path::remove(_filepath)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Utility::Directory::move(_filepath + ".tmp"_s, _filepath)) {
|
if(!Utility::Path::move(_filepath + ".tmp"_s, _filepath)) {
|
||||||
Utility::Directory::move(_filepath + ".bak"_s, _filepath);
|
Utility::Path::move(_filepath + ".bak"_s, _filepath);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ auto UESaveFile::saveToFile() -> bool {
|
||||||
void UESaveFile::loadData() {
|
void UESaveFile::loadData() {
|
||||||
_valid = false;
|
_valid = false;
|
||||||
|
|
||||||
if(!Utility::Directory::exists(_filepath)) {
|
if(!Utility::Path::exists(_filepath)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
third-party/corrade
vendored
2
third-party/corrade
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 98922c0dd19a00eb9f1ab2617c1d522b0b9b1743
|
Subproject commit dc4f2eac6814b37b5257d295c2838bcde95272aa
|
2
third-party/magnum
vendored
2
third-party/magnum
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 5f54cc4702ac101c6d598933b2179d659b0c83b9
|
Subproject commit 3fc9028b5451aa95973f104d1ef2a1c0df589e64
|
2
third-party/magnum-integration
vendored
2
third-party/magnum-integration
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit f29c091b0b699cdd092c9b80b4cb5535cf481758
|
Subproject commit 323c23f4e8e7cda9a7848c03401a3ba0a1de0bd4
|
Loading…
Reference in a new issue