summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2019-05-30 22:13:38 -0400
committerGravatar Lioncash2019-05-30 22:15:13 -0400
commitd0d97de1e41832aa7d4ab3fa4869498e985d04c7 (patch)
treecc5eaf62c86dd5a0600fd54eb3cca6ce803155f8 /src
parentgame_list_worker: Remove template specializations (diff)
downloadyuzu-d0d97de1e41832aa7d4ab3fa4869498e985d04c7.tar.gz
yuzu-d0d97de1e41832aa7d4ab3fa4869498e985d04c7.tar.xz
yuzu-d0d97de1e41832aa7d4ab3fa4869498e985d04c7.zip
game_list_worker: Use QFile over our own IOFile instance or std streams
Stays consistent in our code with using Qt's provided mechanisms, and also properly handles Unicode paths (which file streams on Windows don't do very well).
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/game_list_worker.cpp52
1 files changed, 24 insertions, 28 deletions
diff --git a/src/yuzu/game_list_worker.cpp b/src/yuzu/game_list_worker.cpp
index 1ccabed59..4f30e9147 100644
--- a/src/yuzu/game_list_worker.cpp
+++ b/src/yuzu/game_list_worker.cpp
@@ -8,6 +8,7 @@
8#include <vector> 8#include <vector>
9 9
10#include <QDir> 10#include <QDir>
11#include <QFile>
11#include <QFileInfo> 12#include <QFileInfo>
12#include <QSettings> 13#include <QSettings>
13 14
@@ -46,20 +47,17 @@ QString GetGameListCachedObject(const std::string& filename, const std::string&
46 if (!FileUtil::Exists(path)) { 47 if (!FileUtil::Exists(path)) {
47 const auto str = generator(); 48 const auto str = generator();
48 49
49 std::ofstream stream(path); 50 QFile file{QString::fromStdString(path)};
50 if (stream) { 51 if (file.open(QFile::WriteOnly)) {
51 stream << str.toStdString(); 52 file.write(str.toUtf8());
52 } 53 }
53 54
54 return str; 55 return str;
55 } 56 }
56 57
57 std::ifstream stream(path); 58 QFile file{QString::fromStdString(path)};
58 59 if (file.open(QFile::ReadOnly)) {
59 if (stream) { 60 return QString::fromUtf8(file.readAll());
60 const std::string out(std::istreambuf_iterator<char>{stream},
61 std::istreambuf_iterator<char>{});
62 return QString::fromStdString(out);
63 } 61 }
64 62
65 return generator(); 63 return generator();
@@ -82,53 +80,51 @@ std::pair<std::vector<u8>, std::string> GetGameListCachedObject(
82 if (!FileUtil::Exists(path1) || !FileUtil::Exists(path2)) { 80 if (!FileUtil::Exists(path1) || !FileUtil::Exists(path2)) {
83 const auto [icon, nacp] = generator(); 81 const auto [icon, nacp] = generator();
84 82
85 FileUtil::IOFile file1(path1, "wb"); 83 QFile file1{QString::fromStdString(path1)};
86 if (!file1.IsOpen()) { 84 if (!file1.open(QFile::WriteOnly)) {
87 LOG_ERROR(Frontend, "Failed to open cache file."); 85 LOG_ERROR(Frontend, "Failed to open cache file.");
88 return generator(); 86 return generator();
89 } 87 }
90 88
91 if (!file1.Resize(icon.size())) { 89 if (!file1.resize(icon.size())) {
92 LOG_ERROR(Frontend, "Failed to resize cache file to necessary size."); 90 LOG_ERROR(Frontend, "Failed to resize cache file to necessary size.");
93 return generator(); 91 return generator();
94 } 92 }
95 93
96 if (file1.WriteBytes(icon.data(), icon.size()) != icon.size()) { 94 if (file1.write(reinterpret_cast<const char*>(icon.data()), icon.size()) != icon.size()) {
97 LOG_ERROR(Frontend, "Failed to write data to cache file."); 95 LOG_ERROR(Frontend, "Failed to write data to cache file.");
98 return generator(); 96 return generator();
99 } 97 }
100 98
101 std::ofstream stream2(path2, std::ios::out); 99 QFile file2{QString::fromStdString(path2)};
102 if (stream2) { 100 if (file2.open(QFile::WriteOnly)) {
103 stream2 << nacp; 101 file2.write(nacp.data(), nacp.size());
104 } 102 }
105 103
106 return std::make_pair(icon, nacp); 104 return std::make_pair(icon, nacp);
107 } 105 }
108 106
109 FileUtil::IOFile file1(path1, "rb"); 107 QFile file1(QString::fromStdString(path1));
110 std::ifstream stream2(path2); 108 QFile file2(QString::fromStdString(path2));
111 109
112 if (!file1.IsOpen()) { 110 if (!file1.open(QFile::ReadOnly)) {
113 LOG_ERROR(Frontend, "Failed to open cache file for reading."); 111 LOG_ERROR(Frontend, "Failed to open cache file for reading.");
114 return generator(); 112 return generator();
115 } 113 }
116 114
117 if (!stream2) { 115 if (!file2.open(QFile::ReadOnly)) {
118 LOG_ERROR(Frontend, "Failed to open cache file for reading."); 116 LOG_ERROR(Frontend, "Failed to open cache file for reading.");
119 return generator(); 117 return generator();
120 } 118 }
121 119
122 std::vector<u8> vec(file1.GetSize()); 120 std::vector<u8> vec(file1.size());
123 file1.ReadBytes(vec.data(), vec.size()); 121 if (file1.read(reinterpret_cast<char*>(vec.data()), vec.size()) !=
124 122 static_cast<s64>(vec.size())) {
125 if (stream2 && !vec.empty()) { 123 return generator();
126 const std::string out(std::istreambuf_iterator<char>{stream2},
127 std::istreambuf_iterator<char>{});
128 return std::make_pair(vec, out);
129 } 124 }
130 125
131 return generator(); 126 const auto data = file2.readAll();
127 return std::make_pair(vec, data.toStdString());
132} 128}
133 129
134void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager, const FileSys::NCA& nca, 130void GetMetadataFromControlNCA(const FileSys::PatchManager& patch_manager, const FileSys::NCA& nca,