mantis 8598: filter dead groups from group search. honor querystart request. Viewers are very broken on this, seems protocol was made by someone with no idea about lludp
parent
2c1909a873
commit
0273baaef6
|
@ -230,15 +230,22 @@ namespace OpenSim.Groups
|
|||
if (d.Data.ContainsKey("Location") && d.Data["Location"] != string.Empty)
|
||||
continue;
|
||||
|
||||
int nmembers = m_Database.MemberCount(d.GroupID);
|
||||
if(nmembers == 0)
|
||||
continue;
|
||||
|
||||
DirGroupsReplyData g = new DirGroupsReplyData();
|
||||
g.groupID = d.GroupID;
|
||||
|
||||
if (d.Data.ContainsKey("Name"))
|
||||
g.groupName = d.Data["Name"];
|
||||
else
|
||||
{
|
||||
m_log.DebugFormat("[Groups]: Key Name not found");
|
||||
continue;
|
||||
}
|
||||
|
||||
g.members = m_Database.MemberCount(d.GroupID);
|
||||
g.groupID = d.GroupID;
|
||||
g.members = nmembers;
|
||||
|
||||
groups.Add(g);
|
||||
}
|
||||
|
|
|
@ -3850,19 +3850,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
packet.QueryData = new DirGroupsReplyPacket.QueryDataBlock();
|
||||
packet.QueryData.QueryID = queryID;
|
||||
|
||||
packet.QueryReplies = new DirGroupsReplyPacket.QueryRepliesBlock[
|
||||
data.Length];
|
||||
packet.QueryReplies = new DirGroupsReplyPacket.QueryRepliesBlock[data.Length];
|
||||
|
||||
int i = 0;
|
||||
foreach (DirGroupsReplyData d in data)
|
||||
{
|
||||
packet.QueryReplies[i] = new DirGroupsReplyPacket.QueryRepliesBlock();
|
||||
packet.QueryReplies[i].GroupID = d.groupID;
|
||||
packet.QueryReplies[i].GroupName =
|
||||
Utils.StringToBytes(d.groupName);
|
||||
packet.QueryReplies[i].GroupName = Util.StringToBytes(d.groupName, 35);
|
||||
packet.QueryReplies[i].Members = d.members;
|
||||
packet.QueryReplies[i].SearchOrder = d.searchOrder;
|
||||
i++;
|
||||
++i;
|
||||
}
|
||||
|
||||
OutPacket(packet, ThrottleOutPacketType.Task);
|
||||
|
|
|
@ -186,10 +186,35 @@ namespace OpenSim.Region.CoreModules.Framework.Search
|
|||
if (string.IsNullOrEmpty(queryText))
|
||||
remoteClient.SendDirGroupsReply(queryID, new DirGroupsReplyData[0]);
|
||||
|
||||
// TODO: This currently ignores pretty much all the query flags including Mature and sort order
|
||||
remoteClient.SendDirGroupsReply(queryID, m_GroupsService.FindGroups(remoteClient, queryText).ToArray());
|
||||
List<DirGroupsReplyData> answer = m_GroupsService.FindGroups(remoteClient, queryText);
|
||||
if(answer.Count == 0)
|
||||
{
|
||||
remoteClient.SendDirGroupsReply(queryID, new DirGroupsReplyData[0]);
|
||||
return;
|
||||
}
|
||||
|
||||
// filter out groups with no members
|
||||
DirGroupsReplyData[] result = new DirGroupsReplyData[answer.Count];
|
||||
int count = 0;
|
||||
foreach(DirGroupsReplyData dgrd in answer)
|
||||
{
|
||||
if(dgrd.members > 0)
|
||||
result[count++] = dgrd;
|
||||
}
|
||||
answer = null;
|
||||
|
||||
// viewers don't sent sorting, so results they show are a nice mess
|
||||
if ((queryStart > 0) && (queryStart < count))
|
||||
{
|
||||
int len = count - queryStart;
|
||||
DirGroupsReplyData[] tmp = new DirGroupsReplyData[len];
|
||||
Array.Copy(result, queryStart, tmp, 0, len);
|
||||
result = tmp;
|
||||
}
|
||||
|
||||
// TODO: This currently ignores pretty much all the query flags including Mature and sort order
|
||||
remoteClient.SendDirGroupsReply(queryID, result);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Event Handlers
|
||||
|
|
Loading…
Reference in New Issue