Commit Graph

66 Commits

Author SHA1 Message Date
Aleric Inglewood
b97caa77d4 Add versioning support to AIFilePicker.
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.
2013-07-10 21:19:04 +02:00
Aleric Inglewood
24fb76907d Compile fix 2013-06-01 16:37:02 +02:00
Aleric Inglewood
5c05a04a2c Fix of 'LLError::NoClassInfo::~AIFilePicker: Calling AIFilePicker::~AIFilePicker()' 2013-06-01 13:32:55 +02:00
Aleric Inglewood
b6f6dfbe99 Fix french assert.
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().
2013-05-27 02:15:28 +02:00
Aleric Inglewood
779f697ffb Fix yield_ms().
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.
2013-03-26 23:30:04 +01:00
Aleric Inglewood
d526d388ef Make AIRegisteredStateMachines more robust.
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).
2013-03-23 22:17:27 +01:00
Aleric Inglewood
c4dceaf3e9 Rewrite of AIStateMachine, version 2. 2013-03-06 03:26:43 +01:00
Latif Khalifa
8584e6da4c Merge branch 'master' into meshupload
Conflicts:
	indra/llcommon/llhash.h
	indra/newview/CMakeLists.txt
	indra/newview/llfloatermodelpreview.cpp
	indra/newview/llfloatermodelpreview.h
	indra/newview/llpanelprofile.h
2013-01-30 00:36:31 +01:00
Aleric Inglewood
db7155666d Merge branch 'master' into meshupload
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.
2013-01-21 19:16:06 +01:00
Latif Khalifa
18816ae146 Merge remote-tracking branch 'shyotl/sunshine' 2013-01-21 11:25:10 +01:00
Siana Gearz
b318a0703b Use standard way on windows to find default file picker path 2013-01-20 05:55:18 +01:00
Aleric Inglewood
da19e770a2 Renamed FFLOAD/SAVE_LSL to FFLOAD/SAVE_SCRIPT 2013-01-07 20:11:18 +01:00
Aleric Inglewood
5e7acb9f3a Add support for ".dae" (and others) to filepicker load filter.
* 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").
2013-01-07 20:00:54 +01:00
Lirusaito
ac60260da2 Update LLFloaterModelPreview and make it compile~
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~
2013-01-06 11:56:33 -05:00
Shyotl
cdaa4b4e99 Clear up a few issues revealed upon forced full recompile. (VS is dumb sometimes) 2012-12-22 23:44:43 -06:00
Aleric Inglewood
536cb6febd Merge branch 'curlthreading2' into curlthreading3
Conflicts:
	indra/CMakeLists.txt
	indra/llcommon/llstring.h
	indra/llmessage/CMakeLists.txt
	indra/llmessage/llhttpclient.cpp
	indra/llmessage/llhttpclient.h
	indra/llmessage/llurlrequest.cpp
	indra/llmessage/llurlrequest.h
	indra/newview/hipporestrequest.cpp
	indra/newview/llappviewer.cpp
2012-08-15 00:51:40 +02:00
Aleric Inglewood
fbb5dced97 Merge remote-tracking branch 'singu/master' into curlthreading2
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.
2012-08-13 17:07:25 +02:00
Aleric Inglewood
37c8ea54eb Add AIThreadID - Cleanup of apr_os_thread* related code.
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.
2012-08-09 06:30:31 +02:00
Aleric Inglewood
af4ceb0658 Crash on exit fix. 2012-08-03 00:53:54 +02:00
Aleric Inglewood
cd93aba002 Created aistatemachine library and moved files. 2012-07-29 01:30:10 +02:00
Drake Arconis
1e81966b89 Clean up and updates
Cleaned up header bloatyness in linden_common
Moved around things to be in line with Linden Lab
Updated llinitparam and imported its new dependencies
Removed dohexeditor and related files
Removed unused legacy files

             /\_..._/\
             |/ \_/ \|
             | o.-.o |
             \ ( O ) /
             /'--U--'\
             |  .:.  | /\
             | /:;:\ |` /
   Drake     | |:;:| |-'
  Arconis   /  |'-'|  \
            `""`   `""`
2012-07-20 08:13:07 -04:00
Aleric Inglewood
648ed00ce2 Don't call gSavedSettings.getU32() and calc_clock_frequency() so often anymore. 2012-07-17 19:58:34 +02:00
Aleric Inglewood
a34247ebf4 Bug fix.
Don't test on something that belongs in an assert.
is_main_thread() doesn't even exist unless --type=Debug.
2012-07-15 23:08:07 +02:00
Aleric Inglewood
7c022d6061 Don't crash on exit.
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.
2012-07-15 22:51:14 +02:00
Aleric Inglewood
7416d2aaf1 Timer, time out, and clean up improvements. 2012-07-14 04:29:37 +02:00
Aleric Inglewood
0419f8bee9 Add an AITimer to AICurlEasyRequestStateMachine.
Fixes AIStateMachine to work thread-safe with the timer.
2012-07-10 05:09:08 +02:00
Aleric Inglewood
f012f664d2 Threading voodoo: allow multiple concurrent calls to set_state().
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.
2012-07-09 04:19:28 +02:00
Aleric Inglewood
125a10bb44 Code hardening, review, bug fixes, documentation, curl stats and cleanup.
Bug fixes:
AICurlEasyRequestStateMachine didn't delete itself.
curl_multi_socket_action calls were made for potentional removed sockets.
The curl thread wasn't terminated.
2012-07-04 00:10:43 +02:00
Aleric Inglewood
69ca6cd5b2 WIP: Make curl thread code robust and flexible.
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
Aleric Inglewood
c02834b7e3 Use AIThreadSafeDC and _wat convention to simplify AIEvent. 2012-06-27 04:27:08 +02:00
Aleric Inglewood
15fb0ac3aa Allow AIStateMachine::cont() to be called from another thread for an idle statemachine. 2012-06-27 04:27:08 +02:00
Aleric Inglewood
4391614d6e AIThreadSafe* update.
Updated/added documentation.
Removed AIThreadSafeWindowsHack that annoyed me (fix your compiler).
Don't use 'static' in anonymous namespace.
Use the AIThreadSafe*DC variants for default constructed objects,
as opposed to the AITHREADSAFE* macro's.
2012-06-27 04:27:07 +02:00
Shyotl
a066730acb Added LLInitParam. Not yet plugged into xml parsing. 2012-02-24 20:16:33 -06:00
Aleric Inglewood
9b4b234c12 Allow AIStateMachine::kill to be called while not running.
This can be used for example when a parent statemachine has
a child statemachine and wants to kill() it upon finish.
2012-02-16 01:10:48 +01:00
Aleric Inglewood
e0b21b08fa Add AITimer and AIPersistentTimer state machines.
For use inside other state machines that need timer events.
Wraps AIFrameTimer.
2012-02-10 02:10:12 +01:00
Aleric Inglewood
cad0597524 Allow AIStateMachine::run() to be called from callback functions.
This was already documented as working, but turned out not to work.
Now one can call any of the run(...) functions to guarantee a restart
of the statemachine. Using run() without parameters from a callback
function re-uses the old callback information.

Introduces a new enum AIStateMachine::active_type that keeps track
of on which list the statemachine resides, if any. This was necessary
because run() calls cont() which now can be called while the
statemachine is already on the active list, so it needs to know
more than just if it's on the continued_statemachines list or
not.
2012-02-10 00:23:20 +01:00
Aleric Inglewood
5a455eac91 Fixed LLFastTimers et al.
No longer crash when std::vector moves in memory when it grows.
Fixed display of timer values (in ms).
2012-02-05 05:35:01 +01:00
Shyotl
6374f012de new fasttimers, including ui. 2012-01-23 18:30:54 -06:00
Shyotl
4a4b786a60 New inventory observer implementation. 2012-01-21 04:54:39 -06:00
Shyotl
4c201a9b83 Inv fetch migrated from LLInventoryModel to LLInventoryModelBackgroundFetch singleton. 2012-01-20 19:09:44 -06:00
Shyotl
1cc33caaa3 Pulled llinventorymodel apart into llinventorymodel, llinventoryobserver and llinventoryfunctions 2012-01-12 18:57:10 -06:00
Shyotl
36e0f667d5 gAgent.set/getInventoryRootID() changed to gInventory.set/getRootFolderID() 2011-10-12 02:29:12 -05:00
Siana Gearz
05c132c342 Correct, complete user profile path on Windows 2011-08-18 19:36:12 +02:00
Aleric Inglewood
923c8d32ef Never pass an empty string as directory path to the filepicker.
Should work around the problem as described in
http://code.google.com/p/singularity-viewer/issues/detail?id=117
2011-08-18 19:36:11 +02:00
Aleric Inglewood
7a739f4915 Minor documentation fixes. 2011-08-18 19:30:42 +02:00
Siana Gearz
87070be7e3 Merge branch 'master' of github-siana:siana/SingularityViewer into future 2011-08-03 01:01:00 +02:00
Siana Gearz
2dd733cbaa Merge branch 'master' into future 2011-07-20 22:12:14 +02:00
Aleric Inglewood
a59f93266b Improved documentation regarding kill() a bit. 2011-07-12 15:59:30 +02:00
Siana Gearz
6348635d3f Ïntroduced LLFolderType and LLViewerAssetType (by Shyotl) 2011-06-23 21:11:52 +02:00
Aleric Inglewood
b852a77a79 AIFilePicker related bug fixes.
Bug fix in LLPreviewAnim::gotAssetForSave_continued: the if()
that tests if the result from the filepicker can be used was
accidently negated, mostly causing a crash when cancelling an
animation preview download (open animation, File -> Save Texture As..),
and canceling the save when a filename is picked.

The lifetime of AIFileUpload is actually till the very end
of the main(), causing it's member mPicker to be reused.
This leads to problems. When someone tries to open a file picker
for a file upload of the same time before the previous filepicker
called the callback function (ie, when two filepickers are
opened at the same time, or when the plugin crashes).
With this fix it is possible to open any number of file pickers.

Finally, for linux, LLFastTimers was using assembly with gives
rather random results on multicore machines. Since AIStateMachine
is using this for wait timing, it had a negative effect on
how well the file picker worked (the last message wasn't flushed
for several seconds).
2011-06-21 02:49:34 +02:00