Project: Show profile image on an object

Back to project

File name: ProfileImage.lsl
Code: View Raw Code
key     m_http_request_key_profile_url  =   NULL_KEY;
key     m_http_request_key_image_uuid   =   NULL_KEY;

getProfileServer(string _homeURI, key _user)
    {
        string request = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>get_server_urls</methodName><params><param><value><struct><member><name>userID</name><value><string>"+ _user +"</string></value></member></struct></value></param></params></methodCall>";
        m_http_request_key_profile_url = llHTTPRequest(_homeURI, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/xml"], request);
    }

getProfileImage(string _profilServer, key _user)
    {
        string request = "{\"jsonrpc\":\"2.0\",\"id\":\"" + llGenerateKey() + "\",\"method\":\"avatar_properties_request\",\"params\":{\"UserId\":\"" + _user + "\"}}";
        m_http_request_key_image_uuid = llHTTPRequest(_profilServer, [HTTP_METHOD, "POST", HTTP_MIMETYPE, "application/json-rpc"], request);
    }
    
key m_lastUser  =   NULL_KEY;
    
default
{
    touch_start(integer i)
    {
        m_lastUser = llDetectedKey(0);
        getProfileServer(osGetAvatarHomeURI(m_lastUser), m_lastUser);
    }
    
    http_response(key request_id, integer status, list metadata, string body)
    {
        if (request_id == m_http_request_key_profile_url)
        {
            list _serverData = llParseString2List(body, ["><", ">", "<"], []);
            integer _ll = llGetListLength(_serverData);
            
            integer index;// default is 0
            while (index < _ll)
            {
                if(llList2String(_serverData, index) == "SRV_ProfileServerURI")
                {
                    getProfileImage(llList2String(_serverData, index + 4), m_lastUser);
                }
                index++;
            }
        }
        
        if (request_id == m_http_request_key_image_uuid)
        {
        
            list _serverData = llParseString2List(body, ["\":\"", "\",\""], []);
            integer _ll = llGetListLength(_serverData);
            
            integer index;// default is 0
            while (index < _ll)
            {
                if(llList2String(_serverData, index) == "ImageId")
                {
                    llSetTexture(llList2String(_serverData, index + 1), ALL_SIDES);
                }
                index++;
            }
        }  
    }
}