void SendProfile (IClientAPI remoteClient, IUserProfileInfo Profile, UserAccount account, uint agentOnline) { byte [] charterMember; if (Profile.MembershipGroup == "") { charterMember = new byte [1]; if (account != null) charterMember [0] = (byte)((account.UserFlags & Constants.USER_FLAG_CHARTERMEMBER) >> 8); // CharterMember == 0xf00 } else charterMember = Utils.StringToBytes (Profile.MembershipGroup); // 19-06-2015 Fly-Man- // When charterMember set this character └ the viewer recognizes it // as a Grid Master. Not sure what we want to do with that in Universe // // Perhaps a talk with viewer devs to allow more options for this // if (Utilities.IsSystemUser (Profile.PrincipalID)) { charterMember = Utils.StringToBytes ("Universe System User"); } uint membershipGroupINT = 0; if (Profile.MembershipGroup != "") membershipGroupINT = 4; uint flags = Convert.ToUInt32 (Profile.AllowPublish) + Convert.ToUInt32 (Profile.MaturePublish) + membershipGroupINT + agentOnline + (uint)(account != null ? account.UserFlags : 0); remoteClient.SendAvatarInterestsReply ( Profile.PrincipalID, Convert.ToUInt32 (Profile.Interests.WantToMask), Profile.Interests.WantToText, Convert.ToUInt32 (Profile.Interests.CanDoMask), Profile.Interests.CanDoText, Profile.Interests.Languages ); remoteClient.SendAvatarProperties ( Profile.PrincipalID, Profile.AboutText, Util.ToDateTime (Profile.Created).ToString ("M/d/yyyy", CultureInfo.InvariantCulture), charterMember, Profile.FirstLifeAboutText, flags, Profile.FirstLifeImage, Profile.Image, Profile.WebURL, Profile.Partner ); }
void PackUserInfo(IUserProfileInfo info, UserAccount account, ref OSDArray agents) { OSDMap agentMap = new OSDMap(); agentMap["username"] = account.Name; agentMap["display_name"] = (info == null || info.DisplayName == "") ? account.Name : info.DisplayName; agentMap["display_name_next_update"] = OSD.FromDate(DateTime.ParseExact("1970-01-01 00:00:00 +0", "yyyy-MM-dd hh:mm:ss z", DateTimeFormatInfo.InvariantInfo).ToUniversalTime()); agentMap["legacy_first_name"] = account.FirstName; agentMap["legacy_last_name"] = account.LastName; agentMap["id"] = account.PrincipalID; agentMap["is_display_name_default"] = isDefaultDisplayName(account.FirstName, account.LastName, account.Name, info == null ? account.Name : info.DisplayName); agents.Add(agentMap); }
public IUserProfileInfo GetUserProfile(UUID agentID) { IUserProfileInfo UserProfile = new IUserProfileInfo(); lock (UserProfilesCache) { //Try from the user profile first before getting from the DB if (UserProfilesCache.TryGetValue(agentID, out UserProfile)) return UserProfile; } object remoteValue = DoRemote(agentID); if (remoteValue != null || m_doRemoteOnly) { UserProfile = (IUserProfileInfo)remoteValue; //Add to the cache lock (UserProfilesCache) UserProfilesCache[agentID] = UserProfile; return UserProfile; } QueryFilter filter = new QueryFilter(); filter.andFilters["ID"] = agentID; filter.andFilters["`Key`"] = "LLProfile"; List<string> query = null; //Grab it from the almost generic interface query = GD.Query(new[] { "Value" }, m_userProfileTable, filter, null, null, null); if (query == null || query.Count == 0) return null; //Pull out the OSDmap OSDMap profile = (OSDMap) OSDParser.DeserializeLLSDXml(query[0]); UserProfile = new IUserProfileInfo(); UserProfile.FromOSD(profile); //Add to the cache lock(UserProfilesCache) UserProfilesCache[agentID] = UserProfile; return UserProfile; }
/// <summary> /// Create a new profile for a user /// </summary> /// <param name="AgentID"></param> //[CanBeReflected(ThreatLevel = ThreatLevel.Full)] public void CreateNewProfile(UUID AgentID) { /*object remoteValue = DoRemote(AgentID); if (remoteValue != null || m_doRemoteOnly) return;*/ List<object> values = new List<object> {AgentID.ToString(), "LLProfile"}; //Create a new basic profile for them IUserProfileInfo profile = new IUserProfileInfo {PrincipalID = AgentID}; values.Add(OSDParser.SerializeLLSDXmlString(profile.ToOSD())); //Value which is a default Profile GD.Insert(m_userProfileTable, values.ToArray()); }
public bool UpdateUserProfile(IUserProfileInfo Profile) { if (m_doRemoteOnly) { object remoteValue = DoRemote (Profile); return remoteValue != null && (bool)remoteValue; } IUserProfileInfo previousProfile = GetUserProfile(Profile.PrincipalID); //Make sure the previous one exists if (previousProfile == null) return false; //Now fix values that the sim cannot change Profile.Partner = previousProfile.Partner; Profile.CustomType = previousProfile.CustomType; Profile.MembershipGroup = previousProfile.MembershipGroup; Profile.Created = previousProfile.Created; Dictionary<string, object> values = new Dictionary<string, object>(1); values["Value"] = OSDParser.SerializeLLSDXmlString(Profile.ToOSD()); QueryFilter filter = new QueryFilter(); filter.andFilters["ID"] = Profile.PrincipalID.ToString(); filter.andFilters["`Key`"] = "LLProfile"; //Update cache lock(UserProfilesCache) UserProfilesCache[Profile.PrincipalID] = Profile; return GD.Update(m_userProfileTable, values, null, filter, null, null); }
private void SendProfile(IClientAPI remoteClient, IUserProfileInfo Profile, UserAccount account, uint agentOnline) { Byte[] charterMember; if (Profile.MembershipGroup == "") { charterMember = new Byte[1]; if (account != null) charterMember[0] = (Byte) ((account.UserFlags & Constants.USER_FLAG_CHARTERMEMBER) >> 8); // CharterMember == 0xf00 } else charterMember = Utils.StringToBytes(Profile.MembershipGroup); // When ChaterMember set this character └ the viewer recognizes it // as a Grid Master Not sure what we will be doing with this in // in Virtual Universe. // Perhaps the Viewer Development Work Group on the Second Galaxy Development Team // will shed some light on this regarding future viewer planning. if (Utilities.IsSystemUser(Profile.PrincipalID)) { charterMember = Utils.StringToBytes("└"); } uint membershipGroupINT = 0; if (Profile.MembershipGroup != "") membershipGroupINT = 4; uint flags = Convert.ToUInt32(Profile.AllowPublish) + Convert.ToUInt32(Profile.MaturePublish) + membershipGroupINT + agentOnline + (uint) (account != null ? account.UserFlags : 0); remoteClient.SendAvatarInterestsReply(Profile.PrincipalID, Convert.ToUInt32(Profile.Interests.WantToMask), Profile.Interests.WantToText, Convert.ToUInt32(Profile.Interests.CanDoMask), Profile.Interests.CanDoText, Profile.Interests.Languages); remoteClient.SendAvatarProperties(Profile.PrincipalID, Profile.AboutText, Util.ToDateTime(Profile.Created).ToString("M/d/yyyy", CultureInfo.InvariantCulture), charterMember, Profile.FirstLifeAboutText, flags, Profile.FirstLifeImage, Profile.Image, Profile.WebURL, Profile.Partner); }