void CameraController::slotUploadFailed(const QString& folder, const QString& file, const QString& src)
{
    Q_UNUSED(folder);
    Q_UNUSED(src);

    sendLogMsg(i18n("Failed to upload <filename>%1</filename>", file), DHistoryView::ErrorEntry);

    if (!d->canceled)
    {
        if (queueIsEmpty())
        {
            KMessageBox::error(d->parent, i18n("Failed to upload file <filename>%1</filename>.", file));
        }
        else
        {
            const QString msg = i18n("Failed to upload file <filename>%1</filename>. Do you want to continue?", file);
            int result        = KMessageBox::warningContinueCancel(d->parent, msg);

            if (result != KMessageBox::Continue)
            {
                slotCancel();
            }
        }
    }
}
void cocosPlayerNetworkLog(const char * pszFormat, ...)
{
    printf("Cocos2d: ");
    char szBuf[kMaxLogLen+1] = {0};
    va_list ap;
    va_start(ap, pszFormat);
    vsnprintf(szBuf, kMaxLogLen, pszFormat, ap);
    va_end(ap);
    printf("%s", szBuf);
    printf("\n");
    sendLogMsg(szBuf);
}
void Robot::getMove(const std_msgs::UInt8 & move_number)
{
	if (this->getNewturnFlag())
	{
		this->setAttackToLaunch(move_number.data);
		this->setNewturnFlag(false);

		std_msgs::UInt8 speed_msg;
		speed_msg.data = this->getSpeed() + 100 * (int) getAttack(getAttackToLaunch())->getPriority();
		myspeed_pub.publish(speed_msg);
		
		sendLogMsg("ho scelto il mio attack e comunicata la mia velocita... ti distruggo!",0);
	}	

}
void CameraController::slotLockFailed(const QString& folder, const QString& file)
{
    emit signalLocked(folder, file, false);
    sendLogMsg(i18n("Failed to lock <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file);

    if (!d->canceled)
    {
        if (queueIsEmpty())
        {
            KMessageBox::error(d->parent, i18n("Failed to toggle lock file <filename>%1</filename>.", file));
        }
        else
        {
            const QString msg = i18n("Failed to toggle lock file <filename>%1</filename>. Do you want to continue?", file);
            int result        = KMessageBox::warningContinueCancel(d->parent, msg);

            if (result != KMessageBox::Continue)
            {
                slotCancel();
            }
        }
    }
}
void CameraController::slotCheckRename(const QString& folder, const QString& file,
                                       const QString& destination, const QString& temp,
                                       const QString& script)
{
    // this is the direct continuation of executeCommand, case CameraCommand::cam_download
    bool skip      = false;
    bool cancel    = false;
    bool overwrite = d->overwriteAll;
    QString dest   = destination;

    // Check if dest file already exist, unless we overwrite anyway

    QFileInfo info(dest);

    if (!d->overwriteAll)
    {

        while (info.exists())
        {
            if (d->skipAll)
            {
                skip = true;
                break;
            }

            QPointer<KIO::RenameDialog> dlg = new KIO::RenameDialog(d->parent, i18nc("@title:window", "Rename File"),
                    QString(folder + QLatin1String("/") + file), dest,
                    KIO::RenameDialog_Mode(KIO::M_MULTI     |
                                           KIO::M_OVERWRITE |
                                           KIO::M_SKIP));

            int result = dlg->exec();
            dest       = dlg->newDestUrl().toLocalFile();
            info       = QFileInfo(dest);

            delete dlg;

            switch (result)
            {
            case KIO::R_CANCEL:
            {
                cancel = true;
                break;
            }

            case KIO::R_SKIP:
            {
                skip = true;
                break;
            }

            case KIO::R_AUTO_SKIP:
            {
                d->skipAll = true;
                skip       = true;
                break;
            }

            case KIO::R_OVERWRITE:
            {
                overwrite = true;
                break;
            }

            case KIO::R_OVERWRITE_ALL:
            {
                d->overwriteAll = true;
                overwrite       = true;
                break;
            }

            default:
                break;
            }

            if (cancel || skip || overwrite)
            {
                break;
            }
        }
    }

    if (cancel)
    {
        unlink(QFile::encodeName(temp));
        slotCancel();
        emit signalSkipped(folder, file);
        return;
    }
    else if (skip)
    {
        unlink(QFile::encodeName(temp));
        sendLogMsg(i18n("Skipped file <filename>%1</filename>", file), DHistoryView::WarningEntry, folder, file);
        emit signalSkipped(folder, file);
        return;
    }

    kDebug() << "Checking whether (" << temp << ") has a sidecar";

    // move the file to the destination file
    if (DMetadata::hasSidecar(temp))
    {
        kDebug() << "  Yes, renaming it to " << dest;
        if (KDE::rename(DMetadata::sidecarPath(temp), DMetadata::sidecarPath(dest)) != 0)
        {
            sendLogMsg(i18n("Failed to save sidecar file for <filename>%1</filename>", file), DHistoryView::ErrorEntry,  folder, file);
        }
    }

    if (KDE::rename(temp, dest) != 0)
    {
        kDebug() << "Renaming " << temp << " to " << dest << " failed";
        // rename failed. delete the temp file
        unlink(QFile::encodeName(temp));
        emit signalDownloaded(folder, file, CamItemInfo::DownloadFailed);
        sendLogMsg(i18n("Failed to download <filename>%1</filename>", file), DHistoryView::ErrorEntry,  folder, file);
    }
    else
    {
        kDebug() << "Rename done, emiting downloaded signals:" << file << " info.filename: " << info.fileName();
        // TODO why two signals??
        emit signalDownloaded(folder, file, CamItemInfo::DownloadedYes);
        emit signalDownloadComplete(folder, file, info.path(), info.fileName());

        // Run script
        if (!script.isEmpty())
        {
            kDebug() << "Got a script, processing: " << script;
            KProcess process;

            process.setOutputChannelMode(KProcess::SeparateChannels);
            QString s;

            if (script.indexOf('%') > -1)
            {
                QHash<QString, QString> map;
                map.insert("file", dest);
                map.insert("filename", info.fileName());
                map.insert("path", info.path());
                map.insert("orgfilename", file);
                map.insert("orgpath", folder);
                s = KMacroExpander::expandMacros(script, map);
            }
            else
            {
                s = script + " \"" + dest + "\"";
            }

            process.setShellCommand(s);
            kDebug() << "Running: " << s;
            int ret = process.execute();

            if (ret != 0)
            {
                sendLogMsg(i18n("Failed to run script for <filename>%1</filename>", file), DHistoryView::ErrorEntry,  folder, file);
            }

            kDebug() << "stdout" << process.readAllStandardOutput();
            kDebug() << "stderr" << process.readAllStandardError();
        }
    }
}
void CameraController::executeCommand(CameraCommand* const cmd)
{
    if (!cmd)
    {
        return;
    }

    switch (cmd->action)
    {
    case (CameraCommand::cam_connect):
    {
        sendLogMsg(i18n("Connecting to camera..."));

        bool result = d->camera->doConnect();

        emit signalConnected(result);

        if (result)
        {
            sendLogMsg(i18n("Connection established."));
        }
        else
        {
            sendLogMsg(i18n("Connection failed."));
        }

        break;
    }

    case (CameraCommand::cam_cameraInformation):
    {
        QString summary, manual, about;

        d->camera->cameraSummary(summary);
        d->camera->cameraManual(manual);
        d->camera->cameraAbout(about);

        emit signalCameraInformation(summary, manual, about);
        break;
    }

    case (CameraCommand::cam_freeSpace):
    {
        unsigned long kBSize  = 0;
        unsigned long kBAvail = 0;

        if (!d->camera->getFreeSpace(kBSize, kBAvail))
        {
            sendLogMsg(i18n("Failed to get free space from camera"), DHistoryView::ErrorEntry);
        }

        emit signalFreeSpace(kBSize, kBAvail);
        break;
    }

    case (CameraCommand::cam_preview):
    {
        QImage preview;

        if (!d->camera->getPreview(preview))
        {
            sendLogMsg(i18n("Failed to get preview from camera"), DHistoryView::ErrorEntry);
        }

        emit signalPreview(preview);
        break;
    }

    case (CameraCommand::cam_capture):
    {
        CamItemInfo itemInfo;

        if (!d->camera->capture(itemInfo))
        {
            sendLogMsg(i18n("Failed to process capture from camera"), DHistoryView::ErrorEntry);
        }

        emit signalUploaded(itemInfo);
        break;
    }

    case (CameraCommand::cam_listfolders):
    {
        QString folder = cmd->map["folder"].toString();

        if (!d->camera->getFolders(folder))
        {
            sendLogMsg(i18n("Failed to list folder <filename>%1</filename>", folder), DHistoryView::ErrorEntry);
        }

        break;
    }

    case (CameraCommand::cam_listfiles):
    {
        QString folder   = cmd->map["folder"].toString();
        bool useMetadata = cmd->map["useMetadata"].toBool();

        CamItemInfoList itemsList;

        if (!d->camera->getItemsInfoList(folder, useMetadata, itemsList))
        {
            sendLogMsg(i18n("Failed to list files in <filename>%1</filename>", folder), DHistoryView::ErrorEntry);
        }

        // TODO would it be okay to pass this to the ImportImageModel and let it filter it for us?
        for (CamItemInfoList::iterator it = itemsList.begin() ; it != itemsList.end() ; )
        {
            CamItemInfo &info = (*it);

            if (info.mime.isEmpty())
            {
                it = itemsList.erase(it);
                continue;
            }

            ++it;
        }

        emit signalFileList(itemsList);

        break;
    }

    case (CameraCommand::cam_thumbsinfo):
    {
        QList<QVariant> list = cmd->map["list"].toList();
        int thumbSize        = cmd->map["thumbSize"].toInt();

        for (QList<QVariant>::const_iterator it = list.constBegin(); it != list.constEnd(); ++it)
        {
            if (d->canceled)
            {
                break;
            }

            QString folder = (*it).toStringList().at(0);
            QString file   = (*it).toStringList().at(1);

            CamItemInfo info;
            info.folder = folder;
            info.name = file;
            QImage thumbnail;

            if (d->camera->getThumbnail(folder, file, thumbnail))
            {
                thumbnail = thumbnail.scaled(thumbSize, thumbSize, Qt::KeepAspectRatio);
                emit signalThumbInfo(folder, file, info, thumbnail);
            }
            else
            {
                sendLogMsg(i18n("Failed to get thumbnail for <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file);
                emit signalThumbInfoFailed(folder, file, info);
            }
        }

        break;
    }

    case (CameraCommand::cam_metadata):
    {
        QString folder = cmd->map["folder"].toString();
        QString file   = cmd->map["file"].toString();

        DMetadata meta;

        if (!d->camera->getMetadata(folder, file, meta))
            sendLogMsg(i18n("Failed to get Metadata for <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file);

        emit signalMetadata(folder, file, meta);

        break;
    }

    case (CameraCommand::cam_download):
    {
        QString   folder         = cmd->map["folder"].toString();
        QString   file           = cmd->map["file"].toString();
        QString   dest           = cmd->map["dest"].toString();
        bool      fixDateTime    = cmd->map["fixDateTime"].toBool();
        QDateTime newDateTime    = cmd->map["newDateTime"].toDateTime();
        QString   templateTitle  = cmd->map["template"].toString();
        bool      convertJpeg    = cmd->map["convertJpeg"].toBool();
        QString   losslessFormat = cmd->map["losslessFormat"].toString();
        QString   script         = cmd->map["script"].toString();
        int       pickLabel      = cmd->map["pickLabel"].toInt();
        int       colorLabel     = cmd->map["colorLabel"].toInt();
        int       rating         = cmd->map["rating"].toInt();

        // download to a temp file

        emit signalDownloaded(folder, file, CamItemInfo::DownloadStarted);

        KUrl tempURL(dest);
        tempURL      = tempURL.upUrl();
        tempURL.addPath(QString(".digikam-camera-tmp1-%1").arg(getpid()).append(file));
        kDebug() << "Downloading: " << file << " using (" << tempURL << ")";
        QString temp = tempURL.toLocalFile();

        bool result  = d->camera->downloadItem(folder, file, tempURL.toLocalFile());

        if (!result)
        {
            unlink(QFile::encodeName(tempURL.toLocalFile()));
            sendLogMsg(i18n("Failed to download <filename>%1</filename>", file), DHistoryView::ErrorEntry, folder, file);
            emit signalDownloaded(folder, file, CamItemInfo::DownloadFailed);
            break;
        }
        else if (JPEGUtils::isJpegImage(tempURL.toLocalFile()))
        {
            // Possible modification operations. Only apply it to JPEG for the moment.

            kDebug() << "Set metadata from: " << file << " using (" << tempURL << ")";
            DMetadata metadata(tempURL.toLocalFile());

            metadata.setExifTagString("Exif.Image.DocumentName", QFileInfo(dest).fileName());

            if (fixDateTime)
            {
                metadata.setImageDateTime(newDateTime, true);
            }

            //TODO: Set image tags using DMetadata.

            if (colorLabel > NoColorLabel)
            {
                metadata.setImageColorLabel(colorLabel);
            }

            if (pickLabel > NoPickLabel)
            {
                metadata.setImagePickLabel(pickLabel);
            }

            if (rating > RatingMin)
            {
                metadata.setImageRating(rating);
            }

            if (!templateTitle.isNull() && !templateTitle.isEmpty())
            {
                TemplateManager* tm = TemplateManager::defaultManager();
                kDebug() << "Metadata template title : " << templateTitle;

                if (tm && templateTitle == Template::removeTemplateTitle())
                {
                    metadata.removeMetadataTemplate();
                }
                else if (tm)
                {
                    metadata.removeMetadataTemplate();
                    metadata.setMetadataTemplate(tm->findByTitle(templateTitle));
                }
            }

            metadata.applyChanges();

            // Convert JPEG file to lossless format if wanted,
            // and move converted image to destination.

            if (convertJpeg)
            {
                KUrl tempURL2(dest);
                tempURL2 = tempURL2.upUrl();
                tempURL2.addPath(QString(".digikam-camera-tmp2-%1").arg(getpid()).append(file));
                temp     = tempURL2.toLocalFile();

                // when convertnig a file, we need to set the new format extension..
                // The new extension is already set in importui.cpp.

                kDebug() << "Convert to LossLess: " << file << " using (" << tempURL << ")  destination: " << dest;

                if (!JPEGUtils::jpegConvert(tempURL.toLocalFile(), tempURL2.toLocalFile(), file, losslessFormat))
                {
                    kDebug() << "  Convert failed?! eh";
                    // convert failed. delete the temp file
                    unlink(QFile::encodeName(tempURL.toLocalFile()));
                    unlink(QFile::encodeName(tempURL2.toLocalFile()));
                    sendLogMsg(i18n("Failed to convert file <filename>%1</filename> to JPEG", file), DHistoryView::ErrorEntry, folder, file);
                }
                else
                {
                    kDebug() << "  Done, removing the temp file: " << tempURL;
                    // Else remove only the first temp file.
                    unlink(QFile::encodeName(tempURL.toLocalFile()));
                }
            }
        }

        // Now we need to move from temp file to destination file.
        // This possibly involves UI operation, do it from main thread
        emit signalInternalCheckRename(folder, file, dest, temp, script);
        break;
    }

    case (CameraCommand::cam_upload):
    {
        QString folder = cmd->map["destFolder"].toString();

        // We will using the same source file name to create the dest file
        // name in camera.
        QString file   = cmd->map["destFile"].toString();

        // The source file path to download in camera.
        QString src    = cmd->map["srcFilePath"].toString();

        CamItemInfo itemsInfo;

        bool result = d->camera->uploadItem(folder, file, src, itemsInfo);

        if (result)
        {
            emit signalUploaded(itemsInfo);
        }
        else
        {
            emit signalInternalUploadFailed(folder, file, src);
        }

        break;
    }

    case (CameraCommand::cam_delete):
    {
        QString folder = cmd->map["folder"].toString();
        QString file   = cmd->map["file"].toString();
        bool result    = d->camera->deleteItem(folder, file);

        if (result)
        {
            emit signalDeleted(folder, file, true);
        }
        else
        {
            emit signalInternalDeleteFailed(folder, file);
        }

        break;
    }

    case (CameraCommand::cam_lock):
    {
        QString folder = cmd->map["folder"].toString();
        QString file   = cmd->map["file"].toString();
        bool    lock   = cmd->map["lock"].toBool();
        bool result    = d->camera->setLockItem(folder, file, lock);

        if (result)
        {
            emit signalLocked(folder, file, true);
        }
        else
        {
            emit signalInternalLockFailed(folder, file);
        }

        break;
    }

    default:
    {
        kWarning() << " unknown action specified";
        break;
    }
    }
}