revert bad file copy

meow-7.2.2
Glenn Glazer 2017-07-27 11:12:35 -07:00
parent a25c541c0d
commit 5bc72ce786
2 changed files with 39 additions and 410 deletions

View File

@ -93,7 +93,6 @@
#include "llvocache.h"
#include "llvopartgroup.h"
#include "llweb.h"
#include "llupdaterservice.h"
#include "llfloatertexturefetchdebugger.h"
#include "llspellcheck.h"
#include "llscenemonitor.h"
@ -125,10 +124,8 @@
#include "llcoros.h"
#include "llexception.h"
#if !LL_LINUX
#include "cef/llceflib.h"
#if LL_WINDOWS
#include "cef/dullahan.h"
#include "vlc/libvlc_version.h"
#endif // LL_WINDOWS
#endif // LL_LINUX
// Third party library includes
@ -270,7 +267,6 @@ static LLAppViewerListener sAppViewerListener(LLAppViewer::instance);
// viewer.cpp - these are only used in viewer, should be easily moved.
#if LL_DARWIN
const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer";
extern void init_apple_menu(const char* product);
#endif // LL_DARWIN
@ -296,9 +292,7 @@ S32 gLastExecDuration = -1; // (<0 indicates unknown)
# define LL_PLATFORM_KEY "mac"
#elif LL_LINUX
# define LL_PLATFORM_KEY "lnx"
#elif LL_SOLARIS
# define LL_PLATFORM_KEY "sol"
#else
else
# error "Unknown Platform"
#endif
const char* gPlatform = LL_PLATFORM_KEY;
@ -334,10 +328,10 @@ BOOL gDisconnected = FALSE;
// used to restore texture state after a mode switch
LLFrameTimer gRestoreGLTimer;
BOOL gRestoreGL = FALSE;
BOOL gUseWireframe = FALSE;
bool gUseWireframe = FALSE;
//use for remember deferred mode in wireframe switch
BOOL gInitialDeferredModeForWireframe = FALSE;
bool gInitialDeferredModeForWireframe = FALSE;
// VFS globals - see llappviewer.h
LLVFS* gStaticVFS = NULL;
@ -475,8 +469,6 @@ struct SettingsFiles : public LLInitParam::Block<SettingsFiles>
static std::string gWindowTitle;
LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ;
//----------------------------------------------------------------------------
// Metrics logging control constants
//----------------------------------------------------------------------------
@ -703,7 +695,6 @@ LLAppViewer::LLAppViewer()
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE)),
mFastTimerLogThread(NULL),
mUpdater(new LLUpdaterService()),
mSettingsLocationList(NULL),
mIsFirstRun(false)
{
@ -733,17 +724,13 @@ LLAppViewer::LLAppViewer()
// OK to write stuff to logs now, we've now crash reported if necessary
//
LLLoginInstance::instance().setUpdaterService(mUpdater.get());
LLLoginInstance::instance().setPlatformInfo(gPlatform, getOSInfo().getOSVersionString());
}
LLAppViewer::~LLAppViewer()
{
delete mSettingsLocationList;
LLViewerEventRecorder::deleteSingleton();
LLLoginInstance::instance().setUpdaterService(0);
destroyMainloopTimeout();
// If we got to this destructor somehow, the app didn't hang.
@ -884,14 +871,6 @@ bool LLAppViewer::init()
writeSystemInfo();
// Initialize updater service (now that we have an io pump)
initUpdater();
if(isQuitting())
{
// Early out here because updater set the quitting flag.
return true;
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@ -1098,7 +1077,7 @@ bool LLAppViewer::init()
minSpecs += "\n";
unsupported = true;
}
if(gSysMemory.getPhysicalMemoryClamped() < minRAM)
if(gSysMemory.getPhysicalMemoryKB() < minRAM)
{
minSpecs += LLNotifications::instance().getGlobalString("UnsupportedRAM");
minSpecs += "\n";
@ -2106,20 +2085,15 @@ bool LLAppViewer::cleanup()
// realtime, or might throw an exception.
LLSingletonBase::cleanupAll();
// The logging subsystem depends on an LLSingleton. Any logging after
// LLSingletonBase::deleteAll() won't be recorded.
LL_INFOS() << "Goodbye!" << LL_ENDL;
// This calls every remaining LLSingleton's deleteSingleton() method.
// No class destructor should perform any cleanup that might take
// significant realtime, or throw an exception.
// LLSingleton machinery includes a last-gasp implicit deleteAll() call,
// so this explicit call shouldn't strictly be necessary. However, by the
// time the runtime engages that implicit call, it may already have
// destroyed things like std::cerr -- so the implicit deleteAll() refrains
// from logging anything. Since both cleanupAll() and deleteAll() call
// their respective cleanup methods in computed dependency order, it's
// probably useful to be able to log that order.
LLSingletonBase::deleteAll();
LL_INFOS() << "Goodbye!" << LL_ENDL;
removeDumpDir();
// return 0;
@ -2909,224 +2883,6 @@ void LLAppViewer::initStrings()
}
}
namespace {
// *TODO - decide if there's a better place for these functions.
// do we need a file llupdaterui.cpp or something? -brad
void apply_update_callback(LLSD const & notification, LLSD const & response)
{
LL_DEBUGS() << "LLUpdate user response: " << response << LL_ENDL;
if(response["OK_okcancelbuttons"].asBoolean())
{
LL_INFOS() << "LLUpdate restarting viewer" << LL_ENDL;
static const bool install_if_ready = true;
// *HACK - this lets us launch the installer immediately for now
LLUpdaterService().startChecking(install_if_ready);
}
}
void apply_update_ok_callback(LLSD const & notification, LLSD const & response)
{
LL_INFOS() << "LLUpdate restarting viewer" << LL_ENDL;
static const bool install_if_ready = true;
// *HACK - this lets us launch the installer immediately for now
LLUpdaterService().startChecking(install_if_ready);
}
void on_update_downloaded(LLSD const & data)
{
std::string notification_name;
void (*apply_callback)(LLSD const &, LLSD const &) = NULL;
/* Build up the notification name...
* it can be any of these, which are included here for the sake of grep:
* RequiredUpdateDownloadedDialog
* RequiredUpdateDownloadedVerboseDialog
* OtherChannelRequiredUpdateDownloadedDialog
* OtherChannelRequiredUpdateDownloadedVerbose
* DownloadBackgroundTip
* DownloadBackgroundDialog
* OtherChannelDownloadBackgroundTip
* OtherChannelDownloadBackgroundDialog
*/
{
LL_DEBUGS("UpdaterService") << "data = ";
std::ostringstream data_dump;
LLSDSerialize::toNotation(data, data_dump);
LL_CONT << data_dump.str() << LL_ENDL;
}
if(data["channel"].asString() != LLVersionInfo::getChannel())
{
notification_name.append("OtherChannel");
}
if(data["required"].asBoolean())
{
if(LLStartUp::getStartupState() <= STATE_LOGIN_WAIT)
{
// The user never saw the progress bar.
apply_callback = &apply_update_ok_callback;
notification_name += "RequiredUpdateDownloadedVerboseDialog";
}
else if(LLStartUp::getStartupState() < STATE_WORLD_INIT)
{
// The user is logging in but blocked.
apply_callback = &apply_update_ok_callback;
notification_name += "RequiredUpdateDownloadedDialog";
}
else
{
// The user is already logged in; treat like an optional update.
apply_callback = &apply_update_callback;
notification_name += "DownloadBackgroundTip";
}
}
else
{
apply_callback = &apply_update_callback;
if(LLStartUp::getStartupState() < STATE_STARTED)
{
// CHOP-262 we need to use a different notification
// method prior to login.
notification_name += "DownloadBackgroundDialog";
}
else
{
notification_name += "DownloadBackgroundTip";
}
}
LLSD substitutions;
substitutions["VERSION"] = data["version"];
std::string new_channel = data["channel"].asString();
substitutions["NEW_CHANNEL"] = new_channel;
std::string info_url = data["info_url"].asString();
if ( !info_url.empty() )
{
substitutions["INFO_URL"] = info_url;
}
else
{
LL_WARNS("UpdaterService") << "no info url supplied - defaulting to hard coded release notes pattern" << LL_ENDL;
// truncate version at the rightmost '.'
std::string version_short(data["version"]);
size_t short_length = version_short.rfind('.');
if (short_length != std::string::npos)
{
version_short.resize(short_length);
}
LLUIString relnotes_url("[RELEASE_NOTES_BASE_URL][CHANNEL_URL]/[VERSION_SHORT]");
relnotes_url.setArg("[VERSION_SHORT]", version_short);
// *TODO thread the update service's response through to this point
std::string const & channel = LLVersionInfo::getChannel();
boost::shared_ptr<char> channel_escaped(curl_escape(channel.c_str(), channel.size()), &curl_free);
relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get());
relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));
substitutions["INFO_URL"] = relnotes_url.getString();
}
LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);
}
void install_error_callback(LLSD const & notification, LLSD const & response)
{
LLAppViewer::instance()->forceQuit();
}
bool notify_update(LLSD const & evt)
{
std::string notification_name;
switch (evt["type"].asInteger())
{
case LLUpdaterService::DOWNLOAD_COMPLETE:
on_update_downloaded(evt);
break;
case LLUpdaterService::INSTALL_ERROR:
if(evt["required"].asBoolean()) {
LLNotificationsUtil::add("FailedRequiredUpdateInstall", LLSD(), LLSD(), &install_error_callback);
} else {
LLNotificationsUtil::add("FailedUpdateInstall");
}
break;
default:
break;
}
// let others also handle this event by default
return false;
}
bool on_bandwidth_throttle(LLUpdaterService * updater, LLSD const & evt)
{
updater->setBandwidthLimit(evt.asInteger() * (1024/8));
return false; // Let others receive this event.
};
};
void LLAppViewer::initUpdater()
{
// Initialize the updater service.
// Get Channel
// Get Version
/*****************************************************************
* Previously, the url was derived from the settings
* UpdaterServiceURL
* UpdaterServicePath
* it is now obtained from the grid manager. The settings above
* are no longer used.
*****************************************************************/
std::string channel = LLVersionInfo::getChannel();
std::string version = LLVersionInfo::getVersion();
U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
bool willing_to_test;
LL_DEBUGS("UpdaterService") << "channel " << channel << LL_ENDL;
if (LLVersionInfo::TEST_VIEWER == LLVersionInfo::getViewerMaturity())
{
LL_INFOS("UpdaterService") << "Test build: overriding willing_to_test by sending testno" << LL_ENDL;
willing_to_test = false;
}
else
{
willing_to_test = gSavedSettings.getBOOL("UpdaterWillingToTest");
}
unsigned char unique_id[MD5HEX_STR_SIZE];
if ( ! llHashedUniqueID(unique_id) )
{
if ( willing_to_test )
{
LL_WARNS("UpdaterService") << "Unable to provide a unique id; overriding willing_to_test by sending testno" << LL_ENDL;
}
willing_to_test = false;
}
mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
mUpdater->initialize(channel,
version,
gPlatform,
getOSInfo().getOSVersionString(),
unique_id,
willing_to_test
);
mUpdater->setCheckPeriod(check_period);
mUpdater->setBandwidthLimit((int)gSavedSettings.getF32("UpdaterMaximumBandwidth") * (1024/8));
gSavedSettings.getControl("UpdaterMaximumBandwidth")->getSignal()->
connect(boost::bind(&on_bandwidth_throttle, mUpdater.get(), _2));
if(gSavedSettings.getU32("UpdaterServiceSetting"))
{
bool install_if_ready = true;
mUpdater->startChecking(install_if_ready);
}
LLEventPump & updater_pump = LLEventPumps::instance().obtain(LLUpdaterService::pumpName());
updater_pump.listen("notify_update", &notify_update);
}
//
// This function decides whether the client machine meets the minimum requirements to
// run in a maximized window, per the consensus of davep, boa and nyx on 3/30/2011.
@ -3295,6 +3051,7 @@ LLSD LLAppViewer::getViewerInfo() const
info["VIEWER_VERSION"] = version;
info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion();
info["CHANNEL"] = LLVersionInfo::getChannel();
info["ADDRESS_SIZE"] = ADDRESS_SIZE;
std::string build_config = LLVersionInfo::getBuildConfig();
if (build_config != "Release")
{
@ -3386,20 +3143,33 @@ LLSD LLAppViewer::getViewerInfo() const
}
#if !LL_LINUX
info["LLCEFLIB_VERSION"] = LLCEFLIB_VERSION;
#else
info["LLCEFLIB_VERSION"] = "Undefined";
std::ostringstream cef_ver_codec;
cef_ver_codec << "Dullahan: ";
cef_ver_codec << DULLAHAN_VERSION_MAJOR;
cef_ver_codec << ".";
cef_ver_codec << DULLAHAN_VERSION_MINOR;
cef_ver_codec << ".";
cef_ver_codec << DULLAHAN_VERSION_BUILD;
cef_ver_codec << " / CEF: ";
cef_ver_codec << CEF_VERSION;
cef_ver_codec << " / Chrome: ";
cef_ver_codec << CHROME_VERSION_MAJOR;
info["LIBCEF_VERSION"] = cef_ver_codec.str();
#else
info["LIBCEF_VERSION"] = "Undefined";
#endif
#if LL_WINDOWS
std::ostringstream ver_codec;
ver_codec << LIBVLC_VERSION_MAJOR;
ver_codec << ".";
ver_codec << LIBVLC_VERSION_MINOR;
ver_codec << ".";
ver_codec << LIBVLC_VERSION_REVISION;
info["LIBVLC_VERSION"] = ver_codec.str();
#if !LL_LINUX
std::ostringstream vlc_ver_codec;
vlc_ver_codec << LIBVLC_VERSION_MAJOR;
vlc_ver_codec << ".";
vlc_ver_codec << LIBVLC_VERSION_MINOR;
vlc_ver_codec << ".";
vlc_ver_codec << LIBVLC_VERSION_REVISION;
info["LIBVLC_VERSION"] = vlc_ver_codec.str();
#else
info["LIBVLC_VERSION"] = "Undefined";
#endif
@ -3573,7 +3343,6 @@ void LLAppViewer::writeSystemInfo()
gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor();
gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::getPatch();
gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::getBuild();
gDebugInfo["ClientInfo"]["AddressSize"] = LLVersionInfo::getAddressSize();
gDebugInfo["CAFilename"] = gDirUtilp->getCAFile();
@ -3727,11 +3496,10 @@ void LLAppViewer::handleViewerCrash()
{
gDebugInfo["Dynamic"]["ParcelMediaURL"] = parcel->getMediaURL();
}
gDebugInfo["Dynamic"]["SessionLength"] = F32(LLFrameTimer::getElapsedSeconds());
gDebugInfo["Dynamic"]["RAMInfo"]["Allocated"] = (LLSD::Integer) LLMemory::getCurrentRSS() >> 10;
gDebugInfo["Dynamic"]["RAMInfo"]["Allocated"] = LLSD::Integer(LLMemory::getCurrentRSS() / 1024);
if(gLogoutInProgress)
{
gDebugInfo["Dynamic"]["LastExecEvent"] = LAST_EXEC_LOGOUT_CRASH;
@ -4311,7 +4079,7 @@ void dumpVFSCaches()
U32 LLAppViewer::getTextureCacheVersion()
{
//viewer texture cache version, change if the texture cache format changes.
const U32 TEXTURE_CACHE_VERSION = 7;
const U32 TEXTURE_CACHE_VERSION = 8;
return TEXTURE_CACHE_VERSION ;
}
@ -4321,7 +4089,7 @@ U32 LLAppViewer::getObjectCacheVersion()
{
// Viewer object cache version, change if object update
// format changes. JC
const U32 INDRA_OBJECT_CACHE_VERSION = 14;
const U32 INDRA_OBJECT_CACHE_VERSION = 15;
return INDRA_OBJECT_CACHE_VERSION;
}
@ -5730,142 +5498,6 @@ void LLAppViewer::handleLoginComplete()
mSavePerAccountSettings=true;
}
void LLAppViewer::launchUpdater()
{
LLSD query_map = LLSD::emptyMap();
query_map["os"] = gPlatform;
// *TODO change userserver to be grid on both viewer and sim, since
// userserver no longer exists.
query_map["userserver"] = LLGridManager::getInstance()->getGridId();
query_map["channel"] = LLVersionInfo::getChannel();
// *TODO constantize this guy
// *NOTE: This URL is also used in win_setup/lldownloader.cpp
LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
if(LLAppViewer::sUpdaterInfo)
{
delete LLAppViewer::sUpdaterInfo;
}
LLAppViewer::sUpdaterInfo = new LLAppViewer::LLUpdaterInfo() ;
// if a sim name was passed in via command line parameter (typically through a SLURL)
if ( LLStartUp::getStartSLURL().getType() == LLSLURL::LOCATION )
{
// record the location to start at next time
gSavedSettings.setString( "NextLoginLocation", LLStartUp::getStartSLURL().getSLURLString());
};
#if LL_WINDOWS
LLAppViewer::sUpdaterInfo->mUpdateExePath = gDirUtilp->getTempFilename();
if (LLAppViewer::sUpdaterInfo->mUpdateExePath.empty())
{
delete LLAppViewer::sUpdaterInfo ;
LLAppViewer::sUpdaterInfo = NULL ;
// We're hosed, bail
LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL;
return;
}
LLAppViewer::sUpdaterInfo->mUpdateExePath += ".exe";
std::string updater_source = gDirUtilp->getAppRODataDir();
updater_source += gDirUtilp->getDirDelimiter();
updater_source += "updater.exe";
LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source
<< " dest: " << LLAppViewer::sUpdaterInfo->mUpdateExePath
<< LL_ENDL;
if (!CopyFileA(updater_source.c_str(), LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), FALSE))
{
delete LLAppViewer::sUpdaterInfo ;
LLAppViewer::sUpdaterInfo = NULL ;
LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL;
return;
}
LLAppViewer::sUpdaterInfo->mParams << "-url \"" << update_url.asString() << "\"";
LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << " " << LLAppViewer::sUpdaterInfo->mParams.str() << LL_ENDL;
//Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird.
LLAppViewer::instance()->removeMarkerFiles(); // In case updater fails
// *NOTE:Mani The updater is spawned as the last thing before the WinMain exit.
// see LLAppViewerWin32.cpp
#elif LL_DARWIN
LLAppViewer::sUpdaterInfo->mUpdateExePath = "'";
LLAppViewer::sUpdaterInfo->mUpdateExePath += gDirUtilp->getAppRODataDir();
LLAppViewer::sUpdaterInfo->mUpdateExePath += "/mac-updater.app/Contents/MacOS/mac-updater' -url \"";
LLAppViewer::sUpdaterInfo->mUpdateExePath += update_url.asString();
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";
LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle();
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -bundleid \"";
LLAppViewer::sUpdaterInfo->mUpdateExePath += LL_VERSION_BUNDLE_ID;
LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";
LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
// Run the auto-updater.
system(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str()); /* Flawfinder: ignore */
#elif (LL_LINUX || LL_SOLARIS) && LL_GTK
// we tell the updater where to find the xml containing string
// translations which it can use for its own UI
std::string xml_strings_file = "strings.xml";
std::vector<std::string> xui_path_vec =
gDirUtilp->findSkinnedFilenames(LLDir::XUI, xml_strings_file);
std::string xml_search_paths;
const char* delim = "";
// build comma-delimited list of xml paths to pass to updater
BOOST_FOREACH(std::string this_skin_path, xui_path_vec)
{
// Although we already have the full set of paths with the filename
// appended, the linux-updater.bin command-line switches require us to
// snip the filename OFF and pass it as a separate switch argument. :-P
LL_INFOS() << "Got a XUI path: " << this_skin_path << LL_ENDL;
xml_search_paths.append(delim);
xml_search_paths.append(gDirUtilp->getDirName(this_skin_path));
delim = ",";
}
// build the overall command-line to run the updater correctly
LLAppViewer::sUpdaterInfo->mUpdateExePath =
gDirUtilp->getExecutableDir() + "/" + "linux-updater.bin" +
" --url \"" + update_url.asString() + "\"" +
" --name \"" + LLAppViewer::instance()->getSecondLifeTitle() + "\"" +
" --dest \"" + gDirUtilp->getAppRODataDir() + "\"" +
" --stringsdir \"" + xml_search_paths + "\"" +
" --stringsfile \"" + xml_strings_file + "\"";
LL_INFOS("AppInit") << "Calling updater: "
<< LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL;
// *TODO: we could use the gdk equivalent to ensure the updater
// gets started on the same screen.
GError *error = NULL;
if (!g_spawn_command_line_async(LLAppViewer::sUpdaterInfo->mUpdateExePath.c_str(), &error))
{
LL_ERRS() << "Failed to launch updater: "
<< error->message
<< LL_ENDL;
}
if (error) {
g_error_free(error);
}
#else
OSMessageBox(LLTrans::getString("MBNoAutoUpdate"), LLStringUtil::null, OSMB_OK);
#endif
// *REMOVE:Mani - Saving for reference...
// LLAppViewer::instance()->forceQuit();
}
//virtual
void LLAppViewer::setMasterSystemAudioMute(bool mute)
{

View File

@ -72,9 +72,6 @@ public:
/// reset the channel name used by the viewer.
static void resetChannel(const std::string& channel);
/// return the bit width of an address
static const U32 getAddressSize() { return ADDRESS_SIZE; }
typedef enum
{
TEST_VIEWER,