diff options
| author | 2021-05-25 19:32:56 -0400 | |
|---|---|---|
| committer | 2021-05-25 19:32:56 -0400 | |
| commit | 065867e2c24e9856c360fc2d6b9a86c92aedc43e (patch) | |
| tree | 7964e85ef4f01a3c2b8f44e850f37b384405b930 /src/core/telemetry_session.cpp | |
| parent | Merge pull request #6349 from german77/suppress_config_warning (diff) | |
| download | yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.tar.gz yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.tar.xz yuzu-065867e2c24e9856c360fc2d6b9a86c92aedc43e.zip | |
common: fs: Rework the Common Filesystem interface to make use of std::filesystem (#6270)
* common: fs: fs_types: Create filesystem types
Contains various filesystem types used by the Common::FS library
* common: fs: fs_util: Add std::string to std::u8string conversion utility
* common: fs: path_util: Add utlity functions for paths
Contains various utility functions for getting or manipulating filesystem paths used by the Common::FS library
* common: fs: file: Rewrite the IOFile implementation
* common: fs: Reimplement Common::FS library using std::filesystem
* common: fs: fs_paths: Add fs_paths to replace common_paths
* common: fs: path_util: Add the rest of the path functions
* common: Remove the previous Common::FS implementation
* general: Remove unused fs includes
* string_util: Remove unused function and include
* nvidia_flags: Migrate to the new Common::FS library
* settings: Migrate to the new Common::FS library
* logging: backend: Migrate to the new Common::FS library
* core: Migrate to the new Common::FS library
* perf_stats: Migrate to the new Common::FS library
* reporter: Migrate to the new Common::FS library
* telemetry_session: Migrate to the new Common::FS library
* key_manager: Migrate to the new Common::FS library
* bis_factory: Migrate to the new Common::FS library
* registered_cache: Migrate to the new Common::FS library
* xts_archive: Migrate to the new Common::FS library
* service: acc: Migrate to the new Common::FS library
* applets/profile: Migrate to the new Common::FS library
* applets/web: Migrate to the new Common::FS library
* service: filesystem: Migrate to the new Common::FS library
* loader: Migrate to the new Common::FS library
* gl_shader_disk_cache: Migrate to the new Common::FS library
* nsight_aftermath_tracker: Migrate to the new Common::FS library
* vulkan_library: Migrate to the new Common::FS library
* configure_debug: Migrate to the new Common::FS library
* game_list_worker: Migrate to the new Common::FS library
* config: Migrate to the new Common::FS library
* configure_filesystem: Migrate to the new Common::FS library
* configure_per_game_addons: Migrate to the new Common::FS library
* configure_profile_manager: Migrate to the new Common::FS library
* configure_ui: Migrate to the new Common::FS library
* input_profiles: Migrate to the new Common::FS library
* yuzu_cmd: config: Migrate to the new Common::FS library
* yuzu_cmd: Migrate to the new Common::FS library
* vfs_real: Migrate to the new Common::FS library
* vfs: Migrate to the new Common::FS library
* vfs_libzip: Migrate to the new Common::FS library
* service: bcat: Migrate to the new Common::FS library
* yuzu: main: Migrate to the new Common::FS library
* vfs_real: Delete the contents of an existing file in CreateFile
Current usages of CreateFile expect to delete the contents of an existing file, retain this behavior for now.
* input_profiles: Don't iterate the input profile dir if it does not exist
Silences an error produced in the log if the directory does not exist.
* game_list_worker: Skip parsing file if the returned VfsFile is nullptr
Prevents crashes in GetLoader when the virtual file is nullptr
* common: fs: Validate paths for path length
* service: filesystem: Open the mod load directory as read only
Diffstat (limited to 'src/core/telemetry_session.cpp')
| -rw-r--r-- | src/core/telemetry_session.cpp | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 6dcff5400..ad1a9ffb4 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp | |||
| @@ -9,7 +9,9 @@ | |||
| 9 | 9 | ||
| 10 | #include "common/assert.h" | 10 | #include "common/assert.h" |
| 11 | #include "common/common_types.h" | 11 | #include "common/common_types.h" |
| 12 | #include "common/file_util.h" | 12 | #include "common/fs/file.h" |
| 13 | #include "common/fs/fs.h" | ||
| 14 | #include "common/fs/path_util.h" | ||
| 13 | #include "common/logging/log.h" | 15 | #include "common/logging/log.h" |
| 14 | 16 | ||
| 15 | #include "common/settings.h" | 17 | #include "common/settings.h" |
| @@ -72,31 +74,41 @@ static const char* TranslateGPUAccuracyLevel(Settings::GPUAccuracy backend) { | |||
| 72 | 74 | ||
| 73 | u64 GetTelemetryId() { | 75 | u64 GetTelemetryId() { |
| 74 | u64 telemetry_id{}; | 76 | u64 telemetry_id{}; |
| 75 | const std::string filename{Common::FS::GetUserPath(Common::FS::UserPath::ConfigDir) + | 77 | const auto filename = Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "telemetry_id"; |
| 76 | "telemetry_id"}; | ||
| 77 | 78 | ||
| 78 | bool generate_new_id = !Common::FS::Exists(filename); | 79 | bool generate_new_id = !Common::FS::Exists(filename); |
| 80 | |||
| 79 | if (!generate_new_id) { | 81 | if (!generate_new_id) { |
| 80 | Common::FS::IOFile file(filename, "rb"); | 82 | Common::FS::IOFile file{filename, Common::FS::FileAccessMode::Read, |
| 83 | Common::FS::FileType::BinaryFile}; | ||
| 84 | |||
| 81 | if (!file.IsOpen()) { | 85 | if (!file.IsOpen()) { |
| 82 | LOG_ERROR(Core, "failed to open telemetry_id: {}", filename); | 86 | LOG_ERROR(Core, "failed to open telemetry_id: {}", |
| 87 | Common::FS::PathToUTF8String(filename)); | ||
| 83 | return {}; | 88 | return {}; |
| 84 | } | 89 | } |
| 85 | file.ReadBytes(&telemetry_id, sizeof(u64)); | 90 | |
| 86 | if (telemetry_id == 0) { | 91 | if (!file.ReadObject(telemetry_id) || telemetry_id == 0) { |
| 87 | LOG_ERROR(Frontend, "telemetry_id is 0. Generating a new one.", telemetry_id); | 92 | LOG_ERROR(Frontend, "telemetry_id is 0. Generating a new one.", telemetry_id); |
| 88 | generate_new_id = true; | 93 | generate_new_id = true; |
| 89 | } | 94 | } |
| 90 | } | 95 | } |
| 91 | 96 | ||
| 92 | if (generate_new_id) { | 97 | if (generate_new_id) { |
| 93 | Common::FS::IOFile file(filename, "wb"); | 98 | Common::FS::IOFile file{filename, Common::FS::FileAccessMode::Write, |
| 99 | Common::FS::FileType::BinaryFile}; | ||
| 100 | |||
| 94 | if (!file.IsOpen()) { | 101 | if (!file.IsOpen()) { |
| 95 | LOG_ERROR(Core, "failed to open telemetry_id: {}", filename); | 102 | LOG_ERROR(Core, "failed to open telemetry_id: {}", |
| 103 | Common::FS::PathToUTF8String(filename)); | ||
| 96 | return {}; | 104 | return {}; |
| 97 | } | 105 | } |
| 106 | |||
| 98 | telemetry_id = GenerateTelemetryId(); | 107 | telemetry_id = GenerateTelemetryId(); |
| 99 | file.WriteBytes(&telemetry_id, sizeof(u64)); | 108 | |
| 109 | if (!file.WriteObject(telemetry_id)) { | ||
| 110 | LOG_ERROR(Core, "Failed to write telemetry_id to file."); | ||
| 111 | } | ||
| 100 | } | 112 | } |
| 101 | 113 | ||
| 102 | return telemetry_id; | 114 | return telemetry_id; |
| @@ -104,15 +116,20 @@ u64 GetTelemetryId() { | |||
| 104 | 116 | ||
| 105 | u64 RegenerateTelemetryId() { | 117 | u64 RegenerateTelemetryId() { |
| 106 | const u64 new_telemetry_id{GenerateTelemetryId()}; | 118 | const u64 new_telemetry_id{GenerateTelemetryId()}; |
| 107 | const std::string filename{Common::FS::GetUserPath(Common::FS::UserPath::ConfigDir) + | 119 | const auto filename = Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "telemetry_id"; |
| 108 | "telemetry_id"}; | 120 | |
| 121 | Common::FS::IOFile file{filename, Common::FS::FileAccessMode::Write, | ||
| 122 | Common::FS::FileType::BinaryFile}; | ||
| 109 | 123 | ||
| 110 | Common::FS::IOFile file(filename, "wb"); | ||
| 111 | if (!file.IsOpen()) { | 124 | if (!file.IsOpen()) { |
| 112 | LOG_ERROR(Core, "failed to open telemetry_id: {}", filename); | 125 | LOG_ERROR(Core, "failed to open telemetry_id: {}", Common::FS::PathToUTF8String(filename)); |
| 113 | return {}; | 126 | return {}; |
| 114 | } | 127 | } |
| 115 | file.WriteBytes(&new_telemetry_id, sizeof(u64)); | 128 | |
| 129 | if (!file.WriteObject(new_telemetry_id)) { | ||
| 130 | LOG_ERROR(Core, "Failed to write telemetry_id to file."); | ||
| 131 | } | ||
| 132 | |||
| 116 | return new_telemetry_id; | 133 | return new_telemetry_id; |
| 117 | } | 134 | } |
| 118 | 135 | ||