diff options
Diffstat (limited to 'lyt/archivepackage.cpp')
-rw-r--r-- | lyt/archivepackage.cpp | 129 |
1 files changed, 79 insertions, 50 deletions
diff --git a/lyt/archivepackage.cpp b/lyt/archivepackage.cpp index eaabbf2..acb92d2 100644 --- a/lyt/archivepackage.cpp +++ b/lyt/archivepackage.cpp @@ -19,11 +19,11 @@ #include <QtCore/QFile> -LYTArchivePackage::LYTArchivePackage() : LYTPackageBase() { +LYTArchivePackage::LYTArchivePackage(QObject *parent) : LYTPackageBase(parent) { m_archive = new WiiArchiveU8; } -LYTArchivePackage::LYTArchivePackage(QString filename) : LYTPackageBase() { +LYTArchivePackage::LYTArchivePackage(QString filename, QObject *parent) : LYTPackageBase(parent) { m_filename = filename; QFile file(filename); @@ -47,11 +47,14 @@ WiiArchiveU8 *LYTArchivePackage::archive() const { QString LYTArchivePackage::filename() const { return m_filename; } +void LYTArchivePackage::setFilename(QString path) { + m_filename = path; +} -QStringList LYTArchivePackage::listSubDirIfExists(QString dirName) const { - WiiFSObject *obj = this->m_archive->root.resolvePath(dirName); +QStringList LYTArchivePackage::list(ItemType type) const { + WiiFSObject *obj = this->m_archive->root.resolvePath(defaultPathForItemType(type, true)); if (obj && obj->isDirectory()) { QStringList output; @@ -66,9 +69,9 @@ QStringList LYTArchivePackage::listSubDirIfExists(QString dirName) const { return QStringList(); } - -QByteArray LYTArchivePackage::getFileFromSubDirIfExists(QString dirName, QString fileName) const { - WiiFSObject *obj = this->m_archive->root.resolvePath(QString("%1/%2").arg(dirName, fileName)); +QByteArray LYTArchivePackage::get(ItemType type, const QString &name) const { + QString dirName = defaultPathForItemType(type, true); + WiiFSObject *obj = this->m_archive->root.resolvePath(QString("%1/%2").arg(dirName, name)); if (obj && obj->isFile()) { return ((WiiFile*)obj)->data; @@ -77,71 +80,97 @@ QByteArray LYTArchivePackage::getFileFromSubDirIfExists(QString dirName, QString return QByteArray(); } +bool LYTArchivePackage::write(ItemType type, const QString &name, const QByteArray &data) { + if (name.isEmpty()) + return false; -bool LYTArchivePackage::writeFileToSubDir(QString dirName, QString fileName, QByteArray data) { - WiiFSObject *obj = this->m_archive->root.resolvePath(QString("%1/%2").arg(dirName, fileName)); + WiiFSObject *rootDir = this->m_archive->root.findByName("arc", false); + if (!rootDir) { + rootDir = new WiiDirectory; + rootDir->name = "arc"; + m_archive->root.addChild(rootDir); + } + if (!rootDir->isDirectory()) + return false; - if (obj && obj->isFile()) { - ((WiiFile*)obj)->data = data; - return true; - } + QString dirName = defaultPathForItemType(type, false); + WiiFSObject *dir = ((WiiDirectory*)rootDir)->findByName(dirName, false); - return false; -} + if (!dir) { + dir = new WiiDirectory; + dir->name = dirName; + ((WiiDirectory*)rootDir)->addChild(dir); + } + if (!dir->isDirectory()) + return false; + WiiFSObject *obj = ((WiiDirectory*)dir)->findByName(name, false); + if (obj && obj->isFile()) { + emit aboutToModifyFile(type, name); + ((WiiFile*)obj)->data = data; -QStringList LYTArchivePackage::listAnims() const { - return this->listSubDirIfExists("arc/anim"); -} + emit fileWasModified(type, name); -QStringList LYTArchivePackage::listLayouts() const { - return this->listSubDirIfExists("arc/blyt"); -} + return true; -QStringList LYTArchivePackage::listTextures() const { - return this->listSubDirIfExists("arc/timg"); -} + } else if (!obj) { + emit aboutToAddFile(type, name); -QStringList LYTArchivePackage::listFonts() const { - return this->listSubDirIfExists("arc/font"); -} + WiiFile *newFile = new WiiFile; + newFile->name = name; + newFile->data = data; + ((WiiDirectory*)dir)->addChild(newFile); + emit fileWasAdded(type, name); + return true; + } -QByteArray LYTArchivePackage::getAnim(QString name) const { - return this->getFileFromSubDirIfExists("arc/anim", name); + return false; } -QByteArray LYTArchivePackage::getLayout(QString name) const { - return this->getFileFromSubDirIfExists("arc/blyt", name); -} +bool LYTArchivePackage::remove(ItemType type, const QString &name) { + WiiFSObject *obj = this->m_archive->root.resolvePath(defaultPathForItemType(type, true)); -QByteArray LYTArchivePackage::getTexture(QString name) const { - return this->getFileFromSubDirIfExists("arc/timg", name); -} + if (obj && obj->isDirectory()) { + WiiDirectory *dir = (WiiDirectory*)obj; + + WiiFSObject *what = dir->findByName(name, false); + if (what && what->isFile()) { + emit aboutToRemoveFile(type, name); + dir->removeChild(what); + emit fileWasRemoved(type, name); + return true; + } + } -QByteArray LYTArchivePackage::getFont(QString name) const { - return this->getFileFromSubDirIfExists("arc/font", name); + return false; } +bool LYTArchivePackage::rename(ItemType type, const QString &from, const QString &to) { + if (to.isEmpty()) + return false; + WiiFSObject *obj = this->m_archive->root.resolvePath(defaultPathForItemType(type, true)); -bool LYTArchivePackage::writeAnim(QString name, QByteArray data) { - return this->writeFileToSubDir("arc/anim", name, data); -} - -bool LYTArchivePackage::writeLayout(QString name, QByteArray data) { - return this->writeFileToSubDir("arc/blyt", name, data); -} - -bool LYTArchivePackage::writeTexture(QString name, QByteArray data) { - return this->writeFileToSubDir("arc/timg", name, data); -} + if (obj && obj->isDirectory()) { + WiiDirectory *dir = (WiiDirectory*)obj; + + WiiFSObject *what = dir->findByName(from, false); + if (what && what->isFile()) { + WiiFSObject *conflict = dir->findByName(to, false); + if (!conflict) { + emit aboutToRenameFile(type, from, to); + what->name = to; + emit fileWasRenamed(type, from, to); + return true; + } + } + } -bool LYTArchivePackage::writeFont(QString name, QByteArray data) { - return this->writeFileToSubDir("arc/font", name, data); + return false; } |