Exemple #1
0
void SessionPrivate::buildDescription( SessionInfo& info )
{
    QString description = generateDescription( info );

    info.description = description;
    info.config->group( QString() ).writeEntry( Session::cfgSessionDescriptionEntry, description );
    info.config->sync();
}
void SyncProcess::startQProcess(QProcess& process)
{
    const QString command = generateFullCommand();
    if (command.isEmpty())
        throw SyncProcessException("Cannot start process '" + generateDescription() + "'. The full command is '" + command + "'.");

    if (!mStdInFile.isEmpty())
        process.setStandardInputFile(mStdInFile);

    process.setProcessEnvironment(generateFullEnvironment());
    mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription());
    process.setWorkingDirectory(mWorkingDirectory);
    process.start(command, generateFullArguments());
    process.waitForStarted();

    if (process.state() != QProcess::Running)
        throw SyncProcessException("Starting process '" + generateDescription() + "' failed. The process is not in a running state.");
}
void SyncProcess::run()
{
    mDiagnosticInfo = "";

    QProcess process(this);
    mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription());
    startQProcess(process);

    mRunning = true;

    while (!process.waitForFinished(mPollInterval))
    {
        // pump the event queue, mainly because the user might want to cancel
        QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents);

        if (wasCancelRequested())
        {
            mDiagnosticInfo += QObject::tr("Cancel was requested! Sending terminate signal to the process...\n");

            // TODO: On Windows we have to kill immediately, terminate() posts WM_CLOSE
            //       but oscap doesn't have any event loop running.
            process.terminate();
            break;
        }
    }

    if (wasCancelRequested())
    {
        unsigned int termWaited = 0;

        while (!process.waitForFinished(mPollInterval))
        {
            QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents);
            termWaited += mPollInterval;

            if (termWaited > mTermLimit)
            {
                mDiagnosticInfo += QObject::tr("Process had to be killed! Didn't terminate after %1 msec of waiting.\n").arg(termWaited);
                process.kill();
                break;
            }
        }
    }

    mRunning = false;

    mStdOutContents = QString::fromLocal8Bit(process.readAllStandardOutput());
    mStdErrContents = QString::fromLocal8Bit(process.readAllStandardError());

    // TODO: We are duplicating data here!
    mDiagnosticInfo += "stdout:\n===============================\n" + QString(mStdOutContents) + QString("\n");
    mDiagnosticInfo += "stderr:\n===============================\n" + QString(mStdErrContents) + QString("\n");

    mExitCode = process.exitCode();
}
/**
 * @brief OknoBazaru::wyswietlOpisDlaBazaru	Wyświetla opis przedmiotu z listy dostępnych na bazarze.
 * @param element	dane wpisu, który został wybrany
 */
void MarketWindow::displayMarketItem(const QModelIndex& element)
{
	playerItemList->setCurrentRow(-1);
	const Item *item = wares_.at(element.row());

	equipButton->setVisible(false);
	buyButton->setVisible(true);
	buyButton->setText(buyText);
	buyButton->setEnabled(player_->gold() >= item->value());

	generateDescription(item, player_, itemDescriptionWidget);
}
/**
 * @brief OknoTawerny::wyswietlOpisDlaWlasnych		Wyświetla opis dla wykonywanego zadania.
 * @param element	dane zaznaczonego elementu
 */
void TavernWindow::displayPlayerQuest(const QModelIndex &index)
{
	availableQuestsWidget->setCurrentRow(-1);

	Quest *quest = player_->quest(index.row());
	lastDisplayedQuest = quest;

	showDestinationButton->setEnabled(true);
	acceptQuestButton->setEnabled(!questRejected);
	acceptQuestButton->setText(abandonText);

	generateDescription(quest, questDescriptionWidget);
}
/**
 * @brief OknoBazaru::wyswietlOpisDlaGracza	Wyświetla opis przedmiotu z listy posiadanych przez gracza
 * @param element	dane wpisu, który został wybrany.
 */
void MarketWindow::displayPlayerItem(const QModelIndex &index)
{
	wareList->setCurrentRow(-1);
	buyButton->setText(sellText);
	buyButton->setVisible(true);
	buyButton->setEnabled(true);

	const Item *item = player_->equipment()->backpack().at(index.row());
	equipButton->setVisible(true);
	if (isEquipped(item, player_))
		equipButton->setText(unequipText);
	else
		equipButton->setText(equipText);

	equipButton->setEnabled(isPermitted(item, player_));
	generateDescription(item, player_, itemDescriptionWidget);
}
/**
 * @brief OknoBazaru::zaloz	Odpowiednio zakłada lub zdejmuje aktualnie zaznaczony przedmiot z listy						przedmiotów gracza
 */
void MarketWindow::equip()
{
	const QList <const Item *> backpack = player_->equipment()->backpack();
	const Item *item = backpack.at(playerItemList->currentRow());

	if (equipButton->text() == unequipText) //NOTE do I really want string comparision? Maybe boolean flag?
		unequipItem(item, player_);
	else
		equipItem(item, player_);

	generateDescription(item, player_, itemDescriptionWidget);
	playerWindow_->update();

	if (isEquipped(item, player_))
		equipButton->setText(unequipText);
	else
		equipButton->setText(equipText);
}
/**
 * @brief OknoTawerny::wyswietlOpisDlaMozliwych		Wyświetla opis dla zadania oferowanego.
 * @param element	dane zaznaczonego elementu
 */
void TavernWindow::displayAvailableQuest(const QModelIndex &index)
{
	currentQuestsWidget->setCurrentRow(-1);

	Quest *quest = availableQuests_->at(index.row());
	lastDisplayedQuest = quest;

	showDestinationButton->setEnabled(true);
	bool playerHasMaxQuests = player_->quests()->size() == MaximumNumberOfQuestsTaken;
	bool alreadyTaken;
	for (Quest *q : *player_->quests())
		if (quest->id() == q->id())
			alreadyTaken = true;
	acceptQuestButton->setEnabled(!playerHasMaxQuests && !alreadyTaken);
	acceptQuestButton->setText(acceptText);

	generateDescription(quest, questDescriptionWidget);
}
QDialog* SyncProcess::runWithDialog(QWidget* widgetParent, const QString& title,
    bool showCancelButton, bool closeAfterFinished, bool modal)
{
    ProcessProgressDialog* dialog = new ProcessProgressDialog(widgetParent);
    dialog->setModal(modal);

    QObject::connect(
        dialog, SIGNAL(rejected()),
        this, SLOT(cancel())
    );
    dialog->setWindowTitle(title);
    dialog->show();

    mDiagnosticInfo = "";

    QProcess process(this);
    process.setProcessChannelMode(QProcess::MergedChannels);
    mDiagnosticInfo += QObject::tr("Starting process '%1'\n").arg(generateDescription());
    startQProcess(process);

    mRunning = true;

    while (!process.waitForFinished(mPollInterval))
    {
        // pump the event queue, mainly because the user might want to cancel
        QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents);

        readAllChannelsIntoDialog(process, *dialog);

        if (wasCancelRequested())
        {
            mDiagnosticInfo += QObject::tr("Cancel was requested! Sending terminate signal to the process...\n");

            // TODO: On Windows we have to kill immediately, terminate() posts WM_CLOSE
            //       but oscap doesn't have any event loop running.
            process.terminate();
            break;
        }
    }

    if (wasCancelRequested())
    {
        unsigned int termWaited = 0;

        while (!process.waitForFinished(mPollInterval))
        {
            QAbstractEventDispatcher::instance(thread())->processEvents(QEventLoop::AllEvents);
            termWaited += mPollInterval;

            if (termWaited > mTermLimit)
            {
                mDiagnosticInfo += QObject::tr("Process had to be killed! Didn't terminate after %1 msec of waiting.\n").arg(termWaited);
                process.kill();
                break;
            }
        }
    }

    readAllChannelsIntoDialog(process, *dialog);

    mRunning = false;

    mStdOutContents = process.readAllStandardOutput();
    mStdErrContents = process.readAllStandardError();

    // TODO: We are duplicating data here!
    mDiagnosticInfo += "stdout:\n===============================\n" + QString(mStdOutContents) + QString("\n");
    mDiagnosticInfo += "stderr:\n===============================\n" + QString(mStdErrContents) + QString("\n");

    mExitCode = process.exitCode();
    dialog->notifyDone();

    if (closeAfterFinished)
        dialog->done(QDialog::Accepted);

    return dialog;
}
Exemple #10
0
 JID::JID(String localPart, String domainPart, String resourcePart)
 : localPart(localPart), domainPart(domainPart), resourcePart(resourcePart),
   description(generateDescription(localPart, domainPart, resourcePart))
 {
     /* Nothing to do here */
 }