Merge remote-tracking branch 'Liru/master'

This commit is contained in:
Damian Zhaoying
2014-10-14 04:42:59 -03:00
18 changed files with 473 additions and 607 deletions

View File

@@ -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))
{

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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"/>

View File

@@ -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>

View File

@@ -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

View File

@@ -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 &apos;[HOST_NAME]&apos; in realm &apos;[REALM]&apos; 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"

View File

@@ -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"/>

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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>

View File

@@ -8,6 +8,7 @@
<check_box label="Masquer l'&#xE9;cran du Login/Logout" tool_tip="" name="disable_logout_screen_check"/>
<check_box label="D&#xE9;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"/>

View File

@@ -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