| 180 | } |
| 181 | |
| 182 | void Technic::SolderPackInstallTask::extractFinished() |
| 183 | { |
| 184 | if (!m_extractFuture.result()) |
| 185 | { |
| 186 | emitFailed(tr("Failed to extract modpack")); |
| 187 | return; |
| 188 | } |
| 189 | QDir extractDir(m_stagingPath); |
| 190 | |
| 191 | qDebug() << "Fixing permissions for extracted pack files..."; |
| 192 | QDirIterator it(extractDir, QDirIterator::Subdirectories); |
| 193 | while (it.hasNext()) |
| 194 | { |
| 195 | auto filepath = it.next(); |
| 196 | QFileInfo file(filepath); |
| 197 | auto permissions = QFile::permissions(filepath); |
| 198 | auto origPermissions = permissions; |
| 199 | if(file.isDir()) |
| 200 | { |
| 201 | // Folder +rwx for current user |
| 202 | permissions |= QFileDevice::Permission::ReadUser | QFileDevice::Permission::WriteUser | QFileDevice::Permission::ExeUser; |
| 203 | } |
| 204 | else |
| 205 | { |
| 206 | // File +rw for current user |
| 207 | permissions |= QFileDevice::Permission::ReadUser | QFileDevice::Permission::WriteUser; |
| 208 | } |
| 209 | if(origPermissions != permissions) |
| 210 | { |
| 211 | if(!QFile::setPermissions(filepath, permissions)) |
| 212 | { |
| 213 | logWarning(tr("Could not fix permissions for %1").arg(filepath)); |
| 214 | } |
| 215 | else |
| 216 | { |
| 217 | qDebug() << "Fixed" << filepath; |
| 218 | } |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | shared_qobject_ptr<Technic::TechnicPackProcessor> packProcessor = new Technic::TechnicPackProcessor(); |
| 223 | connect(packProcessor.get(), &Technic::TechnicPackProcessor::succeeded, this, &Technic::SolderPackInstallTask::emitSucceeded); |
| 224 | connect(packProcessor.get(), &Technic::TechnicPackProcessor::failed, this, &Technic::SolderPackInstallTask::emitFailed); |
| 225 | packProcessor->run(m_globalSettings, name(), m_instIcon, m_stagingPath, m_minecraftVersion, true); |
| 226 | } |
| 227 | |
| 228 | void Technic::SolderPackInstallTask::extractAborted() |
| 229 | { |