Revert "Job #19766 BUG: Stop or reload all scripts crashes interface fixed, part 3"

This reverts commit 46f2ab73bc.
This commit is contained in:
matsukaze 2014-06-10 22:37:34 -04:00
parent 46f2ab73bc
commit 1e1cc69287
5 changed files with 38 additions and 175 deletions

View file

@ -20,10 +20,6 @@ if (NOT QT_CMAKE_PREFIX_PATH)
set(QT_CMAKE_PREFIX_PATH $ENV{QT_CMAKE_PREFIX_PATH})
endif ()
if (NOT ZLIB_ROOT)
set(ZLIB_ROOT $ENV{ZLIB_ROOT})
endif ()
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT_CMAKE_PREFIX_PATH})
# set our Base SDK to 10.8

View file

@ -33,64 +33,6 @@ SharedAssignmentPointer AssignmentClient::_currentAssignment;
int hifiSockAddrMeta = qRegisterMetaType<HifiSockAddr>("HifiSockAddr");
template <class T>
class Parse : public Parser {
public:
Parse(const QString& option, bool required, T* value) : Parser(option, required), _value(value) {}
bool parse(const QStringList& argumentList);
private:
T* _value;
};
template<>
bool Parse<Assignment::Type>::parse(const QStringList& argumentList) {
int argumentIndex = findToken(argumentList);
if (argumentIndex != -1) {
argumentIndex++;
if (argumentList.size() > argumentIndex) {
bool ok;
int value = argumentList[argumentIndex].toInt(&ok);
if (ok) {
*_value = static_cast<Assignment::Type>(value);
}
validateValue(ok);
} else {
valueNotSpecified();
}
}
return isValid();
}
template<>
bool Parse<QUuid>::parse(const QStringList& argumentList) {
int argumentIndex = findToken(argumentList);
if (argumentIndex != -1) {
argumentIndex++;
if (argumentList.size() > argumentIndex) {
*_value = QString(argumentList[argumentIndex]);
validateValue(!_value->isNull());
} else {
valueNotSpecified();
}
}
return isValid();
}
template<>
bool Parse<QString>::parse(const QStringList& argumentList) {
int argumentIndex = findToken(argumentList);
if (argumentIndex != -1) {
argumentIndex++;
if (argumentList.size() > argumentIndex) {
*_value = argumentList[argumentIndex];
validateValue(true);
} else {
valueNotSpecified();
}
}
return isValid();
}
AssignmentClient::AssignmentClient(int &argc, char **argv) :
QCoreApplication(argc, argv),
_assignmentServerHostname(DEFAULT_ASSIGNMENT_SERVER_HOSTNAME)
@ -101,42 +43,40 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) :
QSettings::setDefaultFormat(QSettings::IniFormat);
QStringList argumentList = arguments();
// Define parser tokens
const QString ASSIGNMENT_TYPE_OVERRIDE_OPTION = "-t";
const QString ASSIGNMENT_POOL_OPTION = "--pool";
const QString ASSIGNMENT_WALLET_DESTINATION_ID_OPTION = "--wallet";
const QString CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION = "-a";
// Define parser results
Assignment::Type requestAssignmentType = Assignment::AllTypes;
QString assignmentPool;
QUuid walletUUID;
// Define parsers
_parsers.insert(ASSIGNMENT_TYPE_OVERRIDE_OPTION, new Parse<Assignment::Type>(ASSIGNMENT_TYPE_OVERRIDE_OPTION, false, &requestAssignmentType));
_parsers.insert(ASSIGNMENT_POOL_OPTION, new Parse<QString>(ASSIGNMENT_POOL_OPTION, false, &assignmentPool));
_parsers.insert(ASSIGNMENT_WALLET_DESTINATION_ID_OPTION, new Parse<QUuid>(ASSIGNMENT_WALLET_DESTINATION_ID_OPTION, false, &walletUUID));
_parsers.insert(CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION, new Parse<QString>(CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION, false, &_assignmentServerHostname));
// register meta type is required for queued invoke method on Assignment subclasses
// set the logging target to the the CHILD_TARGET_NAME
Logging::setTargetName(ASSIGNMENT_CLIENT_TARGET_NAME);
foreach (Parser* option, _parsers) {
if (option) {
option->parse(argumentList);
}
const QString ASSIGNMENT_TYPE_OVVERIDE_OPTION = "-t";
int argumentIndex = argumentList.indexOf(ASSIGNMENT_TYPE_OVVERIDE_OPTION);
Assignment::Type requestAssignmentType = Assignment::AllTypes;
if (argumentIndex != -1) {
requestAssignmentType = (Assignment::Type) argumentList[argumentIndex + 1].toInt();
}
const QString ASSIGNMENT_POOL_OPTION = "--pool";
argumentIndex = argumentList.indexOf(ASSIGNMENT_POOL_OPTION);
QString assignmentPool;
if (argumentIndex != -1) {
assignmentPool = argumentList[argumentIndex + 1];
}
// setup our _requestAssignment member variable from the passed arguments
_requestAssignment = Assignment(Assignment::RequestCommand, requestAssignmentType, assignmentPool);
// check if we were passed a wallet UUID on the command line
// this would represent where the user running AC wants funds sent to
if (_parsers[ASSIGNMENT_WALLET_DESTINATION_ID_OPTION]->exists() &&
_parsers[ASSIGNMENT_WALLET_DESTINATION_ID_OPTION]->isValid()) {
const QString ASSIGNMENT_WALLET_DESTINATION_ID_OPTION = "--wallet";
if ((argumentIndex = argumentList.indexOf(ASSIGNMENT_WALLET_DESTINATION_ID_OPTION)) != -1) {
QUuid walletUUID = QString(argumentList[argumentIndex + 1]);
qDebug() << "The destination wallet UUID for credits is" << uuidStringWithoutCurlyBraces(walletUUID);
_requestAssignment.setWalletUUID(walletUUID);
}
@ -144,9 +84,14 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) :
// create a NodeList as an unassigned client
NodeList* nodeList = NodeList::createInstance(NodeType::Unassigned);
// check for an overriden assignment server hostname
if (_parsers[CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION]->exists() &&
_parsers[CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION]->isValid()) {
// check for an overriden assignment server hostname
const QString CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION = "-a";
argumentIndex = argumentList.indexOf(CUSTOM_ASSIGNMENT_SERVER_HOSTNAME_OPTION);
if (argumentIndex != -1) {
_assignmentServerHostname = argumentList[argumentIndex + 1];
// set the custom assignment socket on our NodeList
HifiSockAddr customAssignmentSocket = HifiSockAddr(_assignmentServerHostname, DEFAULT_DOMAIN_SERVER_PORT);
@ -168,12 +113,6 @@ AssignmentClient::AssignmentClient(int &argc, char **argv) :
this, &AssignmentClient::handleAuthenticationRequest);
}
AssignmentClient::~AssignmentClient() {
foreach (Parser* option, _parsers) {
delete option;
}
}
void AssignmentClient::sendAssignmentRequest() {
if (!_currentAssignment) {
NodeList::getInstance()->sendAssignment(_requestAssignment);

View file

@ -16,57 +16,11 @@
#include "ThreadedAssignment.h"
class Parser {
public:
Parser(const QString& option, bool required) : _option(option), _required(required), _exists(false), _isValid(false) {}
virtual bool parse(const QStringList& argumentList) { return false; }
bool exists() { return _exists; }
bool isValid() { return _isValid; }
protected:
int findToken(const QStringList& argumentList) {
int argumentIndex = argumentList.indexOf(_option);
validateOption(argumentIndex);
return argumentIndex;
}
void validateOption(int index) {
_exists = true;
if (index == -1) {
_exists = false;
if (_required) {
qDebug() << "Command line option " << _option << " is missing";
}
}
}
void valueNotSpecified() {
_isValid = false;
qDebug() << "Command line option " << _option << " value is missing";
}
void validateValue(bool ok) {
_isValid = ok;
if (!ok) {
qDebug() << "Command line option " << _option << " value is invalid";
}
}
private:
QString _option;
bool _required;
bool _exists;
bool _isValid;
};
class AssignmentClient : public QCoreApplication {
Q_OBJECT
public:
AssignmentClient(int &argc, char **argv);
~AssignmentClient();
static const SharedAssignmentPointer& getCurrentAssignment() { return _currentAssignment; }
private slots:
void sendAssignmentRequest();
void readPendingDatagrams();
@ -77,8 +31,6 @@ private:
Assignment _requestAssignment;
static SharedAssignmentPointer _currentAssignment;
QString _assignmentServerHostname;
QMap<QString, Parser*> _parsers;
};
#endif // hifi_AssignmentClient_h

View file

@ -3483,10 +3483,8 @@ void Application::saveScripts() {
}
ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScriptFromEditor) {
QUrl scriptUrl(scriptName);
const QString& scriptURLString = scriptUrl.toString();
if(loadScriptFromEditor && _scriptEnginesHash.contains(scriptURLString) && !_scriptEnginesHash[scriptURLString]->isFinished()){
return _scriptEnginesHash[scriptURLString];
if(loadScriptFromEditor && _scriptEnginesHash.contains(scriptName) && !_scriptEnginesHash[scriptName]->isFinished()){
return _scriptEnginesHash[scriptName];
}
ScriptEngine* scriptEngine;
@ -3494,8 +3492,9 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript
scriptEngine = new ScriptEngine(NO_SCRIPT, "", &_controllerScriptingInterface);
} else {
// start the script on a new thread...
QUrl scriptUrl(scriptName);
scriptEngine = new ScriptEngine(scriptUrl, &_controllerScriptingInterface);
_scriptEnginesHash.insert(scriptURLString, scriptEngine);
_scriptEnginesHash.insert(scriptUrl.toString(), scriptEngine);
if (!scriptEngine->hasScript()) {
qDebug() << "Application::loadScript(), script failed to load...";

View file

@ -219,9 +219,8 @@ QAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
pPropertyStore->Release();
pPropertyStore = NULL;
//QAudio devices seems to only take the 31 first characters of the Friendly Device Name.
//const DWORD QT_WIN_MAX_AUDIO_DEVICENAME_LEN = 31;
// deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal).left(QT_WIN_MAX_AUDIO_DEVICENAME_LEN);
deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal);
const DWORD QT_WIN_MAX_AUDIO_DEVICENAME_LEN = 31;
deviceName = QString::fromWCharArray((wchar_t*)pv.pwszVal).left(QT_WIN_MAX_AUDIO_DEVICENAME_LEN);
qDebug() << (mode == QAudio::AudioOutput ? "output" : "input") << " device:" << deviceName;
PropVariantClear(&pv);
}
@ -1078,35 +1077,13 @@ void Audio::renderToolBox(int x, int y, bool boxed) {
}
_iconBounds = QRect(x, y, MUTE_ICON_SIZE, MUTE_ICON_SIZE);
static quint64 last = 0; // Hold the last time sample
if (!_muted) {
last = 0;
glColor3f(1,1,1);
glBindTexture(GL_TEXTURE_2D, _micTextureId);
} else {
quint64 usecTimestampNow();
static const float CYCLE_DURATION = 3.0f; // Seconds
quint64 now = usecTimestampNow();
float delta = (float)(now - last) / 1000000.0f;
float from = 1.0f; // Linear fade down (upper bound)
float to = 0.3f; // Linear fade down (lower bound)
if (delta > CYCLE_DURATION) {
last = now;
delta -= (int)delta;
} else if (delta > (CYCLE_DURATION * 0.5f)) {
// Linear fade up
from = 0.3f; // lower bound
to = 1.0f; // upper bound
}
// Compute a linear ramp to fade the color from full to partial saturation
float linearRamp = (from - to) * delta / CYCLE_DURATION + to;
glColor3f(linearRamp, linearRamp, linearRamp);
glBindTexture(GL_TEXTURE_2D, _muteTextureId);
}
glColor3f(1,1,1);
glBegin(GL_QUADS);
glTexCoord2f(1, 1);