void Plugin::hookMessageWillCreated (LeechCraft::IHookProxy_ptr proxy, QObject*, QObject *entry, int, QString) { ICLEntry *other = qobject_cast<ICLEntry*> (entry); if (!other) { qWarning () << Q_FUNC_INFO << "unable to cast" << entry << "to ICLEntry"; return; } QString text = proxy->GetValue ("text").toString (); const int maxLines = XmlSettingsManager::Instance () .property ("LineCount").toInt (); if (text.split ('\n').size () < maxLines) return; QByteArray propName; switch (other->GetEntryType ()) { case ICLEntry::ETChat: propName = "EnableForNormalChats"; break; case ICLEntry::ETMUC: propName = "EnableForMUCChats"; break; case ICLEntry::ETPrivateChat: propName = "EnableForPrivateChats"; break; default: return; } if (!XmlSettingsManager::Instance ().property (propName).toBool ()) return; PasteDialog dia; dia.exec (); auto choice = dia.GetChoice (); switch (choice) { case PasteDialog::Cancel: proxy->CancelDefault (); case PasteDialog::No: return; case PasteDialog::Yes: { auto service = dia.GetCreator () (entry); service->Paste ({ Proxy_->GetNetworkAccessManager (), text, dia.GetHighlight () }); proxy->CancelDefault (); } } }
void PerformPaste (ICLEntry *other, const QString& text, const ICoreProxy_ptr& proxy, const IUserChoiceHandler_ptr& handler, OkF okCont, CancelF cancelCont) { QSettings settings (QCoreApplication::organizationName (), QCoreApplication::applicationName () + "_Azoth_Autopaste"); settings.beginGroup ("SavedChoices"); settings.beginGroup (other->GetEntryID ()); const auto guard = Util::MakeScopeGuard ([&settings] { settings.endGroup (); settings.endGroup (); }); if (!handler->ShouldAsk (settings)) return; PasteDialog dia; dia.SetCreatorName (settings.value ("Service").toString ()); dia.SetHighlight (static_cast<Highlight> (settings.value ("Highlight").toInt ())); dia.exec (); switch (dia.GetChoice ()) { case PasteDialog::Cancel: cancelCont (); break; case PasteDialog::No: handler->Rejected (settings); break; case PasteDialog::Yes: { auto service = dia.GetCreator () (other->GetQObject (), proxy); service->Paste ({ proxy->GetNetworkAccessManager (), text, dia.GetHighlight () }); okCont (); handler->Accepted (settings); settings.setValue ("Service", dia.GetCreatorName ()); settings.setValue ("Highlight", static_cast<int> (dia.GetHighlight ())); break; } } }
void Plugin::hookMessageWillCreated (LeechCraft::IHookProxy_ptr proxy, QObject*, QObject *entry, int, QString) { ICLEntry *other = qobject_cast<ICLEntry*> (entry); if (!other) { qWarning () << Q_FUNC_INFO << "unable to cast" << entry << "to ICLEntry"; return; } QString text = proxy->GetValue ("text").toString (); const int maxLines = XmlSettingsManager::Instance () .property ("LineCount").toInt (); const int maxSymbols = XmlSettingsManager::Instance () .property ("SymbolCount").toInt (); if (text.size () < maxSymbols && text.count ('\n') + 1 < maxLines) return; QByteArray propName; switch (other->GetEntryType ()) { case ICLEntry::ETChat: propName = "EnableForNormalChats"; break; case ICLEntry::ETMUC: propName = "EnableForMUCChats"; break; case ICLEntry::ETPrivateChat: propName = "EnableForPrivateChats"; break; default: return; } if (!XmlSettingsManager::Instance ().property (propName).toBool ()) return; QSettings settings (QCoreApplication::organizationName (), QCoreApplication::applicationName () + "_Azoth_Autopaste"); settings.beginGroup ("SavedChoices"); settings.beginGroup (other->GetEntryID ()); auto guard = std::shared_ptr<void> (nullptr, [&settings] (void*) -> void { settings.endGroup (); settings.endGroup (); }); PasteDialog dia; dia.SetCreatorName (settings.value ("Service").toString ()); dia.SetHighlight (static_cast<Highlight> (settings.value ("Highlight").toInt ())); dia.exec (); switch (dia.GetChoice ()) { case PasteDialog::Cancel: proxy->CancelDefault (); case PasteDialog::No: return; case PasteDialog::Yes: { auto service = dia.GetCreator () (entry); service->Paste ({ Proxy_->GetNetworkAccessManager (), text, dia.GetHighlight () }); proxy->CancelDefault (); settings.setValue ("Service", dia.GetCreatorName ()); settings.setValue ("Highlight", static_cast<int> (dia.GetHighlight ())); } } }
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; }