diff options
| author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2007-10-07 21:47:49 +0000 |
|---|---|---|
| committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2007-10-07 21:47:49 +0000 |
| commit | 2b2c53689559de30968a5695d6b75ccccbd77570 (patch) | |
| tree | 1377df20cd3cf4944eb314a3d35fba0802ef9b86 | |
| parent | 22cf8adf01bac924e2581458483a28dfd776c186 (diff) | |
| download | rockbox-2b2c53689559de30968a5695d6b75ccccbd77570.zip rockbox-2b2c53689559de30968a5695d6b75ccccbd77570.tar.gz rockbox-2b2c53689559de30968a5695d6b75ccccbd77570.tar.bz2 rockbox-2b2c53689559de30968a5695d6b75ccccbd77570.tar.xz | |
Upon uninstallation only remove a file if it isn't used in another section. A possible problematic case would've been two themes installing the same font.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15028 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | rbutil/rbutilqt/uninstall.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/rbutil/rbutilqt/uninstall.cpp b/rbutil/rbutilqt/uninstall.cpp index 2e96d49..4bd5c90 100644 --- a/rbutil/rbutilqt/uninstall.cpp +++ b/rbutil/rbutilqt/uninstall.cpp @@ -44,36 +44,58 @@ void Uninstaller::uninstall(ProgressloggerInterface* dp) m_dp->setProgressMax(0); m_dp->addItem(tr("Starting Uninstallation"),LOGINFO); - QSettings installlog(m_mountpoint + "/.rockbox/rbutil.log", QSettings::IniFormat, 0); + 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); + // 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 entrys + // 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(!QFile::remove(toDelete.filePath())) + if(deleteFile && !QFile::remove(toDelete.filePath())) m_dp->addItem(tr("Could not delete: ")+ toDelete.filePath(),LOGWARNING); installlog.remove(toDeleteList.at(j)); } 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(); } // 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)); + dir.rmdir(dirList.at(j)); // rm works only on empty folders } installlog.endGroup(); |