InfoDialog::InfoDialog(wxWindow* parent ) :wxDialog(parent,wxID_ANY, _("path shit"), wxDefaultPosition, wxSize(620,400), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX) { wxBoxSizer* main_sizer = new wxBoxSizer( wxVERTICAL ); typedef std::vector< std::pair< wxString,wxString > > Paths; Paths paths; paths.push_back( std::make_pair( sett().GetLobbyWriteDir(), _T("LobbyWriteDir") ) ); paths.push_back( std::make_pair( sett().GetTempStorage(), _T("TempStorage")) ); paths.push_back( std::make_pair( sett().GetCachePath(), _T("CachePath")) ); paths.push_back( std::make_pair( sett().GetCurrentUsedDataDir(), _T("CurrentUsedDataDir")) ); paths.push_back( std::make_pair( GetExecutableFolder() , _T("ExecutableFolder"))); wxTextCtrl* out = new wxTextCtrl( this, wxNewId(), _T( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL ); for ( size_t i =0; i < paths.size(); ++i ) { *out << wxString::Format( _T("%s (%s)\n"), paths[i].second.c_str(), paths[i].first.c_str()); wxString path = paths[i].first; wxString dummy_fn = path + wxFileName::GetPathSeparator() + _T("dummy.txt"); const bool wx = wxFileName::IsDirWritable( path ); const bool posix = access(STD_STRING(path).c_str(), WRITABLE) == 0; bool tried = false; try{ std::ofstream of; of.open( STD_STRING(dummy_fn).c_str() ); if ( of.is_open() ) { of << "fhreuohgeiuhguie"; of.flush(); of.close(); tried = wxRemoveFile(dummy_fn); } } catch (...){} *out << wxString::Format( _T("\tWX: %s POSIX: %s TRY: %s\n"), BtS(wx).c_str(), BtS(posix).c_str(), BtS(tried).c_str() ); } *out << wxString::Format( _T("Global config: %s (%s %s )\n"), sett().GlobalConfigPath().c_str(), BtS(wxFileName::FileExists(sett().GlobalConfigPath()), "exists", "missing").c_str(), BtS(wxFileName::IsFileWritable(sett().GlobalConfigPath()), "writable", "").c_str() ); *out << wxString::Format( _T("Local config: %s (%s writable)\n"), sett().FinalConfigPath().c_str(), BtS(wxFileName::IsFileWritable(sett().FinalConfigPath()), "", "not" ).c_str() ); *out << wxString::Format( _T("Portable mode: %s\n"), BtS(sett().IsPortableMode()).c_str() ); *out << _T( "Version " ) + GetSpringLobbyVersion() << wxString( wxVERSION_STRING ) + _T(" on ") + wxPlatformInfo::Get().GetOperatingSystemIdName() + _T( "\ncl: " ) ; for ( int i = 0; i < wxTheApp->argc; ++i ) *out << wxTheApp->argv[i] << _T(" "); main_sizer->Add( out, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); SetSizer( main_sizer ); Layout(); }
Statusbar::Statusbar( wxWindow* parent ) :wxStatusBar( parent, wxNewId() ), m_addMessageSink( this, &GetStatusEventSender(UiEvents::addStatusMessage) ), m_removeMessageSink( this, &GetStatusEventSender(UiEvents::removeStatusMessage) ) { int w[3] = {-1,-1,120}; SetFieldsCount( 3, w ); PushStatusText( wxFormat( _T("%s %s") ) % GetAppName() % GetSpringLobbyVersion(), 1 ); }
bool UpdaterClass::PostMinGW44( const wxString& newdir ) { wxString current = GetSpringLobbyVersion(false); long minor = std::numeric_limits<long>::max(); bool convert_ok = current.AfterLast( '.' ).ToLong( &minor ); wxLogMessage( (wxFormat( _T("Got minor rev %d") ) % minor ).c_str() ); if ( minor > 43 || !convert_ok ) //0.43 was the last build on old mingw return true; //all is well, we're already on a mingw4.4 build wxString base = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() ; //use special copydir to overwrite locked files bool success = CopyDirWithFilebackupRename( newdir + wxFileName::GetPathSeparator(), base ); if ( !success ) { wxLogError( _T("Full dir copy failed") ); } return success; }
SpringDebugReport::SpringDebugReport() : NetDebugReport( "http://infologs.springrts.com/upload" ) { wxString tmp_filename = wxPathOnly( wxFileName::CreateTempFileName(_T("dummy")) ) + wxFileName::GetPathSeparator() + _T("settings.txt"); wxCopyFile(TowxString(SlPaths::GetSpringConfigFilePath()), tmp_filename ); AddFile( tmp_filename, _T("Settings") ); AddVFSFile( _T("infolog.txt"), _T("Infolog") ); AddVFSFile( _T("script.txt"), _T("Script") ); AddVFSFile( _T("ext.txt"), _T("Extensions") ); AddVFSFile( _T("unitsync.log"), _T("unitsync") ); wxString info; info << wxGetOsDescription() << ( wxIsPlatform64Bit() ? _T(" 64bit\n") : _T(" 32bit\n") ); AddText( _T("platform.txt"), info, _T("Platform") ); AddText( _T("client.txt"), _T( "SpringLobby " ) + TowxString(GetSpringLobbyVersion()), _T("Client") ); AddText( _T("appname.txt"), TowxString(getSpringlobbyName()), _T("Application Name")); }
void showAbout() { wxAboutDialogInfo info; if ( IsSettingsStandAlone() ) { info.SetName(_T("SpringSettings")); info.SetVersion(_T("0.2.1")); } else { info.SetName( GetAppName() ); info.SetVersion(GetSpringLobbyVersion()); } info.SetDescription(_("SpringSettings is a graphical frontend to the Settings of the Spring engine")); info.SetCopyright(_T("(C) 2007-2008 koshi <*****@*****.**>")); info.SetIcon(wxIcon(springsettings_xpm)); wxAboutBox(info); }
void CrashReport::GenerateReport(EXCEPTION_POINTERS* p) #endif { wxLogMessage( _T( "Report generated in " ) ); CwdGuard cwgGuard( wxFileName::GetTempDir() ); NetDebugReport* report = new NetDebugReport( "http://debug.springlobby.info/upload" ) ; // NetDebugReport* report = new NetDebugReport( "http://localhost/upload" ) ; // add all standard files: currently this means just a minidump and an // XML file with system info and stack trace report->AddAll( ); wxString dir = report->GetDirectory(); wxString SystemInfos; SystemInfos += _T( "SpringLobby version " ) + TowxString(GetSpringLobbyVersion()) + _T( "\n" ) ; SystemInfos += _T( "Built from " ) + wxString( wxVERSION_STRING ) + _T(" on ") + wxPlatformInfo::Get().GetOperatingSystemIdName() + _T( "\n" ) ; report->AddText( _T( "SystemInfos.txt" ), SystemInfos, _( "System informations" ) ); #if wxUSE_STD_IOSTREAM report->AddText( _T( "AppLog.txt" ), TowxString( crashlog.str() ), _( "Application verbose log" ) ); #endif wxString script_file = TowxString(SlPaths::GetDataDir()) + wxFileName::GetPathSeparator() + _T("script.txt"); if ( wxFile::Exists( script_file ) ) report->AddFile( script_file, _( "Last generated spring launching script" ) ); #if wxUSE_STACKWALKER && !__WXMSW__ StackTrace stacktrace; stacktrace.Walk( 3, 20 ); report->AddText( _T( "stacktrace.txt" ), _T("Call stack:\n") + stacktrace.GetStackTrace(), _( "StackTrace" ) ); #else wxString report_fn = ( wxGetCwd() + wxFileName::GetPathSeparator() + _T("stacktrace.txt") ); if ( wxFile::Exists( report_fn ) ) wxRemoveFile( report_fn ); wxCharBuffer report_fn_char = report_fn.mb_str(); DrMingwGenerateStacktrace( p, (const char*)report_fn_char ); report->AddFile( report_fn, _( "StackTrace" ) ); #endif wxString SlBuildFlags; #ifdef DISABLE_SOUND SlBuildFlags += _T("sound=0"); #else SlBuildFlags += _T("sound=1"); #endif report->AddText( _T("buildflags.txt"), SlBuildFlags, _T("BuildFlags") ); report->AddText( _T("nick.txt"), sett().GetServerAccountNick( sett().GetDefaultServer() ), _T("Nick") ); wxDebugReportPreviewStd* bkl = new wxDebugReportPreviewStd(); // calling Show() is not mandatory, but is more polite if ( bkl->Show( *report ) ) { if ( report->Process() ) { wxLogMessage( _T( "Report successfully uploaded." ) ); } else { wxLogMessage( _T( "Report generated in \"%s\", but failed to upload" ), report->GetCompressedFileName().c_str() ); report->Reset(); wxLogMessage( _T("report reset") ); } } //else: user cancelled the report delete report; wxLogMessage( _T("deleted report") ); }
bool Channel::ExecuteSayCommand( const wxString& in ) { if ( in.length() == 0 ) return true; if ( in[0] != '/' ) return false; wxString subcmd = in.BeforeFirst(' ').Lower(); wxString params = in.AfterFirst( ' ' ); wxString cmdline = in; wxString param = GetWordParam( cmdline ); if ( param == _T("/me") ) { DoAction( cmdline ); return true; } else if ( in == _T("/part") || in == _T("/p") ) { Leave(); uidata.panel = 0; return true; } else if ( param == _T("/sayver") ) { //!this instance is not replaced with GetAppname for sake of help/debug online DoAction( _T("is using SpringLobby v") + GetSpringLobbyVersion() ); return true; } else if(subcmd==_T("/userban")){ m_banned_users.insert(params); m_serv.SayPrivate(_T("ChanServ"),_T("!kick #")+GetName()+_T(" ")+params); return true; } else if(subcmd==_T("/userunban")){ m_banned_users.erase(params); return true; } else if(subcmd==_T("/banregex")){ ui().OnChannelMessage(m_name,_T("/banregex ")+params); m_do_ban_regex=!params.empty(); if(m_do_ban_regex){ #ifdef wxHAS_REGEX_ADVANCED m_ban_regex.Compile(params, wxRE_ADVANCED); #else m_ban_regex.Compile(params, wxRE_EXTENDED); #endif if(!m_ban_regex.IsValid())ui().OnChannelMessage(m_name,_T("Invalid regular expression")); } return true; } else if(subcmd==_T("/unbanregex")){ ui().OnChannelMessage(m_name,_T("/unbanregex ")+params); m_do_unban_regex=!params.empty(); if(m_do_unban_regex){ #ifdef wxHAS_REGEX_ADVANCED m_unban_regex.Compile(params, wxRE_ADVANCED); #else m_unban_regex.Compile(params, wxRE_EXTENDED); #endif if(!m_unban_regex.IsValid())ui().OnChannelMessage(m_name,_T("Invalid regular expression")); } return true; } else if (subcmd==_T("/checkban")) { if(IsBanned(params)){ ui().OnChannelMessage(m_name,params+_T(" is banned")); }else{ ui().OnChannelMessage(m_name,params+_T(" is not banned")); } return true; } else if(subcmd==_T("/banregexmsg")){ ui().OnChannelMessage(m_name,_T("/banregexmsg ")+params); m_ban_regex_msg=params; return true; } return false; }
bool ChatPanel::Say( const wxString& message ) { static const unsigned int flood_threshold = 5; wxLogDebugFunc( message ); wxStringTokenizer lines( message, _T( '\n' ) ); if ( lines.CountTokens() > flood_threshold ) { PasteDialog dl ( this, wxString::Format( _( "Are you sure you want to paste %d lines?" ), lines.CountTokens() ) ); switch ( dl.ShowModal() ) { case wxID_NO : return true; case PasteDialog::pasteButtonReturnCode : { wxString url = Paste2Pastebin( message ); if ( url != wxEmptyString && wxStringTokenizer( url, _T( '\n' )).CountTokens() <= flood_threshold ) { Say( url ); return true; } else { customMessageBoxNoModal( SL_MAIN_ICON, _("Failed to post to pastebin.com.") ); return false; } } default: break; } } while ( lines.HasMoreTokens() ) { wxString line = lines.GetNextToken(); wxLogMessage( _T( "line: %s" ), line.c_str() ); if ( line.Find( '/' ) == 0 ) { if ( ui().ExecuteSayCommand( line ) ) return true; } if ( line == _T( "/ver" ) ) { //!this instance is not replaced with GetAppname for sake of help/debug online OutputLine( _( " You have SpringLobby v" ) + GetSpringLobbyVersion(), sett().GetChatColorNormal() , sett().GetChatFont() ); return true; } if ( line == _T( "/clear" ) ) { m_chatlog_text->SetValue( _T("") ); return true; } if ( m_type == CPT_Channel ) { if ( m_channel == 0 ) { OutputLine( _( " You are not in channel or channel does not exist." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_channel->ExecuteSayCommand( line ) ) return true; if ( m_channel->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxString::Format( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ), line.c_str() ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_channel->Say( line ); } else if ( m_type == CPT_Battle ) { if ( m_battle == 0 ) { OutputLine( _( " You are not in battle or battle does not exist, use /help for a list of available commands." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_battle->ExecuteSayCommand( line ) ) return true; if ( m_battle->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxString::Format( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ), line.c_str() ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_battle->Say( line ); } else if ( m_type == CPT_User ) { if ( m_user == 0 ) { OutputLine( _( " User is offline." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_user->ExecuteSayCommand( line ) ) return true; if ( m_user->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxString::Format( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ), line.c_str() ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_user->Say( line ); } else if ( m_type == CPT_Server ) { if ( m_server == 0 ) return true; if ( line.StartsWith( _T( "/" ) ) ) { if ( m_server->ExecuteSayCommand( line ) ) return true; OutputLine( wxString::Format( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ), line.c_str() ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } //we need to disable the channel tab if leaving manually if (line.Upper().StartsWith( _T( "LEAVE" ) ) ) { wxString channame = line.AfterFirst(' ').BeforeFirst(' '); try { Channel& chan = m_server->GetChannel( channame ); chan.Leave(); chan.uidata.panel = 0; } catch( assert_exception ) {} } m_server->SendRaw( line ); OutputLine( _( " Sent: \"" ) + line + _( "\"" ), sett().GetChatColorNormal(), sett().GetChatFont() ); } } return true; }