/* ** Copyright (C) 1999,2000 Toivo Pedaste ** */ /* ** 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 program 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 General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program in a file called COPYING; if not, write to ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, ** MA 02110-1301, USA. */ /* ** Bug reports and questions can be sent to kde-devel@kde.org */ #include #include #include #include "kpackage.h" #include "options.h" #include "cache.h" #include #include extern Opts *opts; ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// cacheObj::cacheObj(const TQString &Pbase, const TQString &Plocation, const TQString &PcacheFile, const TQString &Poption, bool Psubdirs) { base = Pbase; location = Plocation; cacheFile = PcacheFile; option = Poption; subdirs = Psubdirs; } cacheObj::~cacheObj() {} TQString cacheObj::PDir() { struct stat buf; stat(TQFile::encodeName(TQDir::homeDirPath()), &buf); TQString tmpd = opts->CacheDir ; TQDir d(tmpd); if (!d.exists()) { if (!d.mkdir(tmpd)) { KpMsgE(i18n("Cannot create folder %1").arg(tmpd),TRUE); tmpd = ""; } else { chown(TQFile::encodeName(tmpd),buf.st_uid,buf.st_gid); } } return tmpd; } TQString cacheObj::CDir() { TQString tmpd = PDir(); if (!tmpd.isEmpty()) { struct stat buf; stat(TQFile::encodeName(tmpd),&buf); tmpd += "dir/"; TQDir d(tmpd); if (!d.exists()) { if (!d.mkdir(tmpd)) { KpMsgE(i18n("Cannot create folder %1").arg(tmpd),TRUE); tmpd = ""; } else { chown(TQFile::encodeName(tmpd),buf.st_uid,buf.st_gid); } } } return tmpd; } int cacheObj::newDCache(const TQString &url, const TQString &fn, TQString &fname) { KURL u(url); if ( !u.isValid() ) { KpMsgE(i18n("Malformed URL: %1").arg(url),TRUE); return -1; } TQString tmpd = cacheObj::CDir(); if (tmpd.isEmpty()) { return -1; } else { if (u.protocol() == "file") { fname = u.path(); return 0; } fname = tmpd + fn; if (opts->DCache == Opts::NEVER) { return 1; } TQFileInfo f(fname); if (f.exists() && f.size() > 0) { return 0;; } else { if (f.size() == 0) rmDCache(fname); return 1; } } } void cacheObj::rmDCache(const TQString &fn) { TQString tmpd = cacheObj::CDir(); tmpd += fn; if (!tmpd.isEmpty()) { unlink(TQFile::encodeName(tmpd)); } } void cacheObj::clearDCache() { TQString tmpd = cacheObj::CDir(); if (!tmpd.isEmpty()) { TQDir d(tmpd); CacheList cl(d) ; for (CacheList::iterator it = cl.begin() ; it != cl.end() ; ++it) { TQString s = tmpd; s += *it; unlink(TQFile::encodeName(s)); } unlink(TQFile::encodeName(cl.getCLFileName())) ; // also delete the kpackage_cachelist file } } void cacheObj::clearPCache() { TQString tmpd = cacheObj::PDir(); if (!tmpd.isEmpty()) { TQDir d(tmpd); CacheList cl(d); for (CacheList::iterator it = cl.begin() ; it != cl.end() ; ++it) { TQString s = tmpd ; s += *it; unlink(TQFile::encodeName(s)); } unlink(TQFile::encodeName(cl.getCLFileName())) ; // also delete the kpackage_cachelist file } } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// LcacheObj::LcacheObj() { setAutoDelete(TRUE); } LcacheObj::~LcacheObj() { } ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// CacheList::CacheList (const TQDir& dir) { CLFile.setName (dir.path() + "/kpackage_cachelist") ; read() ; } void CacheList::read () { kdDebug() << "reading cachelist: " << CLFile.name() << "\n" ; if (CLFile.open (IO_ReadOnly)) { TQTextStream stream (&CLFile) ; TQString line ; while (!stream.eof()) { line = stream.readLine() ; if (line[0] != '#') { // not a comment append (line) ; // to this TQStringList } } CLFile.close() ; } else { // kdDebug() << "could not open cachelist " << CLFile.name() << "!\n" ; } } void CacheList::write () { kdDebug() << "writing cachelist: " << CLFile.name() << "\n" ; if (CLFile.open (IO_WriteOnly)) { TQTextStream stream (&CLFile) ; stream << "# This file contains a list of files that have been cached in this folder.\n" ; stream << "# Please only delete this if you want kpackage to forget what it has cached.\n" ; for (TQStringList::iterator it = begin() ; it != end() ; ++it) { stream << *it << "\n" ; } CLFile.close() ; } else { kdDebug() << "could not open cachelist " << CLFile.name() << "!\n" ; } } TQString CacheList::getCLFileName () const { return CLFile.name() ; } ////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////