void Mod::repath(const QFileInfo &file) { m_file = file; QString name_base = file.fileName(); m_type = Mod::MOD_UNKNOWN; if (m_file.isDir()) { m_type = MOD_FOLDER; m_name = name_base; m_mmc_id = name_base; } else if (m_file.isFile()) { if (name_base.endsWith(".disabled")) { m_enabled = false; name_base.chop(9); } else { m_enabled = true; } m_mmc_id = name_base; if (name_base.endsWith(".zip") || name_base.endsWith(".jar")) { m_type = MOD_ZIPFILE; name_base.chop(4); } else if (name_base.endsWith(".litemod")) { m_type = MOD_LITEMOD; name_base.chop(8); } else { m_type = MOD_SINGLEFILE; } m_name = name_base; } if (m_type == MOD_ZIPFILE) { QuaZip zip(m_file.filePath()); if (!zip.open(QuaZip::mdUnzip)) return; QuaZipFile file(&zip); if (zip.setCurrentFile("mcmod.info")) { if (!file.open(QIODevice::ReadOnly)) { zip.close(); return; } ReadMCModInfo(file.readAll()); file.close(); zip.close(); return; } else if (zip.setCurrentFile("forgeversion.properties")) { if (!file.open(QIODevice::ReadOnly)) { zip.close(); return; } ReadForgeInfo(file.readAll()); file.close(); zip.close(); return; } zip.close(); } else if (m_type == MOD_FOLDER) { QFileInfo mcmod_info(PathCombine(m_file.filePath(), "mcmod.info")); if (mcmod_info.isFile()) { QFile mcmod(mcmod_info.filePath()); if (!mcmod.open(QIODevice::ReadOnly)) return; auto data = mcmod.readAll(); if (data.isEmpty() || data.isNull()) return; ReadMCModInfo(data); } } else if (m_type == MOD_LITEMOD) { QuaZip zip(m_file.filePath()); if (!zip.open(QuaZip::mdUnzip)) return; QuaZipFile file(&zip); if (zip.setCurrentFile("litemod.json")) { if (!file.open(QIODevice::ReadOnly)) { zip.close(); return; } ReadLiteModInfo(file.readAll()); file.close(); } zip.close(); } }