Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
8d47710375
|
|
@ -21,14 +21,7 @@ jobs:
|
|||
matrix:
|
||||
os: [macos-11,ubuntu-20.04,windows-2022]
|
||||
grid: [sl,os]
|
||||
addrsize: [64,32]
|
||||
exclude:
|
||||
- os: ubuntu-20.04
|
||||
addrsize: 32
|
||||
- os: macos-11
|
||||
addrsize: 32
|
||||
# - grid: sl
|
||||
# addrsize: 32
|
||||
addrsize: [64]
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ Before you start configuring your Windows build system, be aware of our tested c
|
|||
Memory: You will need at least 2GB RAM, 4GB strongly recommended.
|
||||
CPU: Multiple CPUs are strongly recommended.
|
||||
A build can take over an hour.
|
||||
Visual Studio 2017 Community Edition.
|
||||
Visual Studio 2017/2022 Community Edition.
|
||||
|
||||
Ensure you can build a stock viewer-development try as described in the SL wiki. Before asking for any help
|
||||
compiling Firestorm, make sure you can build the Second Life viewer first. If you try and skip this step, you may
|
||||
receive much less help. http://wiki.secondlife.com/wiki/Visual_Studio_2013_Viewer_Builds
|
||||
receive much less help. https://wiki.secondlife.com/wiki/Build_the_Viewer_on_Windows
|
||||
|
||||
If you want to use licensed FMOD or KDU build libraries (they are optional) you have to provision these yourself.
|
||||
If you're licensing these with Phoenix/Firestorm, ask for the libraries for fmod and kdu. Put them into:
|
||||
|
|
@ -20,11 +20,11 @@ mailing list. We've created a non-KDU build target to make this easier. Everywhe
|
|||
"ReleaseFS_open" instead. This will perform the same build, using OpenJpeg instead of KDU.
|
||||
|
||||
|
||||
To build Firestorm:
|
||||
To build Firestorm - a more detailed instruction can be found at https://wiki.firestormviewer.org/fs_compiling_firestorm_windows:
|
||||
|
||||
Open a CMD shell and navigating to your firestorm code repo:
|
||||
|
||||
autobuild build -c ReleaseFS
|
||||
autobuild build -A 64 -c ReleaseFS
|
||||
|
||||
Other build targets you may use are:
|
||||
|
||||
|
|
@ -33,22 +33,18 @@ Other build targets you may use are:
|
|||
RelWithDebInfoFS_open (no KDU, no FMOD)
|
||||
|
||||
Other examples:
|
||||
autobuild configure -c ReleaseFS # basic configuration step, don't build, just configure
|
||||
autobuild configure -c ReleaseFS -- --clean # clean the output area first, then configure
|
||||
autobuild configure -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
|
||||
autobuild configure -A 64 -c ReleaseFS # basic configuration step, don't build, just configure
|
||||
autobuild configure -A 64 -c ReleaseFS -- --clean # clean the output area first, then configure
|
||||
autobuild configure -A 64 -c ReleaseFS -- --chan Private-Yourname # configure with a custom channel
|
||||
|
||||
autobuild build -c ReleaseFS --no-configure # default quick rebuild
|
||||
autobuild build -A 64 -c ReleaseFS --no-configure # default quick rebuild
|
||||
|
||||
If you want to set custom configuration, do this in the configure step separately from build, then run "autobuild
|
||||
build -c ReleaseFS --no-configure" as a secondary step.
|
||||
|
||||
If you want to build the 64bit version, add the parameter -A 64 to the autobuild commands, e.g.:
|
||||
autobuild configure -A 64 -c ReleaseFS
|
||||
autobuild build -A 64 -c ReleaseFS --no-configure
|
||||
build -A 64 -c ReleaseFS --no-configure" as a secondary step.
|
||||
|
||||
|
||||
Logs:
|
||||
Look for logs in build-vc150-32/logs for 32bit builds and build-vc150-64/logs for 64bit
|
||||
Look for logs in build-vc1x0-64/logs
|
||||
|
||||
Output:
|
||||
Look for output in build-vc150-32/newview/Release for 32bit builds and build-vc150-64/newview/Release for 64bit
|
||||
Look for output in build-vc1x0-32/newview/Release
|
||||
|
|
|
|||
|
|
@ -847,9 +847,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ad7b9fc10184e8145731f45ae400bfd1</string>
|
||||
<string>c539c58aee1d010928ae29ad344656a5</string>
|
||||
<key>url</key>
|
||||
<string>http://3p.firestormviewer.org/dullahan-1.12.2.202210012157_92.0.27_g274abcf_chromium-92.0.4515.159-linux64-222741156.tar.bz2</string>
|
||||
<string>http://3p.firestormviewer.org/dullahan-1.14.0.202311061750_118.6.8_ge44bee1_chromium-118.0.5993.117-linux64-233100650.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -948,14 +948,12 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>8ee7c21f3f109cf4e1709e4af0b4bebf</string>
|
||||
<string>bfcc4acbe6b8dddaf10f0f7a47e4aad8</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.17-darwin64-232401806.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.02.18-darwin64-232960129.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -964,8 +962,6 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>14846f1a55274399362db4b674fcded6</string>
|
||||
<key>hash_algorithm</key>
|
||||
|
|
@ -980,8 +976,6 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>7b38bd83eb63f25df7c5a20070a05732</string>
|
||||
<key>hash_algorithm</key>
|
||||
|
|
@ -1484,8 +1478,6 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>3142fccbcc0e2c5a019e3177ef364290</string>
|
||||
<key>url</key>
|
||||
|
|
@ -1498,8 +1490,6 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>e13d6fe708613bb3a5d630c4cdd97a3b</string>
|
||||
<key>url</key>
|
||||
|
|
@ -1512,8 +1502,6 @@
|
|||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>4aa7df19125708580055b42190d2511e</string>
|
||||
<key>url</key>
|
||||
|
|
@ -2959,11 +2947,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>ad0c8b41ee4b4de216382bec46ee1c25962a3f12</string>
|
||||
<string>71a9c7c03a2c26cdb21fa476de485d9c</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-xmlrpc-epi/releases/download/v0.54.1.8a05acf/xmlrpc_epi-0.54.1.8a05acf-linux64-8a05acf.tar.zst</string>
|
||||
<string>http://3p.firestormviewer.org/xmlrpc_epi-0.54.2.230940042-linux64-230940042.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
|
|||
|
|
@ -1081,8 +1081,7 @@ void MediaPluginCEF::keyEvent(dullahan::EKeyEvent key_event, LLSD native_key_dat
|
|||
keypad = true;
|
||||
}
|
||||
|
||||
// yes, we send native_virtual_key_win twice because native_virtual_key breaks it
|
||||
mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key_win, native_virtual_key_win, native_modifiers, keypad);
|
||||
mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key_win, native_modifiers, keypad);
|
||||
}
|
||||
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -105,9 +105,9 @@ void FloaterAO::updateAnimationList()
|
|||
return;
|
||||
}
|
||||
|
||||
for (U32 index = 0; index < mSelectedSet->mStateNames.size(); ++index)
|
||||
for (auto index = 0; index < mSelectedSet->mStateNames.size(); ++index)
|
||||
{
|
||||
std::string stateName = mSelectedSet->mStateNames[index];
|
||||
const std::string& stateName = mSelectedSet->mStateNames[index];
|
||||
AOSet::AOState* state = mSelectedSet->getStateByName(stateName);
|
||||
mStateSelector->add(stateName, state, ADD_BOTTOM, TRUE);
|
||||
}
|
||||
|
|
@ -178,8 +178,8 @@ void FloaterAO::updateList()
|
|||
}
|
||||
}
|
||||
|
||||
U32 selected_index = 0;
|
||||
for (U32 index = 0; index < mSetList.size(); ++index)
|
||||
size_t selected_index = 0;
|
||||
for (auto index = 0; index < mSetList.size(); ++index)
|
||||
{
|
||||
std::string setName = mSetList[index]->getName();
|
||||
mSetSelector->add(setName, &mSetList[index], ADD_BOTTOM, TRUE);
|
||||
|
|
@ -280,7 +280,7 @@ BOOL FloaterAO::postBuild()
|
|||
onChangeAnimationSelection();
|
||||
mMainInterfacePanel->setVisible(TRUE);
|
||||
mSmallInterfacePanel->setVisible(FALSE);
|
||||
reloading(TRUE);
|
||||
reloading(true);
|
||||
|
||||
updateList();
|
||||
|
||||
|
|
@ -464,7 +464,7 @@ void FloaterAO::onSelectState()
|
|||
mSelectedState = (AOSet::AOState*)mStateSelector->getCurrentUserdata();
|
||||
if (mSelectedState->mAnimations.size())
|
||||
{
|
||||
for (U32 index = 0; index < mSelectedState->mAnimations.size(); ++index)
|
||||
for (auto index = 0; index < mSelectedState->mAnimations.size(); ++index)
|
||||
{
|
||||
LLScrollListItem* item = addAnimation(mSelectedState->mAnimations[index].mName);
|
||||
if (item)
|
||||
|
|
@ -558,7 +558,7 @@ bool FloaterAO::removeSetCallback(const LLSD& notification, const LLSD& response
|
|||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
|
||||
if (option ==0 )
|
||||
if (option ==0)
|
||||
{
|
||||
if (AOEngine::instance().removeSet(mSelectedSet))
|
||||
{
|
||||
|
|
@ -638,7 +638,7 @@ void FloaterAO::onChangeAnimationSelection()
|
|||
mAnimationList->deselectAllItems();
|
||||
LL_DEBUGS("AOEngine") << "Selection count now: " << list.size() << LL_ENDL;
|
||||
}
|
||||
else if (list.size() > 0)
|
||||
else if (!list.empty())
|
||||
{
|
||||
if (list.size() == 1)
|
||||
{
|
||||
|
|
@ -715,7 +715,7 @@ void FloaterAO::onClickTrash()
|
|||
return;
|
||||
}
|
||||
|
||||
for (S32 index = list.size() - 1; index != -1; --index)
|
||||
for (auto index = list.size() - 1; index != -1; --index)
|
||||
{
|
||||
AOEngine::instance().removeAnimation(mSelectedSet, mSelectedState, mAnimationList->getItemIndex(list[index]));
|
||||
}
|
||||
|
|
@ -833,11 +833,8 @@ void FloaterAO::onAnimationChanged(const LLUUID& animation)
|
|||
}
|
||||
|
||||
// why do we have no LLScrollListCtrl::getItemByUserdata() ? -Zi
|
||||
std::vector<LLScrollListItem*> item_list = mAnimationList->getAllData();
|
||||
std::vector<LLScrollListItem*>::const_iterator iter;
|
||||
for (iter = item_list.begin(); iter != item_list.end(); ++iter)
|
||||
for (auto item : mAnimationList->getAllData())
|
||||
{
|
||||
LLScrollListItem* item = *iter;
|
||||
LLUUID* id = (LLUUID*)item->getUserdata();
|
||||
|
||||
if (id == &animation)
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
#define ROOT_AO_FOLDER "#AO"
|
||||
#include <boost/graph/graph_concepts.hpp>
|
||||
|
||||
const F32 INVENTORY_POLLING_INTERVAL = 5.0f;
|
||||
constexpr F32 INVENTORY_POLLING_INTERVAL = 5.0f;
|
||||
|
||||
AOEngine::AOEngine() :
|
||||
LLSingleton<AOEngine>(),
|
||||
|
|
@ -128,7 +128,7 @@ void AOEngine::onPauseAO()
|
|||
|
||||
void AOEngine::clear(bool from_timer)
|
||||
{
|
||||
mOldSets.insert(mOldSets.end(), mSets.begin(), mSets.end());
|
||||
std::move(mSets.begin(), mSets.end(), std::back_inserter(mOldSets));
|
||||
mSets.clear();
|
||||
|
||||
mCurrentSet = nullptr;
|
||||
|
|
@ -213,7 +213,7 @@ bool AOEngine::foreignAnimations()
|
|||
return false;
|
||||
}
|
||||
|
||||
LLUUID seat = agentRoot->getID();
|
||||
const LLUUID& seat = agentRoot->getID();
|
||||
if (seat == gAgentID)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Not checking for foreign animation when not sitting." << LL_ENDL;
|
||||
|
|
@ -222,7 +222,7 @@ bool AOEngine::foreignAnimations()
|
|||
|
||||
LL_DEBUGS("AOEngine") << "Checking for foreign animation on seat " << seat << LL_ENDL;
|
||||
|
||||
for (const auto&[source_id, animation_id] : gAgentAvatarp->mAnimationSources)
|
||||
for (const auto& [source_id, animation_id] : gAgentAvatarp->mAnimationSources)
|
||||
{
|
||||
// skip animations run by the avatar itself
|
||||
if (source_id != gAgentID)
|
||||
|
|
@ -584,7 +584,7 @@ const LLUUID AOEngine::override(const LLUUID& motion, bool start)
|
|||
// case, as it plays at the same time as other motions
|
||||
if (motion != ANIM_AGENT_TYPE)
|
||||
{
|
||||
const S32 cleanupStates[]=
|
||||
constexpr S32 cleanupStates[]=
|
||||
{
|
||||
AOSet::Standing,
|
||||
AOSet::Walking,
|
||||
|
|
@ -806,8 +806,7 @@ void AOEngine::checkSitCancel()
|
|||
{
|
||||
if (foreignAnimations())
|
||||
{
|
||||
AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT);
|
||||
if (aoState)
|
||||
if (AOSet::AOState* aoState = mCurrentSet->getStateByRemapID(ANIM_AGENT_SIT); aoState)
|
||||
{
|
||||
LLUUID animation = aoState->mCurrentAnimationID;
|
||||
if (animation.notNull())
|
||||
|
|
@ -1020,7 +1019,7 @@ bool AOEngine::createAnimationLink(const AOSet* set, AOSet::AOState* state, cons
|
|||
|
||||
if (cats)
|
||||
{
|
||||
for (auto cat : *cats)
|
||||
for (const auto& cat : *cats)
|
||||
{
|
||||
if (cat->getName().compare(state->mName) == 0)
|
||||
{
|
||||
|
|
@ -1039,8 +1038,7 @@ bool AOEngine::createAnimationLink(const AOSet* set, AOSet::AOState* state, cons
|
|||
return false;
|
||||
}
|
||||
|
||||
LLInventoryObject::const_object_list_t obj_array;
|
||||
obj_array.push_back(LLConstPointer<LLInventoryObject>(item));
|
||||
LLInventoryObject::const_object_list_t obj_array{ LLConstPointer<LLInventoryObject>(item) };
|
||||
link_inventory_array(state->mInventoryUUID,
|
||||
obj_array,
|
||||
LLPointer<LLInventoryCallback>(nullptr));
|
||||
|
|
@ -1055,7 +1053,7 @@ bool AOEngine::addAnimation(const AOSet* set, AOSet::AOState* state, const LLInv
|
|||
anim.mInventoryUUID = item->getUUID();
|
||||
anim.mName = item->getName();
|
||||
anim.mSortOrder = state->mAnimations.size() + 1;
|
||||
state->mAnimations.push_back(anim);
|
||||
state->mAnimations.emplace_back(std::move(anim));
|
||||
|
||||
BOOL wasProtected = gSavedPerAccountSettings.getBOOL("LockAOFolders");
|
||||
gSavedPerAccountSettings.setBOOL("LockAOFolders", FALSE);
|
||||
|
|
@ -1175,7 +1173,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
|
|||
return false;
|
||||
}
|
||||
|
||||
S32 numOfAnimations = state->mAnimations.size();
|
||||
auto numOfAnimations = state->mAnimations.size();
|
||||
if (numOfAnimations == 0)
|
||||
{
|
||||
return false;
|
||||
|
|
@ -1220,7 +1218,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
|
|||
|
||||
if (cats)
|
||||
{
|
||||
for (auto cat : *cats)
|
||||
for (const auto& cat : *cats)
|
||||
{
|
||||
std::vector<std::string> params;
|
||||
LLStringUtil::getTokens(cat->getName(), params, ":");
|
||||
|
|
@ -1254,7 +1252,7 @@ bool AOEngine::removeAnimation(const AOSet* set, AOSet::AOState* state, S32 inde
|
|||
|
||||
bool AOEngine::swapWithPrevious(AOSet::AOState* state, S32 index)
|
||||
{
|
||||
S32 numOfAnimations = state->mAnimations.size();
|
||||
auto numOfAnimations = state->mAnimations.size();
|
||||
if (numOfAnimations < 2 || index == 0)
|
||||
{
|
||||
return false;
|
||||
|
|
@ -1271,7 +1269,7 @@ bool AOEngine::swapWithPrevious(AOSet::AOState* state, S32 index)
|
|||
|
||||
bool AOEngine::swapWithNext(AOSet::AOState* state, S32 index)
|
||||
{
|
||||
S32 numOfAnimations = state->mAnimations.size();
|
||||
auto numOfAnimations = state->mAnimations.size();
|
||||
if (numOfAnimations < 2 || index == (numOfAnimations - 1))
|
||||
{
|
||||
return false;
|
||||
|
|
@ -1297,7 +1295,7 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
|
|||
|
||||
if (items)
|
||||
{
|
||||
for (auto item : *items)
|
||||
for (const auto& item : *items)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Found animation link " << item->LLInventoryItem::getName()
|
||||
<< " desc " << item->LLInventoryItem::getDescription()
|
||||
|
|
@ -1326,12 +1324,12 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
|
|||
if (sortOrder == -1)
|
||||
{
|
||||
LL_WARNS("AOEngine") << "sort order was unknown so append to the end of the list" << LL_ENDL;
|
||||
state->mAnimations.push_back(anim);
|
||||
state->mAnimations.emplace_back(std::move(anim));
|
||||
}
|
||||
else
|
||||
{
|
||||
bool inserted = false;
|
||||
for (U32 index = 0; index < state->mAnimations.size(); ++index)
|
||||
for (auto index = 0; index < state->mAnimations.size(); ++index)
|
||||
{
|
||||
if (state->mAnimations[index].mSortOrder > sortOrder)
|
||||
{
|
||||
|
|
@ -1344,7 +1342,7 @@ void AOEngine::reloadStateAnimations(AOSet::AOState* state)
|
|||
if (!inserted)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "not inserted yet, appending to the list instead" << LL_ENDL;
|
||||
state->mAnimations.push_back(anim);
|
||||
state->mAnimations.emplace_back(std::move(anim));
|
||||
}
|
||||
}
|
||||
LL_DEBUGS("AOEngine") << "Animation count now: " << state->mAnimations.size() << LL_ENDL;
|
||||
|
|
@ -1377,7 +1375,7 @@ void AOEngine::update()
|
|||
|
||||
if (categories)
|
||||
{
|
||||
for (auto currentCategory : *categories)
|
||||
for (const auto& currentCategory : *categories)
|
||||
{
|
||||
const std::string& setFolderName = currentCategory->getName();
|
||||
|
||||
|
|
@ -1401,7 +1399,7 @@ void AOEngine::update()
|
|||
LL_DEBUGS("AOEngine") << "Adding set " << setFolderName << " to AO." << LL_ENDL;
|
||||
newSet = new AOSet(currentCategory->getUUID());
|
||||
newSet->setName(params[0]);
|
||||
mSets.push_back(newSet);
|
||||
mSets.emplace_back(newSet);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1414,7 +1412,7 @@ void AOEngine::update()
|
|||
}
|
||||
allComplete = false;
|
||||
|
||||
for (U32 num = 1; num < params.size(); ++num)
|
||||
for (auto num = 1; num < params.size(); ++num)
|
||||
{
|
||||
if (params[num].size() != 2)
|
||||
{
|
||||
|
|
@ -1451,7 +1449,7 @@ void AOEngine::update()
|
|||
gInventory.getDirectDescendentsOf(currentCategory->getUUID(), stateCategories, items);
|
||||
newSet->setComplete(true);
|
||||
|
||||
for (auto stateCategory : *stateCategories)
|
||||
for (const auto& stateCategory : *stateCategories)
|
||||
{
|
||||
std::vector<std::string> state_params;
|
||||
LLStringUtil::getTokens(stateCategory->getName(), state_params, ":");
|
||||
|
|
@ -1471,7 +1469,7 @@ void AOEngine::update()
|
|||
LL_DEBUGS("AOEngine") << "Reading state " << stateName << LL_ENDL;
|
||||
|
||||
state->mInventoryUUID = stateCategory->getUUID();
|
||||
for (U32 num = 1; num < state_params.size(); ++num)
|
||||
for (auto num = 1; num < state_params.size(); ++num)
|
||||
{
|
||||
if (state_params[num] == "CY")
|
||||
{
|
||||
|
|
@ -1925,7 +1923,7 @@ void AOEngine::tick()
|
|||
gInventory.getDirectDescendentsOf(categoryID, categories, items);
|
||||
LL_DEBUGS("AOEngine") << "cat " << categories->size() << " items " << items->size() << LL_ENDL;
|
||||
|
||||
for (auto cat : *categories)
|
||||
for (const auto& cat : *categories)
|
||||
{
|
||||
const std::string& catName = cat->getName();
|
||||
if (catName.compare(ROOT_AO_FOLDER) == 0)
|
||||
|
|
@ -1975,8 +1973,8 @@ bool AOEngine::importNotecard(const LLInventoryItem* item)
|
|||
|
||||
gAssetStorage->getInvItemAsset(
|
||||
sourceSim,
|
||||
gAgent.getID(),
|
||||
gAgent.getSessionID(),
|
||||
gAgentID,
|
||||
gAgentSessionID,
|
||||
item->getPermissions().getOwner(),
|
||||
LLUUID::null,
|
||||
item->getUUID(),
|
||||
|
|
@ -2013,8 +2011,8 @@ void AOEngine::onNotecardLoadComplete(const LLUUID& assetUUID, LLAssetType::ETyp
|
|||
char* buffer = new char[notecardSize + 1];
|
||||
buffer[notecardSize] = 0;
|
||||
|
||||
S32 ret = file.read((U8*)buffer, notecardSize);
|
||||
if (ret > 0)
|
||||
BOOL ret = file.read((U8*)buffer, notecardSize);
|
||||
if (ret)
|
||||
{
|
||||
AOEngine::instance().parseNotecard(buffer);
|
||||
}
|
||||
|
|
@ -2046,17 +2044,17 @@ void AOEngine::parseNotecard(const char* buffer)
|
|||
std::vector<std::string> lines;
|
||||
LLStringUtil::getTokens(text, lines, "\n");
|
||||
|
||||
S32 found = -1;
|
||||
for (U32 index = 0; index < lines.size(); ++index)
|
||||
bool found{ false };
|
||||
for (const auto& line : lines)
|
||||
{
|
||||
if (lines[index].find("Text length ") == 0)
|
||||
if (line.find("Text length ") == 0)
|
||||
{
|
||||
found = index;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found == -1)
|
||||
if (!found)
|
||||
{
|
||||
LLNotificationsUtil::add("AOImportNoText", LLSD());
|
||||
delete mImportSet;
|
||||
|
|
@ -2080,7 +2078,7 @@ void AOEngine::parseNotecard(const char* buffer)
|
|||
LLInventoryModel::item_array_t* items;
|
||||
|
||||
gInventory.getDirectDescendentsOf(mImportSet->getInventoryUUID(), dummy, items);
|
||||
for (U32 index = 0; index < items->size(); ++index)
|
||||
for (auto index = 0; index < items->size(); ++index)
|
||||
{
|
||||
animationMap[items->at(index)->getName()] = items->at(index)->getUUID();
|
||||
LL_DEBUGS("AOEngine") << "animation " << items->at(index)->getName() <<
|
||||
|
|
@ -2088,7 +2086,7 @@ void AOEngine::parseNotecard(const char* buffer)
|
|||
}
|
||||
|
||||
// [ State ]Anim1|Anim2|Anim3
|
||||
for (U32 index = found + 1; index < lines.size(); ++index)
|
||||
for (auto index = found + 1; index < lines.size(); ++index)
|
||||
{
|
||||
std::string line = lines[index];
|
||||
|
||||
|
|
@ -2125,7 +2123,7 @@ void AOEngine::parseNotecard(const char* buffer)
|
|||
LLNotificationsUtil::add("AOImportNoValidDelimiter", args);
|
||||
continue;
|
||||
}
|
||||
U32 endTag = line.find("]");
|
||||
auto endTag = line.find("]");
|
||||
|
||||
std::string stateName = line.substr(1, endTag - 1);
|
||||
LLStringUtil::trim(stateName);
|
||||
|
|
@ -2143,7 +2141,7 @@ void AOEngine::parseNotecard(const char* buffer)
|
|||
std::vector<std::string> animationList;
|
||||
LLStringUtil::getTokens(animationLine, animationList, "|,");
|
||||
|
||||
for (U32 animIndex = 0; animIndex < animationList.size(); ++animIndex)
|
||||
for (auto animIndex = 0; animIndex < animationList.size(); ++animIndex)
|
||||
{
|
||||
AOSet::AOAnimation animation;
|
||||
animation.mName = animationList[animIndex];
|
||||
|
|
@ -2182,46 +2180,46 @@ void AOEngine::processImport(bool from_timer)
|
|||
{
|
||||
bool success = addSet(mImportSet->getName(), [this, from_timer](const LLUUID& new_cat_id)
|
||||
{
|
||||
mImportCategory = new_cat_id;
|
||||
mImportSet->setInventoryUUID(mImportCategory);
|
||||
mImportCategory = new_cat_id;
|
||||
mImportSet->setInventoryUUID(mImportCategory);
|
||||
|
||||
bool allComplete = true;
|
||||
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
|
||||
bool allComplete = true;
|
||||
for (S32 index = 0; index < AOSet::AOSTATES_MAX; ++index)
|
||||
{
|
||||
AOSet::AOState* state = mImportSet->getState(index);
|
||||
if (!state->mAnimations.empty())
|
||||
{
|
||||
AOSet::AOState* state = mImportSet->getState(index);
|
||||
if (state->mAnimations.size())
|
||||
{
|
||||
allComplete = false;
|
||||
LL_DEBUGS("AOEngine") << "state " << state->mName << " still has animations to link." << LL_ENDL;
|
||||
allComplete = false;
|
||||
LL_DEBUGS("AOEngine") << "state " << state->mName << " still has animations to link." << LL_ENDL;
|
||||
|
||||
for (S32 animationIndex = state->mAnimations.size() - 1; animationIndex >= 0; --animationIndex)
|
||||
for (auto animationIndex = state->mAnimations.size() - 1; animationIndex >= 0; --animationIndex)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "linking animation " << state->mAnimations[animationIndex].mName << LL_ENDL;
|
||||
if (createAnimationLink(mImportSet, state, gInventory.getItem(state->mAnimations[animationIndex].mInventoryUUID)))
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "linking animation " << state->mAnimations[animationIndex].mName << LL_ENDL;
|
||||
if (createAnimationLink(mImportSet, state, gInventory.getItem(state->mAnimations[animationIndex].mInventoryUUID)))
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "link success, size " << state->mAnimations.size() << ", removing animation "
|
||||
<< (*(state->mAnimations.begin() + animationIndex)).mName << " from import state" << LL_ENDL;
|
||||
state->mAnimations.erase(state->mAnimations.begin() + animationIndex);
|
||||
LL_DEBUGS("AOEngine") << "deleted, size now: " << state->mAnimations.size() << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = state->mAnimations[animationIndex].mName;
|
||||
LLNotificationsUtil::add("AOImportLinkFailed", args);
|
||||
}
|
||||
LL_DEBUGS("AOEngine") << "link success, size " << state->mAnimations.size() << ", removing animation "
|
||||
<< (*(state->mAnimations.begin() + animationIndex)).mName << " from import state" << LL_ENDL;
|
||||
state->mAnimations.erase(state->mAnimations.begin() + animationIndex);
|
||||
LL_DEBUGS("AOEngine") << "deleted, size now: " << state->mAnimations.size() << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLSD args;
|
||||
args["NAME"] = state->mAnimations[animationIndex].mName;
|
||||
LLNotificationsUtil::add("AOImportLinkFailed", args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (allComplete)
|
||||
{
|
||||
mTimerCollection.enableImportTimer(false);
|
||||
mOldImportSets.push_back(mImportSet); //<ND/> FIRE-3801; Cannot delete here, or LLInstanceTracker gets upset. Just remember and delete mOldImportSets once we can.
|
||||
mImportSet = nullptr;
|
||||
mImportCategory.setNull();
|
||||
reload(from_timer);
|
||||
}
|
||||
if (allComplete)
|
||||
{
|
||||
mTimerCollection.enableImportTimer(false);
|
||||
mOldImportSets.push_back(mImportSet); //<ND/> FIRE-3801; Cannot delete here, or LLInstanceTracker gets upset. Just remember and delete mOldImportSets once we can.
|
||||
mImportSet = nullptr;
|
||||
mImportCategory.setNull();
|
||||
reload(from_timer);
|
||||
}
|
||||
}, false);
|
||||
|
||||
if (!success)
|
||||
|
|
@ -2293,8 +2291,7 @@ void AOEngine::onRegionChange()
|
|||
}
|
||||
|
||||
// do nothing if no AO animation is playing (e.g. smart sit cancel)
|
||||
LLUUID animation = state->mCurrentAnimationID;
|
||||
if (animation.isNull())
|
||||
if (LLUUID animation = state->mCurrentAnimationID; animation.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ AOSet::AOSet(const LLUUID inventoryID)
|
|||
mStates[index].mRandom = false;
|
||||
mStates[index].mCycleTime = 0.0f;
|
||||
mStates[index].mDirty = false;
|
||||
mStateNames.push_back(stateNameList[0]);
|
||||
mStateNames.emplace_back(stateNameList[0]);
|
||||
}
|
||||
stopTimer();
|
||||
}
|
||||
|
|
@ -137,7 +137,7 @@ AOSet::AOState* AOSet::getStateByName(const std::string& name)
|
|||
for (S32 index = 0; index < AOSTATES_MAX; ++index)
|
||||
{
|
||||
AOState* state = &mStates[index];
|
||||
for (U32 names = 0; names < state->mAlternateNames.size(); ++names)
|
||||
for (auto names = 0; names < state->mAlternateNames.size(); ++names)
|
||||
{
|
||||
if (state->mAlternateNames[names].compare(name) == 0)
|
||||
{
|
||||
|
|
@ -170,7 +170,7 @@ const LLUUID& AOSet::getAnimationForState(AOState* state) const
|
|||
{
|
||||
if (state)
|
||||
{
|
||||
S32 numOfAnimations = state->mAnimations.size();
|
||||
auto numOfAnimations = state->mAnimations.size();
|
||||
if (numOfAnimations)
|
||||
{
|
||||
if (state->mCycle)
|
||||
|
|
|
|||
|
|
@ -3654,6 +3654,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
|
|||
msg->setHandlerFunc("InitiateDownload", process_initiate_download);
|
||||
msg->setHandlerFunc("LandStatReply", LLFloaterTopObjects::handle_land_reply);
|
||||
msg->setHandlerFunc("GenericMessage", process_generic_message);
|
||||
msg->setHandlerFunc("GenericStreamingMessage", process_generic_streaming_message);
|
||||
msg->setHandlerFunc("LargeGenericMessage", process_large_generic_message);
|
||||
|
||||
msg->setHandlerFuncFast(_PREHASH_FeatureDisabled, process_feature_disabled_message);
|
||||
|
|
|
|||
|
|
@ -92,6 +92,11 @@ void process_generic_message(LLMessageSystem* msg, void**)
|
|||
}
|
||||
}
|
||||
|
||||
void process_generic_streaming_message(LLMessageSystem* msg, void**)
|
||||
{
|
||||
// placeholder to suppress packet loss reports and log spam (SL-20473)
|
||||
}
|
||||
|
||||
void process_large_generic_message(LLMessageSystem* msg, void**)
|
||||
{
|
||||
LLUUID agent_id;
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ void send_generic_message(const std::string& method,
|
|||
const LLUUID& invoice = LLUUID::null);
|
||||
|
||||
void process_generic_message(LLMessageSystem* msg, void**);
|
||||
void process_generic_streaming_message(LLMessageSystem* msg, void**);
|
||||
void process_large_generic_message(LLMessageSystem* msg, void**);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -81,6 +81,63 @@
|
|||
function="Floater.Toggle"
|
||||
parameter="fs_protectedfolders" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Inventory settings..."
|
||||
name="inv_settings">
|
||||
<menu_item_check.on_check
|
||||
function="Floater.Visible"
|
||||
parameter="inventory_settings" />
|
||||
<menu_item_check.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="inventory_settings" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator>
|
||||
<menu_item_separator.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_separator>
|
||||
<menu_item_check
|
||||
label="List view"
|
||||
layout="topleft"
|
||||
name="list_view">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="list_view" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="list_view" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Gallery view"
|
||||
layout="topleft"
|
||||
name="gallery_view">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="gallery_view" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="gallery_view" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Combination view"
|
||||
layout="topleft"
|
||||
name="combination_view">
|
||||
<on_click
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="combination_view" />
|
||||
<on_check
|
||||
function="Inventory.GearDefault.Check"
|
||||
parameter="combination_view" />
|
||||
<on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
parameter="single_folder_view" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator />
|
||||
<menu_item_check
|
||||
label="Add objects on double click"
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@
|
|||
<panel.string name="ItemcountUnknown">
|
||||
Pobrano [ITEM_COUNT] elementów [FILTER]
|
||||
</panel.string>
|
||||
<panel.string name="inventory_title">
|
||||
Szafa
|
||||
</panel.string>
|
||||
<menu_bar name="inventory_menu_bar">
|
||||
<menu label="Szafa" name="inventory_inventory_menu">
|
||||
<menu_item_call name="inventory_open" label="Otwórz" />
|
||||
|
|
@ -16,6 +19,7 @@
|
|||
<menu_item_call name="replace_links" label="Zastąp linki" />
|
||||
<menu_item_call name="inventory_new_window" label="Nowe okno" />
|
||||
<menu_item_check name="Protected Folders" label="Foldery chronione" />
|
||||
<menu_item_check label="Ustawienia..." name="inv_settings" />
|
||||
<menu_item_check name="add_inv_toggle" label="Dodawaj obiekty po dwukliku" />
|
||||
<menu_item_check name="add_invclothing_toggle" label="Dodawaj ubrania po dwukliku" />
|
||||
<menu_item_call name="inventory_show_filters" label="Pokaż filtry" />
|
||||
|
|
@ -62,6 +66,9 @@
|
|||
<menu_item_check name="inventory_sort_system_on_top" label="Foldery systemowe na górze" />
|
||||
</menu>
|
||||
<menu label="Szukanie" name="inventory_search_menu">
|
||||
<menu_item_check label="W strojach" name="search_outfits" />
|
||||
<menu_item_check label="W koszu" name="search_trash" />
|
||||
<menu_item_check label="W Bibliotece" name="search_library" />
|
||||
<menu_item_check name="inventory_search_by_name" label="Po nazwie" />
|
||||
<menu_item_check name="inventory_search_by_creator" label="Po twórcy" />
|
||||
<menu_item_check name="inventory_search_by_description" label="Po opisie" />
|
||||
|
|
@ -77,7 +84,17 @@
|
|||
<menu_item_check name="inventory_show_partial_results" label="Pokaż częściowe wyniki wyszukiwania" />
|
||||
</menu>
|
||||
</menu_bar>
|
||||
<filter_editor label="Filtruj Szafę" name="inventory search editor" tool_tip="Wpisz jedno lub więcej słów które chcesz wyszukać, oddzielonych za pomocą '+' "/>
|
||||
<layout_stack name="nav_stack">
|
||||
<layout_panel name="nav_buttons">
|
||||
<button name="back_btn" tool_tip="Wstecz" />
|
||||
<button name="forward_btn" tool_tip="Naprzód" />
|
||||
<button name="up_btn" tool_tip="Przejdź o jeden poziom wyżej" />
|
||||
</layout_panel>
|
||||
<layout_panel name="filter_panel">
|
||||
<filter_editor label="Filtruj Szafę" name="inventory search editor" tool_tip="Wpisz jedno lub więcej słów które chcesz wyszukać, oddzielonych za pomocą '+' "/>
|
||||
<button name="view_mode_btn" tool_tip="Przełącz między widokami" />
|
||||
</layout_panel>
|
||||
</layout_stack>
|
||||
<button name="collapse_btn" label="Zwiń"/>
|
||||
<button name="expand_btn" label="Rozwiń" />
|
||||
<text name="filter_label" value="Filtruj:"/>
|
||||
|
|
@ -98,12 +115,14 @@
|
|||
<combo_box.item value="filter_type_settings" label="Otoczenia" />
|
||||
<combo_box.item value="filter_type_custom" label="Własny filtr..." />
|
||||
</combo_box>
|
||||
<menu_button tool_tip="Pokaż opcje widoczności wyszukiwania" name="options_visibility_btn" />
|
||||
<tab_container name="inventory filter tabs">
|
||||
<inventory_panel label="Wszystkie" name="All Items"/>
|
||||
<recent_inventory_panel label="Ostatnie" name="Recent Items"/>
|
||||
<worn_inventory_panel label="Założone" name="Worn Items"/>
|
||||
</tab_container>
|
||||
<!-- <menu_button tool_tip="Pokaż opcje widoczności wyszukiwania" name="options_visibility_btn" /> -->
|
||||
<panel name="default_inventory_panel">
|
||||
<tab_container name="inventory filter tabs">
|
||||
<inventory_panel label="Wszystkie" name="All Items"/>
|
||||
<recent_inventory_panel label="Ostatnie" name="Recent Items"/>
|
||||
<worn_inventory_panel label="Założone" name="Worn Items"/>
|
||||
</tab_container>
|
||||
</panel>
|
||||
<text name="ItemcountText" tool_tip="[ITEMS] przedmiotów, [CATEGORIES] folderów">
|
||||
Elementy
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -1972,12 +1972,10 @@ class LinuxManifest(ViewerManifest):
|
|||
# CEF files
|
||||
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="lib"):
|
||||
self.path( "libcef.so" )
|
||||
self.path( "libEGL.so" )
|
||||
self.path( "libGLESv2.so" )
|
||||
self.path( "libvk_swiftshader.so" )
|
||||
self.path_optional( "libminigbm.so" )
|
||||
|
||||
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release', 'swiftshader'), dst=os.path.join("bin", "swiftshader") ):
|
||||
self.path( "*.so" )
|
||||
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release', 'swiftshader'), dst=os.path.join("lib", "swiftshader") ):
|
||||
self.path( "*.so" )
|
||||
|
||||
with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="bin"):
|
||||
self.path( "chrome-sandbox" )
|
||||
|
|
@ -1999,7 +1997,7 @@ class LinuxManifest(ViewerManifest):
|
|||
self.path( "resources.pak" )
|
||||
self.path( "icudtl.dat" )
|
||||
|
||||
with self.prefix(src=os.path.join(pkgdir, 'resources', 'locales'), dst=os.path.join('bin', 'locales')):
|
||||
with self.prefix(src=os.path.join(pkgdir, 'resources', 'locales'), dst=os.path.join('lib', 'locales')):
|
||||
self.path("am.pak")
|
||||
self.path("ar.pak")
|
||||
self.path("bg.pak")
|
||||
|
|
|
|||
|
|
@ -5807,6 +5807,25 @@ version 2.0
|
|||
}
|
||||
}
|
||||
|
||||
// GenericStreamingMessage
|
||||
// Optimized generic message for streaming arbitrary data to viewer
|
||||
// Avoid payloads over 7KB (8KB ceiling)
|
||||
// Method -- magic number indicating method to use to decode payload:
|
||||
// 0x4175 - GLTF material override data
|
||||
// Payload -- data to be decoded
|
||||
{
|
||||
GenericStreamingMessage High 31 Trusted Unencoded
|
||||
{
|
||||
MethodData Single
|
||||
{ Method U16 }
|
||||
}
|
||||
|
||||
{
|
||||
DataBlock Single
|
||||
{ Data Variable 2 }
|
||||
}
|
||||
}
|
||||
|
||||
// LargeGenericMessage
|
||||
// Similar to the above messages, but can handle larger payloads and serialized
|
||||
// LLSD. Uses HTTP transport
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
e61fad776b4d494be0b901922fc75a3317af97ca
|
||||
9eb8c673c2f6b4e271d50f07823757f98f406f0a
|
||||
Loading…
Reference in New Issue