public void PickDelete(IClientAPI remoteClient, UUID queryPickID)
        {
            IUserProfileInfo info = ProfileFrontend.GetUserProfile(remoteClient.AgentId);

            if (info == null)
                return;
            if (info.Picks.ContainsKey(queryPickID.ToString()))
            {
                ProfilePickInfo oldpick = new ProfilePickInfo();
                oldpick.FromOSD((OSDMap)info.Picks[queryPickID.ToString()]);
                if (oldpick.CreatorUUID != remoteClient.AgentId)
                    return;

                info.Picks.Remove(queryPickID.ToString());
                ProfileFrontend.UpdateUserProfile(info);
            }
        }
        public byte[] AddPick (OSDMap request)
        {
            ProfilePickInfo info = new ProfilePickInfo ();
            info.FromOSD ((OSDMap)request["Pick"]);

            ProfileConnector.AddPick (info);

            string xmlString = OSDParser.SerializeJsonString (new OSDMap ());
            //m_log.DebugFormat("[AuroraDataServerPostHandler]: resp string: {0}", xmlString);
            UTF8Encoding encoding = new UTF8Encoding ();
            return encoding.GetBytes (xmlString);
        }
        public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled, Vector3d globalPos)
        {
            IUserProfileInfo info = ProfileFrontend.GetUserProfile(remoteClient.AgentId);
            if (info == null)
                return;

            ScenePresence p = GetRegionUserIsIn(remoteClient.AgentId).GetScenePresence(remoteClient.AgentId);

            UUID parceluuid = p.currentParcelUUID;
            string user = "******";
            string OrigionalName = "(unknown)";

            Vector3 pos_global = new Vector3(globalPos);

            IParcelManagementModule parcelManagement = GetRegionUserIsIn(remoteClient.AgentId).RequestModuleInterface<IParcelManagementModule>();
            if (parcelManagement != null)
            {
                ILandObject targetlandObj = parcelManagement.GetLandObject(pos_global.X / Constants.RegionSize, pos_global.Y / Constants.RegionSize);

                if (targetlandObj != null)
                {
                    UserAccount parcelOwner = GetRegionUserIsIn(remoteClient.AgentId).UserAccountService.GetUserAccount(UUID.Zero, targetlandObj.LandData.OwnerID);
                    if (parcelOwner != null)
                        user = parcelOwner.Name;

                    parceluuid = targetlandObj.LandData.InfoUUID;

                    OrigionalName = targetlandObj.LandData.Name;
                }
            }

            if (!info.Picks.ContainsKey(pickID.ToString()))
            {
                ProfilePickInfo values = new ProfilePickInfo();
                values.PickUUID = pickID;
                values.CreatorUUID = creatorID;
                values.TopPick = topPick ? 1 : 0;
                values.ParcelUUID = parceluuid;
                values.Name = name;
                values.Description = desc;
                values.SnapshotUUID = snapshotID;
                values.User = user;
                values.OriginalName = OrigionalName;
                values.SimName = remoteClient.Scene.RegionInfo.RegionName;
                values.GlobalPos = pos_global;
                values.SortOrder = sortOrder;
                values.Enabled = enabled ? 1 : 0;
                info.Picks.Add(pickID.ToString(), values.ToOSD());
            }
            else
            {
                ProfilePickInfo oldpick = new ProfilePickInfo();
                oldpick.FromOSD((OSDMap)info.Picks[pickID.ToString()]);
                //Security check
                if (oldpick.CreatorUUID != remoteClient.AgentId)
                    return;

                oldpick.TopPick = topPick ? 1 : 0;
                oldpick.ParcelUUID = parceluuid;
                oldpick.Name = name;
                oldpick.Description = desc;
                oldpick.SnapshotUUID = snapshotID;
                oldpick.User = user;
                oldpick.OriginalName = OrigionalName;
                oldpick.SimName = remoteClient.Scene.RegionInfo.RegionName;
                oldpick.GlobalPos = pos_global;
                oldpick.SortOrder = sortOrder;
                oldpick.Enabled = enabled ? 1 : 0;
                info.Picks.Remove(pickID.ToString());
                info.Picks.Add(pickID.ToString(), oldpick.ToOSD());
            }
            ProfileFrontend.UpdateUserProfile(info);
        }
        public void GodPickDelete(IClientAPI remoteClient, UUID AgentID, UUID queryPickID, UUID queryID)
        {
            if (GetRegionUserIsIn(remoteClient.AgentId).Permissions.IsGod(remoteClient.AgentId))
            {
                IUserProfileInfo info = ProfileFrontend.GetUserProfile(remoteClient.AgentId);

                if (info == null)
                    return;
                if (info.Picks.ContainsKey(queryPickID.ToString()))
                {
                    ProfilePickInfo oldpick = new ProfilePickInfo();
                    oldpick.FromOSD((OSDMap)info.Picks[queryPickID.ToString()]);

                    info.Picks.Remove(queryPickID.ToString());
                    ProfileFrontend.UpdateUserProfile(info);
                }
            }
        }
        public void HandleAvatarPicksRequest(Object sender, string method, List<String> args)
        {
            if (!(sender is IClientAPI))
                return;
            
            IClientAPI remoteClient = (IClientAPI)sender;
            Dictionary<UUID, string> picks = new Dictionary<UUID, string>();
            UUID requestedUUID = new UUID(args[0]);

            bool isFriend = IsFriendOfUser(remoteClient.AgentId, requestedUUID);
            if (isFriend)
            {
                IUserProfileInfo profile = ProfileFrontend.GetUserProfile(requestedUUID);

                if (profile == null)
                    return;
                foreach (OSD pick in profile.Picks.Values)
                {
                    ProfilePickInfo Pick = new ProfilePickInfo();
                    Pick.FromOSD((OSDMap)pick);
                    picks.Add(Pick.PickUUID, Pick.Name);
                }
            }
            remoteClient.SendAvatarPicksReply(requestedUUID, picks);
        }
        public void HandlePickInfoRequest(Object sender, string method, List<String> args)
        {
            if (!(sender is IClientAPI))
                return;

            IClientAPI remoteClient = (IClientAPI)sender;
            UUID PickUUID = UUID.Parse(args[1]);

            IUserProfileInfo info = ProfileFrontend.GetUserProfile(remoteClient.AgentId);

            if (info == null)
                return;
            if (info.Picks.ContainsKey(PickUUID.ToString()))
            {
                ProfilePickInfo pick = new ProfilePickInfo();
                pick.FromOSD((OSDMap)info.Picks[PickUUID.ToString()]);
                remoteClient.SendPickInfoReply(pick.PickUUID, pick.CreatorUUID, pick.TopPick == 1 ? true : false, pick.ParcelUUID, pick.Name, pick.Description, pick.SnapshotUUID, pick.User, pick.OriginalName, pick.SimName, pick.GlobalPos, pick.SortOrder, pick.Enabled == 1 ? true : false);
            }
        }
 public ProfilePickInfo GetPick (UUID queryPickID)
 {
     try
     {
         List<string> serverURIs = m_registry.RequestModuleInterface<IConfigurationService> ().FindValueOf ("RemoteServerURI");
         foreach (string url in serverURIs)
         {
             OSDMap map = new OSDMap ();
             map["Method"] = "getpick";
             map["PickUUID"] = queryPickID;
             OSDMap response = WebUtils.PostToService (url + "osd", map, true, true);
             if (response["_Result"].Type == OSDType.Map)
             {
                 OSDMap responsemap = (OSDMap)response["_Result"];
                 ProfilePickInfo info = new ProfilePickInfo ();
                 info.FromOSD (responsemap);
                 return info;
             }
         }
     }
     catch (Exception e)
     {
         m_log.DebugFormat ("[AuroraRemoteProfileConnector]: Exception when contacting server: {0}", e.ToString ());
     }
     return null;
 }
        public List<ProfilePickInfo> GetPicks(UUID ownerID)
        {
            QueryFilter filter = new QueryFilter();
            filter.andFilters["OwnerUUID"] = ownerID;

            List<string> query = GD.Query(new string[1] { "*" }, "userpicks", filter, null, null, null);

            List<ProfilePickInfo> picks = new List<ProfilePickInfo>();
            for (int i = 0; i < query.Count; i += 5)
            {
                ProfilePickInfo pick = new ProfilePickInfo();
                pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[i + 4]));
                picks.Add(pick);
            }
            return picks;
        }
        public ProfilePickInfo GetPick(UUID queryPickID)
        {
            object remoteValue = DoRemote(queryPickID);
            if (remoteValue != null || m_doRemoteOnly)
                return (ProfilePickInfo)remoteValue;

            QueryFilter filter = new QueryFilter();
            filter.andFilters["PickUUID"] = queryPickID;

            List<string> query = GD.Query(new[] { "*" }, "userpicks", filter, null, null, null);

            if (query.Count < 5)
                return null;
            ProfilePickInfo pick = new ProfilePickInfo();
            pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[4]));
            return pick;
        }
        public List<ProfilePickInfo> GetPicks(UUID ownerID)
        {
            object remoteValue = DoRemote(ownerID);
            if (remoteValue != null || m_doRemoteOnly)
                return (List<ProfilePickInfo>)remoteValue;

            QueryFilter filter = new QueryFilter();
            filter.andFilters["OwnerUUID"] = ownerID;

            List<string> query = GD.Query(new[] { "*" }, "userpicks", filter, null, null, null);

            List<ProfilePickInfo> picks = new List<ProfilePickInfo>();
            for (int i = 0; i < query.Count; i += 5)
            {
                ProfilePickInfo pick = new ProfilePickInfo();
                pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[i + 4]));
                picks.Add(pick);
            }
            return picks;
        }
        public List<ProfilePickInfo> GetPicks(UUID ownerID)
        {
            Dictionary<string, object> where = new Dictionary<string, object>(1);
            where["OwnerUUID"] = ownerID;

            List<string> query = GD.Query(new string[1] { "*" }, "userpicks", new QueryFilter
            {
                andFilters = where
            }, null, null, null);

            List<ProfilePickInfo> picks = new List<ProfilePickInfo>();
            for (int i = 0; i < query.Count; i += 5)
            {
                ProfilePickInfo pick = new ProfilePickInfo();
                pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[i + 4]));
                picks.Add(pick);
            }
            return picks;
        }
        public ProfilePickInfo GetPick(UUID queryPickID)
        {
            Dictionary<string, object> where = new Dictionary<string, object>(1);
            where["PickUUID"] = queryPickID;

            List<string> query = GD.Query(new string[1] { "*" }, "userpicks", new QueryFilter
            {
                andFilters = where
            }, null, null, null);

            if (query.Count < 5)
                return null;
            ProfilePickInfo pick = new ProfilePickInfo();
            pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[4]));
            return pick;
        }
        public void PickInfoUpdate(IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name, string desc, UUID snapshotID, int sortOrder, bool enabled, Vector3d globalPos)
        {
            IUserProfileInfo info = ProfileFrontend.GetUserProfile(remoteClient.AgentId);
            if (info == null)
                return;

            ScenePresence p = GetRegionUserIsIn(remoteClient.AgentId).GetScenePresence(remoteClient.AgentId);

            UUID parceluuid = p.currentParcelUUID;
            string user = "******";
            string OrigionalName = "(unknown)";

            Vector3 pos_global = new Vector3(globalPos);

            ILandObject targetlandObj = GetRegionUserIsIn(remoteClient.AgentId).LandChannel.GetLandObject(p.AbsolutePosition.X, p.AbsolutePosition.Y);

            if (targetlandObj != null)
            {
                UserAccount parcelOwner = GetRegionUserIsIn(remoteClient.AgentId).UserAccountService.GetUserAccount(UUID.Zero, targetlandObj.LandData.OwnerID);
                if (parcelOwner != null)
                    user = parcelOwner.Name;

                parceluuid = targetlandObj.LandData.InfoUUID;

                OrigionalName = targetlandObj.LandData.Name;
            }

            OSDMap picks = Util.DictionaryToOSD(info.Picks);
            if (!picks.ContainsKey(pickID.ToString()))
            {
                ProfilePickInfo values = new ProfilePickInfo();
                values.PickUUID = pickID;
                values.CreatorUUID = creatorID;
                values.TopPick = topPick ? 1 : 0;
                values.ParcelUUID = parceluuid;
                values.Name = name;
                values.Description = desc;
                values.SnapshotUUID = snapshotID;
                values.User = user;
                values.OriginalName = OrigionalName;
                values.SimName = remoteClient.Scene.RegionInfo.RegionName;
                values.GlobalPos = pos_global;
                values.SortOrder = sortOrder;
                values.Enabled = enabled ? 1 : 0;
                picks.Add(pickID.ToString(), values.ToOSD());
            }
            else
            {
                ProfilePickInfo oldpick = new ProfilePickInfo();
                oldpick.FromOSD((OSDMap)picks[pickID.ToString()]);
                //Security check
                if (oldpick.CreatorUUID != remoteClient.AgentId)
                    return;

                oldpick.TopPick = topPick ? 1 : 0;
                oldpick.ParcelUUID = parceluuid;
                oldpick.Name = name;
                oldpick.Description = desc;
                oldpick.SnapshotUUID = snapshotID;
                oldpick.User = user;
                oldpick.OriginalName = OrigionalName;
                oldpick.SimName = remoteClient.Scene.RegionInfo.RegionName;
                oldpick.GlobalPos = pos_global;
                oldpick.SortOrder = sortOrder;
                oldpick.Enabled = enabled ? 1 : 0;
                picks.Remove(pickID.ToString());
                picks.Add(pickID.ToString(), Util.DictionaryToOSD(oldpick.ToKeyValuePairs()));
            }
            info.Picks = Util.OSDToDictionary(picks);
            ProfileFrontend.UpdateUserProfile(info);
        }
 public ProfilePickInfo GetPick (UUID queryPickID)
 {
     List<string> query = GD.Query (new string[1] { "PickUUID" }, new object[1] { queryPickID }, "userpicks", "*");
     if (query.Count < 5)
         return null;
     ProfilePickInfo pick = new ProfilePickInfo ();
     pick.FromOSD ((OSDMap)OSDParser.DeserializeJson (query[4]));
     return pick;
 }
 public List<ProfilePickInfo> GetPicks (UUID ownerID)
 {
     try
     {
         List<string> serverURIs = m_registry.RequestModuleInterface<IConfigurationService> ().FindValueOf (ownerID.ToString (), "RemoteServerURI");
         foreach (string url in serverURIs)
         {
             OSDMap map = new OSDMap ();
             map["Method"] = "getpicks";
             map["PrincipalID"] = ownerID;
             OSDMap response = WebUtils.PostToService (url + "osd", map, true, true);
             if (response["_Result"].Type == OSDType.Map)
             {
                 OSDMap responsemap = (OSDMap)response["_Result"];
                 if (responsemap.ContainsKey ("Result"))
                 {
                     List<ProfilePickInfo> list = new List<ProfilePickInfo> ();
                     OSDArray picks = (OSDArray)responsemap["Result"];
                     foreach (OSD o in picks)
                     {
                         ProfilePickInfo info = new ProfilePickInfo ();
                         info.FromOSD ((OSDMap)o);
                         list.Add (info);
                     }
                     return list;
                 }
                 return new List<ProfilePickInfo>();
             }
         }
     }
     catch (Exception e)
     {
         m_log.DebugFormat ("[AuroraRemoteProfileConnector]: Exception when contacting server: {0}", e.ToString ());
     }
     return null;
 }
 public List<ProfilePickInfo> GetPicks (UUID ownerID)
 {
     List<ProfilePickInfo> picks = new List<ProfilePickInfo> ();
     List<string> query = GD.Query (new string[1] { "OwnerUUID" }, new object[1] { ownerID }, "userpicks", "*");
     for (int i = 0; i < query.Count; i+=5)
     {
         ProfilePickInfo pick = new ProfilePickInfo ();
         pick.FromOSD ((OSDMap)OSDParser.DeserializeJson (query[i+4]));
         picks.Add (pick);
     }
     return picks;
 }
        public ProfilePickInfo GetPick(UUID queryPickID)
        {
            QueryFilter filter = new QueryFilter();
            filter.andFilters["PickUUID"] = queryPickID;

            List<string> query = GD.Query(new string[1] { "*" }, "userpicks", filter, null, null, null);

            if (query.Count < 5)
                return null;
            ProfilePickInfo pick = new ProfilePickInfo();
            pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[4]));
            return pick;
        }