Merge remote-tracking branch 'Liru/master'
This commit is contained in:
@@ -385,12 +385,12 @@ void LLApp::setupErrorHandling()
|
||||
// installing the handler.
|
||||
installHandler = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
mExceptionHandler = new google_breakpad::ExceptionHandler(mDumpPath, clear_CrashLoggerReserve_callback, &unix_post_minidump_callback, 0, true, 0);
|
||||
}
|
||||
#endif
|
||||
#elif LL_LINUX
|
||||
if(installHandler && (mExceptionHandler == 0))
|
||||
{
|
||||
|
||||
@@ -16916,6 +16916,28 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<key>Value</key>
|
||||
<string>0</string>
|
||||
</map>
|
||||
<key>VivoxShutdownTimeout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>shutdown timeout in miliseconds. The amount of time to wait for the service to shutdown gracefully after the last disconnect</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string>5</string>
|
||||
</map>
|
||||
<key>VivoxLogDirectory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Default log path is Application Support/SecondLife/logs specify alternate absolute path here.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string />
|
||||
</map>
|
||||
<key>VivoxDebugSIPURIHostName</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -53,6 +53,9 @@ ATI ASUS EAH38xx .*ATI.*ASUS.*EAH38.* 3 1
|
||||
ATI ASUS EAH43xx .*ATI.*ASUS.*EAH43.* 1 1
|
||||
ATI ASUS EAH45xx .*ATI.*ASUS.*EAH45.* 1 1
|
||||
ATI ASUS EAH48xx .*ATI.*ASUS.*EAH48.* 3 1
|
||||
ATI ASUS EAH54xx .*ATI.*ASUS.*EAH54.* 3 1
|
||||
ATI ASUS EAH55xx .*ATI.*ASUS.*EAH55.* 3 1
|
||||
ATI ASUS EAH56xx .*ATI.*ASUS.*EAH56.* 3 1
|
||||
ATI ASUS EAH57xx .*ATI.*ASUS.*EAH57.* 3 1
|
||||
ATI ASUS EAH58xx .*ATI.*ASUS.*EAH58.* 3 1
|
||||
ATI ASUS EAH6xxx .*ATI.*ASUS.*EAH6.* 3 1
|
||||
@@ -186,6 +189,14 @@ ATI Radeon HD 7600 .*ATI.*Radeon HD *76.. 3 1
|
||||
ATI Radeon HD 7700 .*ATI.*Radeon HD *77.. 3 1
|
||||
ATI Radeon HD 7800 .*ATI.*Radeon HD *78.. 3 1
|
||||
ATI Radeon HD 7900 .*ATI.*Radeon HD *79.. 3 1
|
||||
ATI Radeon HD 8200 .*ATI.*AMD Radeon.* HD 82.* 3 1
|
||||
ATI Radeon HD 8300 .*ATI.*AMD Radeon.* HD 83.* 3 1
|
||||
ATI Radeon HD 8400 .*ATI.*AMD Radeon.* HD 84.* 3 1
|
||||
ATI Radeon HD 8500 .*ATI.*AMD Radeon.* HD 85.* 3 1
|
||||
ATI Radeon HD 8600 .*ATI.*AMD Radeon.* HD 86.* 3 1
|
||||
ATI Radeon HD 8700 .*ATI.*AMD Radeon.* HD 87.* 3 1
|
||||
ATI Radeon HD 8800 .*ATI.*AMD Radeon.* HD 88.* 3 1
|
||||
ATI Radeon HD 8900 .*ATI.*AMD Radeon.* HD 89.* 3 1
|
||||
ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0
|
||||
ATI Radeon 2100 .*ATI.*Radeon 21.. 0 1
|
||||
ATI Radeon 3000 .*ATI.*Radeon 30.. 0 1
|
||||
@@ -301,15 +312,15 @@ Intel Eaglelake .*Intel.*Eaglelake.* 0 1
|
||||
Intel Graphics Media HD .*Intel.*Graphics Media.*HD.* 0 1
|
||||
Intel HD Graphics 2000 .*Intel.*HD Graphics 2000.* 1 1
|
||||
Intel HD Graphics 3000 .*Intel.*HD Graphics 3000.* 2 1
|
||||
Intel HD Graphics 3000 .*Intel.*Sandybridge.* 2 1
|
||||
Intel HD Graphics 3000 .*Intel.*Sandybridge.* 2 1
|
||||
Intel HD Graphics 4000 .*Intel.*HD Graphics 4000.* 2 1
|
||||
Intel HD Graphics 4000 .*Intel.*Ivybridge.* 2 1
|
||||
Intel Intel Iris Pro Graphics 5200 .*Intel.*Iris Pro Graphics 52.* 2 1
|
||||
Intel Intel Iris Graphics 5100 .*Intel.*Iris Graphics 51.* 2 1
|
||||
Intel Intel Iris OpenGL Engine .*Intel.*Iris OpenGL.* 2 1
|
||||
Intel Intel Iris Pro OpenGL Engine .*Intel.*Iris Pro OpenGL.* 3 1
|
||||
Intel HD Graphics 4000 .*Intel.*Ivybridge.* 2 1
|
||||
Intel Intel Iris Pro Graphics 5200 .*Intel.*Iris Pro Graphics 52.* 2 1
|
||||
Intel Intel Iris Graphics 5100 .*Intel.*Iris Graphics 51.* 2 1
|
||||
Intel Intel Iris OpenGL Engine .*Intel.*Iris OpenGL.* 2 1
|
||||
Intel Intel Iris Pro OpenGL Engine .*Intel.*Iris Pro OpenGL.* 3 1
|
||||
Intel HD Graphics 5000 .*Intel.*HD Graphics 5.* 2 1
|
||||
Intel HD Graphics 5000 .*Intel.*Haswell.* 2 1
|
||||
Intel HD Graphics 5000 .*Intel.*Haswell.* 2 1
|
||||
Intel HD Graphics .*Intel.*HD Graphics.* 2 1
|
||||
Intel Mobile 4 Series .*Intel.*Mobile.* 4 Series.* 0 1
|
||||
Intel Media Graphics HD .*Intel.*Media Graphics HD.* 0 1
|
||||
@@ -319,8 +330,10 @@ Intel Springdale .*Intel.*Springdale.* 0 0
|
||||
Intel HD Graphics 2000 .*Intel.*HD2000.* 1 1
|
||||
Intel HD Graphics 3000 .*Intel.*HD3000.* 2 1
|
||||
Matrox .*Matrox.* 0 0
|
||||
Intel Mesa (Ivybridge) .*Mesa DRI.*Ivybridge.* 2 1
|
||||
Intel Mesa (Haswell) .*Mesa DRI.*Haswell.* 2 1
|
||||
Mesa .*Mesa.* 0 0
|
||||
Gallium .*Gallium.* 1 1
|
||||
Gallium .*Gallium.* 1 1
|
||||
NVIDIA 205 .*NVIDIA .*GeForce 205.* 2 1
|
||||
NVIDIA 210 .*NVIDIA .*GeForce 210.* 2 1
|
||||
NVIDIA 310M .*NVIDIA .*GeForce 310M.* 1 1
|
||||
@@ -421,7 +434,7 @@ NVIDIA GTX 760 .*NVIDIA .*GTX *76.* 3 1
|
||||
NVIDIA GTX 770 .*NVIDIA .*GTX *77.* 3 1
|
||||
NVIDIA GTX 780 .*NVIDIA .*GTX *78.* 3 1
|
||||
NVIDIA GTX TITAN .*NVIDIA .*GTX *TITAN.* 3 1
|
||||
NVIDIA GT 7xxM .*NVIDIA .*GT *7.* 3 1
|
||||
NVIDIA GT 7xxM .*NVIDIA .*GT *7.* 3 1
|
||||
NVIDIA C51 .*NVIDIA .*C51.* 0 1
|
||||
NVIDIA G72 .*NVIDIA .*G72.* 1 1
|
||||
NVIDIA G73 .*NVIDIA .*G73.* 1 1
|
||||
@@ -544,6 +557,7 @@ NVIDIA MCP78 .*NVIDIA .*MCP78.* 1 1
|
||||
NVIDIA MCP79 .*NVIDIA .*MCP79.* 1 1
|
||||
NVIDIA MCP7A .*NVIDIA .*MCP7A.* 1 1
|
||||
NVIDIA Quadro2 .*Quadro2.* 0 1
|
||||
NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1
|
||||
NVIDIA Quadro 1000M .*Quadro.*1000M.* 2 1
|
||||
NVIDIA Quadro 2000 M/D .*Quadro.*2000.* 3 1
|
||||
NVIDIA Quadro 3000M .*Quadro.*3000M.* 3 1
|
||||
@@ -552,6 +566,7 @@ NVIDIA Quadro 4000 .*Quadro *4000.* 3 1
|
||||
NVIDIA Quadro 50x0 M .*Quadro.*50.0.* 3 1
|
||||
NVIDIA Quadro 6000 .*Quadro.*6000.* 3 1
|
||||
NVIDIA Quadro 400 .*Quadro.*400.* 2 1
|
||||
NVIDIA Quadro K600 .*Quadro.* (K6|6)0[0-9][^0].* 2 1
|
||||
NVIDIA Quadro 600 .*Quadro.*600.* 2 1
|
||||
NVIDIA Quadro4 .*Quadro4.* 0 1
|
||||
NVIDIA Quadro DCC .*Quadro DCC.* 0 1
|
||||
@@ -606,6 +621,8 @@ NVIDIA Quadro 6000 .*Quadro.*6000.* 2 1
|
||||
NVIDIA Quadro 600 .*Quadro.*600.* 2 1
|
||||
NVIDIA Quadro NVS .*(Quadro|NVIDIA) NVS.* 0 1
|
||||
NVIDIA RIVA TNT .*RIVA TNT.* 0 0
|
||||
NVIDIA GRID .*NVIDIA .*GRID.* 0 0
|
||||
NVIDIA ION .*NVIDIA.* *ION.* 2 1
|
||||
NVIDIA PCI .*NVIDIA.*/PCI/SSE2 0 0
|
||||
S3 .*S3 Graphics.* 0 0
|
||||
SiS SiS.* 0 0
|
||||
|
||||
@@ -3917,7 +3917,6 @@ void LLAppViewer::idle()
|
||||
// Handle the regular UI idle callbacks as well as
|
||||
// hover callbacks
|
||||
//
|
||||
|
||||
{
|
||||
LLFastTimer t(FTM_IDLE_CB);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -38,15 +38,14 @@
|
||||
#include "llpanel.h"
|
||||
#include "llstring.h"
|
||||
#include "lluuid.h"
|
||||
#include "lleventtimer.h"
|
||||
|
||||
#include "llcallingcard.h"
|
||||
|
||||
class LLAvatarName;
|
||||
class LLFriendObserver;
|
||||
class LLRelationship;
|
||||
class LLScrollListItem;
|
||||
class LLScrollListCtrl;
|
||||
class AIFilePicker;
|
||||
class LLScrollListItem;
|
||||
|
||||
/**
|
||||
* @class LLPanelFriends
|
||||
@@ -55,19 +54,12 @@ class AIFilePicker;
|
||||
*
|
||||
* @sa LLFloater
|
||||
*/
|
||||
class LLPanelFriends : public LLPanel, public LLEventTimer
|
||||
class LLPanelFriends : public LLPanel
|
||||
{
|
||||
public:
|
||||
LLPanelFriends();
|
||||
virtual ~LLPanelFriends();
|
||||
|
||||
/**
|
||||
* @brief This method either creates or brings to the front the
|
||||
* current instantiation of this floater. There is only once since
|
||||
* you can currently only look at your local friends.
|
||||
*/
|
||||
virtual BOOL tick();
|
||||
|
||||
/**
|
||||
* @brief This method is called in response to the LLAvatarTracker
|
||||
* sending out a changed() message.
|
||||
@@ -99,16 +91,16 @@ private:
|
||||
// <dogmode> Contacts search and group system
|
||||
void filterContacts(const std::string& search_name);
|
||||
void categorizeContacts();
|
||||
void setContactGroup(std::string contact_grp);
|
||||
std::string cleanFileName(std::string filename);
|
||||
void setContactGroup(const std::string& contact_grp);
|
||||
//std::string cleanFileName(std::string filename);
|
||||
// --
|
||||
BOOL refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies);
|
||||
BOOL refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies);
|
||||
void refreshNamesSync(const LLAvatarTracker::buddy_map_t & all_buddies);
|
||||
void refreshNamesPresence(const LLAvatarTracker::buddy_map_t & all_buddies);
|
||||
void refreshUI();
|
||||
void refreshRightsChangeList();
|
||||
void applyRightsToFriends();
|
||||
BOOL addFriend(const LLUUID& agent_id);
|
||||
BOOL updateFriendItem(const LLUUID& agent_id, const LLRelationship* relationship);
|
||||
void addFriend(const LLUUID& agent_id);
|
||||
void updateFriendItem(const LLUUID& agent_id, const LLRelationship* relationship);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -119,27 +111,22 @@ private:
|
||||
void sendRightsGrant(rights_map_t& ids);
|
||||
|
||||
// callback methods
|
||||
static void onSelectName(LLUICtrl* ctrl, void* user_data);
|
||||
static void onChangeContactGroup(LLUICtrl* ctrl, void* user_data);
|
||||
static void onPickAvatar(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names );
|
||||
void onContactFilterEdit(const std::string& search_string);
|
||||
static void onClickIM(void* user_data);
|
||||
static void onClickAssign(void* user_data);
|
||||
static void onClickExpand(void* user_data);
|
||||
static void updateColumns(void* user_data);
|
||||
static void onClickProfile(void* user_data);
|
||||
static void onClickAddFriend(void* user_data);
|
||||
static void onClickExport(void* user_data);
|
||||
static void onClickExport_continued(void* user_data, AIFilePicker* filepicker);
|
||||
static void onClickImport(void* user_data);
|
||||
static void onClickImport_filepicker_continued(AIFilePicker* filepicker);
|
||||
void onSelectName();
|
||||
static void onPickAvatar(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names);
|
||||
void onClickIM(const uuid_vec_t& ids);
|
||||
void updateColumns(bool collapsed);
|
||||
void onClickAddFriend();
|
||||
/*
|
||||
void onClickExport();
|
||||
void onClickExport_continued(class AIFilePicker* filepicker);
|
||||
void onClickImport();
|
||||
void onClickImport_filepicker_continued(AIFilePicker* filepicker);
|
||||
*/
|
||||
public:
|
||||
static void FriendImportState(LLUUID id, bool accepted);
|
||||
private:
|
||||
static void onClickPay(void* user_data);
|
||||
|
||||
static void onClickModifyStatus(LLUICtrl* ctrl, void* user_data);
|
||||
bool modifyRightsConfirmation(const LLSD& notification, const LLSD& response, rights_map_t* rights);
|
||||
bool modifyRightsConfirmation(const LLSD& notification, const LLSD& response, rights_map_t rights);
|
||||
|
||||
private:
|
||||
// member data
|
||||
@@ -147,13 +134,8 @@ private:
|
||||
LLUUID mAddFriendID;
|
||||
std::string mAddFriendName;
|
||||
LLScrollListCtrl* mFriendsList;
|
||||
std::string mContactFilter;
|
||||
BOOL mShowMaxSelectWarning;
|
||||
BOOL mAllowRightsChange;
|
||||
S32 mNumRightsChanged;
|
||||
S32 mNumOnline;
|
||||
std::string mLastContactSearch;
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_LLFLOATERFRIENDS_H
|
||||
|
||||
@@ -349,6 +349,7 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() :
|
||||
mCaptureBufferRecording(false),
|
||||
mCaptureBufferRecorded(false),
|
||||
mCaptureBufferPlaying(false),
|
||||
mShutdownComplete(true),
|
||||
mPlayRequestCount(0),
|
||||
|
||||
mAvatarNameCacheConnection()
|
||||
@@ -404,6 +405,14 @@ void LLVivoxVoiceClient::terminate()
|
||||
{
|
||||
logout();
|
||||
connectorShutdown();
|
||||
#ifdef LL_WINDOWS
|
||||
S32 count = 0;
|
||||
while (!mShutdownComplete && 10 > ++count)
|
||||
{
|
||||
stateMachine();
|
||||
_sleep(1000);
|
||||
}
|
||||
#endif // LL_WINDOW
|
||||
closeSocket(); // Need to do this now -- bad things happen if the destructor does it later.
|
||||
cleanUp();
|
||||
}
|
||||
@@ -503,10 +512,9 @@ void LLVivoxVoiceClient::connectorCreate()
|
||||
|
||||
std::string savedLogLevel = gSavedSettings.getString("VivoxDebugLevel");
|
||||
|
||||
if(savedLogLevel != "-0")
|
||||
if(savedLogLevel != "0")
|
||||
{
|
||||
LL_DEBUGS("Voice") << "creating connector with logging enabled" << LL_ENDL;
|
||||
loglevel = "0";
|
||||
}
|
||||
|
||||
stream
|
||||
@@ -524,13 +532,14 @@ void LLVivoxVoiceClient::connectorCreate()
|
||||
|
||||
stream
|
||||
<< "<Logging>"
|
||||
<< "<Folder>" << logpath << "</Folder>"
|
||||
<< "<FileNamePrefix>Connector</FileNamePrefix>"
|
||||
<< "<FileNameSuffix>.log</FileNameSuffix>"
|
||||
<< "<LogLevel>" << loglevel << "</LogLevel>"
|
||||
<< "<Folder>" << logpath << "</Folder>"
|
||||
<< "<FileNamePrefix>Connector</FileNamePrefix>"
|
||||
<< "<FileNameSuffix>.log</FileNameSuffix>"
|
||||
<< "<LogLevel>" << loglevel << "</LogLevel>"
|
||||
<< "</Logging>"
|
||||
<< "<Application>SecondLifeViewer.1</Application>"
|
||||
<< "</Request>\n\n\n";
|
||||
<< "<Application></Application>" //Name can cause problems per vivox.
|
||||
<< "<MaxCalls>12</MaxCalls>"
|
||||
<< "</Request>\n\n\n";
|
||||
|
||||
writeString(stream.str());
|
||||
}
|
||||
@@ -548,6 +557,7 @@ void LLVivoxVoiceClient::connectorShutdown()
|
||||
<< "</Request>"
|
||||
<< "\n\n\n";
|
||||
|
||||
mShutdownComplete = false;
|
||||
mConnectorHandle.clear();
|
||||
|
||||
writeString(stream.str());
|
||||
@@ -838,6 +848,7 @@ void LLVivoxVoiceClient::stateMachine()
|
||||
std::string args, cmd;
|
||||
|
||||
std::string loglevel = gSavedSettings.getString("VivoxDebugLevel");
|
||||
std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout");
|
||||
if(loglevel.empty())
|
||||
{
|
||||
loglevel = "0"; // turn logging off completely
|
||||
@@ -851,6 +862,19 @@ void LLVivoxVoiceClient::stateMachine()
|
||||
#else
|
||||
args += loglevel;
|
||||
#endif
|
||||
args += " -lf ";
|
||||
std::string log_folder = gSavedSettings.getString("VivoxLogDirectory");
|
||||
if (log_folder.empty())
|
||||
{
|
||||
log_folder = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
|
||||
}
|
||||
args += "logfolder";
|
||||
|
||||
if(!shutdown_timeout.empty())
|
||||
{
|
||||
args += " -st ";
|
||||
args += shutdown_timeout;
|
||||
}
|
||||
|
||||
// If we allow multiple instances of the viewer to start the voicedaemon
|
||||
if (gSavedSettings.getBOOL("VoiceMultiInstance"))
|
||||
@@ -1640,7 +1664,7 @@ void LLVivoxVoiceClient::stateMachine()
|
||||
// Always reset the terminate request flag when we get here.
|
||||
mSessionTerminateRequested = false;
|
||||
|
||||
if((mVoiceEnabled || !mIsInitialized) && !mRelogRequested)
|
||||
if((mVoiceEnabled || !mIsInitialized) && !mRelogRequested && !LLApp::isExiting())
|
||||
{
|
||||
// Just leaving a channel, go back to stateNoChannel (the "logged in but have no channel" state).
|
||||
setState(stateNoChannel);
|
||||
@@ -1683,6 +1707,7 @@ void LLVivoxVoiceClient::stateMachine()
|
||||
//MARK: stateConnectorStopping
|
||||
case stateConnectorStopping: // waiting for connector stop
|
||||
// The handler for the Connector.InitiateShutdown response will transition from here to stateConnectorStopped.
|
||||
mShutdownComplete = true;
|
||||
break;
|
||||
|
||||
//MARK: stateConnectorStopped
|
||||
|
||||
@@ -876,6 +876,7 @@ private:
|
||||
bool mCaptureBufferRecording; // A voice sample is being captured.
|
||||
bool mCaptureBufferRecorded; // A voice sample is captured in the buffer ready to play.
|
||||
bool mCaptureBufferPlaying; // A voice sample is being played.
|
||||
bool mShutdownComplete;
|
||||
|
||||
LLTimer mCaptureTimer;
|
||||
LLUUID mPreviewVoiceFont;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</combo_box-->
|
||||
<!--text bottom_delta="-40" follows="left|top" font="SansSerifSmall" height="16" name="Contact Search:" width="110">Contact Search:</text-->
|
||||
<filter_editor name="buddy_search_lineedit" label="Kontakt suche" tool_tip="Der Name des Freundes den du suchen möchtest"/>
|
||||
<button label="0" name="expand_collapse_btn" tool_tip="Ein und Ausklappen von mehr Informationen"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Ein und Ausklappen von mehr Informationen"/>
|
||||
|
||||
<!--button bottom_delta="-25" follows="top|right" height="22" label="Set Contact" name="assign_btn" tool_tip="Assign a friend to a Contact Group" width="80"/-->
|
||||
<button label="IM/Anruf" name="im_btn" tool_tip="Öffnet eine Instant-Message-Sitzung"/>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</combo_box-->
|
||||
<!--text bottom_delta="-40" follows="left|top" font="SansSerifSmall" height="16" name="Contact Search:" width="110">Contact Search:</text-->
|
||||
<filter_editor name="buddy_search_lineedit" label="Kontakt suche" tool_tip="Der Name des Freundes den du suchen möchtest"/>
|
||||
<button label="0" name="expand_collapse_btn" tool_tip="Ein und Ausklappen von mehr Informationen"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Ein und Ausklappen von mehr Informationen"/>
|
||||
<!--button bottom_delta="-25" follows="top|right" height="22" label="Set Contact" name="assign_btn" tool_tip="Assign a friend to a Contact Group" width="80"/-->
|
||||
<text name="friends">Online</text>
|
||||
<text name="f_num">0000</text>
|
||||
|
||||
@@ -32,7 +32,7 @@ To use voice, you must accept the license agreement.
|
||||
start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//vivox.com/vivox_aup.html%22%3EVivox%20Acceptable%20Use%20Policy%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E"
|
||||
width="568" word_wrap="true" />
|
||||
<string name="real_url">
|
||||
vivox_aup.html
|
||||
http://replex-viewer.github.io/pages/vivox_aup.html
|
||||
</string>
|
||||
<string name="fallback_html">
|
||||
vivox_aup.html
|
||||
|
||||
@@ -8001,6 +8001,24 @@ Only textures will upload as temporary on Agni and Aditi.
|
||||
canceltext="Cancel"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
name="AuthRequest"
|
||||
type="browser">
|
||||
The site at '[HOST_NAME]' in realm '[REALM]' requires a user name and password.
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<input name="username" type="text" text="User Name"/>
|
||||
<input name="password" type="password" text="Password "/>
|
||||
<button default="true"
|
||||
index="0"
|
||||
name="ok"
|
||||
text="Submit"/>
|
||||
<button index="1"
|
||||
name="cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="PathfindingLinksets_WarnOnPhantom"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
</combo_box-->
|
||||
<!--text bottom_delta="-40" follows="left|top" font="SansSerifSmall" height="16" name="Contact Search:" width="110">Contact Search:</text-->
|
||||
<filter_editor bottom_delta="-40" enabled="true" follows="left|top" font="SansSerif" height="18" name="buddy_search_lineedit" label="Contact Search" tool_tip="The friend name you want to search for" width="160"/>
|
||||
<button bottom_delta="0" follows="top|right" height="22" label="0" left="-120" name="expand_collapse_btn" tool_tip="Expand/Collapse extra info" width="22"/>
|
||||
<button bottom_delta="0" follows="top|right" height="22" left="-120" control_name="ContactListCollapsed" label="" image_selected="arrow_left.tga" image_unselected="arrow_right.tga" toggle="true" name="expand_collapse_btn" tool_tip="Expand/Collapse extra info" width="22"/>
|
||||
<pad bottom="-7" height="0" left="-90" width="1"/>
|
||||
<!--button bottom_delta="-25" follows="top|right" height="22" label="Set Contact" name="assign_btn" tool_tip="Assign a friend to a Contact Group" width="80"/-->
|
||||
<button bottom_delta="-25" follows="top|right" height="22" label="IM/Call" name="im_btn" tool_tip="Open Instant Message session" width="80"/>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
</combo_box-->
|
||||
<!--text bottom_delta="-40" follows="left|top" font="SansSerifSmall" height="16" name="Contact Search:" width="110">Contact Search:</text-->
|
||||
<filter_editor bottom_delta="-100" enabled="true" follows="left|top" font="SansSerif" height="18" name="buddy_search_lineedit" label="Contact Search" tool_tip="The friend name you want to search for" width="160"/>
|
||||
<button bottom_delta="0" follows="top|right" height="22" label="0" left="-25" name="expand_collapse_btn" tool_tip="Expand/Collapse extra info" width="22"/>
|
||||
<button bottom_delta="0" follows="top|right" height="22" left="-25" control_name="ContactListCollapsed" label="" image_selected="arrow_left.tga" image_unselected="arrow_right.tga" toggle="true" name="expand_collapse_btn" tool_tip="Expand/Collapse extra info" width="22"/>
|
||||
<!--button bottom_delta="-25" follows="top|right" height="22" label="Set Contact" name="assign_btn" tool_tip="Assign a friend to a Contact Group" width="80"/-->
|
||||
<text bottom="38" left="12" follows="left|bottom" height="32" name="friends" width="95">Online:</text>
|
||||
<text bottom_delta="0" left_delta="60" follows="left|bottom" height="32" name="f_num" width="95">0000</text>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<column name="friend_last_update_generation"/>
|
||||
</scroll_list>
|
||||
<filter_editor name="buddy_search_lineedit" label="Buscar Contactos" tool_tip="Nombre del amigo que estás buscando"/>
|
||||
<button label="0" name="expand_collapse_btn" tool_tip="Ampliar/Contraer información extra"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Ampliar/Contraer información extra"/>
|
||||
<button label="MI/Llamada" name="im_btn" tool_tip="Abrir sesión de Mensajes Instantáneos"/>
|
||||
<button label="Perfil" name="profile_btn" tool_tip="Mostrar foto, grupos e información adicional"/>
|
||||
<button label="Teleportar..." name="offer_teleport_btn" tool_tip="Ofrecer Teleporte a tu ubicación a este amigo" />
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
</combo_box-->
|
||||
<!--text bottom_delta="-40" follows="left|top" font="SansSerifSmall" height="16" name="Contact Search:" width="110">Contact Search:</text-->
|
||||
<filter_editor name="buddy_search_lineedit" label="Buscar Contactos" tool_tip="El nombre del contacto que estás buscando"/>
|
||||
<button label="0" name="expand_collapse_btn" tool_tip="Expandir/Retraer información extra"/>
|
||||
<button name="expand_collapse_btn" tool_tip="Expandir/Retraer información extra"/>
|
||||
<!--button bottom_delta="-25" follows="top|right" height="22" label="Set Contact" name="assign_btn" tool_tip="Assign a friend to a Contact Group" width="80"/-->
|
||||
<text name="friends">Conectados:</text>
|
||||
<text name="f_num" width="95">0000</text>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<check_box label="Masquer l'écran du Login/Logout" tool_tip="" name="disable_logout_screen_check"/>
|
||||
<check_box label="Désactiver les animations pour le chat local: dire, chuchoter, crier" tool_tip="" name="disable_chat_animation"/>
|
||||
<check_box label="Rajouter les attachements et habits au lieu de les remplacer" tool_tip="" name="add_not_replace"/>
|
||||
<check_box label="Pose Stand en apparence (décoché votre avatar garde la pose en cours)" name="customize_anim"/>
|
||||
<check_box label="Pivote l'avatar quand on marche en arriere" tool_tip="Certains AO peuvent empecher la fontion." name="turn_around"/>
|
||||
<check_box label="Préviens quand quelqu'un prend une photo" tool_tip="Sauf si la personne a elle même choisi le mode silencieux." name="announce_snapshots"/>
|
||||
<check_box label="Annonce les titres des chansons dans le chat local" tool_tip="" name="announce_stream_metadata"/>
|
||||
|
||||
@@ -35,6 +35,8 @@ import sys
|
||||
import os.path
|
||||
import re
|
||||
import tarfile
|
||||
import time
|
||||
import subprocess
|
||||
viewer_dir = os.path.dirname(__file__)
|
||||
# add llmanifest library to our path so we don't have to muck with PYTHONPATH
|
||||
sys.path.append(os.path.join(viewer_dir, '../lib/python/indra/util'))
|
||||
@@ -389,6 +391,22 @@ class WindowsManifest(ViewerManifest):
|
||||
mask = "%s_%s_Setup.exe"
|
||||
return mask % (self.channel_oneword(), '-'.join(self.args['version']))
|
||||
|
||||
|
||||
def sign_command(self, *argv):
|
||||
return [
|
||||
"signtool.exe",
|
||||
"sign", "/v",
|
||||
"/f",os.environ['VIEWER_SIGNING_KEY'],
|
||||
"/p",os.environ['VIEWER_SIGNING_PASSWORD'],
|
||||
"/d","%s" % self.channel(),
|
||||
"/du",os.environ['VIEWER_SIGNING_URL'],
|
||||
"/t","http://timestamp.comodoca.com/authenticode"
|
||||
] + list(argv)
|
||||
|
||||
|
||||
def sign(self, *argv):
|
||||
subprocess.check_call(self.sign_command(*argv))
|
||||
|
||||
def package_finish(self):
|
||||
# a standard map of strings for replacing in the templates
|
||||
substitution_strings = {
|
||||
@@ -435,6 +453,13 @@ class WindowsManifest(ViewerManifest):
|
||||
installer_file = installer_file % substitution_strings
|
||||
substitution_strings['installer_file'] = installer_file
|
||||
|
||||
# Sign the binaries
|
||||
try:
|
||||
self.sign(self.args['configuration']+"\\"+self.final_exe())
|
||||
self.sign(self.args['configuration']+"\\SLPlugin.exe")
|
||||
self.sign(self.args['configuration']+"\\SLVoice.exe")
|
||||
except Exception, e:
|
||||
print "Couldn't sign binaries. Tried to sign %s" % self.args['configuration'] + "\\" + self.final_exe() + "\nException: %s" % e
|
||||
tempfile = "secondlife_setup_tmp.nsi"
|
||||
# the following replaces strings in the nsi template
|
||||
# it also does python-style % substitution
|
||||
@@ -462,14 +487,13 @@ class WindowsManifest(ViewerManifest):
|
||||
NSIS_path = os.environ['ProgramFiles(X86)'] + '\\NSIS\\Unicode\\makensis.exe'
|
||||
self.run_command([proper_windows_path(NSIS_path),self.dst_path_of(tempfile)])
|
||||
# self.remove(self.dst_path_of(tempfile))
|
||||
# If we're on a build machine, sign the code using our Authenticode certificate. JC
|
||||
sign_py = os.path.expandvars("{SIGN_PY}")
|
||||
if sign_py == "" or sign_py == "{SIGN_PY}":
|
||||
sign_py = 'C:\\buildscripts\\code-signing\\sign.py'
|
||||
if os.path.exists(sign_py):
|
||||
self.run_command('python ' + sign_py + ' ' + self.dst_path_of(installer_file))
|
||||
else:
|
||||
print "Skipping code signing,", sign_py, "does not exist"
|
||||
|
||||
# Sign the installer
|
||||
try:
|
||||
self.sign(self.args['configuration'] + "\\" + substitution_strings['installer_file'])
|
||||
except Exception, e:
|
||||
print "Couldn't sign windows installer. Tried to sign %s" % self.args['configuration'] + "\\" + substitution_strings['installer_file'] + "\nException: %s" % e
|
||||
|
||||
self.created_path(self.dst_path_of(installer_file))
|
||||
self.package_file = installer_file
|
||||
|
||||
@@ -608,6 +632,38 @@ class DarwinManifest(ViewerManifest):
|
||||
if not self.default_channel_for_brand():
|
||||
channel_standin = self.channel()
|
||||
|
||||
# Sign the app if we have a key.
|
||||
try:
|
||||
signing_password = os.environ['VIEWER_SIGNING_PASSWORD']
|
||||
except KeyError:
|
||||
print "Skipping code signing"
|
||||
pass
|
||||
else:
|
||||
home_path = os.environ['HOME']
|
||||
self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' %
|
||||
(signing_password,
|
||||
home_path))
|
||||
signed=False
|
||||
sign_attempts=3
|
||||
sign_retry_wait=15
|
||||
while (not signed) and (sign_attempts > 0):
|
||||
try:
|
||||
sign_attempts-=1;
|
||||
self.run_command('codesign --verbose --force --timestamp --keychain "%(home_path)s/Library/Keychains/viewer.keychain" -s %(identity)r -f %(bundle)r' % {
|
||||
'home_path' : home_path,
|
||||
'identity': os.environ['VIEWER_SIGNING_KEY'],
|
||||
'bundle': self.get_dst_prefix()
|
||||
})
|
||||
signed=True
|
||||
except:
|
||||
if sign_attempts:
|
||||
print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait
|
||||
time.sleep(sign_retry_wait)
|
||||
sign_retry_wait*=2
|
||||
else:
|
||||
print >> sys.stderr, "Maximum codesign attempts exceeded; giving up"
|
||||
raise
|
||||
|
||||
imagename=self.installer_prefix() + '_'.join(self.args['version'])
|
||||
|
||||
# See Ambroff's Hack comment further down if you want to create new bundles and dmg
|
||||
|
||||
Reference in New Issue
Block a user