If the world is in focus and build button is pressed without the build floater open, don't bother focusing.
If a floater is in focus and build button is pressed without the build floater open, focus the build floater
If the build floater is in the background and the button is pressed, focus the build floater.
If the build floater is in focus and the button is pressed, close the build floater.
If the build floater is not in focus but nothing else is, close the build floater.
Redefaulted LiruLegacyDisplayMuteds to false due to (at least) two alpha testers noticing it and wanting it back how it is in the current release (since 1.7.0).
True was to get back to the old ways of v1, but it's okay to be false by default, better now since it's exposed.
Also irrelevant tiny voice cleanup from Spatters.
This was a crash in LLPanelDirClassified::postBuild(), on the line changed here, probably accessng null pointer.
There are probably a few other signatures for this in our database.
Inspired by the work of Kitty Barnett
Fixes Issue 1337: Corrupted Inventory
Fixes Issue 1625: Unattainable inventory is Outside of My Inventoy and no options to move back to My Inventory
Fixes Issue 1580: Deleted folders showing outside of inventory folder.
Moves Media Filter in all translations, no need for translators to worry~
Nomade, please translate the Singularity menu at your discretion.. in menu_viewer.xml
Such that floater's named according to their filename will now close if they were frontmost
making their menu entries and buttons, toggly.
This effects the behavior of the toolbar preferences floater, the Favorites floater, and the My Outfits floater.
(and any such simple extensions made by forks and those that will come in the future)
Adds const Type mDefaultValue reset() and getDefault() to SignaledType
Cleans up code by not needing to reset to the default by value every time, nice template function to do this~
Leaves in hg boolean, but commented out in case opensim ever decides to make that a reality.
Default Avatars button option added to Toolbar prefs.
Adds debug setting ToolbarVisibleAvatar
Hooks into "avatar_picker_url" login response on opensim.
Also includes hooking up of DestinationGuideShown to startup, which was left unstaged from the initial commit of the Destination Guide.
Adds llfloaterdestinations.* and floater_destinations.xml (needs translations, but not really)
Adds GenericErrorPageURL, DestinationGuideURL (not persistent), DestinationGuideShown, and DestinationGuideRect to debug settings
Removes ShowcaseURLDefault in favor of DestinationGuideURL from upstream.
Also Adds ToolbarVisibleDestinations for the toolbar button, but I'll need to set up a nice way to make the button invisible when the url is empty before adding it to the gui... maybe.. or maybe it's just not important.
This commit comes with support for dynamically changing destination guide page based on opensimextras simulator features cap
Expands SignaledType's callback to accept const Type& as argument.
typedefs Signal::slot_type to slot_t so that SignaledType can be altered without needing to update all lines setting slots.
Merges floater_directory.xml with floater_directory(2|3).xml
Condenses translations down to one xml(, finally the nightmare is over).
Better ui code support for classic find all panel
Not like anyone cares, but ShowcaseURLDefault no longer persists value changes between sessions.
Moves SearchType and getSearchUrl(SearchType ty, bool is_web) from HippoGridInfo into a namespace in llpaneldirfind.cpp, the only place where it is used; so that it may wrap the sim feature lookup.
Thanks to Shyotl for the help in dynamically maintaining tab positions for dynamic tabs.
This should fix the inverted mouselook when sitting problem
Think the bug was in llvoavatar, but keeping in sync is always good for the future overall.
Note: It appears that mLabel is never set by combo boxes, this should eventually be fixed.
Checking !getFirstSelected() is sufficient to test if we're in the list, however.
This adds mStatus, mReason and mContent to ResponderBase
and fills those in instead of passing it to member functions.
The added danger here is that now code can accidently try
to access these variables while they didn't already get a
correct value.
Affected members of ResponderBase (that now have less arguments):
decode_llsd_body, decode_raw_body, completedHeaders,
completed -> httpCompleted, result -> httpSuccess,
errorWithContent and error -> httpFailure.
New API:
ResponderBase::setResult
ResponderBase::getStatus()
ResponderBase::getReason()
ResponderBase::getContent()
ResponderBase::getResponseHeaders() (returns AIHTTPReceivedHeaders though, not LLSD)
ResponderBase::dumpResponse()
ResponderWithCompleted::completeResult
ResponderWithResult::failureResult (previously pubErrorWithContent)
ResponderWithResult::successResult (previously pubResult)
Not implemented:
getHTTPMethod() - use getName() instead which returns the class name of the responder.
completedHeaders() is still called as usual, although you can ignore
it (not implement in a derived responder) and call getResponseHeaders()
instead, provided you implement needsHeaders() and have it return true.
However, classes derived from ResponderHeadersOnly do not have
completedHeaders(), so they still must implement completedHeaders(),
and then call getResponseHeaders() or just access mReceivedHeaders
directly, as usual.
g_thread_init is automatically called since 2.32 (and deprecated since 2.35).
g_type_init is automatically called since 2.36 and will be deprecated in the
future.
Includes:
MAINT-3541 (crash in std::vector >::reserve)
MAINT-3364 FIXED Call clearSelection() from root_folder
MAINT-3621 FIXED Set name to "Unnamed" if object's name consists of whitespaces.
MAINT-3412 add gpu_table line with distinct Intel Iris Pro OpenGL regex to match new MBP with forced Intel graphics
MAINT-3119 FIXED Return common chars for triggers that matches the prefix.
MAINT-3661 Fix for crash when uploading corrupt .dae file.
MAINT-3671 FIXED Rename title when new tab is added.
MAINT-3465 FIXED Add check mark to selected entry.
BUG-5537 FIX reverting breaking changes to pectorals and belly.
MAINT-535 FIXED The teleport SLAPP is changed to UNTRUSTED_THROTTLE. Confirmation dialog for teleporting via slapp is added.
The button portion does nothing if there is an unknown or no controller connected, otherwise it sets defaults for the controller's identified type.
Joystick buttons are still configured based on identification, however.
DS3 users will likely find that using Motion in Joy switchboards is much more effective, however.
Also cleans up old logic and directs the friends list to update when the user changes the namesystem for it specifically.
Thanks to um... I think it was Deltek, who discovered this bug.
Thankies Baker Linden~
Ported Ansariel's mAvatarNameCacheConnection change to mAvatarNameCacheConnections to llpanelgroupbulkimpl.h
Adds setGroupID in places, in case we ever want to add that.. but for now we don't really need/use it
Adds Refresh_Off icon from upstream.
Viewer Interesting changes:
Moves LLGroupChange out of stdenums.h into llgroupmgr.h
Moves roles_constants.h from llcommon into newview
This looks like it's better without space changes...
Increased from 40 to 8192, so it works across sims and all the way up.
Also made the value editable, and the slider is now as wide as the list which looks nice.
Tilt up to go up/jump, tilt down to go down/crouch (flying works nicely this way)
Turn left to roll left, turn right to roll right, while in flycam only.
Controls are mapped to the same buttons as with xbox controller.
Bonus buttons:
PS3 Logo button: Toggle Sit!
L2 and R2... no idea what to make these, I'll come up with something
The issue wasn't the resolution box, and it apparently has its uses.
This reverts commit ac106b0aff.
Conflicts:
indra/newview/skins/default/xui/en-us/panel_preferences_graphics1.xml
Adds separated default permissions for Objects, Uploads, Scripts, Notecards, Gestures and Wearables.
Compatible with Export Permission
Backwards compatible with default permissions for objects on regions where AgentPreferences capability is not available (opensim users rejoice!)
These changes to llfloaterperms are made available under lgpl, if there's a v3 that wants to adopt default export permission for opensim.
Bumping into the edge of a region without
a neighboring simulator would spam has left
and has entered the sim. This will now check
if the position is a valid global, if position not valid
then it will assume you're still in the same simulator.
Little trash button next to the username box added, as its tooltip explains, if you have a valid entry selected and you click it, that entry will be removed.
My test avatar was a fake entry by the name Garbage Tax
Just thought I'd give that to the googles... enjoy~
Better for reallllly wide screens and multiscreen setups, apparently.
Also, let's merge with v-r while we're at it, since llcamera.h requires a large-ish recompile
Nothing functional though.
And some license updates to some identical files in llmath.
This can be switched off with LiruLegacyDisplayMuteds in debug settings.
People have been annoyed that muted avatars disappear, and since we have the derender system anyway..
Also Sync llvoavatar.cpp with v-r a bit
(okay, fine, alot)
Just add --portable to the shortcut
or use the provided shortcut as a template,
though it's likely the provided shortcut will not work on other computers, because the drive letter will change
Should contain no functional changes, ust that all ui in appearance mode is now cached instead of calling getChild per frame.
Switches from hiding min/max param text every frame to force-drawing in draw call and setting invisible (llscrollingpanelparam.cpp/the corresponding xml)
Cleans up some old commented out code.
Moves some simple, one-call functions into their calling bodies.
Also, for some reason I had to adjust the alpha checkboxes, totally confused why they were out of line... maybe they had been already? I don't see a changed line that did positioning.
Contains spaces to tabs fixes, please view without space changes (You have been warned!)
e4a6e0d257c1 - fixed : @recvim=n isn't actually blocking the incoming message
35869fc884e9 - internal : minor refactoring of the process of updating the navigation and top info bars when toggling @showloc
9688630000ad - changed : show a limited context menu in the nearby people panel when @shownames restricted
-> "Offer/Request Teleport" (filtered)
$ Singu Change: Adds Recording of teleport offers to chat (if sending less than 10), one day I'll get around to doing this right into IMs
Noticed RLV.EnableIfNot was not being used, so I plugged it in for windlight.
Future Note: This brings us up to 417d759f0fa9 on the RLVa tree.
Thanks a lot to Niran for assistance in this. Tooltips are from Black Dragon's machinima panel.
Note: Moves Depth of Field checkbox into the new Depth of Field tab.
Moves to calling refreshEnabledState directly from LLPanelDisplay instead of bouncing around in LLFloaterPreferences first or using static proxy functions
Cleans up unused cached button pointers and old style static callbacks.
Moves to visibility_control and enabled_control instead of using callbacks, this lightens the load on opening preferences, and makes them responsive even to debug settings changes
Removes the moving m for meter text with draw distance, I don't think anyone cares if it's a little to the side of the number.
Adjustment of tabs to spaces in xml.
Return early when disabling unavailable settings if shaders are unavailable.
Cuts back on single-call functions in favor of direct binds.
This seems more widely used, and roll does nothing in Avatar movement so this is more useful
If people want it the other way, they can just switch it themselves.
Implements lines from avatar to their lookat beacons
Implements namesystem so that Display Names can also be shown with beacons instead of just legacy
New options are available in the Security & Privacy tab of System preferences
Allows Ctrl-A to select all in a list (Like for selecting all groups and unticking chat with a single click)
Ctrl-E to deselect
Ctrl-X/Ctrl-C to copy a list (useful for saving ban lists and such!)
Preferences->Adv. Chat->Chat UI, Autoscroll to the end of chats when they regain focus.
This defaults to false, unlike the legacy behavior.
Partial revert of "Feature Removal!: Do not scroll to the end of chats when the corresponding chatbar regains focus!"
Falls back if first landmark is not in inventory or invalid, region is offline, or the current region is your location
Item drop target is right below the original one in System->Security prefs.
Thanks again to the citizens of Fluffy for enduring these restart tests.
-Changed the transform matrix uniform to a 3x4 matrix and packed translation into it to free up uniforms. (3x3 is converted to 3x4 internally, so we were needlessly eating 3*52 extra uniform slots. translationPalette might also have been treated as a vec4 internally too, wasting 52 more slots.)
-matrix3x4 requires opengl2.1 and newer, so added a new featuretable mask.
-Also added a featuretable mask to disable hardware skinning and deferred shading on hardware with less than 1024 vertex uniforms.
NOTE: On old old old amd hardware, evidently a 3x4 matrix might be upgraded to 4x4. I'm unsure, but I doubt such hardware has 1024+ uniform components available to begin with. 4x3 supposedly doesn't do this, but opengl is column-major, so this makes little sense.
Dear Alpha Users who are curious about this:
A = Alt
B = Shift
X = Ctrl
Y = Escape
Back = Toggle Flycam mode (Use this, it's fun!!!)
Start = Toggle Cursor mode
Right Stick Click = Toggle Mouselook
Left Stick Click = Jump/Fly
Enjoy, I know I do!
Can't seem to get scrollies working in cursor mode, odd.. need to look into that.
I need to figure out if inverted Y axis is just for me on my Dual Shock 3, though it seems to work usually... if this is the case I might flip it in the code.
More work needs to be done to get ctrl/alt/shift support from CAS, too.
I just wanted to get today's work out of the way and wrapped up, so here it is.
Gets rid of all those pointless callbacks and static workarounds for legacy callback system.
Should massively improve FPS while build floater is open
Fixes getChild UI Warnings
Removes dumb func
Also attempt to add a local enablement control, it's not quite clear where these are supposed to hook in, so it's unused for now, but it would have replaced onCommitEnableVoiceCheck.
Also fix the location of the voice is disabled textytext, it was too on top of the next checkbox.
This tag will be used for refactor and updating of most of our preferences panels:
This will include code changes that remove or condense old code
This will include preferences being moved around to more logical locations
This may include splitting up and/or condensing of tabs and/or subtabs for more logical placement of preferences
This may include code changes that allow making changes to preferences faster and easier
This will not include adding preferences
Previous work on enabling the build on the latest Mac OS and
Xcode compiler mistakenly took out compiler warning flags.
This restores previously used flags.
Issue noticed by Sovereign Engineer.
Benefits:
-Support for exporting Materials (Normal and Specular textures)
-Fixed support for Object Physics export
-Fixed support for Light Image export
-Switch to use of Boost unordered containers
-Checking for invalid perms on textures is now optimized by saving invalid ids to a container
-GravityMultiplier parameter is now Gravity because that just makes way more sense.
-We support export of legacy flag parameters again to be compatible with older viewers
-Code comments are now a little clearer
-We now wait a little if objects haven't loaded yet when we try to export them
-We no longer allow changing default texture ids via debug settings on opensim regions that support the export permission
-Bit of reordering to better diff with Cool VL Viewer, since it's essentially our only upstream.
-Removes dead code/commented codestuffs
Please view the diff without space changes, otherwise you'll lose your mind.
Merci Henri!
Oddly, this only happened to some people, but on any OS, which leads me to believe that initialization order may need some looking at, but that's not terribly important now.
Removes toolbar toggle from floater dictionary, in favor of using setting toggle
Since we could always just hook up a control to a button if we wanted to add such a button somewhere anyhow, this has no effect on future either.
Adds a circle when you mouse over the minimap, beneath your cursor
-This circle is the effect range of your right click+mark
-Shift+scroll to change the size of this circle (ExodusMinimapAreaEffect)
-- Set the debug to 1 to have basically the same range as before (unless dots are stacked)
-This circle is also how many avatars are shown in the tooltip
-When this circle is over avatar dots, they change color (ExodusMapRolloverColor)
The menu functions still only work on the closest dot to your cursor on right click...
Thanks to Exodus for the majority of this code, the rest is my work and updates to be closer to LL in places.
Look in System preferences under the Security tab, at the bottom.
Debug setting is EmergencyTeleportLandmark, reset to turn off.
Also, thanks to everyone in Fluffy who put up with the tests of region restart notifications today,
I know it was annoying, thanks especially to the EMs for allowing me a testbed.
LLHTTPClient::getByteRange no longer throws AICurlNoEasyHandle, instead it returns whether or not it threw, to match the true/false convention of LLCurl.
- In addition, the header param has been shifted to earlier in this function to ease diffings.
ResponderBase now has static bool isGoodStatus, introduced into the Responder base class of LLCurl
Brings a new "voice status" column, showing voice use as active speakers floater does.
- Shown by default, look in Extras tab to hide it
Attempt to blend and fix the visibility of the yellow for shout range.
- Requires user feedback, looks good on default and gemini to me
Refactors pretty much all of the code in the avatar list
-Less duplicate vars, less wasted space, more consistent spacing conventions, eradication of BOOL use.
We no longer add (or even evaluate what should be in) icon columns that are hidden
- This prevents icons from showing up even when their columns are hidden.
Minor work on focusing out of draw avatars, though that still won't work, sadly.
Support exporting "material" "clickaction" "flags" and "ExtraPhysics"
Support export of Light Texture feature, the expansion to Light feature.
Initial work to support firestorm's format.
Switched from exporting individual flags fields in favor of exporting one U32 field
- We still support the old single flag fields though we no longer export them.
On the removal of permYouOwner():
Calling permYouOwner() to determine if an attachment is yours is
not correct: grid gods (and that includes BEFORE requesting admin
status) are marked as owner of everything in their sim.
The reason for that is that otherwise,
<Melanie_T> if they only had it when actually godding u, the viewer
would have to have an option to either show the proper menus (it
doesn't) or allow the sim to refresh the object flags without full
object updates (it hasn't).
<Melanie_T> gods often have to act fast, for instance with griefers.
Having transition to god mode take as long as a full rez just isn't an
option, apart from the sim load caused by resending all objects.
<Melanie_T> Then i tried resending only the object that was selected
but there the arriving object update would close the pie menu.
So you right-click a prim and the pie menu would close again.
The result has always been that if you are on your own sim, in opensim,
and select an attachment on another avatar, then YOU would freeze, not
the selected avatar. This patch fixes that "opensim related" bug as
well.
A tool to synchronize objects:
Objects derived from AISyncClient can signal that they are
'ready' or 'not ready' for up to 32 events (using a bitmask)
at a time. Clients that are created at roughly the same time
as other clients, and which return the same 'key' (a virtual
function returning an AISyncKey object) will be grouped together
and receive events (by means of virtual functions being called)
to notify them of all clients being ready or not for one of the
events (the least significant bit)). The other events can be polled.
This new version does away with all the templates and explicitly
remembers what events each client is ready for instead of just
updating a counter of the number of clients. This was necessary
because a client is removed then the server needs to know if it
was ready or not when it has to be able to update those counters.
This time I chose to just run over all stored clients and AND
and OR the per-client-ready-masks because 1) that information
is available now and 2) the lists will normally contain only
one or two clients, so it's fast enough.
The new version also allows for real key comparison (and derived
keys) instead of just using "hash" value that is compared.
This is needed for synchronization: motions will have to start
(with a specific start time offset) from a point in the code where
only the motion object is available.
I added/used LLMotionController& in a previous commit, this was
now changed into a pointer. There is (obviously) not much reason
for that, but also no disadvantage: the diff relative to LLs code
doesn't get larger since the references where already added, too.
Conflicts:
indra/llcharacter/llkeyframemotion.cpp
indra/llcharacter/llkeyframemotion.h
A tool to synchronize objects:
Objects derived from AISyncClient can signal that they are
'ready' or 'not ready' for up to 4 events (using a bitmask)
at a time. Clients that signal to be ready for anything
at roughly the same time as other clients, and which return
the same 'hash' (a virtual function returning a 64bit value)
will be grouped together and receive events (by means of
virtual functions being called) to notify them of all clients
being ready or not for one of the events (syncevent1).
The other three events can be polled.
The memory usage is low (one pointer per client that points
to its AISyncServer object), servers are released to a cache
after about 100 ms (unless there is actual need for synchronization),
so there aren't much of those either.
The CPU usage is extremely low: all events are handled in
parallel in a 32 bit value (6 bits per event to count the
number of registered clients and the number of ready clients
for each event, and the remaining 8 bits to count the
number of reference pointers (which should only be a constant
higher, so that is overkill). To signal to a server that
a client has become ready or not is mostly a function call,
which then takes 1 clock cycle or so before returning.
Registration of a client is slightly more expensive as it
requires a pointer to be added to the end of a std::list.
This tool could easily be used as part of the graphics engine
(not that I intend to do that :p).
There was a bug that when people turned off sending viewer effects,
they'd also turn off sending LookAt, while there is a seperate
checkbox to turn THAT off, while still seeing their own avatar
happily look around, breaking shared experience (most notably, most
people will be complete oblivious of the fact that they look like
zombies to others and that their friends do not see the same thing
on their screen).
This patch fixes this: both parties now see the same thing. Lookat
and PointAt are only turned off by their respective checkboxes,
and no longer silently influenced by turning off other viewer
effects.
For these standard motions, the viewer likes to very frequently
flood-call startMotion/stopMotion sometimes, which at the very
least needs a LLUUID lookup in a std::map. In particular, this
is done for two of them for every avatar in the sim every frame.
This code makes it possible to test if that makes sense by
merely doing a bit test.
Conflicts:
indra/llcharacter/llkeyframemotion.h
These changes were the result of my Motion leak audit.
However, there is a serious problem with LLKeyframeMotionParam
in that it stores plain pointers to objects that can and will be deleted
by other objects. Its the classicial LL example of coding
non-Object-Oriented badly maintainable and instable code.
I cannot make sure this won't go wrong for the simple fact
that LLKeyframeMotionParam is not used at ALL in our code.
Hence, the next commit will rather delete this file.
This commit is merely to have a record of this finding.
Fixed issue with fullbright and glow occlusion.
RenderTransparentWater toggling should work more gracefully.
Fixed some bugs in general drawpool classification for faces. Bump pool was superceding more than it should have.
Adds name list specific name settings, Removes boolean for having lists of speakers with legacy names in favor of having a more flexible setting for them
Have a look at the combo boxes on Adv. Chat->Chat UI to customize these new settings.
There is now a fourth option for name display: LegaCy Name (D is play Name)
1ea7389, 49be412, ed4c8e6 & 7ce9521
- changed : "Give to #RLV" agent-to-agent and script-to-agent offers can contain subfolders
-> limited to 3 levels (e.g. #RLV/~FolderA/FolderB/FolderC)
-> #RLV folder is auto-created if it doesn't currently exist
8780d84 - Incremented version number to RLVa-1.4.10
f078067 - internal : boolean (custom) debug settings should have a boolean type
72a8ad8 & 401ca14 - internal : added supporting code for "Detach Folder" RLVa lock checks
05718b5
- fixed : RenderResolutionDivisor is non-functional
-> RenderResolutionDivisor isn't actually taken into account when checking the new screen resolution against the current screen buffer size
4fa138b
- fixed : viewer clips mouse to its rectangle when switching into mouselook while it's not the active application
-> Repro:
* rez a prim with a script to llForceMouseLook(TRUE) and force-sit when clicked (with a slight delay)
* click the prim and give focus to another application
=> the viewer will center the mouse cursor on itself and restrict movement to within its own rectangle (requires alt-tab to escape)
+ Singu Note: Thanks to Kitty for this, it is possible that this would happen in our last release
14132c9
- fixed : region name and global coordinates are shown on the About floater when @showloc restricted
+ Singu Note: RLV version is now shown in help->about
9a2af62 - changed : llRegionSayTo messages are no longer subject to @recvchat(from) or @recvemote(from)
2dc4b89
- fixed : @getstatus and @getstatusall should specify an (optional) separator
-> added support for both @getstatus:tp;|=123 and @getstatus:;|=123
fbb3fb1 - Incremented API version number to 2.8.0
92c39b9 - internal : quick and dirty hack fix for RlvUtil::filterNames() but there's no time to do a proper backport from RLVa-1.5
2580f1c - internal : remove hack for legacy viewers without multi-attachment support
- Removes shortcut ctrl-a for align tool
-- to avoid ctrl-a for select all text in UI controls messing up prim selection
- Adds llselectmgr select all function
-- to replace ctrl-a select all prims functionality that was a side effect of qtoolalign having this shortcut
- Adds toggle button (up/down arrow) to build floater for toggling display of the lower tab container area
-- This is to satisfy users who relied on ctrl-a to use align while the build floater was minimized and out of the way
- Syncs qtoolalign from Alchemy
-Drive pass selection by face pools. Doing such removes a fair bit of redundant (and often buggy) code.
-Ignore irrelivant batch breakers depending on pass/pool type.
-Face sorting algorithm modified to potentially allow larger batches.
-Removed a few unused/broken things (bake_sunlight/no_materials)
-Fullbright handling should hopefully be a little more consistent.
-Prevent fullbright faces from being placed in 'simple' pool. (They are already simple-er)
Fixed attribute error that popped up with bump faces when batching was disabled.
Much of this patch comes from upstream and Kitty Barnett, or is inspired from their works
This commit applies the World-Minimap patches from Catznip.
Catznip stuffs:
- Issue 1383: Parcel lines on mini map
- Show parcels on the minimap
- Minimap menu: "Show" submenu: "Property Lines" "Parcels for Sale"
- Option to have world map textures on the minimap
- Minimap menu: "World Map Textures"
- Singular touch: Made this comply with hypergridding.
The minimap will now scroll zoom based on where your mouse is if centering on camera is off.
A lot of cruft was cleaned up in this merge, a lot of gSavedSettings lookups in draw were converted to LLCachedControls, some license updates were performed.
Finally: By myself, but inspired by upstream and requested in the group before:
- Option to show tracking circles around people selected on the radar while the radar is visible
- Minimap menu: "Show" submenu: "Radar Tracking Circles"
When the login panel used to die, it now hides instead, we only truly kill it upon successful login.
Much of the opening and setting behaviors have been cleaned up to ensure fields are autofilled by the viewer without any user action once
Everything else like changing saved logins will still work the same.
rlva strings floater coming soon!
I highly doubt the translations work anymore
If they still can be translated, I leave it up to translators to decide if they should be
Contact me if you need translation code improved here.
- internal : reviewed @recvim and @sendim for CHUI (SL-3.5)
Singu changes:
- Updated busy to be referred to as do_not_disturb in llviewermessage.cpp
- Don't send autoresponse if we can't send an IM by rlva
- Updated checks for from name being system to be to_id and from_id null checks.
- Minor compile fix in rlvui.cpp for last commit.
- internal : reviewed @startim for CHUI (SL-3.5)
-> fixed : "Start Conference Chat" on a selection of multiple calling cards opens an IM session
-> fixed : actions that would result in an IM window opening shouldn't be blocked if the session is already open
-> added : RlvActions class to mimick LLAvatarActions and lowering the rlvhandler.h include dependency
Animations require consistent names for points like Avatar Center between viewers
To fix this, we now use Avatar Center instead of Root at the lower levels,
but this is okay, we translate Avatar Center into Root at UI level!
I've seen this in other grids (InWorldz and OpenGrid) and is a problem
on DreamNation with every new user: they can't put on a shape or skin
until they first logged in with another viewer. See comments in code.
Tested, and now could successfully add shape, skin, eyes and hair.
Animations require consistent names for points like Avatar Center between viewers
To fix this, we now use Avatar Center instead of Root at the lower levels,
but this is okay, we translate Avatar Center into Root at UI level!
Reimplements crouch toggle such that crouch is now tracked by the agent object
Fixes crouch being reset when restoring focus to the viewer window, as well.
sScrollListMenus is an array such that it will hold more menus in the future, such as groups.
fmenu_file still exists and will still exhibit its old behavior if used.
NOTE: There appears to be a driver bug on some AMD systems that will cause hardware skinning to break given different combinations of shaders. Users should be advised that if they see improper skinning on their avatars, they should either enable advanced lighting model, or disable atmospheric shaders or hardware skinning.
davep
Adds "Reset Camera Preset Angle to Default" to view menu
Wasn't quite sure where to hook this up, menu seemed the best for the moment, but really it's more of a preferences button function.
It was requested to let people resize the height to easily display more sections, and well, this is the easiest fix, if width changes in a nasty way, it can just be fixed since default is min.
Restores use of the old slant_amt offset for italicizing fonts by slanting quads.
Note that this is the wrong way to fix the issue and should eventually be removed.
I can't believe that I have not have gotten a cache for two years
because of this... I knew I didn't, but didn't really want to fix
it while I working on the network code (AICurl) ;). It kinda made
for a good testing. Bet my ISP is glad I fixed it though.
singularity-do-not-run-directly: /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llcommon/llmemory.h:219: void ll_memcpy_nonaliased_aligned_16(char*, const char*, size_t): Assertion `src != __null' failed.
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x7fff3342f700 (LWP 18001)]
0x00007ffff0f951d5 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff0f951d5 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff0f98388 in __GI_abort () at abort.c:90
#2 0x00007ffff0f8e252 in __assert_fail_base (fmt=0x7ffff10cc080 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x2c7ca97 "src != __null",
file=file@entry=0x2c7ca40 "/opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llcommon/llmemory.h", line=line@entry=219,
function=function@entry=0x2c7dc60 "void ll_memcpy_nonaliased_aligned_16(char*, const char*, size_t)") at assert.c:92
#3 0x00007ffff0f8e302 in __GI___assert_fail (assertion=0x2c7ca97 "src != __null", file=0x2c7ca40 "/opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llcommon/llmemory.h",
line=219, function=0x2c7dc60 "void ll_memcpy_nonaliased_aligned_16(char*, const char*, size_t)") at assert.c:101
#4 0x0000000001b3ebd9 in ll_memcpy_nonaliased_aligned_16 (dst=0x7fff2c39f440 "\001", src=0x0, bytes=0)
at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llcommon/llmemory.h:219
#5 0x0000000001e09d93 in LLVector4a::memcpyNonAliased16 (dst=0x7fff2c39f440, src=0x0, bytes=0)
at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llmath/llvector4a.cpp:44
#6 0x0000000001e2a13c in LLVolumeFace::pushVertex (this=0x7fff3342daf0, pos=..., norm=..., tc=...)
at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llmath/llvolume.cpp:6106
#7 0x0000000001e2a03f in LLVolumeFace::pushVertex (this=0x7fff3342daf0, cv=...) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llmath/llvolume.cpp:6080
#8 0x0000000001e20498 in LLVolumeFace::optimize (this=0x7fff2c39ee20, angle_cutoff=2) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llmath/llvolume.cpp:4841
#9 0x0000000001aa61d4 in LLModel::optimizeVolumeFaces (this=0x7fff2c39e100) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llprimitive/llmodel.cpp:866
#10 0x0000000001aa5f28 in LLModel::createVolumeFacesFromDomMesh (this=0x7fff2c39e100, mesh=0x7fff2c36cc90)
at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llprimitive/llmodel.cpp:829
#11 0x0000000001aa8324 in LLModel::loadModelFromDomMesh (mesh=0x7fff2c36cc90) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llprimitive/llmodel.cpp:1402
#12 0x0000000000a9bc11 in LLModelLoader::doLoadModel (this=0x7fff4f74d480) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/newview/llfloatermodelpreview.cpp:1535
#13 0x0000000000a9b100 in LLModelLoader::run (this=0x7fff4f74d480) at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/newview/llfloatermodelpreview.cpp:1395
#14 0x00007ffff5e52e9a in LLThread::staticRun (apr_threadp=0x7ffff7e572e0, datap=0x7fff4f74d480)
at /opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/llcommon/llthread.cpp:93
#15 0x00007ffff7bc6e0e in start_thread (arg=0x7fff3342f700) at pthread_create.c:311
#16 0x00007ffff10490fd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:113
This happened while loading some .dae.
Adds min_height and min_width attributes
Adds mPriority for controlling priority with which to call LLUI::getUIImage*
Moves specialized setImage()s into setValue
Removes mImageName and mImageID, value is stored in base as LLSD now
Smooth scroll changes the meaning of the numbers, unfortunately.. so for those who haven't figured out how to customize their mouselook zoom, this'll hafta do.
Also clarified the description of the debug.
SV-1222 #close Fixed up, will require a reset of the debug setting "zmm_mlfov", clean install, or just scroll to modify it.
Basically to avoid calling LLTrans::getString 250 times per second,
and seeing
INFO: log_sStringTemplates_accesses: LLTrans::getString/findString called 19000 in total.
INFO: log_sStringTemplates_accesses: LLTrans::getString/findString called 20000 in total.
etc, every 40 seconds in the log.
Although only used in Debug mode, this showed up in a profiling
with a very significant amount of CPU cycles (in a state when
the viewer bogged down to 1 FPS because of drawing terrain,
but still - significant compared to the code that was being
executed (ie, 10%)).
This patch should bring that down from a few hunderd to one clock
cycle.
This appears to be committed blindly without testing even if it build.
ll_sd_from_color4() / ll_color4_from_sd() need to be used to store and get color from LLSD.
It was very confusing that only *after* a call to a libcurl function
it was written to debug output that it was called.
Now it prints it before calling it, and when that leads to additional
debug output while inside the function, it prints that before giving
the return value.
For example:
0x7f529ea15700 CURLTR : curl_multi_socket_action((CURLM*)0x7f528c002920, CURL_SOCKET_TIMEOUT, 0, <unfinished>
0x7f529ea15700 CURLIO 0xea8ef30 * About to connect() to login.agni.lindenlab.com port 443 (#0)
0x7f529ea15700 CURLIO 0xea8ef30 * Trying 216.82.16.97...
0x7f529ea15700 CURLIO 0xea8ef30 * 0xe3240e0 is at send pipe head!
0x7f529ea15700 CURLIO 0xea8ef30 * STATE: CONNECT => WAITCONNECT handle 0x7f528c001df0; (connection #0)
0x7f529ea15700 CURLTR : curl_easy_getinfo((CURL*)0xe3240e0, CURLINFO_PRIVATE, 0x7f529ea13db0) = CURLE_OK
0x7f529ea15700 CURL : Entering MultiHandle::socket_callback((CURL*)0xe3240e0, 36, CURL_POLL_OUT, 0x7f528c001508, 0) [CURLINFO_PRIVATE = 0xea8ef30]
0x7f529ea15700 CURLTR : curl_easy_getinfo((CURL*)0xe3240e0, CURLINFO_PRIVATE, 0x7f529ea13d58) = CURLE_OK
0x7f529ea15700 CURLTR : curl_multi_assign((CURLM*)0x7f528c002920, 36, 0x7f528c031680) = 0
0x7f529ea15700 CURL : CurlSocketInfo::set_action(CURL_POLL_NONE --> CURL_POLL_OUT) [0xea8ef30]
0x7f529ea15700 CURL : MultiHandle::timer_callback(): timeout set to 1 ms.
0x7f529ea15700 CURLTR : <continued> {1}) = 0
Unfortunately, this breaks defining DEBUG_CURLIO without using libcwd,
but that was unusable already anyway (even though it compiled).
We may need to trick the friends list into refreshing when someone is muted to complete this feature...
probably need mutelist callbacks if those exist
It happened because we filtered mFromName which started out as from_name, and inconsistently used the two after that...
This change switches to just using mFromName after that point..
SV-1226 #close Fixed it~
On (very) slow machines this might improve the experience.
This only has effect on Second Life, since that's currently the only
grid that uses https for capabilities (all of them, except GetMesh,
GetMesh2 and GetTexture).
When linking the viewer with libmemleak, which significantly slows
down calls to malloc (and calloc, realloc, new, memalign and so on)
and free (delete), I no longer could download my inventory.
With this patch this was solved. The reason was that completing
the SSL/TLS handshake took more than 10 seconds (15 to 20).
Since that fakes the libcwd macros, this is needed to compile
the recent change that allows to only turn on debugging output
for certain statemachine objects when DEBUG_CURLIO is defined,
but libcwd is not used (CWDEBUG is undefined).
Before, when anything but the exact correct Login URI was entered, the
user would either get no error, or a pop up saying "Cannot retrieve grid
info from server."
With this patch, that pop up includes what went wrong and stresses that
they check if they entered the correct Login URI and where to find it.
I was motivated to write this after looking at crash report 8405 where
a user who had downloaded Singularity for the very first time crashed
twice when entering things like "aviworlds" and " aviworlds.com:8002"
(not the space), and "http:aviworlds.com:8002" (missing '//').
Especially in the light of FS accepting Login URI without the 'http://',
a lot of grid websites (like that of aviworlds) might instruct users
to enter the url without http://. Ie, this user was told to enter
just "aviworlds.com:8002", and when that failed was instructed to
add 'http' in front of it...
Now the code accepts also really WEIRD things, but will never mess
up a good entry. For example, if you enter "pssshht:aviworlds.com:8002"
then that will work, as a side effect. The real objective however is
of course to let things work like: "aviworlds.com:8002 ",
"http:aviworlds.com:8002", " http:/aviworlds.com:8002", and to give
a usable error message when there is a typo in the hostname (Cannot
resolve hostname) or they forget to add a port number (404, or
connection refused), plus the text "Make sure you entered the correct
Login URI. An example of a Login URI is: \"http://cool.grid.com:8002/\",
this url can usually be found on the website of the grid."
Blocking http requests (code using responders derived from
BlockingResponder) *do* call getRaw() and getLLSD to get the body of
server error messages. It is therefore perfectly ok if mStatus !=
HTTP_OK.
This fixes at least one case (crash report 8407), which comes
down to not cleanly informing a responder of failure when the
request url is empty (or so badly formed that it isn't a valid
url). As a result, the statemachine would abort() without
informing the responder - which is bad, sort of.
The previous cases where the responder needed to be informed
of a failure, namely "statemachine timed_out()" and "bad_socket()"
when a socket suddenly becomes bad for unknown reason, have been
replaced with the more general 'aborted()' function, which must
be called before the statemachine calls abort(). Clearly this
has been done for all cases of abort() now, so that if the
llerrs fires again in the future then that would have to be
after the statemachine calls finish(), which is still as "impossible"
as it was - hence the llerrs is still there to make sure.
The reason that this seldom happened on SL, and more often on
opensim, even more often on home-brew test grids, seems plausible:
malformed urls happen more in those cases.
I also took the opportunity to improve the robustness of cases
where the curl error code is checked: it makes no sense to check
what curl gives as error code when an internal error occurred.
This makes LLStringUtil thread-safe by removing a rather unnecessary
LLFastTimer from LLStringUtil::format.
Same thing for LLTrans::getString and LLTrans::findString, where
even a comment stated that the author wasn't interested in measuring
cpu time at all. In this case I added some code back to make sure
that we're not calling LLTrans::getString() in an inner loop, which
was the reason that the LLFastTimer was added.
Made one string static to avoid 45000 look ups during login, which
kinda triggered the above test.
Finally, LLNotificationsUtil::add is made thread-safe by making
LLNotificationChannelBase::mItems thread-safe and defering a call
to LLNotifications::updateItem to the main thread when called
from another thread (using a little statemachine).
Adds the green check and red x icons
Adds Price Breakdown text to the mesh upload floater, quite useful!
Removes useless ui element references in only code
Comments out ui element references in only code that we don't have and don't have a clear place
LLContextMenu functionality pulled out of LLPieMenu, PieMenu is now derived from LLContextMenu
- The more attribute boolean of pie_menu element determines whether or not to have an actual submenu if it's not a pie, defaults to false which means actual submenu..
-- in the future we may want to have more more="true" depending on feedback
- Pie menu labels now dynamically get " >" appended to them (avoids stupid looking context menus)
- Positioning logic combined in part, mostly conditional still, in the future we could probably combine it more.
- handleHoverOver function combines common functionality between context and pies given an item and hover mouse coords.
LiruUseContextMenus debug setting determines which to use, default is pie, of course
- Context(/Pie) Menus are rebuilt when the setting changes value
-- this is safe at any point because all startup states have been accounted for
- "Use context menus instead of pie menus" added to System->General preferences (it's close to the bottom)
Includes Chalice Yao's pause agent on attachment selection in LLSelectMgr::updateSelectionCenter()
Includes some of Cinder Roxley's enhancements to the build floater for materials (flip buttons, sync materials, consistent control hiding)
Includes Ansariel Hiller's fix for FIRE-8298 [BUG-869] [MAINT-1961], since this updates lltexturectrl.* to have related behaviors.
Switches from using MIN_MANHATTAN_DIST for threshold in LLToolDragAndDrop to using the existing DragAndDropDistanceThreshold debug, like upstream.
Translators:
panel_tools_texture.xml should now be translated, floater_tools.xml should have the old panel removed.
strings.xml now has "use_texture" string.
notifications.xml Now has "LivePreviewUnavailable" alert. (don't forget to translate the ignoretext)
Instead of having several AI* classes, it turned out to be easier to
have a namespace: this allows me to define the classes in llcommon but
add (new) 'add' and 'add_modal' functions to 'AIAlert' in llui.
This is needed to avoid a collision with the 'add' functions in
LLNotificationsUtil.
The new add/add_modal makes it a lot easier to just show a caught
alert, prepending or appending new text: it turns out that that is
way more common then a re-throw.
Adjusted code as appropriate.
In order to remove code duplication, and as prove of concept,
I redid the linden_genepool archetype export and import (from the Edit
Appearance Floater), using AIXML and AIAlert.
The import/export code did shrink significantly, and became a lot
simpler. Although a new file pair (aixmllindengenepool.{cpp,h}) is
added to define the (de)serialization of the linden_genepool XML format,
that code is now centralized in one place, and still a lot simpler.
As a bonus however, every possible error is now semi-automatically
reported to the user with all details that might help to overcome
the problem, like file names and system errors.
The AIXML* classes provide an Object Oriented way to serialize objects
to and from an XML file. Documentation is added at the top of aixml.cpp
These classes will be used by AIMultiGrid.
This fixes quoted strings, like <tag>"Hello \"World\""</tag>,
which otherwise might not be processed correctly because
the XML_CharacterDataHandler isn't guaranteed to be called
exactly once per element. It certainly isn't when a string
contains entities, ie: <tag>"'Hello \"World\"'"</tag>
certainly fails to be unescaped with the old code.
Moreover, the old unescape code things that a singly quote
is actually a quoted string (not noting that begin and end
quote are the same) and destructs all " entities; also
fixed with this commit.
A system to throw errors that allow for easy error reporting to the user
by showing a translated pop-up alert box with the error message.
The messages use strings.xml for translation and allow the usual
replacement args (ie [FILE] is replaced with a filename).
The exceptions can be cascaded, by adding more (translated) text
when caught and then re-throwing the result.
Macros are being used to support adding a function name prefix
to a message of the current function that the exception is thrown
from.
The syntax is:
<macro>(<line>); to show 'line'
<macro>(<alert>, <line>); to append 'line' to a caught alert.
<macro>(<line>, <alert>); to prepend 'line' to a caught alert.
where <macro> is one of:
THROW_ALERT, THROW_MALERT, THROW_FALERT, THROW_FMALERT,
THROW_ALERTE, THROW_MALERTE, THROW_FALERTE, THROW_FMALERTE, where
M = modal, F = Function name.
and where <line> is one of:
<xmldesc>
<xmldesc>, AIArgs<args>
where <xmldesc> is a string literal that will be looked up
in strings.xml, and <args> is:
(<key>, <replacement>)[<args>]
There are more variations of the macros to throw an arbitrary
class (append _CLASS), include an int code (append C) or
to store the current errno as code (append E).
For example, THROW_MALERTC(code, ...), or THROW_FALERT_CLASS(Foobar, ...),
where the ... is the same as for the macros above.
Documentation and example usage has been added to aialert.h.
* Add LLMD5::clone(unsigned char const*), the inverse of LLMD5::raw_digest.
* Add LLMD5::clone(std::string const&), the inverse of LLMD5::hex_digest.
* Add LLMD5::isFinalized(), returns true if the object is finalized.
* Turn all binary operators into inline friends in the class.
* Fix operator<< to take a LLMD5 const& instead of a LLMD5&.
These changes are needed for / used by AIMultiGrid.
These includes are needed. The current code includes them
in .cpp files *before* including these include files, but
that is not very clean, and not useful.
Actually including what a header file needs makes it more
clear what it drags in, it doesn't drag in more then before.
It also allows to include these headers without having to
includes needed for the included header file in a specific
order, in every .cpp file.
All edit keys now work, but Ctrl-A still doesn't work right, it must be grabbed by something else...
Adds LLFocusMgr::keyboardFocusHasAccelerators()
Adds virtual bool LLView::hasAccelerators() which returns false by default, overrides returning true placed in LLPreviewScript and LLPreviewNotecard
Shortcut keys added to notecard and script menu xmls
I'm thinking Qarl's Align tool handling may be receiving the Ctrl-A, we do seem to handle it differently than Exodus and Firestorm something modern could have broken the old way..
Come to think of it, those two features(Align and Select all prims) have a longstanding shortcut conflict in shortcuts... that's pretty nasty
-Looping syncslaves are stopped when there is no syncmaster.
-Hardened against edge cases regarding soundsource priority sorting.
-Fixed issue with syncmasters being marked as having looped when instead they just started playing (caused double-start of syncslaves).
-Updated some comments.
AICondition is like AIThreadSafeSimpleDC (it is derived from it),
and wraps some variable, protecting it with a builtin mutex.
While in a statemachine, one can call wait(condition) to make
the state machine go idle, and call condition.signal() to
wake it (or another) up again.
While normally a condition variable is used as follows:
condition.lock();
while (!whatwerewaitingfor)
{
condition.wait();
}
// Here the condition is guaranteed to be true and we're
// still in the critical area of the mutex.
condition.unlock();
where the thread blocks in wait(), the statemachine actually
returns CPU to the thread (the AIEngine), so there is no
while loop involved, and our wait() doesn't even unlock
the mutex: that happens because the state machine returns:
condition_wat condition_w(condition); // Lock condition.
if (!condition_w->whatwerewaitingfor()) // The variable(s) involved can only be accessed when condition is locked.
{
wait(condition); // Causes the state machine to go idle. This does not block.
break; // Leave scope (unlock condition) and return to the mainloop - but as idle state machine.
}
// Here the condition is guaranteed to be true and we're
// still in the critical area of the condition variable.
In this case, when condition.signal() is called, the thread
doesn't return from wait() with a locked mutex - but the
statemachine executes the same state again, and enters from
the top: locking the condition and doing the test again,
just like it would be when this was a while loop.
This can be used to switch to a specific engine.
If the state machine is not running in the passed engine,
then it performs a yield to that engine, otherwise it keeps
running. Hence, putting this at the top of a state
guarantees that it runs in that engine.
For example:
case FrontEnd_done:
{
// Unlock must be called by the same thread that locked it.
if (yield_if_not(&gStateMachineThreadEngine))
{
break;
}
// Here we are running in gStateMachineThreadEngine.
...
The patch is exclusively libcwd related.
Turns off output from statemachines to dc::statemachine by default.
Allows to turn on the debug output on a per statemachine basis (at
compile time).
-Idle tick is now responsible for dispatching all pending sound sources, as such improves priority sorting.
-Added ui sound precache mechanisms (to fetch sounds without associated soundsources)
-Audio engine no logner available pre-login or upon disconnect, for simplicity.
-General cleanup to the audio engine/impl.
-Fixed some gAudiop calls that were lacking prerequisite null checks.
-Added 'isUpstreamOK' procuedure to LLAssetStorage to allow avoidance of making requests when there is no upstream host connection.
Handle display of popped out IM floaters better
send_start_session_messages(): cut early if ids is empty, fallback on UDP if there is a region but there isn't ChatSessionRequest Cap
Unifies CAPSLock /ME handling
Unifies AutoCloseOOC impls so they share full common functionality
Adds AutoCloseOOC functionality to do /me ((autocompleted out of character action))
Also, RP Mode now uses parentheses rather than square brackets, by popular demand
Also changes Session Label to Log Label because that's really what it is at this point
Also rearranges members in LLFloaterIMPanel, and war on BOOLs
Also removes mSessionInitialTargetIDs because it's no longer needed outside of the constructor
If the user is holding a modifier key with enter, it bypasses the unpinned setting
If a chat is popped out, this setting now only minimizes that chat, not toggles the main communications floater.
LLIMPanel::closeIfNotPinned() now condenses the logic.
Also makes LLIMMgr::toggle() non-static and requiring no args.
Usage:
nc -l -p 61916
AITESTPLUGIN=1 LL_WRAPPER='gdb --args' ./singularity
Then paste into nc:
<llsd>
<map>
<key>class</key>
<string>internal</string>
<key>name</key>
<string>load_plugin</string>
<key>params</key>
<map>
<key>dir</key>
<string>/opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/viewer-linux-x86_64-debug/newview/packaged/bin/llplugin</string>
<key>file</key>
<string>/opt/secondlife/viewers/singularity/SingularityViewer/linden/indra/viewer-linux-x86_64-debug/newview/packaged/bin/llplugin/libbasic_plugin_filepicker.so</string>
</map>
</map>
</llsd>
and press control-v control-shift-2
Where the path should match the library you want to load.
My guess is that this fixes the warning:
/singularity/singularity-master/indra/newview/llfloaterdirectory.cpp: In
function ‘void* createWebPanel(void*)’:
/singularity/singularity-master/indra/newview/llfloaterdirectory.cpp:167:
warning: ‘createWebPanel(void*)::LLPanelDirWeb’ declared with
greater visibility than the type of its field
‘createWebPanel(void*)::LLPanelDirWeb::<anonymous>’
/singularity/singularity-master/indra/newview/llfloaterdirectory.cpp:167:
warning: ‘createWebPanel(void*)::LLPanelDirWeb’ declared with
greater visibility than its base ‘LLPanelDirFind’
That I see in https://files.streamgrid.net/singularity/linux-i686.log
Conflicts:
indra/newview/viewer_manifest.py
Merged with a patch that I wrote.
The linux pcre prebuilts can also be removed from install.xml,
but for now leaving them there because the prebuilts are still
in use by the libcollada prebuilt (probably should just move
them into that git repository).
mQueuedCommands was unsigned, but can become shortly negative.
Unfortunately this means I had to remove the assert that
keeps track of possible errors, but I believe that already
has been proven that it works anyway.
The reason it can become negative is because its meaning is
"Number of added ADD (request) commands minus number of REMOVE (request)
commands". Hence, it is incremented when an ADD command is added to the
queue and decremented when that ADD command is removed from the queue.
However, it is first decremented when a REMOVE command is added to the
queue and then incremented again when that REMOVE command is removed
again from the queue. Such a remove command is current extremely rare:
it only happens when curl fails to time out - and the backup timeout of
the statemachine fires after 10 minutes of a curl request being idle.
That should normally only happen if a request never reached curl of
course, and is queued in the curl thread, waiting to be added to curl,
aka: -0-0-1,{...} for 10 minutes...
Now that, in turn should be impossible (since the "don't count long poll
connections) unless the Curl* Debug Setting variables are changed to
wrong values.. but ok, can only guess here.
I have fixed the warnings internally, so this wraps up my work
But our colladadom source and our prebuilds must be updated with my changes before this change is tolerable
The normal usage is to include the src/ directory of google breakpad
in your application and then include client/ARCH/handler/exception_handler.h
where ARCH is windows, mac or linux.
However, Linden Lab for some reason packaged the breakpad prebuilt
with exception_handler.h installed in ../google_breakpad/exception_handler.h
where "../google_breakpad" is the 'root' of the include tree comparable
with 'src' in the source tree of google breakpad.
Hence, instead of including 'src' one now must include '../include/google_breakpad'
which was already done correctly for non-standable, but not for
standalone (BREAKPAD_EXCEPTION_HANDLER_INCLUDE_DIR was set to '../include'
with the 'google_breakpad' and is subsequently never used: instead
BREAKPAD_INCLUDE_DIRECTORIES is used (which is set for non-standalone)).
Therefore one much not include "google_breakpad/exception_handler.h",
but just "exception_handler.h" or you rely on somehow the directory
*below* BREAKPAD_INCLUDE_DIRECTORIES to be part of the include path as
well.
Finally LL packages the prebuilt if another duplicate minidump_descriptor.h
in the include root. Also here including "minidump_descriptor.h" would
be better correct, but following the instructions by Google this time
we might as well include the original "client/linux/handler/minidump_descriptor.h".
My repo (http://github.com/AlericInglewood/3p-google-breakpad) doesn't
even put minidump_descriptor.h in the root anymore, only
exception_handler.h. The rest is an exact copy of the 'src' tree with
regard to the headers.
Tested to compile both standalone and non-standalone.
Furthermore, users may now type in grid name, grid nick, or grid login uri into the box and it will resolve to an existing grid they've used before, or (for uris only) try to add the new grid with the data it provides.
Input will have trailing and leading spaces trimmed.
Thanks to Diva Canto for this brilliant request!
New class ToggleControl is used in place of the removed listeners.
Much cleaner code for the MiniMap chat rings.
Remove redundant debug setting: MiniMapChatRings.
-Thanks Liru for the advices.
This is necessary for opensim mega regions that can have up to 16 long
poll connections for a single service, while upping the maximum number
of connections per service just for that is clearly nonsense.
I also changed that long poll connections do not "use" the "Other"
capability type (which shows that the debug info in the HTTP debug
console for the Other capability type turns grey when it only has event
poll connections). As a result additional connections become available
for textures, mesh and the inventory (the other capability types) on
opensim, which has all types on the same service, because now Other
does no longer constantly reserves a full share of the available
connections. This makes the actual number of connections used for
textures and mesh a lot more like it is on Second Life.
Ability to show Whisper, Chat and Shout range circles on the MiniMap.
Range values are at the moment hardcoded as [10, 20, 100].
Each ring is binded to the following Debug Settings:
Whisper ring: MiniMapWhisperRing
Chat Ring: MiniMapChatRing
Shout Ring: MiniMapShoutRing
Each ring colour can be customised through the following Debug Settings:
Whisper ring: MiniMapWhisperRingColor
Chat Ring: MiniMapChatRingColor
Shout Ring: MiniMapShoutRingColor
The following Debug Setting is used to enable/disable all the rings at once:
MiniMapChatRings
Tested that it's actually being used - and it seems to download
everything at high speed. Certainly an improvement.
Textures are still *requested* in the wrong order though; for
example - baked textures are simply not requested for a long time -
while they are even downloaded from another service!
Turns out that the only responders that want to get the redirect
status codes themselves are the ones that already had a
redirect_status_ok() exception.
Merged cleanly:
indra/llkeyframewalkmotion.cpp - 36e6946c96 - worked around a bug in Aurora walking motion
indra/llrender/llimagegl.cpp - fa8e1f033b - An llerrs here becomes an llwarns, to avoid bothering the user with non power of two dimensioned images
indra/newview/llmanip.cpp, indra/newview/llmanipscale.cpp - "Changed hardcoded 256 constants and such to width functions" - a50f0008b2
indra/newview/llpatchvertexarray.cpp - fa8e1f033b - Support patches of non power of two width
indra/newview/llworldmap.h - conflict
Conflicts:
indra/llmessage/patch_code.cpp - My version cleaned up a bit of code duplication, so this was applied, within the new tags
indra/llmessage/patch_code.h - b_large_patch in decode_patch_header defaults to false, indra/newview/llcloud.cpp patch removed.
indra/llmessage/patch_dct.h - false positive
indra/newview/llagent.cpp - false positive
indra/newview/llfloaterregioninfo.cpp - nonsl wacky textures support meets the refactor.
indra/newview/llfloaterworldmap.cpp - false positive
indra/newview/llglsandbox.cpp - false positive
indra/newview/llnetmap.cpp - small changes for type consistency brought into FS' patch, nothing important; also adds change to LLNetMap:draw removing getRegionWidthInMeters to keep using the constant REGION_WIDTH
indra/newview/llpanelobject.cpp - Get the region width of the object we're editing for maximum pasted x/y coords
indra/newview/llstartup.cpp - [Fixes old issues] My old patch did not fully use first_sim_size_x here, this has been fixed. The unused first_sim_size_y has been removed.
indra/newview/llsurface.cpp - rebuildWater isn't used, removed for now. Styling conflicts otherwise.
indra/newview/llsurfacepatch.cpp - remove FS patch that comments out code that isn't even in the modern source; cleaned up a mess of tags with more clear explanation, perhaps it can be expanded upon though. Some styling conflicts.
indra/newview/llviewermessage.cpp - Fix the problem? setRegionWidth by number.
indra/newview/llviewerobject.cpp - false positive
indra/newview/llviewerparcelmgr.cpp - just styling conflicts
indra/newview/llviewerparcelmgr.h - false positive
indra/newview/llviewerparceloverlay.cpp - false positive
indra/newview/llviewerparceloverlay.h - false positive
indra/newview/llviewerregion.cpp - cleaned up LLViewerRegion::getCompositionXY patches, they're more in the way than they're worth; removed DispatchOpenRegionSettings capability mention for now, it's not related to variable regions. Also remove rebuildWater, it's not used right now.
indra/newview/llvowater.cpp - false positive
indra/newview/llwind.cpp - remove decode_patch_header patches for false, since we have a default; otherwise false positive.
indra/newview/llworld.*
- [Fixes old issues] Remove setRegionWidth by LLMessageSystem as the messages used are not always the same, the by number one remains of course.
- Retained separation of connecting neighbors through the old method when the width is 256
- updateLimits() would never have been merged in, we have an entirely different grid manager, therefore it's removed.
- Fix the stupidity passed on over the years wherein a static constant variable would hold the same value as the first call to setLandFarClip..
indra/newview/llworldmap.cpp - 36e6946c96 Aurora map workaround stuffs, parts removed; rework of LLWorldMap::simInfoFromHandle
indra/newview/llworldmap.h - Cleaned up organization, avoid making members public, and fixed tagging
Added SEND_UDP_REQ and WAIT_UDP_REQ fetch states.
Parse 'content-range' from headers.
Purge 'complete' textures from the cache if they lack 'end of codestream' marker.
Added boostlevel/category to textureview display.
More diagnostic output.
Discard handling tweaks/bugfixes from v3.
Use RenderDeferredTreeShadowOffset, RenderDeferredTreeShadowBias,
RenderDeferredSpotShadowOffset and RenderDeferredSpotShadowBias
in place of hard coded values.
When uploading an animation, playing the to-be-uploaded
animation on ones own avatar while ground sitting would
crash the viewer.
This fixes that, and makes the avatar cleanly stand up first.
Rationale: the alternative is to make the user learn by
means of crashing, being frozen or just not seeing the right
animation that they have to stand before uploading an animation.
There is no reason not to automate that.
Some opensim servers might not have a reverse DNS, which causes
a stall of up to 5 seconds for each call. This means that
every time you up the parcel music stream (or any other media)
the viewer would freeze six times 5 seconds.. 30 seconds.
With this patch it only freeze once ;) (when you enter a region).
It already did that before (too), but after that opening the
parcel media doesn't freeze the viewer at all anymore.
Apparently LLViewerMediaImpl::navigateInternal could be called with
an empty url. That lead to a curl request with an empty url, which
failed because that leads to an empty 'service' string, which is
not allowed.
Patched the code to ignore empty media urls and hardened AICurl
to deal with any remaining cases.
Updated llgroupmgr.cpp's formatDateString() from upstream
-Corrected it to actually use ISO 8601 format.
Also fixes notices tab to use the new format parameter to sort properly.
* Added support for exporting textures
* Added support for applying texture parameters
* Added support for merging faces with same textures
* Added support for skipping transparent faces
Removes the previous method and condenses the menu entries back into one.
- Translations have been updated except for German, German will need to update the translation for "Save Preview As..." since the name hasn't changed.
Adds FFSAVE_IMAGE to the filepicker enums
Crossplatformity:
- The Windows version works nicely
- The Linux version may not work or even compile but it should..
- The Mac version hasn't been added, instead it will default to accept any(all filter), should the provided file extension be invalid a notification will display.
Defining a macro in a header that doesn't have any namespace prefix
like GLH_ ugh. Very bad.
Changed the macro into an inline function inside namespace glh.
To maintain compatibility with grids that still use the old home position set notification method, a common function is called.
The fix has also been applied for the special case of death teleports.
Switches MapAvatar from being part of a skin's colors.xml to being a user setting (optionally vanity per account)
This makes sense because all the other dots were at the user's control already.
To activate set LiruGroupNoticeTimes to true via debug settings
Depending on your date and time settings, you may need to resize the date column of the scroll list and hit refresh to see the times, alternatively, the tooltips will display the whole time always.
Technically, both nested iterator classes in llinstance tracker should be derived from a common base implementation of boost::iterator_facade for std::maps(LLInstanceTracker::InstanceMap), they'd only need to implement dereference individually
Reload personal setting overrides no longer has a shortcut.
On Linux, ctrl-shift-F# is now used instead of ctrl-alt-F#
On other platforms, nothing else changes.
Since multiwear, the low 8 bit of inventory items, if they are of type
IT_WEARABLE, is used for the wearable type (WT_*). Older viewers and
bots (like Second Inventory) create inventory items with 0 in those
bits. This causes all those item to appear as shapes in multi-wear
capable viewers.
This gives rise to many problems:
1) You can't wear them, because the inventory and asset wearable type
mismatch, which makes Singularity just abort.
2) Before it aborts, it already removed your old shape, thinking you
are about to wear another shape - and told the server that you are
wearing this broken item now. The result is that you see no change,
until you relog when you are suddenly wearing the broken "shape"
and stay a cloud forever.
This commit detects the problem for AT_CLOTHING wearables, because
they are not compatible with the type 'shape' after all (which is
is AT_BODYPART). It still doesn't know what the wearable type is, but
sets the type temporarily to the new value WT_UNKNOWN. Since this is
at least not a shape anymore, it doesn't cause you shape to be removed
when wearing it. Moreover, once the asset is downloaded, the mismatch
is detected and corrected: you can now wear -say- pants, or other
clothing.
Inventory clothing items with an unknown wearable type now have a
red question mark icon in the inventory.
What does NOT work yet:
1) If you copy such an item and paste it, then the new copy has
a shape icon again (and all the previously mentioned problems).
2) If you wear broken hair, skin or eyes (which still show as
shapes in the inventory) then your shape is still removed, and
wearing them fails because they are not multiwear capable and you
are already wearing such a body part. What should be done here
is that the removed shape is added back and the real body part
that you're trying to wear is removed.
3) Although this code attempts to fix the mFlags in the inventory,
the icon in the inventory doesn't change from question mark to the
right thing.
The original purpose of the patch removed here was to fix this very bug, though I could not reproduce it at that time...
There must still be an edge case where this bug will reproduce but I tweaked the involved settings around quite a bit and could not reproduce it
The old defaults remain the same, so no worries for old users of this feature
Modify LogFileLocalChatDateFormat and LogFileIMsDateFormat in debug settings, use strftime's format specifiers.
The above mentioned settings are per account.
Inspired by irssi
This eliminates the possibility of the history button not opening the log file, which has been reported in the past.
This also corrects cases where log files named with date would not be opened.
There are two types of font names, the camelcase and the all uppercase
Since mostly uppercase is used for scroll lists, this issue went undetected
but both types are used upstream, so we now look for camelcase if we couldn't get an uppercase one
The crash itself is avoided by falling back on SansSerifSmall if no known font has the name provided.
Teleport height restrictions have been increased to 8192
-The 4096 limit isn't in much of the teleport code anyhow, and it's certainly not enforced.
Building height restrictions are now hooked up to hippolimits, apparently they hadn't been
-MAX_OBJECT_Z, and hardcoded 4096s now use gHippoLimits->getMaxHeight() instead
-On floater_tools.xml max_val is left out, instead it is set with the rest of the gHippoLimits edit constraints in LLPanelObject::getState
Should fix Fritigern's recent issues, seems to. (Mainly, the double clicking on script errors not working right thing)
Should also fix that issue someone has brought up in group chat about the delay in our external editor sync in comparison to V3
See: http://opensimulator.org/wiki/SimulatorFeatures_Extras
* Moved SupportsExport inside this map to avoid possible
collision with Linden Lab
* Added the ability for a sim to specify map server
(Fixes maps after hypergrid jumps)
Applies the following commits:
4c13e7c - Interim version with SLIM removed from voice.
4c13e7c753
9cad21a - Thanks mercurial.
9cad21adc1
Only the changes that should have been in 4c13e7c (removal of LLVivoxVoiceClient::accountListBlockRulesSendMessage() and LLVivoxVoiceClient::accountListAutoAcceptRulesSendMessage())
9c94b96 - Removed debugging.
9c94b96ed3
ec77595 - Turn off logging.
ec775958ef
857cab1 - Kill all the vivox logs
857cab153e
Moved handling of mouse_wheel_opaque and menu_file to setScrollListParameters
Removed setToolTip block from LLScrollListCtrl::fromXML since setToolTip lives inside of LLView::initFromXML which is called by LLUICtrl::initFromXML which was already called at this point
Added support for building columns from xml with relative_width which is synonymous with relwidth
Fixed namelist columns not supporting dynamic_width in xml (dynamicwidth is only acceptable in older xmls)
On a parcel with voice disabled, the viewer keeps requesting voice info
every two frames, cycling between states stateNoChannel and
stateRetrievingParcelVoiceInfo.
This commit fixes that: if voice is disabled on the parcel then mAreaVoiceDisabled
is set (because the url is empty) and we stop requesting voice info until the parcel changes again.
If voice is enabled while we are in the stateNoChannel then we drop
out of that because mNextAudioSession gets set (to stateJoiningSession).
If the viewer has voice disabled, then now it drops correctly
out of the stateNoChannel into stateDisabled.
I ran into this on opensim.
The value of 'bucket' passed to parse_lure_bucket was empty.
In general, we should check we HAVE eight tokens, and not
just keep incrementing the iterator without checking.
Removes code duplication.
Several parts of the code ignored the PERM_EXPORT but
and still did demand that things are full perm next
to being a creator. This has now changed the export
rules are the same for everything as they were for mesh:
you need to be the owner and the creator for every element
that is exported (not just the root prim, of course).
Better/more notifications.
No longer applies UUIDs of textures exported on a different grid,
except for secondlife <--> secondlife_beta, but with a warning.
This moves all export test code to where it belongs:
in LLPermissions.
Added LLPermissions::allowExportBy, next to
allowModifyBy, allowCopyBy and allowMoveBy.
Then changed all code to use this call.
Because LLPermissions is part of llinventory, I had
to add a proxy for LFSimFeatureHandler.
Added a new class LFSimFeatureHandlerInterface that can be
used by LLPermissions to check simulator features by
accessing the LFSimFeatureHandler singleton.
Several parts of the code ignored the PERM_EXPORT but
and still did demand that things are full perm next
to being a creator. This has now changed the export
rules are the same for everything as they were for mesh:
you need to be the owner and the creator for every element
that is exported (not just the root prim, of course).
Export rules can now be easily made a function on
simulator features. If different rules apply for different
types (wearables, objects, mesh etc) then an extra variable
indicating the type will have to be passed though.
Renames ALERT_TYPE_* to STAT_TYPE_* and ERadarAlertType to ERadarStatType
Removes mIn*Frame and accessors for these in favor of checking for the bit in mStats
Use mStats instead of mAgeAlert now.
Moves the range leave handling out of getAlive and into setPosition, where it logically belongs
Should fix Issue 43: Radar reports multiple times for agent entry upon rendering
Can't use LLs LLFolderViewItem::rename from
LLInventoryPanel::modelChanged because it's nonrobust spaghetti code
and causes randomly sized loops.
Also cleaned up the number of unused nameOrDescriptionChanged functions
introduced in a previous commit.
This is partially in attempt to reduce possible suspects for Issue 936: Talking to users with the lastname Resident sometimes creates logs without the delimiting space stripped out
The fly button on the toolbar would enable itself despite RLVa restrictions
- This was because always fly was checked after gAgent.canFly(), despite the fact that gAgent.canFly() itself checks always fly setting at the correct time.
When teleporting to a region that blocks flying, the agent would start flying due to a strange check inherited from upstream.. My opinion is, they want gods to fly, but that's kinda strange too, so I've changed it to set flying false in this case.
Replaces the exposed setting in popups preferences
However, for users wanting the old behavior of just landmarks, notecards, and textures being automatically accepted, the original setting(AutoAcceptNewInventory) stays as is, it can be turned on and off in debug
Apparently when you skip a number for an LLSD, when it becomes a param that number translates to the expected field in all its emptiness
Since the column didn't exist in the scrolllist, a new one was added to the end
Params for LLScrollListCell, LLScrollListItem, and LLScrollListColumn
Moves code block for creating a LLScrollListCell out of LLScrollListCtrl::fromXML and into LLScrollListCell::create
Removes mDefaultListTextColor from LLScrollListCtrl, it is now used only in LLScrollListCell::create
Adds LLScrollListCtrl::addRow and LLScrollListCtrl::addColumn functions that take these Params
Separators are now built from an icon.. we may want to tweak it in the future, looks alright though
LLFloaterAvatarList::refreshAvatarList now builds elements with these Params instead of by LLSD
Updates llfloatergroups to be a lot similar to upstream
- Adds LLFLoaterGroupPicker::removeNoneOption and changes LLFloaterGroupPicker to use modern style callback
- Switched from using per ui xml string for the none entry in groups to the strings.xml one, updated and cleaned existing translations to use this.
- Changes LLFLoaterGroupPicker into an instance tracker by id, because it was already acting like one.
Updates llpanelpermissions RLVa bits and fixes last owner label never enabled
Updates LLFloaterTopObjects code to have parcel filter(STAT_FILTER_BY_PARCEL_NAME) and use the CallbackRegistrar
Top Objects XML (and Translation) bits updated in part from Firestorm, as LL Viewer lacks certain buttons and the old xml was too far behind
- Translators may want to have a look at this... although you sorta need to have estate powers for it to be of any worth... *sigh*
Updates LLFloaterGodTools to use CallbackRegistrar
As importing has been broken for a long time, I decided to
hijack the existing (broken) buttons of the Appearance floater
for the following new implementation:
The currently selected wearable, if full perm and the agent
is owner (of course) and creator, then that wearable can be
exported to disk with AIFilePicker in the context "archetype".
The used format is now XML, linden_genepool version 1.0, the
same format that is used when saving from Advanced --> Character
--> Character Tests --> Appearance to XML in any viewer.
However, unlike that Advanced option (which normally only
works when DebugAvatarAppearanceMessage is set to TRUE, ie in
the official Linden Viewer; but that does a lot more, most
likely unwanted things: it causes to dump files in this format
to the LL_PATH_LOGS directory whenever appearance data comes
by and other stuff for debugging purposes only), now ONLY the
selected wearable is written to the file. In the case of multiwear
with several layers, that means the selected layer, as well.
When importing these XML files again, only the selected
wearable/layer is overwritten (assuming it is modifiable) with
the data in the file that corresponds to that wearable (if
the file contains data of another wearable then nothing happens).
Note that this file format can be read by blender-avastar:
Using this feature to save the shape you created in SL will
allow you to import that into blender. Likewise, a shape created
or modified in blender can be imported into SL using this feature.
When saving a file, if the suggested filename has the form
PREFIX?000.EXT then the viewer checks if that file already
exists and if so, increments the number until it finds a
name that does not already exist (in the suggested directory).
The '?' is replaced with an underscore.
This allows to fast saving of the same data without overwriting
previous data.
Added debug settings OBJExportNotifyFailed and OBJExportNotifySuccess for whether or not to notify about OBJ Exports failing or succeeding respectively
Moved exports back into tools submenu, there's not enough variety to justify a menu dedicated to exportation
Removed hardcoded "Insufficient Permissions" string, there's already a notification for this.
Implemented proper permissions checking, along with own Avatar Export.
Params are driven by wearable; changing the base character gets
overwritten real quick.
Fixed to call the appropriate LLWearable::setVisualParamWeight.
I didn't test this in the light of multiwear -but it works for
the shape, which is good enough.
=== Pull request version ===
Re-enabled fix for avatar body invisibility featurebug (archaic)
Added option to adjust maximum attachment span with settings
Added option to enable automatic derendering of huge attachments (use with care)
Conflicts:
indra/newview/app_settings/settings_effervescence.xml
I need to parse the debug output of libcurl for this, and choose
to not do that for a Release build - at which point it makes little
sense to even do it for a Debug build, since also the Alpha release
are 'Release'. Even though it would probably have no impact on FPS,
there would be like two persons looking at that number and understanding
it.
The automatic adjustment sets the connect time to 3 seconds, which might
be a bit on the short side sometimes.
Also remove the HACK and use CurlTimeoutConnect again.
The default is still 10 seconds, but is overridden to be 30 for mesh
now (which needs a reconnect for every mesh, since LL does not support
connection reuse for mesh). Note that I never saw any successful
connect under 8 seconds while I had the connect time out at 30:
Over 8 seconds is a sure fail (except for mesh, where in rare cases
there were connect times of 15 seconds (never 14 or 16).
On quiet servers, the connect time is normally sub-second. This is
the bulk of connections for my own SL use.
1. When web search was open, because it had no id, it would steal the links clicked for the in-viewer browser, now it identifies as search and will not.
2. Work around an oddity with the browser being unresponsive to certain category only slurls, by temporarily removing the expected behavior of it returning as last seen when reopened (no setVisible(false) in onClose, just close out as normal)
Removes the enable callback for Appearance To XML, LL no longer has that hooked in, why should we?
Tested and confirmed to work with or without DebugAvatarAppearanceMessage the same way.
Added "Use web-based search instead of legacy v1 search" checkbox to System->General preferences
Unified all functions to display search floater into toggle_search_floater and LLFloaterSearch::showInstance
Added UseWebSearch and UseWebSearchSLURL debug settings for flexible configurations
- SLURLs with legacy search cannot always present the same results as web
Added SearchURL debug setting, a separate setting from the one used in the all tab, slightly different and always set by response["search"] on OSGrid logins to detect if websearch is supported
Cleaned up llfloaterdirectory includes and added "Search.WebFloater" to the CommitCallbackRegistrar in case we ever want to add a button or something to open web search (couldn't find a nice place for it, sadly), also added more functions to show specific tabs and performQueryOn to search a tab with specific query on LLPanelDirBrowser's
XMLRPCResponder is used to login, which is a HTTP 1.0 server
that doesn't support reuse of connections.
It's cleaner to close connections from our side too.
This changes,
0x7fffdcf93700 CURLIO 0x7fffcd86db40 * Connection #0 to host login.agni.lindenlab.com left intact
into
0x7fffdcf93700 CURLIO 0x7fffcd8b0bd0 * Closing connection #0
Cleaned up includes, switched callbacks over to mCommitCallbackRegistrar, updated RLVa portions to RLVa 1.4.5, changed mSLURL from a string to a real SLURL
Adds a checkbox "Use web profiles instead of legacy v1 profiles" to System->General preferences
Adds a button "Web Profile" to the first life tab of legacy profiles (only available on grids that provide a web profile url)
When connecting to an OSGrid, always set the WebProfileURL setting to whatever is in web_profile_url, this way we know if web profiles are not supported.
Borrowed translations of the preference checkbox from Firestorm, translators may want to tweak
Translators may want to update panel_avatar.xml as it now has a web profile button, and contents have shifted slightly.
This make more sense when comparing the threshold against 2 times the
maximum allowed total connections.
As a result, textures won't stall when there are around 128 mesh
requests queued.
The proper way to hide toolbar icons is by falling back on the default skin's 1x1 transparent texture for them, not by making a a larger version of the icon and using that.
This should fix the awkwardly offset alignment of the text on the buttons in these skins
I found our upload classes were in need of a tune up while researching Issue 896: Animation upload setting causes viewer crash
So I started working to clean up llfloaterbvhpreview which lead me to llfloaternamedesc and the rest of our upload floaters
I ended up pulling the sound upload hack out of LLFloaterNameDesc and into LLFloaterSoundPreview and moving LLFloaterAnimPreview into llfloaternamedesc.*
Updated llviewermenufile.cpp a bit
Removed setUploadAmount from LLFloaterImagePreview and LLFloaterBvhPreview as its purpose is served by LLGlobalEconomy::getPriceUpload and the hippogridmanager too.
Fixed an issue with floater_animation_anim_preview.xml using [AMOUNT] instead of [UPLOADFEE] for its label.
I'd say this might fix Issue 896, I certainly can't reproduce the crash I was having when testing for it anymore.
Modernizes LLTextureControl(, LLFloaterTexturePicker) and LLColorSwatch
Updates LLPanelVolume, LLPanelObject, and LLPanelFace to prevent related crashes and compile.
Adds translation string InventoryNoTexture to strings.xml (added to all existing translations from upstream translation)
Conflicts(Actually git being dumb, I already merged these, just lost history):
indra/newview/llfloateractivespeakers.h - local
indra/newview/lloverlaybar.cpp - local
indra/newview/skins/default/xui/en-us/panel_prim_media_controls.xml - remote
Keep track of which capability types are used and in use
at the moment for each service.
Update the http debug console to only show services
that have at least one capability type marked as used (this resets upon
restart of the debug console) and show previously used but currently
unused capability types in grey.
Update CapabilityType::mConcurrentConnections based on usage of the
capability type (CT): Each currently in-use CT gets an (approximate)
equal portion of the available number of connections, currently
unused CTs get 1 connection for future use, so that requests can and
will be added to them if they occur. If a CT is currently not in use
but was used before then it's connection (but at most one connection)
is kept in reserve. For example, if there are 8 connections available
and a service served textures and mesh in the past, but currently
there are no texture downloads, then mesh get at most 7 connections,
so that at all times there is a connection available for textures.
When one texture is added, both get 4 connections.
Conflicts:
indra/newview/llfloateractivespeakers.h - llparticipantlist.h got changed from a panel to a layoutpanel
indra/newview/lloverlaybar.cpp - Silly conflict, I change one line, Shyotl changes the next two.
Compile fixies:
indra/newview/llavataractions.cpp needed to include llnotifications.h
indra/newview/llvoicechannel.cpp needed to include llnotifications.h
It's simple to compile fix, but I'll handle any necessary merge conflicts, if necessary.
Hunspell stuff needs revisiting still, works as poorly as it always did.
Prepares for throttling number of connections per capability type.
The value is current left at AIPerService::mConcurrectConnections,
so not having an effect yet.
This commit removes the hardcoded see avatars text that replaced the label of the checkbox on the about land floater regardless of conditions.
Also adds the checkbox translation from v3 for Portuguese.
Adding a flag to hint to the sim that this viewer knows how to handle
AvatarAppearance messages for self in SSA-enabled regions.
Upstream patch: 5fdc790f6d
-Floater utilizes a slightly modified LLPanelNearbyMedia, which has fading and the 'minimal' mode disabled when its parent is a floater.
-Due to how LL designed LLPanelNearbyMedia, only one instance should ever be allowed at a time.
Added LLNameBox. To avoid having dupilcate code, logic in LLTextBox::fromXML had to be moved to LLTextBox::initFromXML.
-Perfomed some additional cleanup. 'name' attribute now parsed in LLUICtrl::initFromXML, or as-needed for elements not based off of LLUICtrl.
LLSlider now respects current DrawContext
Fixed the AO toolbar widget reserving too much width.
Made the "wlfAdvSettingsPopup" setting persist, and un-inverted its logic.
Altered ui initilization order. Toolbar/overlay panels now constructed further into login process.
Automatically detach copyable attachments early, so that changes will be kept (LLMakeOutfitDialog was changed to update the outfit correctly, despite items being removed. It should probably be cleaned up further)
Adds an extra checkbox to make outfit dialog to disable this new auto-detach behavior, for users who rely on the old behavior.
Also fixes a bug I noticed in LLMakeOutfitDialog in which the use links checkbox would be enabled even if the grid doesn't support links
Had to reposition everything to get the new checkbox to sit nicely, but in doing so changed bottoms to bottom_deltas so it should be easier in the future, layout remains the same, of course, shouldn't be noticed.
Support for opening embedded calling cards
Switched to llnotificationsutil.h instead of llnotify.h
Cleaned up and reorganized includes list to better match upstream
Fixed embedded notecards not popping up when you click them, someone at LL decided new inventory should only be shown if the user doesn't want it to be shown for the case of embedded notecards.
mAllowEdit has really signified whether or not llpanelgroup was in its own standalone floater
This change removes the restrictions the lindens chose to put on group search, allowing the user as much control as possible over a group from outside a dedicated floater
Notices and Land & Money get their information from messages passed through viewermessage, addressed to the right instance by id, as such they must be unique to the standalone floater
Cancel button in group search will only enable when changes have been made and will refresh the group, clearing changes.
The OK button is not visible in group search as it serves the same purpose as the Apply button here.
Note: This will not work with legacy names selected because that disables the display name system altogether right now, if we ever separate the disabling to another setting, this would work.
Comments out xml menu entry for LLFloaterVoiceEffect access from LLPanelVoiceEffect is the intended method
TODO: Once Shyotl's new layout stack code comes in, make LLFloaterActiveSpeakers into a vertical stack so we can properly hide LLPanelVoiceEffect upon a debug setting.
This fires so little that it isn't worth anymore to look into it
(the only problem resulting from this is a wrong timeout on one
of the http requests); and therefore no longer makes sense to
have it triggered in alpha builds at all, since those do not
produce enough debug output to understand what caused it in the
first place.
Revert an incorrect change made in
c5fc945f33 (imported from viewer 3).
This stops ASSERT(mSegments.back()->getEnd() == getLength())
in LLTextEditor::loadKeywords.
Adds llvoicecallhandler.cpp
Enables the Group and Avatar Actions requiring the voice refactor.
Adds autoStartCallOnStartup, processAgentListUpdates, startCall, and endCall to LLIMMgr.
Gives llimpanel some LLIMModel functionality to see if a floater was opened with the intent of being a call.
Cleans up LLIMPanel with new functions from the voice refactor.
Bug was introduced in c701c61566
for single persons, but already existed for when granting rights
to more than one person at a time.
There is still a problem left now that you have to confirm
several times (once, but also had to confirm two or three times)
before it gets through. That doesn't seem related to THIS bug,
but seems to be a new bug, possibly introduced in the same commit
mentioned above.
If the current voice chat's floater is undocked, grab it by session id so that it's not labeled blank
When the button is clicked, open the current voice chat floater, not the communications floater, this is the intended action.. how it should have acted in the first place.
Minor updates to code, mostly just a migration with some v3 stuff commented, since we don't have LLAvatarList and must use buttons since scrolllist menus don't actually exist nicely yet.
Added toggleMuteVoice and isVoiceMuted to LLAvatarActions
Added a minor touch to the voice volume slider, it'll now offer changing your own volume while in an active voice session.. nice to not drop out of an import voice session just to fix yourself.
Also, fix a bug with SpeakerMgr's not flagging speakers for removal properly, causing external speakers and speakers managed by LLActiveSpeakerMgr to never actually get removed.
Condenses the three moderation responders to one.
Adds Speakers settings.
Uses dedicated timer class to track speakers on the list
Adds temporary getSpeakerManager() function to LLFloaterIMPanel to play the role of LLIMModel::getSpeakerManager
Migrate a bunch of classes out of llvoiceclient.* and into new llvoicevivox.*
Update most of these to match their counterparts
Introduce VoiceFonts support (voice morphing, floater still to come)
Support for a bunch of v3 voice settings.
Move volume settings management from LLMutelist into LLSpeakerVolumeStorage
Support for Avaline mutes (WIP)
Adds voice section to LLAgent
Moved llfloatervoicedevicesettings to llpanelvoicedevicesettings, v3's voice device panel design is more intuitive.
This should fix 'Received 302 (Moved Temporarily) for responder
"AgentStateResponder" which has no followRedir().
Some responders want to deal with redirections themselves, I checked if
this (new, pathfinder related) responder wants that in viewer-release,
but it doesn't. Turning this on requires to also keep track of cookies,
so it's a bit slower and therefore left at the old default: to not let
curl follow redirections. Optionally we would turn it on by default and
explicitely off for those responders that want to deal with 302's
themselves and for those that really don't need it and are used most
heavily.
Cleans up llfloatergroupinfo, makes it an instance tracker... pretty much as nice as llfloateravatarinfo now ^*^
Adds notifications JoinGroupNoCost and JoinedTooManyGroups (added to our existing translations, of course)
Cleans up all around, placing groupactions around.
Touches up bits for avataractions
Rlva style~ So update to RLVa stuff!
Adds support for @startim and @startimto
Enables hasOpenIM and hasOpenProfile, Yay functionality!
RLV_BHVR_STARTIM and RLV_BHVR_STARTIMTO added
While I was working, I was updating LLAgentHandler, after long enough it was identical enough to the one in llpanelprofile, so we're using that now.
Cleans up llfloateravatarinfo to the point of being a floater and instancetracker wrapper for a panelavatar (profile panel)
Bypasses looking up expired names that we know via get, this should avoid chats (and profiles, but that bug never got out) never opening for people we already know the name of on a bad connection; of course, this will only cause a faster reaction on the UI's part, messages may never get sent still (and profiles may never load) if the connection is truly terrible.
Cleans up llfloaterfriends and some parts of llfloateravatarlist (avatarlist could be cleaned up more from this perhaps in the future)
May slightly look better with copy detection and without space changes..
llgivemoney.cpp changes fix up some dummy view warnings I noticed while testing these changes
llpreview.cpp changes avoid segfault caused by llfloateravatarinfo not being a preview anymore but being inside a multipreview nonetheless.
Translators, don't worry, I covered this one with updates from v3 (Except German team)
https://code.google.com/p/singularity-viewer/issues/detail?id=848
If advance_state is called, then the state is NOT changed (only
sub_state_w->advance_state is set), but sub_state_w->skip_idle is set to
true in order to ignore the next call to idle (if the state machine is
already in the middle of executing a state). Therefore, this assert
would trigger. The solution is to not trigger when skip_idle is set.
The const LLRelationship* info was likely null at times, or names weren't looked up, we just failed silently and played the start IM sound as though nothing had happened, this won't happen anymore.
https://code.google.com/p/singularity-viewer/issues/detail?id=679
Instead of making the cursor just always an arrow, I changed the
'working' cursor from a watch to an arrow + hour glass. Note that the
BMP of the 'wait' cursor was exactly the same as the 'working' cursor,
so if anywhere 'working' should NOT have an arrow, then that should be
replaced with the UI_CURSOR_WAIT to restore the old cursor.
Obviously, the blinking is fixed too - cause that is what this all was
about.
Conflicts:
indra/llappearance/llwearable.h
indra/llui/llcombobox.h
indra/newview/jcfloaterareasearch.cpp
indra/newview/jcfloaterareasearch.h
indra/newview/llpanelgrouproles.cpp
indra/newview/llpanelgrouproles.h
indra/newview/llviewermenu.cpp - Plugged in new MenuFloaterDict for AssetBlacklist and SoundExplorer in menu_viewer.xml and removed the old listeners for them.
indra/newview/skins/default/xui/es/floater_inventory.xml
Compile Fixes:
indra/llcommon/llstl.h - error: expected nested-name-specifier before ‘const’
indra/llui/llmultisliderctrl.cpp:283:12: error: ‘caller’ was not declared in this scope
indra/llui/lltexteditor.cpp
- error: operands to ?: have different types ‘const LLPointer<LLTextSegment>’ and ‘long int’
- error: passing ‘const LLPointer<LLTextSegment>’ as ‘this’ argument of ‘LLPointer<Type>& LLPointer<Type>::operator=(const LLPointer<Type>&) [with Type = LLTextSegment]’ discards qualifiers
indra/newview/llfloaterpermissionsmgr.cpp - Silly Shyotl, boost bind, not std bind.
indra/newview/llfloaterproperties.* - error: ‘LLInstanceTracker<LLFloaterProperties, LLUUID>’ is an inaccessible base of ‘LLFloaterProperties’
indra/newview/llgivemoney.cpp - Again, boost::ref, not std::ref
indra/newview/llpreviewscript.cpp - no known conversion for argument 1 from ‘std::vector<const LLPointer<LLTextSegment> >’ to ‘std::vector<LLPointer<LLTextSegment> >&
Fixes a possible ASSERT(!(need_new_run && !mYieldEngine &&
sub_state_r->run_state == run_state)).
When over all multiplex_impl functions and this is the only case that I
found where it could return without changing the state and without
calling either idle() or yield().
Two real changes: 1. Don't tell the user we're counting scripts when they just want them gone; 2. When deleting a script, counter-iterate to avoid a crash
Adds a bit more debug spew commented out, helped me out with this.
Thanks to Sentinel for catching this early!
Moves the "We have a real utterance now" block back above the concatenation of names and verbs and the message.
Maybe italicize should be tied to a separate setting for bubble chat, but for now let's see if it is fine in its current state.
Don't add names that haven't been looked up yet to the group roles list, wait for them to be looked up, then check them against the filter.. this avoids unrelated names getting turned up in the list under a filter.
Also diverged a bit from upstream to filter using the displayed names, since people who are only having Display Name shown will get inconsistent names turned up by the filter, otherwise. (Searching "Inusaito Kanya" would turn up "Aur'a Færs" in the results, which obviously isn't what they're looking for... maybe this should be done with complete name, but logically you should see what you searched in your results)
Script Counter now shows the names of avatars in the user's desired format.
Adds "Count Scripts in Selection" to the Tools menu. (Can count for multiple objects, quite useful for land owners, no?)
Makes the Script Counting strings translatable. (ScriptCounting, ScriptCountAvatar, ScriptCountObject, and ScriptDeleteObject)
ScriptCounter is no longer a giant pile of static, it goes away when it has run its course and multiple instances can exist simultaneously.
Removes the silly unneeded parts of ScriptCounter, and thus removes it from llstartup.cpp
Adds some nice documentation in comments, and moves some log output to proper places (although I commented it out, it proved quite spammy for high primcount objects, initial loop runs super fast)
Trying to view this diff with no space changes is the best course of action, but even that will be tough...
Adds a header guard to scriptcounter.h
Hooks up menu function LLObjectVisibleScriptCount to Object.VisibleScriptCount, apparently this was never hooked up.... strange
This splits the AIPerService queue up into four queues: one for each
"capability type". On Second Life that doesn't make a difference in
itself for textures because the texture service only serves one
capability type: textures. Other services however can serve two types,
while on Avination - that currently only has one services for everything
- this really makes a difference because that single service now has
four queues.
More importantly however is that the administration of how many requests
are in the "pipeline" (from approving that a new HTTP request may be
added for given service, till curl finished it) is now per capability
type (or service/capabitity type pair actually). This means downloads of
a certain capability type (textures, inventory, mesh, other) will no
longer stall because unapproved requests cluttered the queue for a given
service.
Moreover, before when a request did finished, it would only look for a
new request in the queue of the service that just finished. This simple
algorithm worked when there were no 'PerSerice' objects, and only one
'Curl' queue: because if anything was queued that that was because there
were running requests, and when one of those running requests finished
it made sense to see if one of those queued requests could be added now.
However, after adding multiple queues, one for each service, it could
happen that service A had queued requests while only requests from
service B were actually running: only requests of B would ever finish
and the requests of A would be queued forever.
With this patch the algorithm is to look alternating first in the
texture request queue and then in the inventory request queue - or vice
versa, and if there are none of those, look for a request of a different
type. If also that cannot be found, look for a request in another
service. This is still not optimal and subject to change.
Removes the "not sure why" block of code that sets the other_participant_id null if it's really from the user.
I have no idea why this ever was needed, it's a hack for certain, and only breaks things now.
Use the user-desired name with Resident stripped out, when on SecondLife grid.
When using legacy names without group titles, don't show the last name on a new line.
When using chat bubbles or typing bubbles, use the desired tag color.
Bypasses pointless call to LLSelectMgr::getInstance()->selectGetAllValidAndObjectsFound()
Cleans up RLVa patch to read more clearly (this change is better viewed without spaces)
Removes the unnecessary drop target and give item text in these cases.
On someone else's profile, you may drag and drop a replacement texture
On your profile, you have no reason to drag and drop an item, in fact this can cause bad inventory issues (yes, I've tested it)
(IE: "Aur'a Færs (inusaito.kanya)is typing..." instead of "Inusaito Kanya is typing...")
This adds consistency between chat and messages, and should Resident strip in most cases.
Added stricter checking for fmodex errors.
Demote a harmless message from llinfos to lldebugs when audio buffers are all consumed.
Initialize LLAudioBuffer member variables.
-LLAudioBuffer::mInUse is inited to TRUE to avoid buffers that just got created from getting deleted during the same frame by new audio sources further down the chain.
If AIPerService::add_queued_to fails because a new request is throttled,
then do not add the request to the end of the queue, nor remove it from
the queue: do nothing: it makes no sense to move the request to the back
because they all belong to the same service and all of them will be
either throttled or not.
Note: Still need to fix that in this case we should look in queues of
other services.
The old code could do up till four requests with only one approvement.
Now we just start to assemble the four types of requests until either we
can get approvement for one, or one of them gets too large. This way we
still request everything in the same order, and at LEAST as many per
call as before, assuming we get the approvement of course.
The result should actually be faster because now we will request up to 5
folders or items per capability, and not spread those 5 out over 2 to 4
capability requests.
Basic Summary:
Issue 743: [Chat UI] Option to italicize actions (/me) in chat
- Adds debug LiruItalicizeActions, and a checkbox to Adv. Chat->Chat UI preferences
Issue 737: [Frosting] Annoyance Removal (Red beacon after teleport using LM's)
- Adds debug ClearBeaconAfterTeleport, checkbox under System->General
Issue 639: [Frosting] The agent isn't identified properly in chat
- Oh what a silly issue this was, it's as though whoever wrote this didn't care.
Fixes issue where names in logs do not match names in chat due to display name system
Fixes the issue in which Unnamed objects got named by a hardcoded string under certain circumstances.
Issue 813: [Frosting] When only accepting from friends, do not display incoming chat notification for nonfriends
- Also broke the setting out, separating it from the voice calls friend only setting
- Adds InstantMessagesFriendsOnly debug setting and checkbox in Adv. Chat->Chat/IM
Issue 764: Copy SLURL from Map returns correct region but wrong coordinates.
Satisfied the longstanding issue of inflexible autoresponse options.
- Autoresponse now has its own tab in Adv. Chat preferences: Busy, Muted, nonfriends, and anyone (or just friends) can have separate responses, along with items of your choosing.
- Prevent doubling up with the first repeated autoresponse due to typing message and normal message.
Translator Summary:
Adv. Chat->Chat UI->"Italicize action messages (/me)"
System->General->"Clear red destination beacon after teleporting"
Drop Targets for floater_ao.xml, panel_avatar.xml, panel_group_notices.xml, and panel_preferences_ascent_system.xml
Adv. Chat->Chat/IM->"Only accept IMs from Friends"
Please clean up the Busy Mode Response elements from panel_preferences_im.xml
strings.xml now has "IM_autoresponse_minutes"
Adv. Chat (panel_preferences_ascent_chat.xml) now has a new panel "Autoresponse", please clean up the old Autoresponse elements from Chat/IM tab and translate this panel.
Developer Summary:
Adds EChatStyle to LLChat, used for identifying what style a piece of chat is.
Update settings_per_account.xml
- Reorganized the ascent specific section.
- Removes a few old and unused settings
Better organize settings_per_account_ascent.xml
- TODO: Actually get this include system working and remove the Ascent specific section in settings_per_account.xml
Modernize LLDropTarget and make it more flexible and stand alone
- The Text of drop targets is now a child of the target itself, meaning the necessity of having a static instance to the parent is eliminated
- Drop targets are now one element in UI XML.
- Drop targets now have fill_parent option which allows the target to spread over the parent, while the text, tool_tip, and border stays in place
- If Drop Targets have a control_name, it is from the per account settings group, since Items must be in the inventory of the account in question.
- All drop targets now use the common LLDropTarget class instead of their own.
- LLGroupDropTarget is now derived from LLDropTarget and has its own tag group_drop_target.
Cleaned up the focus functions we use to focus the input bar, setInputFocus exists for their purpose.
Updated our llim* code to line up better with upstream and conform to styling.
Polished LLTracker and LLFloaterWorldMap a bit
Cleaned/Updated up LLStyleMap a bit.
Optimized autoresponse code:
- wildcards are now replaced via boost::algorithm::replace_all
- Autoresponse and related chat enhancements are now performed inside their case, instead of by the large if block above.
The inventory bulk fetch is not thread-safe, so the it doesn't start
right away, causing the approvement not to be honored upon return from
post_approved (formerly post_nb).
This patch renames wantsMoreHTTPReqestsFor to approveHTTPRequestFor,
and has it return NULL or a AIPerService::Approvement object.
The latter is now passed to the CurlEasyHandle object instead of just a
boolean mQueueIfTooMuchBandwidthUsage, and then the Approvement is
honored by the state machine right after the request is actually added
to the command queue.
This should avoid a flood of inventory requests in the case
approveHTTPRequestFor is called multiple times before the main thread
adds the requests to the command queue. I don't think that actually ever
happens, but I added debug code (to find some problem) that is so damn
strictly checking everything that I need to be this precise in order to
do that testing.
I hadn't committed it at first since it gives more than just information about the selected attachment,
and there was no way to scroll to the selected attachment in the list and highlight it,
but sometimes the avatar's body is covered in attachments, so the entry in the avatar body menu alone isn't enough.
* Removed the 'RequestQueue' from other PerServiceRequestQueue occurances
in the code.
* Made wantsMoreHTTPRequestsFor and checkBandwidthUsage threadsafe (by
grouping the static variables of AIPerService into thread ThreadSafe
groups.
Most notably getMesh (the only one possibly using any significant
bandwidth), but in general every type of requests that just have to
happen anyway and in the order they are requested: they are just passed
to the curl thread, but now the curl thread will queue them and hold
back if the (general) service they use is loaded too heavily.
Don't pass arguments to wantsMoreHTTPRequestsFor, but use globals in
llmessage: AIPerService::sHTTPThrottleBandwidth125 and
AIPerService::sNoHTTPBandwidthThrottling instead.
This is needed later on.
This also makes the viewer immune for grids that send the FetchInventory2 et al
capabilities regardsless of whether we requested them (in fact, we always
request them now: we need them when someone switches in the middle of a session).
Note that (I tested that) textures could already be switched between
HTTP and UDP without relogging.
Call AIPerService::wantsMoreHTTPRequestsFor in
LLInventoryModelBackgroundFetch::bulkFetch to determine if curl is ready
for the next batch or not, instead of using inaccurate heuristic code
that is just guessing a bit.
Add '(UDP)' after Objects, to show that this is UDP bandwidth.
Do not add the received HTTP texture bytes to gTextureList.sTextureBits,
making it (and the 'UDP Textures' graph) indeed pure UDP.
Move the destructor (and copy constructor while I was at it) to the .cpp
file in order to avoid instantiating the destructor of
boost::intrusive_ptr<ThreadSafeBufferedCurlEasyRequest> from a header,
which would require the class ThreadSafeBufferedCurlEasyRequest
to be defined in that header, which is unnecessary. In other words,
this avoid the need to include "aicurl.h" in headers using
AIPerService[Ptr].
Also fixed indentation of a comment.
Usage:
AIThreadID foo(AIThreadID::none);
...
llassert(is_single_threaded(foo));
...
llassert(is_single_threaded(foo));
...
etc
The first call to is_single_threaded(foo) remembers the thread,
and after that it is enforced that any call from anywhere that uses foo
is done by the same thread.
If AIThreadID::none is omitted then the thread is enforced to the thread
that creates the AIThreadID.
Mostly works, but
indra/newview/skins/default/xui/en-us/floater_animation_anim_preview.xml
needs work (the 'Name:' should be at the top, not the bottom).
Also, it asks if you want to upload this as temporary. It shouldn't do
that.
If you clicked on 'Add' and then filled in the fields that say
'<required>'.. and then click on OK... Then all the URL's stay blank and
there is no way to fix that anymore (short of deleting the entry first
and NOT filling in the required name?!).
I added the button back to get the URL, at any time. Much more clear.
While at it, I added some tool tips and renamed 'Add' to 'Create'
because it confused the hell out of me to have a grid selected and then
needing to press 'Add' below that.. as if you add something to the
selected grid (Better would be to have the Add button above the
selector, or even be part of the selector drop down).
Generalized several templates in llstl.h in order to support more containers.
Removed several instances of is_in_map/getWearableCount being followed immediately by another lookup with the same key. find is more efficient, as we get an iterator to use instead of a simple boolean.
Adds throttling based on on average bandwidth usage per HTTP service.
Since only HTTP textures are using this, they are still starved by other
services like inventory and mesh dowloads. Also, it will be needed to
move the maximum number of connections per service the to the PerService
class, and dynamically tune them: reducing the number of connections is
the first thing to do when using too much bandwidth.
I also added a graph for HTTP texture bandwidth to the stats floater.
For some reason the average bandwidth (over 1 second) look almost like
scattered noise... weird for something that is averaged...
Modernizes viewer_manifest.py
adds install.sh and refresh_desktop_app_entry.sh for those who want to "install" Singularity to their applications.
Updates client-readme-voice.txt to explain about Multi-Voice
This fixes
https://code.google.com/p/singularity-viewer/issues/detail?id=736
The problem was that we need to keep the 'user' derived THREAD_IMPL
alive in the thread, and therefore used an LLPointer<THREAD_IMPL>
(as base class of AIStateMachineThread<THREAD_IMPL>), and therefore
THREAD_IMPL, derived from AIThreadImpl had to be derived from
LLThreadSafeRefCount. However, AIStateMachineThread<THREAD_IMPL> also
needed to be a statemachine of itself and is derived from
AIStateMachineThreadBase derived from AIStateMachine which is ALSO
derived from LLThreadSafeRefCount - that in this case wasn't really
needed. An attempt to deactive it by calling ref() from the constructor
of AIStateMachineThreadBase failed on the fact that LLThreadSafeRefCount
insists that its ref count mRef is exactly zero when it is being
deleted.
The chosen solution is to remove the ref count from AIThreadImpl and use
the LLThreadSafeRefCount base class of AIStateMachineThreadBase. The
result is that not only THREAD_IMPL, but also the state machine object
is kept alive, but that doesn't seem like a problem.
Thus, instead of passing a AIThreadImpl* to
AIStateMachineThreadBase::Thread, we now pass a
AIStateMachineThreadBase* to it to keep the whole of the
AIStateMachineThread<THREAD_IMPL> object alive, which has a THREAD_IMPL
as member now. This member then can be accessed through a virtual
function impl(). Another result of this change is that the 'user' (the
class derived from AIThreadImpl, THREAD_IMPL) now has to deal with the
LLPointer, and use LLPointer<AIStateMachineThread<THREAD_IMPL> >
instead of just AIStateMachineThread<THREAD_IMPL> and also allocate
this object himself. The access from there then changes into a -> to
access the state machine (as opposed to a .) and ->thread_impl() to
access the THREAD_IMPL object (as opposed to a ->).
This fixes
https://code.google.com/p/singularity-viewer/issues/detail?id=736
The problem was that we need to keep the 'user' derived THREAD_IMPL
alive in the thread, and therefore used an LLPointer<THREAD_IMPL>
(as base class of AIStateMachineThread<THREAD_IMPL>), and therefore
THREAD_IMPL, derived from AIThreadImpl had to be derived from
LLThreadSafeRefCount. However, AIStateMachineThread<THREAD_IMPL> also
needed to be a statemachine of itself and is derived from
AIStateMachineThreadBase derived from AIStateMachine which is ALSO
derived from LLThreadSafeRefCount - that in this case wasn't really
needed. An attempt to deactive it by calling ref() from the constructor
of AIStateMachineThreadBase failed on the fact that LLThreadSafeRefCount
insists that its ref count mRef is exactly zero when it is being
deleted.
The chosen solution is to remove the ref count from AIThreadImpl and use
the LLThreadSafeRefCount base class of AIStateMachineThreadBase. The
result is that not only THREAD_IMPL, but also the state machine object
is kept alive, but that doesn't seem like a problem.
Thus, instead of passing a AIThreadImpl* to
AIStateMachineThreadBase::Thread, we now pass a
AIStateMachineThreadBase* to it to keep the whole of the
AIStateMachineThread<THREAD_IMPL> object alive, which has a THREAD_IMPL
as member now. This member then can be accessed through a virtual
function impl(). Another result of this change is that the 'user' (the
class derived from AIThreadImpl, THREAD_IMPL) now has to deal with the
LLPointer, and use LLPointer<AIStateMachineThread<THREAD_IMPL> >
instead of just AIStateMachineThread<THREAD_IMPL> and also allocate
this object himself. The access from there then changes into a -> to
access the state machine (as opposed to a .) and ->thread_impl() to
access the THREAD_IMPL object (as opposed to a ->).
Makes the scrolllists multiselect, adds a disable button, rearranges the buttons, and maximizes vertical and horizontal use of real estate for scroll lists.
Finally notifications can easily be passed back and forth between the two lists
Removes the pointless alerts for explaining what "en/dis-able all" does. If some language needs larger explanation, there's always tooltips, but it should be obvious enough without notifications.
As for code changes, this swaps a whole bunch of static functions over to boost::bind and removes includes.
Translators will need to update panel_preferences_popups.xml (and notifications.xml)
Adaptation of current merchant outbox project viewer to conform to Singularity's needs.
Adds the following commits by Merov Linden:
a5db366 MAINT-2287 : WIP : Implement a market place state
43fc74b MAINT-2287 : WIP : Fix compile issue
cb887fe MAINT-2287 : Fixed : Test the merchant/no merchant status without relying on outbox, Recreate missing outbox for a merchant, UI clean up on init.
f1934c0 MAINT-2301 : WIP : Catch a bit more 4xx and 5xx error codes, display the error code in the alert.
3fbbe6c MAINT-2301 : Fixed : Ignoring 499 timeout errors on POST (safe).
3dc6263 MAINT-2301 : Do not treat 404 errors (server returns not found) as 403 errors (forbidden, i.e. resident is not a merchant)
94039ee MAINT-2301 : Change messaging in the Merchant Outbox panel when an error happened, so not to be confused with the not-a-merchant case.
7c9cb2e MAINT-2452 : Fixed : Do not clear the cookie in IMPORT_DONE_WITH_ERRORS case so future retry have a chance to work.
67b872e WENG-618 : Added debug printout for POST and GET when InventoryOutboxLogging is turned on
Translators, you will need to update strings.xml and notifications.xml for this change.
-Added ui-local transformation matrix.
-Gutted legacy commitcallbacks throughout ui widget ctors.
-Created filter_editor ui widget which issues commit on keypress
-search_editor commits on focus loss/enter press
-search_editor and filter_editor now have a built in 'x' button to clear text.
-LLComboBox::setPrearrangeCallback now uses boost::function
-LLComboBox::setTextEntryCallback now uses boost::function
-LLLineEditor::setKeystrokeCallback now uses boost::function
-LLLineEditor::setPrevalidate now uses boost::function
-LLPanel::childSetKeystrokeCallback removed
-LLPanel::childSetPrevalidate removed
-LLPanel::childSetActionTextbox now uses boost::function
-LLTextBox::setClickedCallback now uses boost::function
-LLTextEditor::setKeystrokeCallback added.
-Cleaned up JCFloaterAreaSearch
Thins out that overly thick block of checks in the middle of LLPanelPermissions::refresh
Also corrected incorrect log output, after First stage comes contents not textures, Melanie.
Hide E and export checked from regions without export support
No longer allow PERM_EXPORT from being added to default everyone permission flags if it's not supported by the sim.
Disable next owner perms boxes when PERM_EXPORT
Added checks disabling the export toggle conditionally.
All cases covered except textures, couldn't figure that one out...
Mind the TODO's in the diff..
Note that HTTPTimeout::sClockWidth is no longer used for HTTPTimeout (as
if it's value became a constant of 0.01, the fraction 10ms / 1s).
A new variable, HTTPTimeout::sClockWidth_10ms is used to calculate
sTime_10ms (only).
Also HTTPTimeout::mStalled and HTTPTimeout::mLowSpeedClock changed units
to the same as of sTime_10ms (time since epoch in 10ms units).
Rationale: LL is doing all throttling per service (host:port), not per
service hostname. Also, textures and capabilities use the same host: the
sim you are connected to. Splitting the queues up on a per-service basis
will stop the textures from blocking a capability request.
After commit things compile again :).
The HTTP bandwidth throttling is not yet implemented. I'll put a
temporary fix back the next commit that just does it the "old way"...
Points to the AIPerHostRequestQueue instance corresponding to the
hostname in LLTextureFetchWorker::mUrl. This is basically a cache as we
could of course just retrieve that instance from mUrl at any time,
everytime. Needed in a future commit.
This includes also non-texture requests (not sure if it's worth it to
explicitely separate this data for just textures).
The texture console now prints: HTTP:c/q/a/r
Where, c = number of 'add' request commands in the command queue
(minus the number of 'remove' request in the command queue and not
taking into account the command_being_processed, nor entirely being
thread-safe with regard to adding requests to 'q' or 'a' next: it is
possible that a request is no longer counted in 'c' but not yet is added
to 'q' or 'a'.
q = number of queued (throttled) requests (by the curl thread).
a = number of actually added requests (to the multi handle).
r = last returned value of 'running handles' by libcurl.
Obviously, c and q should be small (0 or 1) most of the time and a and r
should be equal and maxed out. This turns out to be the case.
Renamed PerHostRequestQueue and PerHostRequestQueuePtr to
AIPerHostRequestQueue and AIPerHostRequestQueuePtr respectively and
moved them to global namespace. This in preparation for using them in
the texture fetcher (as function of the hostname of the url that is
contructed there).
This new variable is updated to contain the total number of requests in
MultiHandle::mAddedEasyRequests. It can be a static because MultiHandle
is a singleton (there is only one curl thread) and it has to be an
(atomic) static because we don't want to need to take the lock on
MultiHandle for accessing this variable.
The new variable is updated to contain the sum of the size of
PerHostRequestQueue::mQueuedRequests of every PerHostRequestQueue
object, and thus the total number of queued requests for all hosts
together.
Also added PerHostRequestQueue::host_queued_plus_added_size() which
returns the the sum of queued requests plus the requests already added
to the multi handle for this particular hostname.
This adds a size (command_queue_st::size) to the ThreadSafe deque<Command> that was
AICurlPrivate::command_queue that is kept equal to the number of 'add'
commands in the deque minus the number of 'remove' commands in the
deque. The deque itself is now command_queue_st::commands.
Replaces LLTextureFetch::getNumHTTPRequests.
Returns AICurlInterface::Stats::running_handles.
This is work in progress that temporarily doesn't compile because
LLTextureFetch::getNumHTTPRequests is still being used somewhere.
Added a constraint to ensure that the avatar's height (with offset)
does not go below 0.1 meters. Camera was getting confused since the avatar's
effective height was negative.
Note the avatar is mostly underground/contorted even at 0.1 meters, but
most users setting values this low will be making ultra-tinies and would
be hiding the avatar mesh. Camera stays above ground when height is at 0.1.
Conflicts:
indra/llappearance/llavatarappearance.cpp
Instead of focusing the chat bar when the chat history floater is visible, focus it onFocusReceived
This avoids the floater grabbing focus when returning from mouselook.
Debug Settings DisableClickSitOtherOwner added.
Checkbox added to System Preferences for disabling click-to-sit on objects you don't own.
Also redid onCommitCheckBox a bit, best viewed without space changes.
There's more to this feature, but it doesn't work yet.
Fixes Stand Up slice not being hooked up in attachment menu
Translators, please update the pie menu accordingly. userdata="Translate,These"
Also fixes an instance where Continue Flying On Unsit would be ignored
We were getting the texture ID from the type,index couple, but were not
passing in index, which defaulted to 0. texture ID is available from the
texture object itself, so using that and removing the index parameter
to prevent future confusion.
Conflicts:
indra/newview/llvoavatarself.cpp
If log_path is empty, we shouldn't setChatLogsDir to it.
In fact, this may have been the cause of something Nomade Zhao brought up.
Also, InstantMessageLogPathAnyAccount was accidentally being set as a PerAccount
Easiest read with Copy/Move detection and no space changes
Adds debug settings: DragAndDropDistanceThreshold, EnableGrab, ClickToWalk, ClickActionBuyEnabled, ClickActionPayEnabled
ClickToWalk was redefaulted to false, though if you are curious enough to read this, you should give it a try, it takes some getting used to but it might be fun.
All HTTP timing is done by AIHTTPTimeoutPolicy.
Inside LLTextureFetchWorker::doWork when mState == SEND_HTTP_REQ,
mCanUseHTTP is true, throttling is not in effect and mURL is not empty,
mLoaded is set to FALSE, mState is set to WAIT_HTTP_REQ and
LLHTTPClient::request is called that starts the download by curl.
A call back to LLTextureFetchWorker::callbackHttpGet is guaranteed,
which causes mLoaded to be set to TRUE (HTTPGetResponder::completedRaw
calls LLTextureFetchWorker::callbackHttpGet which sets mRequestedSize to -1
(if there was an error) and mLoaded to TRUE).
Being in state WAIT_HTTP_REQ, once mLoaded == TRUE (and mRequestedSize
is -1), the different timeout errors are handled.
This reverts commit 63dcd7ba32.
That commit is nonsense and only shows that Liru has no clue what he is
doing when it comes to the snapshot stuff :/.
And no, I wasn't even AWARE he made this commit, I was just happily
exploring and wanted to make a few snapshots when I suddenly noticed
that several things were BROKEN: the aspect that the fullscreen preview
was shown with was wrong, and when I wanted to limit the aspect of my
feed upload that wasn't possible anymore ?!?!?? WTF
Please don't screw up the hard work of others without at LEAST first
consulting them.
This fixes
https://code.google.com/p/singularity-viewer/issues/detail?id=714
The problem was a typo in AIStateMachine::sleep, >= should have been <=
which caused a state machine that uses yield_ms() to never run anymore
when next run it already should have run again. AIFilePicker is the only
state machine that currently uses yield_ms and I hadn't spotted this
because I don't have plugin messages on by default which made my viewer
just that much faster that it the yield never expired the first run
already (causing it to expire immediately).
The rest of the changes in this commit are just minor improvements /
conformation to the EXAMPLE_CODE in aistatemachine.cpp.
Also improves the related code.
It seems the main problem was calling updateVolume before setting sculpt params because this call relies on the isSculpted()
This fixes https://code.google.com/p/singularity-viewer/issues/detail?id=705
Adds 'bool redirect_status_ok(void) const { return true; }' to LLIamHere,
because it's ok to receive a 302 status there. Likewise added to LLIamHereVoice,
because that has the same comment in its error() method.
Also fixes the problem that if two redirects occur on a row, then the
upload_finished detection asserted because it would detect the third
time that libcurl turned off writing to the socket as a failure (the
second time wasn't a problem because mUploadFinished was reset upon
receiving the first 302 header, but not upon receiving the second
header).
Removes old code for permitting emerald attachment points
Removes other old dead code...
Updates RLVa a bit.
Adds more translation flexibility via strings.xml
Now that a call to cont() can schedule a run of the statemachine, we
need this change to make it robust (the comment that cont() does never
access mRegisteredStateMachines no longer holds).
This is now necessary since the curl thread no longer syncs with the
main thread: it is possible that a request finishes after a texture
fetch thread was shot down but before curl was stopped, and curl
calling BufferedCurlEasyRequest::processOutput while objects that the
responder uses were already destructed (most notably
LLTextureFetch itself).
Doing this resulted in a 404 on Aditi, and although that was a server
bug; it still doesn't seem to make much sense to do the request in the
first place.
We were using an indicator of whether there *was* a baked texture to whether we
were *using* a baked texture. Switched to one of the (several) proper indicators
of whether a baked texture was in use. This should allow local texture data to
get marked for download when we enter appearance mode.
Local testing confirms that old apperances linger for a second or two, but are
soon replaced by the correct local renders.
We suppress texture downloads for local textures not needed with server side
baking. We need to explicitly re-set texture priority for local textures
when entering appearance mode.
Wearable parsing error caused last texture in some assets to fail to parse.
Parser now does not throw an error if the wearable does not end in a newline
Adding a new visual param that allows users to manually adjust an offset for
how far off the ground (+ or -) their avatar's root bone is.
Supports the +-2m range people are used to adjusting in their viewers, but
new implementation should support server-generated appearances.
Conflicts:
indra/newview/character/avatar_lad.xml
indra/newview/llagent.cpp
indra/newview/llcallingcard.cpp
indra/newview/skins/default/xui/en/strings.xml
This value really IS in bytes/s (not for the total), and apparently 56
kB/s is too optimistic. The value was used by LL for transfers that went
beyond the total download time (2 minutes?), adding enough seconds per
received bytes to the timeout to allow a download at 56 kB/s to finish.
Our meaning is different however: we time out immediately and whenever
the download drops below this speed.
Perhaps a better algorithm is where the speed demand is based on the
total size of the download, but I'm not sure we always know the size of
downloads at this point.
When uploading finishes, but is not detected, the timeout should be for
"reply delay", the time that the server takes before it replies, and not
CurlTimeoutLowSpeedTime. This patch adds code that takes this failure
into account (which happened only ONCE for me on Metropolis while flying
around and using trickle (not sure if that is relevant), so it's not
that likely to improvement anything in practise. Note that it is
detected by an assertion when it happens, so that we can safely assume
it normally never happened on SL).
* Generalized PUT / POST configuration by adding
CurlEasyRequest::setPut, which now also supports keep-alive (which
still isn't used).
* Upload content length is now stored in CurlEasyRequest::mContentLength
* CurlEasyRequest::has_stalled() now return false if it was possbile
that the 'upload finished' detect failed AND calls upload_finished()
itself in that case, so it is no longer 'const'.
* If low speed is detect exactly when the last bytes are being attempted
to be sent (unlikely scenario), then the upload gets 4 more seconds
after which is switches to CurlTimeoutReplyDelay.
* Added EDoesAuthentication and EAllowCompressedReply to replace
booleans, for readability and type-safety, as did EKeepAlive. Note
that this change inverts the meaning of the compression related parameter.
* Unrelated: removed an unnecessary #include "llurlrequest.h" from
llxmlrpcresponder.h
When a state machine is aborted after it switched to bs_initialize,
but before it executed initialize_impl(), then we should set the
state back to bs_reset and abort cleanly by switching to bs_killed
and then handle that. Before the state was set to bs_abort, resulting
in calling abort_impl(), finish_impl(), the call back and unref()
for an not initialized state machine! (detected by the assert that
makes sure that ref()/unref() are called in balance).
Added libpathing to LLPHYSICSEXTENSIONS_INCLUDE_DIRS
llviewermenu updated a bit to be closer to v-d/rlva. Best viewed without space changes.
Updated llresmgr.cpp from v-d to "handle special case of input value being zero"
pipeline update: hideObject, restoreHiddenObject, hideDrawable, and unhideDrawable added.
Thanks to Henri Beauchamp for some UI code touchups, thanks to Zi Ree for Rebake notification.
Thanks to Mobius Ryba and Ansariel Hiller for the V1-style pathfinding icons.
Note: When opening from pie menu object selection is lost, unless the floater is already open..
This provides a more reliable reproduction of the bug we've been having with inspect.
Restores the cancel button with new functionality! In Freeze mode, it will exit freeze! Otherwise it will just close the floater as it used to do.
Lines up everything nicely, and removes overly complex tool tips.
Does not change or remove any existing functionality.
The responder name is now cached in LLURLRequest
(ResponderBase::getName() must return a string literal).
The run time (in the main thread) per state machine is now accumulated
in AIStateMachine (instead of AIEngine::QueueElement).
When AIStateMachine::mainloop runs longer than StateMachineMaxTime
then a warning is printed that now includes the time spent in the
slowest state machine (that frame) and (if it is a LLURLRequest)
what the corresponding responder is. Also the total accumulated run
time of that state machine is printed.
From this is can be concluded that the only responder currently
regularly holding up the main thread is LLMeshLODResponder (mostly 30 to
100 ms, but with spikes in the 1 to 2 second range some times).
Refresh the snapshot when calling show after instance exists (IE: Via Keyboard shortcut)
Should never have been removed in the first place, the purpose of 7faa19b297 was to have an explicit click to refresh, this patch requires an explicit click.
This does NOT break keeping the same snapshot while switching settings
This fixes a bug where unref() was called when a state machine was
aborted before it reached bs_initialized. Debug code was added to detect
errors related to that.
In order to run HTTPGetResponder in any thread, I needed direct access
to LLHTTPClient::request, so I had to move that to the header file,
and therefore had to move ERequestAction from LLURLRequest to
LLHTTPClient to avoid include problems.
With this, textures are fetched with no latency: call to
LLHTTPClient::request runs all the way till the state machine is idle
(AICurlEasyRequestStateMachine_waitAdded). There is small delay till the
curl thread wakes up, which then processes the request and opens the url
etc. When the transaction is finished, it calls
AIStateMachine::advance_state(AICurlEasyRequestStateMachine_removed_after_finished)
which subsequently doesn't return until the state machine is completely
finished (bs_killed). The LLURLRequest isn't deleted yet at that point
because the AITimer of the LLURLRequest runs in the main thread: it is
aborted, but only the next time the main thread state engines run that
is deleted and the timer keeps an LLPointer to it's parent, the
LLURLRequest, so only then the LLURLRequest object is destructed. This
however has nothing to do with the texture-bandwidth loop.
Fixes the segfault that was accidentally overlooked because voice decided to not return after the first run as I worked on all the other warnings
Thanks to Latif Khalifa for the VoiceMultiInstance debug setting which enabled me to use voice again.
Cleans up some related code, probably looks nicer with space changes off.. though this is a pretty straightforward change.
Comments out code that still exists in xmls or might likely be added in future.
Each piece tested quite a bit.
Fixes the issue with notifications not translating
Moves the UI initialization code block up a few lines to the same area as v-d and sunshine-external have it.
This more clearly shows how it relates with upstream code such that future changes in this area might avoid similar issues.
Removed AICurlEasyRequestStateMachine_added and
AICurlEasyRequestStateMachine_finished because the state machine is not
taking any action there anyway, and those states might be skipped all
together even, so they make no sense / shouldn't exist.
Also fixes a Dout line and initializes mState to 0 so
that if ever set_state would be called first from
a non-main thread then it will be larger (probably
not needed currently).
This reverts commit ef35aa7954
because it contained too much wrong things that I won't be
using. I'll re-commit stuff from it after that that I do
want to keep.
This work extends AIStateMachine to run multiplex() in the thread
that calls run(), cont() or set_state(). Note that all three
eventually call locked_cont(), so thats where multiplex() is called
from. Calling multiplex() means "running the state machine", as in
"calling multiplex_impl".
Currently only LLURLRequest uses this feature, and then only
for the HTTPGetResponder, and well only for the initializing,
start up and normal finish states.
A current/remaining problem is that we run into a situation where
the curl thread runs a statemachine to it's finish and kills it,
while the main thread is also 'running' it and tries to call
multiplex while the statemachine isn't running anymore.
Adds Texture Bandwidth slider
Adds Use HTTP for Inventory and Textures checkboxes.
Also, swaps out the bandwidth slider for a new Z Offset slider on quick settings, as bandwidth sliders should be set and forget, there is no modern need for them to be changed so frequently.
[Note to translators: please examine the network preferences after this update, controls have been moved and may now overlap.]
This causes LLSnapshotLivePreview::getAspectSizeProblem to never return
CANNOT_CROP_HORIZONTALLY or CANNOT_CROP_VERTICALLY anymore, making
the chance to successfully upload or save to a different target larger.
Minor update and cleanup to llpanelpermissions.cpp
Hide the You can modify this object text properly when Debugging Permissions
Show Debug Permissions on the same line on the build panel.
mTotalBytes had the meaning of "the sum of all elements in the vector",
but was reset to 0 at the start of a transaction. The meaning is now
changed to "total number of bytes in the vector that belong to the
current transaction".
Adds support for GamingData cap, and flags: PF_GAMING, DFQ_FILTER_GAMING, REGION_FLAGS_GAMING, and REGION_FLAGS_HIDE_FROM_SEARCH
Adds GamingCheck to floater_about_land.xml
Adds filter_gaming checkboxes to floater_directory* xmls
Adds "is gaming" and "hide from search" checkboxes to floater_god_tools.xml
An LLFolderView is added as child to LLScrollableContainerView,
but also adds the LLScrollableContainerView to it's mScrollContainer.
As a result, when scrolling inside a LLFolderView the event is passed to
the mScrollContainer, which then passes it first on to it's children
(see the "Bad UI design" remark in the code), causing an infinite loop.
This patch breaks that loop for those objects that have a
mScrollContainer: LLFolderView and LLContainerView.
This adds a counter and a 'dead' flag to the data stored in the linked
list. The counter counts the number of iterators (still) pointing to an
element and the dead flag is set to indicate the element was erased when
iterators are still pointing to it. As a result, iterators are NEVER
invalidated. Of course, such elements are subsequentially skipped when
iterating over the list. Assertions protect against dereferencing an
erased iterator, but incrementing or decremention still works: it is
still well-defined what the next (non erased) element is, assuming the
element wasn't erased (yet), but would be erased delayed - or assuming
the iterator would have been incremented (decremented) in advance to
erasing the element.
This is in fact much safer, because the only way to invalidate an
interator in the first place (in this code) is by calling removeChild,
which *already* has an assert never to remove a child that is being
iterated over (by means of the mInDraw flag).
This class can be used as RWLOCK parameter to AIThreadSafe to check that
data is only accessed by a single thread (like
AIThreadSafeSingleThreaded) AND is never write locked when a read or
write lock was already obtained (by the same thread). It doesn't
actually lock anything, it just keeps track if the "lock" was obtained
before. The use case is to check if STL containers aren't being used
(read or write locked) by a calling function when additional write
access is necessary, as write access might invalidate iterator that
point to the container (where the previous lock was taken).
This allows passing a different type than the default AIRWLock for
debugging purposes.
The signature of the class used for RWLOCK should be:
struct RWLock {
// Default constructor.
RWLock(void);
// Block until it's safe to read the data.
// high_priority is a hint that granting this thread the read lock is more important than granting another thread a write lock.
void rdlock(bool high_priority = false);
// Release the obtained read lock.
void rdunlock();
// Block until it's safe to write to the data.
void wrlock();
// Release the obtained write lock.
void wrunlock();
// Convert the obtained write lock into a read lock.
void wr2rdlock();
// Block until it is possible to convert the obtained read lock into a write lock.
void rd2wrlock();
// Return true when a read or write is obtained and subsequent calls to release the lock are expected.
bool isLocked() const;
};
Changes:
Adds LLUICtrlFactory::getBuiltFloater() to return LLFloater* when a floater has been built.
In llviewermenu.cpp's LLShowFloater::handleEvent():
Return early if the floater_name is empty,
otherwise if no anticipated floater is found, build one,
unless one of the same name is already built, then bring it to focus.
Documentation:
In order to add simple codeless floaters, a general understanding of our XMLs is necessary...
A simple codeless floater can be a few things, perhaps not limited to: media browsers, settings controls, and holders for inventory_panels.
So how do you make them conform to the codeless standard?
For the purpose of these examples, my floater file will always be floater_name.xml
Let's start with a shortened xml menu entry:
<menu_item_call label="Name!" name="name">
<on_click function="ShowFloater" userdata="floater_name.xml"/>
</menu_item_call>
Alright, that wasn't so hard, just remember the key in this is ShowFloater is the function and userdata is the filename.
The next part is the actual floater, which isn't so different from making a complex floater..
There are two ways to do this, depending upon desired behavior:
The first behavior is to have only one of the floater open at a time, the following short xml exemplifies this:
<floater name="floater_name.xml" title="Name!"/>
Having a floater with this behavior will cause the menu entry to bring it into focus.
The other behavior is to allow more than one of the floater open at a time:
<floater name="name" title="Name!"/>
In this case, the menu entry will spawn a new version of the floater with every click, regardless of previous ones existing.
Granted, these short <floater/>'s probably aren't but examples and will not likely stand alone.
* Removes polling stuff (call to gMeshRepo.update()) which did
nothing but check if uploads already finished.
* Just creates and runs the state machine (AIMeshUpload) instead
of creating an LLThread derived class (LLMeshUploadThread) and
adding that to a queue, then have the main thread start it
after adding it to another queue in order to keep track of
the instances (both queues are gone).
* mWholeModelUploadURL was moved to the state machine, because
it needs a life time till the responders finishes (can't be
part of the thread object).
* LLMeshUploadThread is now derived from AIThreadImpl instead
of LLThread, so it can be run in a state machine thread.
* The call to LLHTTPClient::post is now done from the main
thread instead of from the thread, but I don't think that is
a problem.
* Call a virtual terminated() that by default sets mStatus to STOPPED,
instead of setting it to STOPPED directly, allowing to override
the behavior of a LLThread derived class when the thread is about
the exit.
* Make setQuitting() public, so it can also be used to hint to a
thread that it should stop at its earliest convience.
This fixes standalone when those libraries are installed
elsewhere. Note that it "breaks" standalone if you just
installed the prebuilt manually. For that to work you
have to add /.../libraries/include to CMAKE_INCLUDE_PATH,
which is not recommended because it would pick up any
other prebuilt over your system installed libraries.
Instead, for standalone, install the libraries somewhere
with some prefix and then add that prefix to the environment
variable CMAKE_PREFIX_PATH.
For example, $prefix/include/collada and $prefix/lib/libcollada4dom.so
Conflicts:
indra/cmake/00-Common.cmake
One diff added /MP to CMAKE_CXX_FLAGS_DEBUG while
another removed /arch:SSE2 from the same line.
Fixed to honor both changes.
Changes to llviewermenu.cpp are better viewed without space changes
^Put together both RLVa Embedded and RLVa Main menus while building Advanced menu, labeling them RLVa; once the advanced menu is built and added to MenuBar, rlvMenuToggleVisible() is called.
Added onChangedMenuLevel() to rlvcommon.cpp
Added rlvMenuToggleVisible(), tweaked to only perform necessary operations for now, other parts left commented out for future use.
Removed menu visibility handling from RlvHandler::setEnabled()
NOTE: RLVa has only been updated in pertinent areas, from what I can tell we are a bit behind in other places, too.
Adds mClipboardFlexiParams, mClipboardLightParams, mClipboardSculptParams, and mClipboardLightImageParams to LLPanelObject.
Corrects the tooltip on the the copy button.
When the floater was opened in Freeze Time mode, then parent of the
widget that triggers it to open is the 'Floater View'. We do NOT
want to set that MouseOpaque :p. Using getParent here is just
nonsense.
When a sculptie has too few vertices, especially when we bluntly assume
it's stitched around and don't want to get less than 4 vertices in
either direction, then instead we end up with even ZERO vertices, which
causes a division by zero in LLPath::genNGon with undefined behavior.
Unified key message sending to function send_keys_message()
Switched a few getBOOLs to CachedControls
Added RadarChatKeysStopAsking, and RadarChatKeysRequest as a three button notification so the user can decide to permanently say no.
Corrected RadarChatKeys description to be more accurate.
If we want to know if the radar is open, we check instanceExists, not getInstance.
Also enabled using the announce button when RadarChatKeys is false to announce keys, for manual updates.
Conflicts:
indra/newview/llmeshrepository.cpp
Added /* */ around the 'virtual' keyword in two places
that collided with changes in meshupload from lightdrake.
Adds UseConciseGroupChatButtons, and UseConciseConferenceButtons
Adds "Buttons on group chat name line (Affects new group chats)" and "Buttons on conference title line (Affects new conferences)" checkboxes to Adv. Chat's Chat UI tab.
Adds floater_instant_message_ad_hoc_concisebuttons.xml, floater_instant_message_group_concisebuttons.xml
Brings panel_speaker_controls.xml's speakers_list down by 7 pixels, which is necessary because it is awkwardly high in old places as well, such as Local Chat.
It turns out that it's possible to receive data before an upload
finished when the server sends HTTP_BAD_REQUEST in the middle of the
upload (this happens to me when I try to upload a 6000x6000 image to my
profile feed, with is a 44MB file). So, in that case the finished upload
detection did not fail and we shouldn't assert.
Also made the view rectangle have some minimal size (1/10th of the
screens width and height).
Increased the used font a bit.
Fixed removal of the dialog in the case of uploading to profile feed.
Adds UseConciseIMButtons.
Adds floater_instant_message_concisebuttons.xml
Adds Have buttons on the same line as name for IMs (Affects new IMs) checkbox to Adv. Chat's Chat UI tab.
From Text Chat: Disallow communicate shortcut opening detached friends list
From Vanity: Use horizontal buttons for contacts floater (needs restart)
The rest were in Chat/IM of Vanity.
Adds Use horizontal buttons for contacts floater (needs restart) to Vanity Preferences.
Adds ContactsUseHorizontalButtons.
Adds FloaterContactsHorizRect for saving horizontal contacts rect.
Adds panel_friends_horiz.xml, panel_group_horiz.xml, and floater_my_friends_horiz.xml
Also corrects string value for FloaterContactsRect
Introduced in
6dcda3595e
(Add recovery for randomly closed socket desciptors.)
By copying CurlSocketInfo* into mCopiedFileDescriptors, it was possible
that we accessed a deleted CurlSocketInfo for it's filedescriptor,
returning a random value, which, when passed to FD_ISSET could cause a
SIGSEGV.
I reverted this change and now store the literal socket descriptors in
mCopiedFileDescriptors again. It is not a problem when libcurl deletes
the corresponding CurlSocketInfo (through a callback to
MultiHandle::socket_callback) in that case, because the fd_set we test
against isn't updated as a result of that, not until we're down with
mCopiedFileDescriptors (at the re-entry of select()).
FloaterChatBarlessRect keeps the size of this separate, for those who want to switch by mood.
ShowLocalChatFloaterBar toggles this.
Show local chat bar in floater entry added to Adv. Chat prefs.
floater_chat_history_barless.xml added for this.
* Split off AIThreadSafeBitsPOD, because offsetof may only be used on POD types.
* Added ASSERT_ONLY and ASSERT_ONLY_COMMA
* Removed a few unused class members
* Fixed a bug in AIHTTPReceivedHeaders::equal that more or less only
compared the length of the headers before :/
* Brought llfilepicker.{cpp,h} up to speed with V3 by adding
FFLOAD_MODEL, FFLOAD_COLLADA, FFLOAD_SCRIPT, FFLOAD_DICTIONARY
However, note that we used FFLOAD_LSL, so I renamed their
FFLOAD_SCRIPT to FFLOAD_LSL and kept our way of filtering.
* Fixed the filter token that is sent to the plugin for
collada (from "dae" to "collada").
Put snapshot related floaters always on top of the full screen preview.
Make having multiple running uploads more robust.
Fix infinite recursion when clicking on the bottom 'Snapshot' button
under certain conditions.
Unfreeze time more robust; unfreeze time out of precaution when
starting an upload (if 'Keep open' not checked).
Fixed a bug that caused all callbacks for successful feed uploads to be
ignored.
Collada include_directories and llfloatermodelpreview.*s added to CMakeLists.txt
Update to v-d, compile with AIFilePicker, comment spelling fixes.
Upload Mesh... entry added to File menu.
Updated AIFilePicker to have FFLOAD_COLLADA with an mFilter of "dae"
And, finally, add floater_model_preview.xml~
Made to work with Singularity, and also be a bit better..
Alphabetizes includes.
Switches settings combobox to a scrolllist, and Boolean combobox to a radiogroup.
Makes floater resizable, aligns a lot of the UI, and prepares it all for proper resize behavior.
Adds Copy button for copying the name of the debug setting.
Yay, verbosity! Also adds FloaterDebugSettingsRect to keep track of the floater's size.
Also somehow the getInstance line snuck out of last commit... tossed it in here.
Fixed spacing of MoyMiniMapCustomColor in settings_ascent_coa.xml and removed it from settings_per_account.xml
TODO: Make MoyMiniMapCustomColor more flexible.
-Added ColorCustomChat checkbox, pref code, and setting commented out.
Mostly from Ukando, tweaked a bit to be cleaner, and a little less dramatic.
decode_patch_header now takes a bool optionally, as third argument.
_PREHASH_RegionSizeX is the only used of the two _PREHASH_RegionSize*.
llsurface.cpp: Copy the connectNeighbor for variable size regions almost directly from Ukando
llsurfacepatch.cpp: Patch code from ukando and voodoo.
Changed hardcoded 256 constants and such to width functions in: llglsandbox.cpp, llsurface.cpp, llviewerregion.cpp, llviewerparcelmanager, llviewerparcelmgr.cpp, llvowater.cpp, llworld.cpp
Use region specific width in: llagent.cpp, llglsandbox.cpp, llmanip.cpp, llmanipscale.cpp, llpanelobject.cpp, llviewerbject.cpp, llwind.cpp
Use 256 in llnetmap.cpp in places...
llfloaterregioninfo.cpp: Aurora grid has wacky textures.
Add LLViewerParcelMgr::widthUpdate() for updating mParcelsPerEdge given a region's width. Used in llstartup now.
Add LLWorld::setWidth() for getting a region's size from LLMessageSystem pointers and setting mWidth and mWidthInMeters, accordingly. Called in llviewermessage.cpp as well.
If an avatar TP's in while you are in Freeze Time mode, they now have a
visible tag with the tag 'Langolier' in it. After exiting Freeze Time
mode they become visible. Before they would stay invisible.
* Warn when it was not possible to make a snapshot because the difference
between the aspect of the required target size and the required target
aspect itself is too large.
* Reset Feed and Postcard Aspect to Default when making a new snapshot.
* Fixed a rounding error that caused one-pixel size error.
Best viewed without space changes... or maybe it doesn't matter any more.
Debug setting OtherChatsTornOff added.
Added Open new IMs in separate floaters checkbox to Adv. Chat.
Moved Show group name in chat to the right column on top of Adv. Chat panel.
So how's this work?
Two ways.. 1. The user opens a chat; 2. A chat is started from another party to the user.
In 1, we open the chat in a separate floater and focus the floater.
In 2, we check if there is a floater currently in focus before opening the chat
if so, we minimize the floater, setting focus back to whatever floater the user was focused on;
if not, we leave the new chat floater open and focused.
Note that this will NOT alter the default behavior at all, we can't be having that.
Although it should never happen that a file descriptor is suddenly
closed, it appeared that this happens on linux 64bit when using
FMODex... Not really sure how useful this is, but at least now the
viewer just continues to work, as if -say- the socket was closed
remotely. Before the curl thread would go into a tight loop that it
wouldn't recover from until the watchdog thread terminated the viewer.
When linking against the prebuilt libcrypto.so.1.0.0 and
libssl.so.1.0.0 there is a problem running the viewer in
gdb (on debian) because gdb links with libpython2.7.so
which needs a newer openssl on my system (OPENSSL_1.0.1).
The patch allows to work around this problem by defining
-DUSE_SYSTEM_OPENSSL:BOOL=ON when configuring, which then
causes the viewer to be compiled against the system libs.
(If you already installed the prebuilt, you have to manually
remove them with script/install.py --uninstall openSSL).
The prebuilt libcurl expects a function SSLv2_client_method
however, which is not present in my openssl system libs.
A stub was added which is possible because the function
in question isn't used anyway.
Added ColorFriendChat, ColorEstateOwnerChat, ColorLindenChat, and ColorMutedChat.
Did some spaces to tabs work, view without space changes.
Add checkboxes beneath corresponding color swatches and "Use colors for chat:" text to Vanity.
Fix Ascent*Color Comments strings.
Also fix the issue where clicking ones name in a group chat would result in it opening a random profile.
CURLE_COULDNT_CONNECT only happens when we actually get
an error (ie, 'connection refused'). If we time out while the connect
attempt is still running then we get CURLE_OPERATION_TIMEDOUT.
Added "Make Outfit..." to Edit menu and Create->"New Outfit" to inventory floater menu.
Cleaned up LLMakeOutfitDialog, using boost::bind and less waste.
Moved onMakeOutfitCommit() to LLMakeOutfitDialog as makeOutfit()
Also changes LLFloaterCustomize's callbacks to use boost::bind
Give new outfit dialog a title instead of a heading.
Small fix to mistake with AnnounceSnapshots xmlstuffs.
reset_login(), among others, sets the state back to STATE_LOGIN_SHOW,
which then causes gViewerWindow->initWorldUI() to be called, which
is the (only) function that calls
LLMenuOptionPathfindingRebakeNavmesh::initialize.
In other words, it's perfectly normal to enter that function
a second time and the assert is erroneous.
Passes an 'index' magic number to the upload/save functions which
pass that back to the *Done callbacks, so we know if the *raw*
snapshot is still up to date when the upload succeeds or fails.
AnnounceSnapshots debug setting.
"Announce when someone takes a snapshot" added to Vanity Main Preferences.
took_a_snapshot translatable string added to strings.xml
Also in this commit:
Turned PlayTypingSound check into LLCachedControl.
In preparation for the crippling of all old viewers, the Vanity Main tab shall henceforth only be called Main, not Main (General)
This change has been made in the code comments and the UI itself.
AnnounceStreamMetadata debug setting.
"Announce music stream's metadata in local chat when tuned in" checkbox added to vanity main preferences.
Made the words Title and Artist translatable, as well as the "Now playing" string.
We do, and the avatar moves then the cam jumps
away from the frozen avatar to where it really is.
Unfortunately, it's still not possible to attach
the cam to moving objects with this patch.
Also, scripted changes to objects are still visible,
like changes in local lights of texture full brightness.
Fix CMakeLists being out of order.
Add setting SnapshotFeedAddLocation to keep track of user's preference whether or not to include location in uploads to profile feed.
Clean up LLFloaterFeed to take only what it needs, also gave it a boost~
Remove saveFeed() from LLFloaterSnapshot, removing the dependency on LLWebProfile.
Compile fixes for LLFloaterSnapshot.
Prettied up the upload to feed floater.
TODO: Does Location even work? I can't get it to appear, never seems to get used right in v-d either.
Immediately disables button and reenables it
again when upload/save was a failure.
The callback is now ignored if the snapshot
was refresh in the meantime.
This is just a skeleton, roughly copied from the Postcoard
code, which is very similar. Nothing in indra/newview/llfloaterfeed.cpp
has been changed yet, apart from a few deletions (to make it compile)
and the literal replacement of "Postcard" with "Feed".
indra/newview/llfloatersnapshot.cpp was updated however to
open the new floater when one tries to upload a snapshot to the feed.
It is still needed to make a callback to saveFeed(), or rather to
move that function to the saveFeed that is in llfloatersnapshot.cpp.
Cookies are now collected during redirects, one the last cookie
of a given name is kept. Cookies are then set by looking for
the right cookie name (instead of what viewer 3 does: just
use the last cookie that was set).
This fixes the merchant outbox.
Add CURLTR debug channel for libcurl API calls,
and use CURLIO only for libcurl debug output.
Note: need to set gDebugCurlTerse to true for
filtering to take effect, then pass 'debug_on'
to the LLHttpClient methods that require debugging.
Overall:
Extras tab added to radar.
Activities given tool_tip strings, TODO: Get icon entries to have tool_tips.
Added tab_min_width="0" to tab container so tabs take up only as much space as necessary.
Issue 51:
RadarAlertAge, AvatarAgeAlertDays debugs added.
RadarTextYoung color added to colors_base and gemini.
UI bits added to radar.
ALERT_TYPE_AGE, LIST_AGE, and boost::lexical_cast added.
LLAvatarListEntry is now derived from LLAvatarPropertiesObserver for processProperties and all that fun stuff. Also has mAgeAlert and mAge.
processProperties is basically copied directly from LLAvatarPanel, it can probably be bettered.
Issue 382:
mTime, getTime(), LIST_TIME
Time column.
Issue 245:
Hide columns text and checkboxes added to UI.
assessColumns() now used to determine which columns to show. Also once used during postBuild()
col_helper() function added to help decide to hide or resize a column based on given params.
checkboxes all use assessColumns as callback.
RadarColumn* debug settings added.
If you read this all, that's a sign the 'pocalypse is coming.
Add debug setting LiruFlyAfterTeleports
Add Always fly after Teleports to General tab of System preferences.
(Also, fixed tabs where spaces should be in settings.xml)
If an avatar TP's away (or quits), he will not
disappear anymore from a frozen scene. Unfreezing
makes him disappear of course (and clean up).
Known bug: if during Freeze Time mode someone
TPs away and then back, then he becomes a cloud
after Freeze Time is ended, which can only be
reset by another teleport (or relog) from either
the cloud or the one seeing him as cloud.
I decided not to fix this, cause there are things
with a higher priority and this - if it happens
at all - is rare and easy to recognize and work
around.
XMLRPCResponder constructor was missing.
This fixes the following crash signature:
VIEWER : 2012-12-12T14:25:13Z INFO("AppInit"): setStartupState: Startup state changing from STATE_LOGIN_NO_DATA_YET to STATE_LOGIN_DOWNLOADING
VIEWER : 2012-12-12T14:25:14Z INFO("AppInit"): transferRate: Buffer size: 1308 B
VIEWER : 2012-12-12T14:25:14Z INFO("AppInit"): transferRate: Transfer rate: 11 kb/s
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff33df7f5 in XMLRPC_RequestGetData () from /usr/lib/x86_64-linux-gnu/libxmlrpc-epi.so.0
(gdb) bt
Reason was that if the server replied with some error code then
mResponse was undefined.
I also added code to retry three times in that case;
the http status code that I get was 503, which really
mean "Service *temporarily* unavailable", so a retry
is in order.
XMLRPCResponder constructor was missing.
This fixes the following crash signature:
VIEWER : 2012-12-12T14:25:13Z INFO("AppInit"): setStartupState: Startup state changing from STATE_LOGIN_NO_DATA_YET to STATE_LOGIN_DOWNLOADING
VIEWER : 2012-12-12T14:25:14Z INFO("AppInit"): transferRate: Buffer size: 1308 B
VIEWER : 2012-12-12T14:25:14Z INFO("AppInit"): transferRate: Transfer rate: 11 kb/s
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff33df7f5 in XMLRPC_RequestGetData () from /usr/lib/x86_64-linux-gnu/libxmlrpc-epi.so.0
(gdb) bt
Reason was that if the server replied with some error code then
mResponse was undefined.
I also added code to retry three times in that case;
the http status code that I get was 503, which really
mean "Service *temporarily* unavailable", so a retry
is in order.
The opposite of Paste As Link, this will make copies of everything in the paste buffer,
allowing the user to copy bunches of items or links and simply paste them to make new copies.
Also appears when not needed... unsure how to go about removing, maybe comment out in release?
Conflicts:
indra/newview/llfloateravatarpicker.cpp - Includes to v-d style, since plain alphabetical just won't cut it. Shyotl's changes for name system, here.
indra/newview/llpanelgroupinvite.cpp - Shyotl's changes for name system, here.
Also corrected new README to have less typos and be slightly more accurate.
Better viewed without space changes
Pretty much add support for sending LLAvatarName and std::string to become a name via the system...
Also a bit of a revert for llcallingcard.cpp in this regard, just allow it to use a callback along with the new support,
but still handle the actual name switching in LLAvatarNameCache.
Fixes a problem I was having with "[NAME] is Online" notifications appearing early on, only.
Note: Large groups still don't load?!
SimConsole cap is needed for Sim Console, won't work without it, keeping it in!
..But it should work with the new ASync one? Maybe needs tweaks, first?
Also switches opening IMs to the gCacheName->getFullName(id, name) system mentioned earlier, my connection has improved!
And makes the Avatar Picker show display names! Yay! (Rearranged the includes there, alphabetical~)
Also fallback to gCacheName->getFullName(id, name) if getting name fails in the new system.. hopefully this will combat occasional big failures.. but it may not work anyway.. maybe my connection is just awful again
Note: These changesets removed the some caps in llviewerregion.cpp, I have made a note of these, but left them in.
Please take a look at the Singu Note:'s and Singu: TODO:'s when working on this.
Only does that, dun believe me? Take a look, oh... it also corrects improper interpretations of the PhoenixNameSystem value: 1 is both, 2 is displays, 0 and anything else is Legacy.
Also replaces a bit of the display name support code with new system... by definition this shouldn't change the log file, only the title of the session..
because of my bad connection during week days, I can not confirm this working 100%,
but if it does end up changing the logs under certain unseen conditions, replace the new name check with gCacheName->getFullName(id, name) but this reallllly shouldn't happen!
* Allow to pass -1 to LLImageBase::reallocateData too (default parameter),
causing it to allocate what is necessary for the size set (same
behavior as allocateData).
* Speed up LLImageRaw::scale with factor 2 or 3 by copying the data less
often and calling LLImageBase::reallocateData instead of destroying
and recreating always.
* Fix gl_rect_2d to not decrement top and right with one pixel.
* Remove the vague "Constrain Proportions" checkbox and replace it with
a new combo box and spinner to explicitly set the target aspect ratio,
allowing to set it also to something different than either the window
aspect ratio (ie, 1.6) or the target image dimension (1.0 for textures)
which was totally lacking when, for example, uploading a profile image
(which needs to be 4:3). This also allows to show snapshots on prims
of arbitrary aspects.
Debug setting LiruNoTransactionClutter has been added, and is toggled by checkbox in General preferences
This adds support for TransactionInfo message, to localize the server's transaction notifications.
Adds a notification called Payment, which unifies all three of v-d's Payment* notifications.
This is a fairly large change to view, keep in mind what was removed as it may just be in a slightly different order or position..
This causes a failure to save local file, or when clicking
Cancel in the file chooser, to keep the image and keep the
snapshot floater open so a retry to save the image can be
attempted.
This commit concentrates on remembering what parameters
where used for the last snapshot (the actual source, not
the formatted one), thus - the parameters passed to
rawSnapshot() - and then shows this snapshot as if it
was just made whenever the UI parameter selection matches.
The result is that the user can make a snapshot, save
it (for example) to their harddisk and then change the
destination and upload the same thing as snapshot.
The code tries hard to make this possible by automatically
adjusting the UI parameters to match every time the destination
is changed PROVIDED it was already saved or uploaded before.
If a snapshot wasn't saved and one changes destination
then this currently doesn't happen (by you could manually
make the parameters match, and still upload it). Also, if
the resolution is changed for a particular destination then
it won't automatically adjust it again.
Obviously, snapshots are no longer refreshed when changing
destination etc. You have to explicitly click "Refresh
Snapshot" before the last one is deleted / replaced.
The Debug Setting variables reflect the (last) manual choices
in most cases (set in the onCommit functions). If such a choice
is not allowed for a different destination then the UI is
changed to reflect the current behavior and the checkbox is
disabled so the user can't change it anymore. Then, if they
change destination back - the Debug Setting variable is used
to remember their last preference. A new Debug Setting has
been added for this purpose: SnapshotLayerType (colors or depth).
The old mSnapshotUpToDate has been removed and replaced with
mShowFreezeFrameSnapshot. The old getSnapshotUpToDate() now
returns something else (than mShowFreezeFrameSnapshot), namely
whether or not the current raw snapshot was taken with the same
parameters as are currently set in the UI.
The unused functions getImageAspect() and getAspect() were
removed.
mCurImageIndex has been deleted. Index 0 now means "the last
snapshot" and index 1 is temporarily used for the Falling Away
animation.
mDataSize was renamed to mFormattedDataSize.
The size spinner arrows are now disabled too whenever the spinner
edit field is disabled.
A bug in Freeze Time was fixed, where avatars would still
rotate around their axis in place (and without that their
attachments moved!)
Pressing ESC would return keyboard control to "walking"
for the own avatar with the above as result for the own
avatar. We now intercept ESC and use it (in Freeze Time mode)
to return to the cammable preview when a 2D preview was
being shown.
* Added a radio button for "Post to my.secondlife.com feed"
* Moved the snapshot to the top of the floater.
* Increased the size of the snapshot to match the size used in V3
(floater is only 4 pixels wider though).
* Disable the "Temporary upload" checkbox when the Destination isn't the
inventory.
* Update the shown Upload Fee to L$ 0 if temporary is checked.
* Added a size chooser for the Feed destination, using exclusively
preset sizes with an aspect ratio of 4:3.
* Added two new preset sizes: 1024x1024 for texture uploads, and
1680x1050 for save to disk.
Extract Content-Type also from a 405 reply.
If all else fails, use a default mime-type for url's opened
in the browser (start with http: or https:) of "text/html" instead
of "none/none".
Before every HEAD and GET request allowed redirection by default,
without setting a limit on the number of redirections. This caused
an infinite redirect loop when connecting to marketplace, in combination
with the bug that we did not allow cookies.
Also fixes a bunch of comments, implementation based off of v-d.
Added isOnClipboard and setCutMode functions to LLInventoryClipboard, in part from v-d's LLClipboard.
LLInventoryFilter has a few rearrangements of code; only real change is now it has checkAgainstClipboard and uses it to filter out cut items.
There is a massive retabbed block in llinventorymodel.cpp, view without space changes. Implements removeObject.
Note: We are not afflicted by MAINT-1197: Fix inventory deselection/reselection when cutting items
Adds finding and using libjsoncpp. Note that the old cmake file
found libjson, not the same thing.
Adds Debug Setting WebProfileNonProductionURL (next to already existing
WebProfileURL) to mimic V3's behavior and use a different URL for aditi.
These Debug Settings are using by (the new) getProfileURL() (copied
from V3 with just a minor fix).
Adds HippoGridInfo::isInProductionGrid() next to the existing
LLViewerLogin::isInProductionGrid that always returned true.
The former should only be called SL grids and then only returns
true for agni (and false for aditi et al). The latter was changed
to now always return true except on SL when the grid isn't agni.
The first is used for SL-only cases, the latter for things like
colors and for godmode decision logic.
V3's llwebprofile.cpp was fixed to compile on singu, with only real
difference that I dropped the Content-Type headers for the GET methods.
mOutboxInventoryPanel couldn't be setVisible(false) while it was NULL, thus it sat on top of the rest of the UI.
Set it to panel_outbox_inventory in postBuild, instead of setupOutbox.
According to the docs
(http://www.cplusplus.com/reference/iostream/istream/readsome/)
readsome would also set state flag eofbit, but apparently I'm
misinterpreting it. Anyway, using read() and then gcount()
to get the number of bytes does work.
ResponderHeadersOnly is a base class for responders that use
HTTPClient::head or HTTPClient::getHeaderOnly. It already
has a needsHeaders() that return true and only allows for
completedHeaders to be overridden.
I removed the CURLOPT_HEADER option for these cases, because
that only causes the headers to be send to the writeCallback
as if they are part of the body, in addition to the headerCallback;
That gave raise to some confusion for the existing code (ie,
unexpected errors when trying to decode the body as LLSD and
duplicated 'low speed' information for the Timeout policy code.
Sync with v-d/rlva for Copy folder support
Also, guard against outboxy stuff, like when we're importing, don't show the Marketplace Send menu entry.
Fixed a few comments
Please view this commit with space/tab changes off! There were a lot of retabbing cases that don't need to waste anymore of anyone's time.
Only use C++0x/C++11 features if compiling for windows, or if GCC is configured to support such features (v4.7 onwards: '-std=c++11'. v4.3 through v4.6: '-std=c++0x')
Removed an assertion that's no longer possible to evaluate (queue doesn't support iterators).
The AIBufferedCurlEasyRequestEvents are not triggered unless
the derived class return true for needsHeaders().
That means, every class that implements received_HTTP_header(),
received_header() or completed_headers(), or implement
the virtual function completedHeaders(), or use the protected
member mReceivedHeaders directly.
This commits adds missing needsHeaders() for LLAvatarNameCache
(thanks Siana) and XMLRPCResponder. The former now uses
mReceivedHeaders directly instead of making a copy.
Adds a std::map for hostname (or urls) --> PerHostRequestQueue
objects. The latter keeps track of the number of added curl easy
requests and decides if a new request should be throttled or
not, as well as provides the queue to queue throttled requests.
At the moment CurlConcurrentConnectionsPerHost is set to 16,
because things really don't work without LL supporting connection
reuse if we limit it to 2. CurlConcurrentConnectionsPerHost is
also set to non-persistent so that we can easily change it in the future
(once we decide on it's final value it can be set to persistent).
Enter: LLFloaterOutbox, floater_merchant_outbox, LLMarketplaceFunctions, LLPanelMarketplaceOutboxInventory, and panel_outbox_inventory
LLView now has childFromPoint() from v-d.
LLInventoryBridge{
Sync includes with v-d.
Let's ENABLE_MERCHANT_SEND_TO_MARKETPLACE_CONTEXT_MENU for ease of access and tweak it to work.
Uncomment related code.
Catch if we're moving objects into the outbox during pasteFromClipboard()
}
LLInventoryPanel: start_folder attribute for inventory_panels, this could be quite useful in the future
Sync LLToolDragAndDrop with Catznip/v-d
Add the outbox to the World menu, since that seems to involve most commerce. Perhaps we should add a menu entry to the outbox itself to open its floater?
Fix the inventory merchant menu entries, thanks Shyotl..
Merchant Outbox Strings!
Moved AICurlPrivate::Stats to AICurlInterface::Stats and added several
counters to keep track of the number of existing instances of
respectively AICurlEasyRequest, AICurlEasyRequestStateMachine,
BufferedCurlEasyRequest, ResponderBase and
ThreadSafeBufferedCurlEasyRequest.
As idle statemachines aren't in any list, it's not possible
(without adding that list) to delete them. I don't think
that there are any active statemachines left at the end
of flush anyway, but killing them doesn't much sense if
we can't get them all: there will always be statemachines
left: those that were idle at the moment the viewer was
quit.
Since we changed CurlResponderBuffer to be derived from CurlEasyRequest
and therefore changed it's name to BufferedCurlEasyRequest, we should
also rename AICurlResponderBufferEvents to
AIBufferedCurlEasyRequestEvents.
This commit also fixes C++ comment in several places to reflex the
previous name change.
More translation strings~
Log inventory offers to those we're not chatting with.
"SDL deiconification state switched to " now lldebugs instead of llinfos, far too spammy..
(Pre-outbox commit, may contain pieces of outbox work.. and unmentioned harmless sync)
Rename check_run_count to check_msg_queue, because the whole 'run count'
approach is flawed anyway (the author of libcurl told me that THE way
to check for finished curl handles is to just call curl_multi_info_read
every time: it's extremely fast. Any test that attempts to avoid that
call is nonsense anyway.
The reason the assertion failed might have been caused by the fact
that we're comparing the current number of easy handles with the
number of running handles of 'a while ago'. It is possible that a
easy handle was removed in the meantime.
In order to check if that hypothesis is right, I moved the assertion
to directly below the call to curl_multi_socket_action where it
should hold. If this new assertion doesn't trigger than the hypothesis
was right and this is fixed.
Every curl transaction is a AICurlEasyRequestStateMachine which has a
AICurlEasyRequest as member, which is a reference counting pointer to
a ThreadSafeBufferedCurlEasyRequest. And now BufferedCurlEasyRequest is
derived from CurlEasyRequest which is derived from CurlEasyHandle, but
neither are used separatedly.
* Moved Responder stuff to LLHTTPClient.
* Renamed LLHTTPClient::Responder to LLHTTPClient::ResponderWithResult.
* Deleted LLHTTPClientAdapter and LLHTTPClientInterface.
* Renamed AICurlInterface::TransferInfo to AITransferInfo and moved it
to llhttpclient.h
* Removed 'CURLcode code' argument from completed_headers.
* Removed LLCurlRequest and replaced it's last usage with LLHTTPClient API calls.
* Deleted dead code.
* Renamed all the get4/post4/put4/getByteRange4 etc, back to their
original name without the '4'.
* Moved LegacyPolledResponder::mCode to ResponderBase::mCode.
* Added a parameter to ResponderBase::finished (and pubError*) to set mCode.
* Renamed ResponderBase::decode_body to decode_llsd_body and added ResponderBase::decode_raw_body.
* Use LegacyPolledResponder::finished instead of LegacyPolledResponder::completed_headers
to set remaining cached values.
* Fixed assertion in case of -DCWDEBUG and upload finish detection failure in case of HEAD
method (mDebugIsGetMethod -> mDebugIsHeadOrGetMethod).
* Add XmlTreeInjector : support for LLXmlTree.
* Split BlockingResponder into BlockingLLSDResponder and BlockingRawResponder.
* Final blocking responders are now: BlockingLLSDPostResponder, BlockingLLSDGetResponder
and BlockingRawGetResponder.
* Added LLHTTPClient::blockingGetRaw
* Got rid of hipporestrequest.* -- and fixed hippogridmanager.cpp to use
LLHTTPClient::blockingGetRaw instead, and fixed llviewermessage.cpp to use
AICurlInterface::ResponderWithCompleted and decode_raw_body instead of
HippoRestHandlerRaw and LLHTTPClient::get4 instead of HippoRestRequest::get5.
Renamed AICurlInterface::Responder to AICurlInterface::ResponderBase,
but without the virtual 'event' methods.
Derived from that: Responder and ReponderWithCompleted, where the
first defines result = 0, ErrorWithContent and error, and the latter
completedRaw and completed.
Added HttpClient::IgnoreBody, derived from Responder and implementing
'result' doing nothing; HttpClient::Ignore is now derived from
IgnoreBody and defines the still pure virtual getHTTPTimeoutPolicy.
Added ResponderBase::decode_body, which is now the sole place
where the code makes the decision wether some response data might be
LLSD or not based on the http status result. Before it just tried
to decode everything as LLSD, which seems a bit nonsense.
ResponderWithCompleted::completed no longer does anything, since
classes derived from ResponderWithCompleted are expected to override it,
or never call it by overriding completedRaw.
Entry point is now ResponderBase::finished = 0, instead of
completedRaw, where ResponderWithCompleted implements finished by
called completedRaw, but Responder doesn't: that directly calls
result/errorWithContent/error. Or, for the hack ResponderAdapter,
the entry points are pubResult/pubErrorWithContent.
Those are now the ONLY public methods, so more confusion.
mFinished is now set in all cases.
As a result of all that, it is no longer possible to accidently
pass a responder to ResponderAdapter that would break because it
expects completed() and completedRaw() to be called.
Added LLBufferArray::writeChannelTo.
Fixed bug for BlockingResponder::body (returned reference to temporary).
LLSDMessage::ResponderAdapter now allows a "timeoutpolicy" name
to be passed (not doing so results in the default timings), so
that the timeout policy of the used responder is retained.
Fixed llfasttimerview.cpp to test LLSDSerialize::fromXML() to return
a positive value instead of non-zero, because it may return -1 when the
parsing fails (three places).
Removed LLHTTPClient::Responder as base class from
LLFloaterRegionDebugConsole completely: it isn't a responder!
Several other responder classes were simplified a bit in order to
compile again with the above changes.
-After new context creation, immediately call LLRender::refreshState() after LLViewerWindow::initGLDefaults() in order to force states to apply.
--LLRender::initGLDefaults optimizes out gl calls by caching states, but the cached values are only applicable to the old context, not the new, so this optimization must be skipped (LLRender::mDirty).
-LLViewerWindow::mStatesDirty also triggered a redundant shader reload, since restoreGL also called setShaders().
Fixed somewhat annoying flicker of a single frame whilst recovering from screen resizing.
-Skip frame if LLViewerWindow::checkSettings() called LLViewerWindow::reshape. (reshape will set gWindowResized to true)
--True optimal fix will require some refactoring.
Reworked how window position is saved in LLViewerWindow::changeDisplaySettings. Hopefully reduces chances of odd behavior (had WindowX and WindowY get stuck at massive negative values before)
Slightly more robust, adds one boolean to all responders, 99%
of which don't need that though, and an extra call redirection,
but well... We might need it this way when I add the possibility
to abort a transfer.
In days of usage this has never happened before, but apparently
it's possible. The solution chosen is to create the AIHTTPTimeout
object on the fly when it doesn't exist and let it be picked up
later when the CurlSocketInfo for the transfer is created.
This fixes the problem that existed with received headers:
The server sends some headers ("set-cookie") more than once
in the same reply, which cannot be stored in std::map.
The old code just ignored the additional cookies, while
curlthreading3 (since the introduction of AIHTTPHeaders)
caused an assertion.
AIHTTPReceivedHeaders is written around a std::multimap
and allows to retrieve multiple headers with the same key.
Also, it is case insensitive so that if a server sends
"Content-Type" it will still find it (the viewer looks for
"content-type").
Minor changes like comment fixes and addition of accessors
that will be needed for future commits.
Also removed Responder::fatalError as it was never used.
Moved CURLOPT_ENCODING from CurlEasyRequest::setPost_raw, and
CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST from
CurlResponderBuffer::prepRequest, to LLURLRequest::configure,
enabling the debug setting NoVerifySSLCert for the latter
two to work as follows: old behavior if "NoVerifySSLCert"
is not set, and check neither if it is set. However, if
the (new) bool mIsAuth is set the behavior of LLXMLRPCTransaction::Impl::init
is used. This is so in a next commit we can replace
LLXMLRPCTransaction with LLURLRequest: LLXMLRPCTransaction::Impl::init
will be removed. For the same reason, when the new boolean
mNoCompression is set then CURLOPT_ENCODING is set to "identity",
otherwise the old behavior (of clearing it) is used.
* Moved DoutCurlEasy and DoutCurlEasyEntering from aicurl.cpp
to aicurl.h and renamed them to DoutCurl and DoutCurlEntering
respectively.
* Moved the callback functions from aicurl.cpp to aicurlthread.cpp.
* In CurlEasyRequest, renamed timeout_timings to print_curl_timings
and mTimeoutLowercaseHostname to mLowercaseHostname.
* Put all remaining CurlEasyRequest::mTimeout* variables and
timeout_* methods in curlthread::HTTPTimeout, stripping them
of said prefix, and moved the definition to aicurlprivate.h.
Added a ThreadSafeCurlEasyRequest* member and a get_lockobj()
method so to that class so we can still use DoutCurl /
DoutCurlEntering. timeout_add_easy_request was removed completely
and reimplemented as the constructor of HTTPTimeout.
timeout_has_stalled was renamed to HTTPTimeout::has_stalled,
but also reimplemented as CurlEasyRequest::has_stalled.
* CurlEasyRequest::mRequestFinalized was removed and it's
functionality taken over by CurlEasyRequest::mTimeoutPolicy.
* Fixed the indentation of struct Stats, class CurlEasyHandle
and class CurlEasyRequest.
* Added CurlEasyRequest::set_timeout_opts
* Added CurlSocketInfo::mTimeout (LLPointer<HTTPTimeout>).
* mUploadFinished is now reset in HTTPTimeout::data_received,
this was needed because "HEAD /something" header-only
messages triggered upload_finished (unlike "GET ..."),
and in combination with redirection that caused an assert.
Use the better understandable alias CURLOPT_HTTPHEADER in debug output
Bug fix - finally!
This fixes a bug I've been looking for a week.
By accidently calling get_clock_count() for the mTimeoutLowSpeedClock
'event', the time difference 'now' - 'event' becomes negative, which
should be impossible; the result being that timeout_low_speed
stalled for 24 seconds while looping over the full 32 bit. That in
turn made SSL handshakes of libcurl fail, which seemed to be
impossible since the calls to libcurl had not changed!
* Remove progress meter call back, use read/write/header callbacks instead.
* Don't use timeout_lowspeed for ReplyDelay, instead use:
* Add timeout stuff to the main loop (CurlEasyRequest::mTimeoutStalled).
This patch fixes a few things compared to the previous version.
More things need to be fixed.
Also add DoutCurlEasyEntering debug macro.
The caching is necessary because CURLINFO_EFFECTIVE_URL is unreliable
and can change several times during the transfer at any moment (as
a result of forwarding etc).
Introduces AIHTTPTimeoutPolicy objects which do not just
specify a single "timeout" in seconds, but a plethora of
timings related to the life cycle of the average HTTP
transaction.
This knowledge is that moved to the Responder being
used instead of floating constants hardcoded in the
callers of http requests. This assumes that the same
timeout policy is wanted for each transaction that
uses the same Responder, which can be enforced is needed.
I added a AIHTTPTimeoutPolicy for EVERY responder,
only to make it easier later to tune timeout values
and/or to get feedback about which responder runs
into HTTP errors in debug output (especially time outs),
so that they can be tuned later. If we already understood
exactly what we were doing then most responders could
have been left alone and just return the default timeout
policy: by far most timeout policies are just a copy
of the default policy, currently.
This commit is not finished... It's a work in progress
(viewer runs fine with it though).
Recognizes .jp2, .j2c and .j2k extensions.
Adds image/jp2 files to file picker image filter (windows and Mac,
windows apparently already showed them).
Show preview for jpeg 2000 files.
Fixes error reporting for failed image uploads.
Enforces a power-of-two size for jpeg 2000 files (seemed to make sense to do that).
Comment fixes
Added some more debug support, not used yet (linux/libcwd only),
I used it, but won't commit the code that did.
Pass time_time parameter from post2() to prepRequest; only
used by mesh uploading at the moment.
In debug mode an assertion was triggered when a queued
request was being removed by the main thread; and rightfully
so: we should remove such request from the queue in that
case.
Conflicts:
indra/newview/skins/default/xui/en-us/floater_post_process.xml - Used Mine, because Shyotl's is the ancient one from "the before time" and because my last commit (worked on motionblur tab, then, too.)
CurlEasyHandle::mErrorBuffer (CURLOPT_ERRORBUFFER) can NOT be
used to retrieve information about an error returned by
curl_multi_info_read in CURLMsg::data::result. This buffer is
only initialized when a curl_easy_* call returns an error,
and those errors are already printed automagically.
Initialize the buffer with an empty string upon invokation
of an curl_easy_* call, so we are sure the error belongs to
the last call.
This creates a separate events interface structure
for CurlResponderBuffer (AICurlResponderBufferEvents)
for dealing with received HTTP headers.
The headers are passed to the Responder, but only
if the class derived from Responder implements
completedHeaders (otherwise it makes little sense
to even decode the headers).
Basically this is a reimplementation of the functionality
of the old LLHTTPClientURLAdaptor class.
This fixes the problem that many terminals require command line
parameters to be passed as command line parameters to the terminal
command. The old code would pass the whole gdb command including
all it's arguments (whatever replaces %s) as a single argument,
regardless of whether there are quotes around the %s or not.
Now those arguments are passed as separate arguments if there
are no quotes around the %s.
Updated documentation with an example on how to open a gdb terminal
on a different machines X display.
Conflicts:
indra/newview/statemachine/aistatemachine.cpp
Huh - you re-INDENTED a file that you didn't merge yet?
How about merging curlthreading2 and curlthreading3
before doing THAT? :/
Obviously I did an "use ours" here.
For standalone there is no need to link libmedia_plugin_webkit.so
against Qt's plugins, and thus also not to add "random" paths
to LD_LIBRARY_PATH. Just let Qt do it's thing and find and
load the plugins it needs itself.
Updated AntiSpam with documentation, safety measures, and better presentations and clarifications for the end-user from FS.
If it looks like something was removed from an xml, it was just moved to fall into place better with v-d.
Corrected log end message being log start message.
Also updated LLPreviewTexture to be closer to upstream and better for translation,
added lltrans for FileSaved and Receiving,
and floater_preview_texture.xml now uses No Alpha, Has Alpha, Unknown as strings.
Conflicts:
indra/llcommon/CMakeLists.txt
indra/llmessage/llcurl.cpp
indra/llmessage/llcurl.h
indra/llmessage/llhttpclient.cpp
indra/llmessage/llhttpclient.h
indra/llmessage/llpumpio.cpp
indra/llmessage/llpumpio.h
indra/llmessage/llurlrequest.cpp
indra/llmessage/llurlrequest.h
indra/newview/hipporestrequest.cpp
indra/newview/llappviewer.cpp
indra/newview/llspatialpartition.cpp
indra/newview/llviewermedia.cpp
indra/newview/llxmlrpctransaction.cpp
Conflicts resolved by choosing curlthreading2
for any llmessage file regardless (which looks
correct upon investigation); the rest also
turned out to need to use curlthreading2, except
in one line where I added a semi-colon after
an assert(), and the assert was changed in
singu/master.
For POST and PUT, libcurl adds by default a "Expect: 100-continue"
header and wait for the server to reply with a 100 response.
However, since the server never does that (LL comment in the
code "I'm not sure what it means") it's up to libcurl to continue
anyway after a while and that part is apparently bugged, causing
people not to be able to login sometimes. But suppressing the
header, libcurl doesn't wait for it and we worked around this bug.
The commit introduces a much improved CurlEasyRequest::setPost
method that enforces the above for POST, but that also no longer
uses CURLOPT_COPYPOSTFIELDS (but CURLOPT_POSTFIELDS), no longer
making a copy of the body of what we are going to send to the server.
Instead it uses a new object, derived from AIPostField, to keep track
of this data and to dispose of it once the transaction is complete
(and no sooner).
Copied from llcorehttp, we now also always set a "Connection:
keep-alive" and "Keep-alive: 300" header for POST.
This was already done for texture downloads (HttpOpRequest),
but now we do it always :p. Might need to be changed in the
future, but currently those headers are ignored by the server
anyway.
* Do not include aithreadid.h from debug.h, because the latter is
included everywhere (from linden_common.h) and aithreadid.h is
heavy (includes among others windows.h).
* On windows, thread local members cannot be exported.
Also adds a more robust interface for setopt that does
type checking based on the options used. This fixes one
bug where a F32 was passed and interpreted as long.
In many cases a U32 or S32 was passed as long, which
would fail (only) on a 64bit non-windows big endian machine.
Fixes an exit crash when the user clicks on Login and immediately
on Quit, because termination of the LLAuth curl request statemachine
access the CurlRequestTimeOut debug setting.
Apart from just really cleaning things up and moving
everything into one class regarding thread IDs (ie,
is_main_thread(), comparing ID's etc), this also
fixes an obscure bug where LL was casting thread ID's
to U32 and then compared those to find out if it
the same thread. It's theoretically possible that
such fails on a 64bit OS.
By generalizing the interface, I adopted the use
of a thread-local cache for the current thread ID
as used by LLMutex et al, so now all code benefits
from that. The idea was even extended to now also
be used for is_main_thread() tests and even resetting
a thread ID to the ID of the current thread.
renamed cwdebug/debug_libcurl.cc -> llmessage/debug_libcurl.cpp
and cwdebug/debug_libcurl.h -> llmessage/debug_libcurl.h,
because debug_libcurl.cpp does curl calls that do ares and
openssl calls, so we need to link with those libraries.
llmessage is already linking with those libraries, and contains
the main entry point aicurl.h, so it's a suitable place to put
this.
Bug fix: must always include llpreprocessor.h before including
curl/curl.h.
Bug fix: Added #include "debug_libcurl.h" to hipporestrequest.cpp
and llurlsimstring.cpp which I missed before because they
included "curl/curl.h" instead of <curl/curl.h>. Same in
llwaterparammanager.cpp, but removed include there because it
isn't needed.
Now test DEBUG_CURLIO before including debug_curlio, that
seems better, because otherwise it would make more sense to
replace all #include <curl/curl.h> with #include "mycurl.h"
and then do it there-- but I didn't want to do that.
Bug fix: we undef-ed CURLOPT_DNS_USE_GLOBAL_CACHE, while really
that is an enum, not a macro.
Fixed DEBUG_WINDOWS_CODE_ON_LINUX again by adding a hack for
ioctlsocket(), not instantiating dumb_socketpair unless
DEBUG_WINDOWS_CODE_ON_LINUX is defined and removing again ^M's
introduced with the new windows non-blocking code.
Also changed the type of flags passed to fcntl to int (was long).
curl_easy_setopt expects a long int. Before this patch,
uninitialized memory was read, leading to extreme long
time out, instead of the intended disabled time out (so,
in practise this patch has little effect).
This bug was discovered with the previous commit.
Basically, cmake doesn't support linking static libs into a shared lib.
The correct way is to just specify source files in subdirectories
directly as source files of the shared library. This patch changes that.
Also, after this commit, when DEBUG_CURLIO is defined, every call to
libcurl is printed to llinfos (or to dc::curl when using libcwd).
This is a bug fix, although not one we'd ever run into as normally
there is always just one byte to read, never an EAGAIN and certainly
never more than 256 bytes. Anyway, also those cases should work now.
While comparing this function with v-d, I realized that
I editted these instances for Singularity, so I might
as well update the <edit> comments to be a bit more correct.
Not saying that there aren't other <edit> comments
still missing futher into the function.
This code has been in the viewer source for a long time,
and hasn't been used for a long time (furtherest back that
I checked was Snowglobe 1.4).
Most notably, this removes LLContextURLExtractor and code
that used it because that required an API where AICurlEasyHandle
is created before an url is known, which gets in the way of
reusing connections.
Conflicts:
indra/llcommon/llstring.cpp
indra/llmessage/llcurl.cpp
indra/newview/llviewertexturelist.cpp
indra/newview/viewer_manifest.py
install.xml
Resolved:
indra/llcommon/llstring.cpp :
two different ways to work around compile error.
indra/llmessage/llcurl.cpp :
this file is no longer used.. I deleted huge
parts to mark that I implemented that. Siana
apparently made a few changes in those parts.
indra/newview/llviewertexturelist.cpp :
manually copied patch. Mine also removed trailing
spaces, keeping that.
indra/newview/viewer_manifest.py:
Collision with changes from Liru, which have been
ignored (kept siana/master).
install.xml:
Collision with an earlier screw up. I kept the
fix from siana/master.
When a new state machine was just created, so run() had already
been called but it never did really run yet so running() would
return false; then abort() wasn't called in flush(), causing
the subsequent mainloop call to actually try and startup the
state machine, which then crashed because Debug Settings
mechanism is already destroyed at that point (and in general,
we really don't want anything to run: it does unpredictable
things).
With this fix, also state machines that were just created are
aborted, resulting actuall in a kill without delete, and subsequently
a clean delete from the mainloop.
Note that in the code, and still, has_curl_request was always false.
However, instead of deleting all code paths that are only executed
when has_curl_request would be true, I fixed the code to work as
intended with my current implementation; which also results in
LLCurlRequests to never expire. This way things won't break
unexpectedly when this ever changes.
Since on this branch isValid was only called still (the rest was
removed already) to check if the curl download expired, I took
the liberty to rename isValid to hasNotExpired.
This patch prepares AIStateMachine for the use of AITimer together
with calls to set_state() from other threads. The extra problem
in this case is that the main-thread CAN start running the state
machine again (when the timer times out), while before it was
assumed to be idle until a thread called set_state.
This also takes into account that a thread might call set_state()
and then AGAIN call set_state() before the main thread gets the
chance to call idle() inbetween.
Bug fixes:
AICurlEasyRequestStateMachine didn't delete itself.
curl_multi_socket_action calls were made for potentional removed sockets.
The curl thread wasn't terminated.
Without this fix, we trigger an assert, in debug mode, that was added
to Singularity exactly to find out if we called functions like
getExpandedFilename(LL_PATH_PER_SL_ACCOUNT ...) before logging in.
Checking if THAT function returns empty() is clearly not safe, but
very error prone.
Move applyProxySettings to CurlEasyRequest and call it from
applyDefaultOptions.
Use AIThreadSafe for LLProxy for a more robust threadsafeness.
(This forces correct locking, checks that the unshared vars
are indeed unshared and made it easy to use read/write locking,
which might be important in this case (we do a lot of read-only
accesses to it).
Conflicts:
indra/llmessage/llcurl.cpp
indra/llmessage/llcurl.h
indra/newview/app_settings/settings.xml
indra/newview/llappviewer.cpp
indra/newview/llmeshrepository.cpp
Resolved:
indra/llmessage/llcurl.cpp:
Basically removed (not used anyway)
indra/llmessage/llcurl.h:
Basically removed (just includes aiculr.h now)
indra/newview/app_settings/settings.xml:
CurlUseMultipleThreads was remvoved.
CurlMaximumNumberOfHandles and CurlRequestTimeOut
are still in there, but unused at the moment.
indra/newview/llappviewer.cpp:
CurlMaximumNumberOfHandles and CurlRequestTimeOut
are unused at the moment.
indra/newview/llmeshrepository.cpp:
Lock mSignal always (is unlocked inside wait()).
Use mSignal lock to see if we are waiting; remove mWaiting.
Return false from the MeshFetch functions iff we have to retry
a HTTP fetch. Catch the error exception thrown by getByteRange
instead of using it's return value (always returns true
anyway).
2012-06-28 01:30:46 +02:00
8957 changed files with 327180 additions and 150078 deletions
set(DISABLE_TCMALLOCOFFCACHEBOOL"Disable linkage of TCMalloc. (64bit builds automatically disable TCMalloc)")
set(LL_TESTSOFFCACHEBOOL"Build and run unit and integration tests (disable for build timing runs to reduce variation)")
set(VISTA_ICONOFFCACHEBOOL"Allow vista icon with pre 2008 Visual Studio IDEs. (Assumes replacement old rcdll.dll with new rcdll.dll from win sdk 7.0 or later)")
set(DISABLE_FATAL_WARNINGSTRUECACHEBOOL"Set this to FALSE to enable fatal warnings.")
print>>sys.stderr,"Something went very wrong during build stage, could not find a Visual Studio?"
else:
build_dirs=self.build_dirs()
print>>sys.stderr,"\nSolution generation complete, it can can now be found in:",build_dirs[0]
print>>sys.stderr,"\nAs you are using an Express Visual Studio, the build step cannot be automated"
print>>sys.stderr,"\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for Visual Studio Express specific information"
print>>sys.stderr,"Something went very wrong during build stage, could not find a Visual Studio?"
else:
build_dirs=self.build_dirs()
print>>sys.stderr,"\nSolution generation complete, it can can now be found in:",build_dirs[0]
print>>sys.stderr,"\nAs you are using an Express Visual Studio, the build step cannot be automated"
print>>sys.stderr,"\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for Visual Studio Express specific information"
exit(0)
# devenv.com is CLI friendly, devenv.exe... not so much.
return('"%sdevenv.com"%s.sln /build %s'%
@@ -696,7 +662,7 @@ class WindowsSetup(PlatformSetup):
os.path.join(build_dir,'Singularity.sln')+
' --config '+self.build_type+
' --startup secondlife-bin')
print'Running %r in %r'%(vstool_cmd,getcwd())
print'Running vstool %r in %r'%(vstool_cmd,getcwd())
self.run(vstool_cmd)
print>>open(stamp,'w'),self.build_type
@@ -710,11 +676,11 @@ class WindowsSetup(PlatformSetup):
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#ifndef HACD_HACD_H
#define HACD_HACD_H
#include"hacdVersion.h"
#include"hacdVector.h"
#include"hacdGraph.h"
#include"hacdICHull.h"
#include<set>
#include<vector>
#include<queue>
#if defined(_MSC_VER) && _MSC_VER >= 1700
#include<functional>
#endif
namespaceHACD
{
constdoublesc_pi=3.14159265;
classHACD;
// just to be able to set the capcity of the container
//! Provides an implementation of the Hierarchical Approximate Convex Decomposition (HACD) technique described in "A Simple and Efficient Approach for 3D Mesh Approximate Convex Decomposition" Game Programming Gems 8 - Chapter 2.8, p.202. A short version of the chapter was published in ICIP09 and is available at ftp://ftp.elet.polimi.it/users/Stefano.Tubaro/ICIP_USB_Proceedings_v2/pdfs/0003501.pdf
classHACD
{
public:
//! Gives the targeted number of triangles of the decimated mesh
//! @return targeted number of triangles of the decimated mesh
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//! DoubleTriangle builds the initial double triangle. It first finds 3 noncollinear points and makes two faces out of them, in opposite order. It then finds a fourth point that is not coplanar with that face. The vertices are stored in the face structure in counterclockwise order so that the volume between the face and the point is negative. Lastly, the 3 newfaces to the fourth point are constructed and the data structures are cleaned up.
ICHullErrorDoubleTriangle();
//! MakeFace creates a new face structure from three vertices (in ccw order). It returns a pointer to the face.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. The names of the contributors may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.