/**************************************************************************** | |
** | |
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). | |
** All rights reserved. | |
** Contact: Nokia Corporation (qt-info@nokia.com) | |
** | |
** This file is part of the tools applications of the Qt Toolkit. | |
** | |
** $QT_BEGIN_LICENSE:LGPL$ | |
** GNU Lesser General Public License Usage | |
** This file may be used under the terms of the GNU Lesser General Public | |
** License version 2.1 as published by the Free Software Foundation and | |
** appearing in the file LICENSE.LGPL included in the packaging of this | |
** file. Please review the following information to ensure the GNU Lesser | |
** General Public License version 2.1 requirements will be met: | |
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | |
** | |
** In addition, as a special exception, Nokia gives you certain additional | |
** rights. These rights are described in the Nokia Qt LGPL Exception | |
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | |
** | |
** GNU General Public License Usage | |
** Alternatively, this file may be used under the terms of the GNU General | |
** Public License version 3.0 as published by the Free Software Foundation | |
** and appearing in the file LICENSE.GPL included in the packaging of this | |
** file. Please review the following information to ensure the GNU General | |
** Public License version 3.0 requirements will be met: | |
** http://www.gnu.org/copyleft/gpl.html. | |
** | |
** Other Usage | |
** Alternatively, this file may be used in accordance with the terms and | |
** conditions contained in a signed written agreement between you and Nokia. | |
** | |
** | |
** | |
** | |
** | |
** $QT_END_LICENSE$ | |
** | |
****************************************************************************/ | |
#include "CeTcpSyncConnection.h" | |
#include <qdir.h> | |
#include <qfile.h> | |
#include <qfileinfo> | |
static const QString ceTcpSyncProgram = "cetcpsync"; | |
extern void debugOutput(const QString& text, int level); | |
CeTcpSyncConnection::CeTcpSyncConnection() | |
: AbstractRemoteConnection() | |
, connected(false) | |
{ | |
} | |
CeTcpSyncConnection::~CeTcpSyncConnection() | |
{ | |
if (isConnected()) | |
disconnect(); | |
} | |
bool CeTcpSyncConnection::connect(QVariantList&) | |
{ | |
// We connect with each command, so this is always true | |
// The command itself will fail then | |
const QString cmd = ceTcpSyncProgram + " noop"; | |
if (system(qPrintable(cmd)) != 0) | |
return false; | |
connected = true; | |
return true; | |
} | |
void CeTcpSyncConnection::disconnect() | |
{ | |
connected = false; | |
} | |
bool CeTcpSyncConnection::isConnected() const | |
{ | |
return connected; | |
} | |
inline QString boolToString(bool b) | |
{ | |
return b ? "true" : "false"; | |
} | |
static bool fileTimeFromString(FILETIME& ft, const QString& str) | |
{ | |
int idx = str.indexOf("*"); | |
if (idx <= 0) | |
return false; | |
bool ok; | |
ft.dwLowDateTime = str.left(idx).toULong(&ok); | |
if (!ok) | |
return false; | |
ft.dwHighDateTime = str.mid(idx+1).toULong(&ok); | |
return ok; | |
} | |
static QString fileTimeToString(FILETIME& ft) | |
{ | |
return QString::number(ft.dwLowDateTime) + "*" + QString::number(ft.dwHighDateTime); | |
} | |
bool CeTcpSyncConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyFileToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(failIfExists); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyDirectoryToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(recursive); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyFileFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(failIfExists); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyDirectoryFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(recursive); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyFile \"" + srcFile + "\" \"" + destFile + "\" " + boolToString(failIfExists); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory, | |
bool recursive) | |
{ | |
QString cmd = ceTcpSyncProgram + " copyDirectory \"" + srcDirectory + "\" \"" + destDirectory + "\" " + boolToString(recursive); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::deleteFile(const QString &fileName) | |
{ | |
QString cmd = ceTcpSyncProgram + " deleteFile \"" + fileName + "\""; | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists) | |
{ | |
QString cmd = ceTcpSyncProgram + " deleteDirectory \"" + directory + "\" " + boolToString(recursive) + " " + boolToString(failIfContentExists); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::execute(QString program, QString arguments, int timeout, int *returnValue) | |
{ | |
QString cmd = ceTcpSyncProgram + " execute \"" + program + "\" \"" + arguments + "\" " + QString::number(timeout); | |
int exitCode = system(qPrintable(cmd)); | |
if (returnValue) | |
*returnValue = exitCode; | |
return true; | |
} | |
bool CeTcpSyncConnection::createDirectory(const QString &path, bool deleteBefore) | |
{ | |
QString cmd = ceTcpSyncProgram + " createDirectory \"" + path + "\" " + boolToString(deleteBefore); | |
return system(qPrintable(cmd)) == 0; | |
} | |
bool CeTcpSyncConnection::timeStampForLocalFileTime(FILETIME* fTime) const | |
{ | |
QString cmd = ceTcpSyncProgram + " timeStampForLocalFileTime " + fileTimeToString(*fTime) + " >qt_cetcpsyncdata.txt"; | |
if (system(qPrintable(cmd)) != 0) | |
return false; | |
QFile file("qt_cetcpsyncdata.txt"); | |
if (!file.open(QIODevice::ReadOnly)) | |
return false; | |
bool result = fileTimeFromString(*fTime, file.readLine()); | |
file.close(); | |
file.remove(); | |
return result; | |
} | |
bool CeTcpSyncConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const | |
{ | |
QString cmd = ceTcpSyncProgram + " fileCreationTime \"" + fileName + "\" >qt_cetcpsyncdata.txt"; | |
if (system(qPrintable(cmd)) != 0) | |
return false; | |
QFile file("qt_cetcpsyncdata.txt"); | |
if (!file.open(QIODevice::ReadOnly)) | |
return false; | |
bool result = fileTimeFromString(*deviceCreationTime, file.readLine()); | |
file.close(); | |
file.remove(); | |
return result; | |
} | |
bool CeTcpSyncConnection::resetDevice() | |
{ | |
qWarning("CeTcpSyncConnection::resetDevice not implemented"); | |
return false; | |
} | |
bool CeTcpSyncConnection::toggleDevicePower(int *returnValue) | |
{ | |
Q_UNUSED(returnValue); | |
qWarning("CeTcpSyncConnection::toggleDevicePower not implemented"); | |
return false; | |
} | |
bool CeTcpSyncConnection::setDeviceAwake(bool activate, int *returnValue) | |
{ | |
Q_UNUSED(activate); | |
Q_UNUSED(returnValue); | |
qWarning("CeTcpSyncConnection::setDeviceAwake not implemented"); | |
return false; | |
} |