mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-11 16:23:38 +02:00
94 lines
3.3 KiB
JavaScript
94 lines
3.3 KiB
JavaScript
//
|
|
// connectionUtils.js
|
|
// scripts/system/libraries
|
|
//
|
|
// Copyright 2018 High Fidelity, Inc.
|
|
//
|
|
|
|
// Function Names:
|
|
// - requestJSON
|
|
// - getAvailableConnections
|
|
// - getInfoAboutUser
|
|
// - getConnectionData
|
|
//
|
|
// Description:
|
|
// - Update all the usernames that I am entitled to see, using my login but not dependent on canKick.
|
|
var request = Script.require('request').request;
|
|
var METAVERSE_BASE = Account.metaverseServerURL;
|
|
function requestJSON(url, callback) { // callback(data) if successfull. Logs otherwise.
|
|
request({
|
|
uri: url
|
|
}, function (error, response) {
|
|
if (error || (response.status !== 'success')) {
|
|
print("Error: unable to get URL", error || response.status);
|
|
return;
|
|
}
|
|
callback(response.data);
|
|
});
|
|
}
|
|
function getAvailableConnections(domain, callback) { // callback([{usename, location}...]) if successful. (Logs otherwise)
|
|
url = METAVERSE_BASE + '/api/v1/users?per_page=400&'
|
|
if (domain) {
|
|
url += 'status=' + domain.slice(1, -1); // without curly braces
|
|
} else {
|
|
url += 'filter=connections'; // regardless of whether online
|
|
}
|
|
requestJSON(url, function (connectionsData) {
|
|
callback(connectionsData.users);
|
|
});
|
|
}
|
|
function getInfoAboutUser(specificUsername, callback) {
|
|
url = METAVERSE_BASE + '/api/v1/users?filter=connections'
|
|
requestJSON(url, function (connectionsData) {
|
|
for (user in connectionsData.users) {
|
|
if (connectionsData.users[user].username === specificUsername) {
|
|
callback(connectionsData.users[user]);
|
|
return;
|
|
}
|
|
}
|
|
callback(false);
|
|
});
|
|
}
|
|
getConnectionData = function getConnectionData(specificUsername, domain) {
|
|
function frob(user) { // get into the right format
|
|
var formattedSessionId = user.location.node_id || '';
|
|
if (formattedSessionId !== '' && formattedSessionId.indexOf("{") != 0) {
|
|
formattedSessionId = "{" + formattedSessionId + "}";
|
|
}
|
|
return {
|
|
sessionId: formattedSessionId,
|
|
userName: user.username,
|
|
connection: user.connection,
|
|
profileUrl: user.images.thumbnail,
|
|
placeName: (user.location.root || user.location.domain || {}).name || ''
|
|
};
|
|
}
|
|
if (specificUsername) {
|
|
getInfoAboutUser(specificUsername, function (user) {
|
|
if (user) {
|
|
updateUser(frob(user));
|
|
} else {
|
|
print('Error: Unable to find information about ' + specificUsername + ' in connectionsData!');
|
|
}
|
|
});
|
|
} else {
|
|
getAvailableConnections(domain, function (users) {
|
|
if (domain) {
|
|
users.forEach(function (user) {
|
|
updateUser(frob(user));
|
|
});
|
|
} else {
|
|
sendToQml({ method: 'updateConnections', connections: users.map(frob) });
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
// Function Name: sendToQml()
|
|
//
|
|
// Description:
|
|
// -Use this function to send a message to the QML (i.e. to change appearances). The "message" argument is what is sent to
|
|
// the QML in the format "{method, params}", like json-rpc. See also fromQml().
|
|
function sendToQml(message) {
|
|
Tablet.getTablet("com.highfidelity.interface.tablet.system").sendToQml(message);
|
|
}
|