diff options
Diffstat (limited to 'src/tdeioclient/commandhandler.cpp')
-rw-r--r-- | src/tdeioclient/commandhandler.cpp | 407 |
1 files changed, 407 insertions, 0 deletions
diff --git a/src/tdeioclient/commandhandler.cpp b/src/tdeioclient/commandhandler.cpp new file mode 100644 index 0000000..4a24716 --- /dev/null +++ b/src/tdeioclient/commandhandler.cpp @@ -0,0 +1,407 @@ +/*************************************************************************** + * Copyright (C) 2004 by Fred Schaettgen <kdebluetooth@schaettgen.de>* + * * + * 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. * + ***************************************************************************/ +#include "commandhandler.h" +#include <tdecmdlineargs.h> +#include <tdeapplication.h> +#include <tdelocale.h> +#include <iostream> +#include <kdebug.h> +#include <tqdatetime.h> +#include <tqtimer.h> +#include <tdeio/job.h> + +CommandHandler::CommandHandler(TDECmdLineArgs *a) +{ + this->iterate = false; + this->args = a; + returnValue = 0; + if (args->count() < 2) + { + exitPrintUsage(i18n("Arguments missing.")); + } + origCommand = args->arg(0); + for (int n = 1; n < args->count() - 1; ++n) + { + sources.append(args->arg(n)); + } + target = args->arg(args->count() - 1); + targets = sources; + targets.append(target); + + if (args->isSet("outfile")) + { + outFile.setName(args->getOption("outfile")); + outFile.open(IO_WriteOnly); + } + else + { + // Open stdout + outFile.open(IO_WriteOnly, 1); + } + + if (args->isSet("infile")) + { + inFile.setName(args->getOption("infile")); + inFile.open(IO_ReadOnly); + } + else + { + // Open stdin + inFile.open(IO_ReadOnly, 0); + } + + showProgressWindow = args->isSet("progresswindow"); + overwrite = args->isSet("overwrite"); +} + +CommandHandler::~CommandHandler() +{ +} + +void CommandHandler::start() +{ + if (origCommand == "ls") + { + command = "ls"; + list(target); + } + else if (origCommand == "get" || origCommand == "cat" || origCommand == "read") + { + command = "get"; + get(target); + } + else if (origCommand == "put" || origCommand == "write") + { + command = "put"; + put(target); + } + else if (origCommand == "mkdir") + { + command = "mkdir"; + mkdir(target); + } + else if (origCommand == "rmdir") + { + command = "rmdir"; + rmdir(target); + } + else if (origCommand == "rm" || origCommand == "del") + { + command = "del"; + del(targets); + } + else if (origCommand == "cp" || origCommand == "copy") + { + command = "copy"; + copy(sources, target); + } + else + { + command = origCommand; + exitPrintUsage(i18n("unknown command: %1").arg(command)); + } +} + +void CommandHandler::commonConnect(TDEIO::Job* job) +{ + connect(job, SIGNAL(infoMessage(TDEIO::Job*,const TQString&)), + this, SLOT(slotInfoMessage(TDEIO::Job*,const TQString&))); + connect(job, SIGNAL(percent (TDEIO::Job*, unsigned long)), + this, SLOT(slotPercent(TDEIO::Job*, unsigned long))); + connect(job, SIGNAL(result(TDEIO::Job*)), this, SLOT(slotFinished(TDEIO::Job*))); +} + +KURL::List CommandHandler::urlList(const TQStringList& sources) +{ + KURL::List ret; + for (size_t n = 0; n < sources.size(); ++n) + { + ret.append(KURL(sources[n])); + } + return ret; +} + +// Commands --------------------------------------------------- + +void CommandHandler::list(const TQString& target) +{ + bool showHidden = true; + TDEIO::ListJob* job = TDEIO::listDir(KURL(target), showProgressWindow, showHidden); + this->job = job; + commonConnect(job); + connect(job, SIGNAL(entries(TDEIO::Job*, const TDEIO::UDSEntryList&)), + this, SLOT(slotEntries(TDEIO::Job*, const TDEIO::UDSEntryList&))); +} + +void CommandHandler::get(const TQString& target) +{ + bool reload = false; + TDEIO::TransferJob* job = TDEIO::get(KURL(target), reload, showProgressWindow); + this->job = job; + commonConnect(job); + connect(job, SIGNAL(data(TDEIO::Job*,const TQByteArray&)), + this, SLOT(slotData(TDEIO::Job*,const TQByteArray&))); +} + +void CommandHandler::put(const TQString& target) +{ + int permissions = -1; + bool resume = false; + TDEIO::TransferJob* job = TDEIO::put(KURL(target), permissions, + overwrite, resume, showProgressWindow); + this->job = job; + commonConnect(job); + connect(job, SIGNAL(dataReq(TDEIO::Job*,TQByteArray&)), + this, SLOT(slotDataReq(TDEIO::Job*,TQByteArray&))); +} + +void CommandHandler::mkdir(const TQString& target) +{ + int permissions = -1; + TDEIO::SimpleJob* job = TDEIO::mkdir(KURL(target), permissions); + this->job = job; + commonConnect(job); +} + +void CommandHandler::rmdir(const TQString& target) +{ + TDEIO::SimpleJob* job = TDEIO::rmdir(KURL(target)); + this->job = job; + commonConnect(job); +} + +void CommandHandler::del(const TQStringList& targets) +{ + bool shred = false; + TDEIO::DeleteJob* job = TDEIO::del(urlList(targets), shred, showProgressWindow); + this->job = job; + commonConnect(job); +} + +void CommandHandler::copy(const TQStringList& sources, const TQString& target) +{ + TDEIO::CopyJob *job = TDEIO::copy(urlList(sources), KURL(target), + showProgressWindow); + this->job = job; + commonConnect(job); +} + +// Signal handlers -------------------------------------------- + +void CommandHandler::slotEntries(TDEIO::Job* /*job*/, const TDEIO::UDSEntryList& list) +{ + if (command == "ls") + { + for (size_t n = 0; n < list.size(); ++n) + { + TDEIO::UDSEntry entry = list[n]; + + TQDateTime date = TQDateTime::currentDateTime(); + TQString user = "n/a"; + TQString iconName = "unknown"; + TQString group = "n/a"; + TQString extra = "n/a"; + TQString name = "n/a"; + TQDateTime mTime = TQDateTime::currentDateTime(); + TQDateTime aTime = TQDateTime::currentDateTime(); + TQDateTime cTime = TQDateTime::currentDateTime(); + int fileType = 0; + TQString linkDest = "n/a"; + TQString url = "n/a"; + TQString mimeType = "n/a"; + TQString guessedMimeType = "n/a"; + TQString xmlProperties = "n/a"; + long long size = -1; + int access = 0; + + for (size_t m = 0; m < entry.size(); ++m) + { + TDEIO::UDSAtom atom = entry[m]; + switch (atom.m_uds) + { + case TDEIO::UDS_TIME: + date.setTime_t(atom.m_long); + break; + case TDEIO::UDS_SIZE: + size = atom.m_long; + break; + case TDEIO::UDS_USER: + user = atom.m_str; + break; + case TDEIO::UDS_ICON_NAME: + iconName = atom.m_str; + break; + case TDEIO::UDS_GROUP: + group = atom.m_str; + break; + case TDEIO::UDS_EXTRA: + extra = atom.m_str; + break; + case TDEIO::UDS_NAME: + name = atom.m_str; + break; + case TDEIO::UDS_ACCESS: + access = atom.m_long; + break; + case TDEIO::UDS_MODIFICATION_TIME: + mTime.setTime_t(atom.m_long); + break; + case TDEIO::UDS_ACCESS_TIME: + aTime.setTime_t(atom.m_long); + break; + case TDEIO::UDS_CREATION_TIME: + cTime.setTime_t(atom.m_long); + break; + case TDEIO::UDS_FILE_TYPE: + fileType = atom.m_long; + break; + case TDEIO::UDS_LINK_DEST: + linkDest = atom.m_str; + break; + case TDEIO::UDS_URL: + url = atom.m_str; + break; + case TDEIO::UDS_MIME_TYPE: + mimeType = atom.m_str; + break; + case TDEIO::UDS_GUESSED_MIME_TYPE: + guessedMimeType = atom.m_str; + break; + case TDEIO::UDS_XML_PROPERTIES: + xmlProperties = atom.m_str; + break; + }; + } + + if (args->isSet("access")) + { + std::cout << TQString::number(access, 8).local8Bit() << " "; + } + if (args->isSet("filetype")) + { + std::cout << TQString::number(fileType).rightJustify(4).local8Bit() << " "; + } + if (args->isSet("user")) + { + std::cout << user.rightJustify(8).local8Bit() << " "; + } + if (args->isSet("group")) + { + std::cout << group.rightJustify(8).local8Bit() << " "; + } + if (args->isSet("size")) + { + std::cout << TQString::number(size).rightJustify(9).local8Bit() << " "; + } + if (args->isSet("date")) + { + std::cout << date.toString("yyyy-MM-dd hh:mm:ss").local8Bit() << " "; + } + if (args->isSet("mtime")) + { + std::cout << mTime.toString("yyyy-MM-dd hh:mm:ss").local8Bit() << " "; + } + if (args->isSet("atime")) + { + std::cout << aTime.toString("yyyy-MM-dd hh:mm:ss").local8Bit() << " "; + } + if (args->isSet("ctime")) + { + std::cout << cTime.toString("yyyy-MM-dd hh:mm:ss").local8Bit() << " "; + } + if (args->isSet("iconName")) + { + std::cout << iconName.local8Bit() << " "; + } + if (args->isSet("mimetype")) + { + std::cout << mimeType.local8Bit() << " "; + } + if (args->isSet("guessedmimetype")) + { + std::cout << guessedMimeType.local8Bit() << " "; + } + if (args->isSet("linkdest")) + { + std::cout << linkDest.local8Bit() << " "; + } + if (args->isSet("url")) + { + std::cout << url.local8Bit() << " "; + } + if (args->isSet("name")) + { + std::cout << name.local8Bit() << " "; + } + if (args->isSet("xmlproperties")) + { + std::cout << xmlProperties.local8Bit() << " "; + } + if (args->isSet("extra")) + { + std::cout << extra.local8Bit() << " "; + } + std::cout << std::endl; + } + } +} + +void CommandHandler::slotData(TDEIO::Job* /*job*/, const TQByteArray &data) +{ + outFile.writeBlock(data); +} + +void CommandHandler::slotDataReq(TDEIO::Job* /*job*/, TQByteArray &data) +{ + data.resize(65536); + data.resize(inFile.readBlock(data.data(), data.size())); +} + +void CommandHandler::slotInfoMessage(TDEIO::Job* /*job*/, const TQString& msg) +{ + if (msg != lastMessage && args->isSet("messages")) + { + std::cerr << " >" << msg.local8Bit() << std::endl; + lastMessage = msg; + } +} + +void CommandHandler::slotPercent(TDEIO::Job* /*job*/, unsigned long /*percent*/) +{ + +} + +void CommandHandler::slotFinished(TDEIO::Job* job) +{ + if (job->error() != 0) + { + std::cerr << job->errorString().local8Bit() << std::endl; + iterate = false; + } + else + { + if (iterate) + { + start(); + } + } + + if (!iterate) + { + TDEApplication::kApplication()->exit(job->error()); + } +} + +void CommandHandler::exitPrintUsage(const TQString& message) +{ + std::cout << message.local8Bit() << std::endl; + TDECmdLineArgs::usage(); +} + +#include "commandhandler.moc" |