summaryrefslogtreecommitdiffstats
path: root/src/tdeioclient/commandhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tdeioclient/commandhandler.cpp')
-rw-r--r--src/tdeioclient/commandhandler.cpp407
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"