From 637146017289dd394a6f68327c56867fa8747dc5 Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Fri, 24 Oct 2008 21:23:18 +0000 Subject: Make uninstallation class use QtCore instead of QtGui -- it doesn't use any GUI elements. Move class to the QtCore-only base folder. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18872 a1c6a512-1295-4272-9138-f99709370657 --- rbutil/rbutilqt/base/uninstall.cpp | 129 +++++++++++++++++++++++++++++++++++++ rbutil/rbutilqt/base/uninstall.h | 62 ++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 rbutil/rbutilqt/base/uninstall.cpp create mode 100644 rbutil/rbutilqt/base/uninstall.h (limited to 'rbutil/rbutilqt/base') diff --git a/rbutil/rbutilqt/base/uninstall.cpp b/rbutil/rbutilqt/base/uninstall.cpp new file mode 100644 index 0000000000..ae5ece7da5 --- /dev/null +++ b/rbutil/rbutilqt/base/uninstall.cpp @@ -0,0 +1,129 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2007 by Dominik Wenger + * $Id$ + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include "uninstall.h" +#include "utils.h" + +Uninstaller::Uninstaller(QObject* parent,QString mountpoint): QObject(parent) +{ + m_mountpoint = mountpoint; +} + +void Uninstaller::deleteAll(ProgressloggerInterface* dp) +{ + m_dp = dp; + QString rbdir(m_mountpoint + ".rockbox/"); + m_dp->addItem(tr("Starting Uninstallation"),LOGINFO); + m_dp->setProgressMax(0); + recRmdir(rbdir); + m_dp->setProgressMax(1); + m_dp->setProgressValue(1); + m_dp->addItem(tr("Finished Uninstallation"),LOGOK); + m_dp->abort(); +} + +void Uninstaller::uninstall(ProgressloggerInterface* dp) +{ + m_dp = dp; + m_dp->setProgressMax(0); + m_dp->addItem(tr("Starting Uninstallation"),LOGINFO); + + QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, this); + + for(int i=0; i< uninstallSections.size() ; i++) + { + m_dp->addItem(tr("Uninstalling ") + uninstallSections.at(i) + " ...",LOGINFO); + QCoreApplication::processEvents(); + // create list of all other install sections + QStringList sections = installlog.childGroups(); + sections.removeAt(sections.indexOf(uninstallSections.at(i))); + installlog.beginGroup(uninstallSections.at(i)); + QStringList toDeleteList = installlog.allKeys(); + QStringList dirList; + installlog.endGroup(); + + // iterate over all entries + for(int j =0; j < toDeleteList.size(); j++ ) + { + // check if current file is in use by another section + bool deleteFile = true; + for(int s = 0; s < sections.size(); s++) + { + installlog.beginGroup(sections.at(s)); + if(installlog.contains(toDeleteList.at(j))) + { + deleteFile = false; + qDebug() << "file still in use:" << toDeleteList.at(j); + } + installlog.endGroup(); + } + + installlog.beginGroup(uninstallSections.at(i)); + QFileInfo toDelete(m_mountpoint + "/" + toDeleteList.at(j)); + if(toDelete.isFile()) // if it is a file remove it + { + if(deleteFile && !QFile::remove(toDelete.filePath())) + m_dp->addItem(tr("Could not delete: ")+ toDelete.filePath(),LOGWARNING); + installlog.remove(toDeleteList.at(j)); + qDebug() << "deleted: " << toDelete.filePath() ; + } + else // if it is a dir, remember it for later deletion + { + // no need to keep track on folders still in use -- only empty + // folders will be rm'ed. + dirList << toDeleteList.at(j); + } + installlog.endGroup(); + QCoreApplication::processEvents(); + } + // delete the dirs + installlog.beginGroup(uninstallSections.at(i)); + for(int j=0; j < dirList.size(); j++ ) + { + installlog.remove(dirList.at(j)); + QDir dir(m_mountpoint); + dir.rmdir(dirList.at(j)); // rm works only on empty folders + } + + installlog.endGroup(); + //installlog.removeGroup(uninstallSections.at(i)) + } + uninstallSections.clear(); + installlog.sync(); + m_dp->setProgressMax(1); + m_dp->setProgressValue(1); + m_dp->addItem(tr("Uninstallation finished"),LOGOK); + m_dp->abort(); +} + +QStringList Uninstaller::getAllSections() +{ + QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0); + QStringList allSections = installlog.childGroups(); + allSections.removeAt(allSections.lastIndexOf("Bootloader")); + return allSections; +} + + +bool Uninstaller::uninstallPossible() +{ + return QFileInfo(m_mountpoint +"/.rockbox/rbutil.log").exists(); +} + diff --git a/rbutil/rbutilqt/base/uninstall.h b/rbutil/rbutilqt/base/uninstall.h new file mode 100644 index 0000000000..34faf9a4d7 --- /dev/null +++ b/rbutil/rbutilqt/base/uninstall.h @@ -0,0 +1,62 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) 2007 by Dominik Wenger + * $Id$ + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + + +#ifndef UNINSTALL_H +#define UNINSTALL_H + +#include + +#include "progressloggerinterface.h" + + +class Uninstaller : public QObject +{ + Q_OBJECT +public: + Uninstaller(QObject* parent,QString mountpoint) ; + ~Uninstaller(){} + + void deleteAll(ProgressloggerInterface* dp); + void uninstall(ProgressloggerInterface* dp); + + bool uninstallPossible(); + + QStringList getAllSections(); + + void setSections(QStringList sections) {uninstallSections = sections;} + + +private slots: + + +private: + QString m_mountpoint; + + QStringList uninstallSections; + + ProgressloggerInterface* m_dp; +}; + + + +#endif + -- cgit v1.2.3