You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeaddons/noatun-plugins/oblique/kdatacollection.cpp

144 lines
3.3 KiB

/*
This file is part of the KDE libraries
Copyright (C) 2003 Charles Samuels <charles@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include "kdatacollection.h"
#include <kconfig.h>
#include <kglobal.h>
#include <kstandarddirs.h>
#include <tqfile.h>
#include <tqfileinfo.h>
KDataCollection::KDataCollection(
KConfig *config, const TQString &group, const TQString &entry,
const char *datadir, const TQString &dir
)
{
init(config, group, entry, datadir, dir);
}
KDataCollection::KDataCollection(
KConfig *config, const TQString &group, const TQString &entry,
const TQString &dir
)
{
init(config, group, entry, "appdata", dir);
}
KDataCollection::KDataCollection(
KConfig *config, const TQString &group, const TQString &dir
)
{
init(config, group, dir, "appdata", dir);
}
KDataCollection::KDataCollection(KConfig *config, const TQString &dir)
{
init(config, "KDataCollection", dir, "appdata", dir);
}
KDataCollection::KDataCollection(const TQString &dir)
{
init(KGlobal::config(), "KDataCollection", dir, "appdata", dir);
}
void KDataCollection::init(
KConfig *config, const TQString &group, const TQString &entry,
const char *datadir, const TQString &dir
)
{
mConfig = config;
mGroup = group;
mEntry = entry;
mDir = dir;
mDatadir = datadir;
}
TQStringList KDataCollection::names() const
{
KConfigGroup g(mConfig, mGroup);
// these are the entries I have
TQStringList n = g.readListEntry(mEntry);
TQStringList fs = KGlobal::dirs()->findAllResources(mDatadir, mDir+"/*", false, true);
TQStringList total;
for (TQStringList::Iterator i(fs.begin()); i != fs.end(); ++i)
{
TQFileInfo fi(*i);
TQString name = fi.fileName();
if (!n.contains(name))
{
total.append(name);
}
}
return total;
}
void KDataCollection::remove(const TQString &name)
{
KConfigGroup g(mConfig, mGroup);
TQString location = file(name);
if (location.isEmpty()) return;
if (location == saveFile(name, false))
{
TQFile(location).remove();
// is there a system one too?
location = file(name, false);
if (location.isEmpty()) return;
}
TQStringList n = g.readListEntry(mEntry);
if (n.contains(name)) return;
n.append(name);
g.writeEntry(mEntry, n);
}
TQString KDataCollection::file(const TQString &name, bool create)
{
TQString path = ::locate(mDatadir, mDir+"/"+name);
if (path.isEmpty() && create)
{
path = saveFile(name, true);
}
return path;
}
TQString KDataCollection::saveFile(const TQString &name, bool create)
{
if (!KGlobal::dirs()->isRestrictedResource(mDatadir, mDir+"/"+name))
{
TQString s = KGlobal::dirs()->saveLocation(mDatadir, mDir, create);
if (s.length() && create)
{
s += "/" + name;
TQFile(s).open(IO_ReadWrite); // create it
}
return s;
}
return TQString();
}