From 65f5e7cb4d09977affa95100ef20ddbfa4620a34 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Fri, 1 Feb 2013 23:11:34 -0600 Subject: Rename many classes and header files to avoid conflicts with KDE4 --- kiosktool/kiosksync.cpp | 211 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 kiosktool/kiosksync.cpp (limited to 'kiosktool/kiosksync.cpp') diff --git a/kiosktool/kiosksync.cpp b/kiosktool/kiosksync.cpp new file mode 100644 index 0000000..3f20044 --- /dev/null +++ b/kiosktool/kiosksync.cpp @@ -0,0 +1,211 @@ +/* + * kiosksync.cpp + * + * Copyright (C) 2004 Waldo Bastian + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "kiosksync.h" + +#include +#include + +#include +#include +#include +#include + +KioskSync::KioskSync( TQWidget* parent, const char* name) + : TQObject(parent, name), + m_parent(parent) +{ +} + +KioskSync::~KioskSync() +{ +} + +void +KioskSync::addDir(const TQString &_src, const KURL &dest) +{ + TQString src = _src; + if (!src.endsWith("/")) + src.append("/"); + + m_syncDirs.append(SyncDir(src, dest)); +} + +bool +KioskSync::sync(bool incremental) +{ + m_incremental = incremental; + m_timestamps = new KSimpleConfig(locateLocal("appdata", "profile-data")); + + bool canceled = false; + + for(SyncDirList::ConstIterator it = m_syncDirs.begin(); + it != m_syncDirs.end(); ++it) + { + m_changedFiles.clear(); + m_changedDirs.clear(); + + m_timestamps->setGroup((*it).src); + + if (!KioskRun::self()->createRemoteDirRecursive((*it).dest, true)) + { + canceled = true; + break; + } + + scanChangedFiles((*it).src, TQString()); + + for(TQStringList::ConstIterator it2 = m_changedDirs.begin(); + it2 != m_changedDirs.end(); ++it2) + { + KURL dest = (*it).dest; + dest.setPath(dest.path(1) + *it2); + if (!KioskRun::self()->createRemoteDir(dest)) + { + canceled = true; + break; + } + } + + if (canceled) + break; + + for(TQStringList::ConstIterator it2 = m_changedFiles.begin(); + it2 != m_changedFiles.end(); ++it2) + { + KURL dest = (*it).dest; + dest.setPath(dest.path(1) + *it2); + if (!syncFile((*it).src, *it2, dest)) + { + canceled = true; + break; + } + } + if (canceled) + break; + } + delete m_timestamps; + m_changedFiles.clear(); + m_changedDirs.clear(); + + return !canceled; +} + +TQStringList +KioskSync::listFiles() +{ + m_changedFiles.clear(); + m_changedDirs.clear(); + m_incremental = false; + m_timestamps = 0; + + for(SyncDirList::ConstIterator it = m_syncDirs.begin(); + it != m_syncDirs.end(); ++it) + { + scanChangedFiles((*it).src, TQString()); + } + return m_changedFiles; +} + +void +KioskSync::addChangedDir(const TQString &dir) +{ + if (dir.isEmpty()) + return; + + if (m_changedDirs.contains(dir)) + return; + + int i = dir.findRev('/', -2); + if (i != -1) + { + TQString parentDir = dir.left(i+1); + addChangedDir(parentDir); + } + + kdDebug() << "KioskSync: Adding " << dir << endl; + m_changedDirs.append(dir); +} + +void +KioskSync::scanChangedFiles(const TQString &_dir, const TQString &prefix) +{ + kdDebug() << "KioskSync: Scanning " << _dir << endl; + TQDir dir(_dir); + if (!dir.exists()) + { + emit warning(i18n("Directory %1 does not exist.").arg(_dir)); + return; + } + if (!dir.isReadable()) + { + emit warning(i18n("Directory %1 is not readable.").arg(_dir)); + return; + } + + TQStringList subDirs; + const TQFileInfoList *list = dir.entryInfoList(TQDir::Dirs | TQDir::Files | TQDir::NoSymLinks); + + bool dirtyDir = false; + TQFileInfoListIterator it( *list ); + for ( TQFileInfo *fi; (fi = it.current()) != 0; ++it) + { + if (fi->isDir()) + { + TQString subDir = fi->fileName(); + if ((subDir != ".") && (subDir != "..")) + subDirs.append(subDir+"/"); + continue; + } + + // TODO: Check file + TQString file = prefix + fi->fileName(); + TQDateTime lastModified = fi->lastModified(); + if (!m_incremental || !m_timestamps->hasKey(file) || + (m_timestamps->readDateTimeEntry(file) != lastModified)) + { + dirtyDir = true; + m_changedFiles.append(file); + } + } + if (dirtyDir) + addChangedDir(prefix); + + for( TQStringList::ConstIterator it = subDirs.begin(); + it != subDirs.end(); ++it) + { + TQString subDir = *it; + scanChangedFiles(_dir + subDir, prefix + subDir); + } +} + +bool +KioskSync::syncFile(const TQString &prefix, const TQString &file, const KURL &dest) +{ + kdDebug() << "KioskSync: Syncing [" << prefix << "]" << file << " --> " << dest.prettyURL() << endl; + + if (!KioskRun::self()->uploadRemote(prefix+file, dest)) + return false; + + TQFileInfo fi(prefix+file); + m_timestamps->writeEntry(file, fi.lastModified()); + return true; +} + +#include "kiosksync.moc" -- cgit v1.2.3