Skip to content

Commit e2a741d

Browse files
Merge pull request #4900 from secondlife/maxim/2025.08-legacy-search
Restore Legacy Search
2 parents bd8fe9d + 84b2861 commit e2a741d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+5227
-27
lines changed

indra/newview/CMakeLists.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ set(viewer_SOURCE_FILES
219219
llfloatercreatelandmark.cpp
220220
llfloaterdeleteprefpreset.cpp
221221
llfloaterdestinations.cpp
222+
llfloaterdirectory.cpp
222223
llfloaterdisplayname.cpp
223224
llfloatereditenvironmentbase.cpp
224225
llfloatereditextdaycycle.cpp
@@ -441,11 +442,20 @@ set(viewer_SOURCE_FILES
441442
llpanelblockedlist.cpp
442443
llpanelclassified.cpp
443444
llpanelcontents.cpp
445+
llpaneldirbrowser.cpp
446+
llpaneldirclassified.cpp
447+
llpaneldirevents.cpp
448+
llpaneldirgroups.cpp
449+
llpaneldirland.cpp
450+
llpaneldirpeople.cpp
451+
llpaneldirplaces.cpp
452+
llpaneldirweb.cpp
444453
llpaneleditsky.cpp
445454
llpaneleditwater.cpp
446455
llpaneleditwearable.cpp
447456
llpanelemojicomplete.cpp
448457
llpanelenvironment.cpp
458+
llpaneleventinfo.cpp
449459
llpanelexperiencelisteditor.cpp
450460
llpanelexperiencelog.cpp
451461
llpanelexperiencepicker.cpp
@@ -894,6 +904,7 @@ set(viewer_HEADER_FILES
894904
llfloatercreatelandmark.h
895905
llfloaterdeleteprefpreset.h
896906
llfloaterdestinations.h
907+
llfloaterdirectory.h
897908
llfloaterdisplayname.h
898909
llfloatereditenvironmentbase.h
899910
llfloatereditextdaycycle.h
@@ -1108,11 +1119,20 @@ set(viewer_HEADER_FILES
11081119
llpanelblockedlist.h
11091120
llpanelclassified.h
11101121
llpanelcontents.h
1122+
llpaneldirbrowser.h
1123+
llpaneldirclassified.h
1124+
llpaneldirevents.h
1125+
llpaneldirgroups.h
1126+
llpaneldirland.h
1127+
llpaneldirpeople.h
1128+
llpaneldirplaces.h
1129+
llpaneldirweb.h
11111130
llpaneleditsky.h
11121131
llpaneleditwater.h
11131132
llpaneleditwearable.h
11141133
llpanelemojicomplete.h
11151134
llpanelenvironment.h
1135+
llpaneleventinfo.h
11161136
llpanelexperiencelisteditor.h
11171137
llpanelexperiencelog.h
11181138
llpanelexperiencepicker.h

indra/newview/app_settings/settings.xml

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11107,6 +11107,45 @@
1110711107
<key>Value</key>
1110811108
<integer>0</integer>
1110911109
</map>
11110+
<key>ShowPGClassifieds</key>
11111+
<map>
11112+
<key>Comment</key>
11113+
<string>Display results of find classifieds that are flagged as general</string>
11114+
<key>Persist</key>
11115+
<integer>1</integer>
11116+
<key>HideFromEditor</key>
11117+
<integer>1</integer>
11118+
<key>Type</key>
11119+
<string>Boolean</string>
11120+
<key>Value</key>
11121+
<integer>1</integer>
11122+
</map>
11123+
<key>ShowMatureClassifieds</key>
11124+
<map>
11125+
<key>Comment</key>
11126+
<string>Display results of find classifieds that are flagged as moderate</string>
11127+
<key>Persist</key>
11128+
<integer>1</integer>
11129+
<key>HideFromEditor</key>
11130+
<integer>1</integer>
11131+
<key>Type</key>
11132+
<string>Boolean</string>
11133+
<key>Value</key>
11134+
<integer>0</integer>
11135+
</map>
11136+
<key>ShowAdultClassifieds</key>
11137+
<map>
11138+
<key>Comment</key>
11139+
<string>Display results of find classifieds that are flagged as adult</string>
11140+
<key>Persist</key>
11141+
<integer>1</integer>
11142+
<key>HideFromEditor</key>
11143+
<integer>1</integer>
11144+
<key>Type</key>
11145+
<string>Boolean</string>
11146+
<key>Value</key>
11147+
<integer>0</integer>
11148+
</map>
1111011149
<key>ShowPGSims</key>
1111111150
<map>
1111211151
<key>Comment</key>
@@ -11146,6 +11185,54 @@
1114611185
<key>Value</key>
1114711186
<integer>0</integer>
1114811187
</map>
11188+
<key>ShowPGEvents</key>
11189+
<map>
11190+
<key>Comment</key>
11191+
<string>Display results of find events that are flagged as general</string>
11192+
<key>Persist</key>
11193+
<integer>1</integer>
11194+
<key>HideFromEditor</key>
11195+
<integer>1</integer>
11196+
<key>Type</key>
11197+
<string>Boolean</string>
11198+
<key>Value</key>
11199+
<integer>1</integer>
11200+
</map>
11201+
<key>ShowMatureGroups</key>
11202+
<map>
11203+
<key>Comment</key>
11204+
<string>Include groups that are flagged as mature to Search results</string>
11205+
<key>Persist</key>
11206+
<integer>1</integer>
11207+
<key>HideFromEditor</key>
11208+
<integer>1</integer>
11209+
<key>Type</key>
11210+
<string>Boolean</string>
11211+
<key>Value</key>
11212+
<integer>0</integer>
11213+
</map>
11214+
<key>FindLandArea</key>
11215+
<map>
11216+
<key>Comment</key>
11217+
<string>Enables filtering of land search results by area</string>
11218+
<key>Persist</key>
11219+
<integer>1</integer>
11220+
<key>Type</key>
11221+
<string>Boolean</string>
11222+
<key>Value</key>
11223+
<integer>0</integer>
11224+
</map>
11225+
<key>FindLandPrice</key>
11226+
<map>
11227+
<key>Comment</key>
11228+
<string>Enables filtering of land search results by price</string>
11229+
<key>Persist</key>
11230+
<integer>1</integer>
11231+
<key>Type</key>
11232+
<string>Boolean</string>
11233+
<key>Value</key>
11234+
<integer>1</integer>
11235+
</map>
1114911236
<key>ShowNearClip</key>
1115011237
<map>
1115111238
<key>Comment</key>

indra/newview/lleventnotifier.cpp

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,14 @@ bool LLEventNotifier::handleResponse(U32 eventId, const LLSD& notification, cons
166166
return true;
167167
}
168168

169+
bool LLEventNotifier::add(LLEventInfo event)
170+
{
171+
if (mEventInfoSignal(event))
172+
return false;
173+
174+
return add(event.mID, event.mUnixTime, event.mTimeStr, event.mName);
175+
}
176+
169177
bool LLEventNotifier::add(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName)
170178
{
171179
LLEventNotification *new_enp = new LLEventNotification(eventId, eventEpoch, eventDateStr, eventName);
@@ -198,20 +206,9 @@ void LLEventNotifier::add(U32 eventId)
198206
//static
199207
void LLEventNotifier::processEventInfoReply(LLMessageSystem *msg, void **)
200208
{
201-
// extract the agent id
202-
LLUUID agent_id;
203-
U32 event_id;
204-
std::string event_name;
205-
std::string eventd_date;
206-
U32 event_time_utc;
207-
208-
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
209-
msg->getU32("EventData", "EventID", event_id);
210-
msg->getString("EventData", "Name", event_name);
211-
msg->getString("EventData", "Date", eventd_date);
212-
msg->getU32("EventData", "DateUTC", event_time_utc);
213-
214-
gEventNotifier.add(event_id, (F64)event_time_utc, eventd_date, event_name);
209+
LLEventInfo info;
210+
info.unpack(msg);
211+
gEventNotifier.add(info);
215212
}
216213

217214

@@ -296,6 +293,52 @@ void LLEventNotifier::serverPushRequest(U32 event_id, bool add)
296293
gAgent.sendReliableMessage();
297294
}
298295

296+
void LLEventInfo::unpack(LLMessageSystem* msg)
297+
{
298+
U32 event_id;
299+
msg->getU32("EventData", "EventID", event_id);
300+
mID = event_id;
301+
302+
msg->getString("EventData", "Name", mName);
303+
304+
msg->getString("EventData", "Category", mCategoryStr);
305+
306+
msg->getString("EventData", "Date", mTimeStr);
307+
308+
U32 duration;
309+
msg->getU32("EventData", "Duration", duration);
310+
mDuration = duration;
311+
312+
U32 date;
313+
msg->getU32("EventData", "DateUTC", date);
314+
mUnixTime = date;
315+
316+
msg->getString("EventData", "Desc", mDesc);
317+
318+
std::string buffer;
319+
msg->getString("EventData", "Creator", buffer);
320+
mRunByID = LLUUID(buffer);
321+
322+
U32 foo;
323+
msg->getU32("EventData", "Cover", foo);
324+
325+
mHasCover = foo ? true : false;
326+
if (mHasCover)
327+
{
328+
U32 cover;
329+
msg->getU32("EventData", "Amount", cover);
330+
mCover = cover;
331+
}
332+
333+
msg->getString("EventData", "SimName", mSimName);
334+
335+
msg->getVector3d("EventData", "GlobalPos", mPosGlobal);
336+
337+
// Mature content
338+
U32 event_flags;
339+
msg->getU32("EventData", "EventFlags", event_flags);
340+
mEventFlags = event_flags;
341+
}
299342

300343
LLEventNotification::LLEventNotification(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName) :
301344
mEventID(eventId),

indra/newview/lleventnotifier.h

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,24 @@
3333
class LLEventNotification;
3434
class LLMessageSystem;
3535

36+
struct LLEventInfo
37+
{
38+
void unpack(LLMessageSystem* msg);
39+
40+
std::string mName;
41+
U32 mID;
42+
std::string mDesc;
43+
std::string mCategoryStr;
44+
U32 mDuration;
45+
std::string mTimeStr;
46+
LLUUID mRunByID;
47+
std::string mSimName;
48+
LLVector3d mPosGlobal;
49+
F64 mUnixTime; // seconds from 1970
50+
BOOL mHasCover;
51+
U32 mCover;
52+
U32 mEventFlags;
53+
};
3654

3755
class LLEventNotifier
3856
{
@@ -42,6 +60,7 @@ class LLEventNotifier
4260

4361
void update(); // Notify the user of the event if it's coming up
4462
bool add(U32 eventId, F64 eventEpoch, const std::string& eventDateStr, const std::string &eventName);
63+
bool add(LLEventInfo event);
4564
void add(U32 eventId);
4665

4766

@@ -56,9 +75,13 @@ class LLEventNotifier
5675

5776
static void processEventInfoReply(LLMessageSystem *msg, void **);
5877

78+
typedef boost::signals2::signal<bool(LLEventInfo event)> info_received_signal_t;
79+
boost::signals2::connection setEventInfoCallback(const info_received_signal_t::slot_type& cb) { return mEventInfoSignal.connect(cb); };
80+
5981
protected:
6082
en_map mEventNotifications;
61-
LLFrameTimer mNotificationTimer;
83+
LLFrameTimer mNotificationTimer;
84+
info_received_signal_t mEventInfoSignal;
6285
};
6386

6487

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/**
2+
* @file llfloaterdirectory.cpp
3+
* @brief The legacy "Search" floater
4+
*
5+
* $LicenseInfo:firstyear=2025&license=viewerlgpl$
6+
* Second Life Viewer Source Code
7+
* Copyright (C) 2025, Linden Research, Inc.
8+
*
9+
* This library is free software; you can redistribute it and/or
10+
* modify it under the terms of the GNU Lesser General Public
11+
* License as published by the Free Software Foundation;
12+
* version 2.1 of the License only.
13+
*
14+
* This library is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17+
* Lesser General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU Lesser General Public
20+
* License along with this library; if not, write to the Free Software
21+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22+
*
23+
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
24+
* $/LicenseInfo$
25+
*/
26+
27+
#include "llviewerprecompiledheaders.h"
28+
29+
#include "llfloaterdirectory.h"
30+
31+
#include "llpaneldirevents.h"
32+
#include "llpaneleventinfo.h"
33+
#include "llpaneldirland.h"
34+
#include "llpaneldirpeople.h"
35+
#include "llpaneldirgroups.h"
36+
#include "llpaneldirplaces.h"
37+
#include "llpaneldirclassified.h"
38+
#include "llpaneldirweb.h"
39+
#include "llscrollbar.h"
40+
#include "llviewercontrol.h"
41+
#include "llpanelavatar.h"
42+
#include "llpanelclassified.h"
43+
#include "llpanelgroup.h"
44+
#include "llpanelplaces.h"
45+
#include "llpanelprofile.h"
46+
47+
LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
48+
: LLFloater(name),
49+
mPanelAvatarp(nullptr),
50+
mPanelGroupp(nullptr),
51+
mPanelPlacep(nullptr),
52+
mPanelClassifiedp(nullptr),
53+
mPanelEventp(nullptr)
54+
{
55+
}
56+
57+
LLFloaterDirectory::~LLFloaterDirectory()
58+
{
59+
}
60+
61+
bool LLFloaterDirectory::postBuild()
62+
{
63+
const std::vector<std::string> panel_names = {
64+
"panel_dir_classified",
65+
"panel_dir_events",
66+
"panel_dir_places",
67+
"panel_dir_land",
68+
"panel_dir_people",
69+
"panel_dir_groups" };
70+
71+
for (const std::string& panel_name : panel_names)
72+
{
73+
if (LLPanelDirBrowser* panel_tab = findChild<LLPanelDirBrowser>(panel_name))
74+
{
75+
panel_tab->setFloaterDirectory(this);
76+
}
77+
}
78+
findChild<LLPanelDirWeb>("panel_dir_web")->setFloaterDirectory(this);
79+
80+
mPanelAvatarp = findChild<LLPanelProfileSecondLife>("panel_profile_secondlife");
81+
mPanelAvatarp->setAllowEdit(false);
82+
mPanelGroupp = findChild<LLPanelGroup>("panel_group_info_sidetray");
83+
mPanelGroupp->hideBackBtn();
84+
mPanelPlacep = findChild<LLPanelPlaces>("panel_places");
85+
mPanelPlacep->hideBackBtn();
86+
mPanelClassifiedp = findChild<LLPanelClassifiedInfo>("panel_classified_info");
87+
mPanelClassifiedp->setBackgroundVisible(false);
88+
mPanelEventp = findChild<LLPanelEventInfo>("panel_event_info");
89+
90+
return true;
91+
}
92+
93+
void LLFloaterDirectory::hideAllDetailPanels()
94+
{
95+
if (mPanelAvatarp) mPanelAvatarp->setVisible(false);
96+
if (mPanelGroupp) mPanelGroupp->setVisible(false);
97+
if (mPanelPlacep) mPanelPlacep->setVisible(false);
98+
if (mPanelClassifiedp) mPanelClassifiedp->setVisible(false);
99+
if (mPanelEventp) mPanelEventp->setVisible(false);
100+
}

0 commit comments

Comments
 (0)