*************** *** 0 **** --- 1,90 ---- + /* + * adhoc_fileserver.cpp - Implementation of a personal ad-hoc fileserver + * Copyright (C) 2005 Remko Troncon + * + * 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + #include + #include + + #include "common.h" + #include "psiaccount.h" + #include "adhoc_fileserver.h" + #include "xmpp_xdata.h" + + using namespace XMPP; + + bool AHFileServer::isAllowed(const Jid& j) const + { + return manager()->account()->jid().compare(j,false); + } + + AHCommand AHFileServer::execute(const AHCommand& c, const Jid& requester) + { + // Extract the file + QString file; + if (c.hasData()) { + QString fileName, curDir; + XData::FieldList fl = c.data().fields(); + for (unsigned int i=0; i < fl.count(); i++) { + if (fl[i].var() == "file" && !(fl[i].value().isEmpty())) { + file = fl[i].value().first(); + } + } + } + else { + file = QDir::currentDirPath(); + } + + if (QFileInfo(file).isDir()) { + // Return a form with a filelist + XData form; + form.setTitle(QObject::tr("Choose file")); + form.setInstructions(QObject::tr("Choose a file")); + form.setType(XData::Data_Form); + XData::FieldList fields; + + XData::Field files_field; + files_field.setType(XData::Field::Field_ListSingle); + files_field.setVar("file"); + files_field.setLabel(QObject::tr("File")); + files_field.setRequired(true); + + XData::Field::OptionList file_options; + QDir d(file); + //d.setFilter(QDir::Files|QDir::Hidden|QDir::NoSymLinks); + QStringList l = d.entryList(); + for (QStringList::Iterator it = l.begin(); it != l.end(); ++it ) { + XData::Field::Option file_option; + QFileInfo fi(QDir(file).filePath(*it)); + file_option.label = *it + (fi.isDir() ? QString(" [DIR]") : QString(" (%1 bytes)").arg(QString::number(fi.size()))); + file_option.value = QDir(file).absFilePath(*it); + file_options += file_option; + } + files_field.setOptions(file_options); + fields += files_field; + + form.setFields(fields); + + return AHCommand::formReply(c, form); + } + else { + QStringList l(file); + manager()->account()->sendFiles(requester,l,true); + return AHCommand::completedReply(c); + } + }