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.
tdebluez/src/tdebluezioclient/commandhandler.cpp

409 lines
12 KiB

/***************************************************************************
* 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"