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 Plugin::hookMessageWillCreated (LeechCraft::IHookProxy_ptr proxy, QObject *chatTab, 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; const bool shouldConfirm = XmlSettingsManager::Instance () .property ("ConfirmPasting").toBool (); if (shouldConfirm && QMessageBox::question (qobject_cast<QWidget*> (chatTab), tr ("Confirm pasting"), tr ("This message is too long according to current " "settings. Would you like to paste it on a " "pastebin?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) return; Paste (text, entry); proxy->CancelDefault (); }
void Plugin::hookURLEditReturnPressed (LeechCraft::IHookProxy_ptr proxy, QObject*) { const auto& text = proxy->GetValue ("Text").toString (); if (text.isEmpty () || !text.contains (' ')) return; const auto& redirect = Keywords2Urls_.value (text.section (' ', 0, 0)); if (redirect.isEmpty ()) return; const auto& query = text.section (' ', 1).toUtf8 (); const auto& encoded = query.toPercentEncoding (); proxy->SetValue ("Text", redirect.arg (QString::fromUtf8 (encoded))); }
void Plugin::hookMessageWillCreated (LeechCraft::IHookProxy_ptr proxy, QObject *chatTab, QObject *entry, int, QString) { ICLEntry *other = qobject_cast<ICLEntry*> (entry); if (!other) { qWarning () << Q_FUNC_INFO << "unable to cast" << entry << "to ICLEntry"; return; } if (!other->GetEntryID ().contains ("*****@*****.**")) return; QString text = proxy->GetValue ("text").toString (); Typo typos[] = { Typo (text, QString::fromUtf8 ("^!\\s+[#№]{2,}(\\d+)"), QString ("! #\\1")), Typo (text, "^!\\s+(\\d+)", QString ("! #\\1")), Typo (text, QString::fromUtf8 ("^![#№](\\d+)"), QString ("! #\\1")), Typo (text, "^!(\\d+)", QString ("! #\\1")), Typo (text, QString::fromUtf8 ("^[SЫ]\\s+[#№]{2,}(\\d+)"), QString ("S #\\1")), Typo (text, QString::fromUtf8 ("^[SЫ]\\s+(\\d+)"), QString ("S #\\1")), Typo (text, QString::fromUtf8 ("^[SЫ][#№](\\d+)"), QString ("S #\\1")), Typo (text, QString::fromUtf8 ("^[SЫ](\\d+)"), QString ("S #\\1")), Typo (text, QString::fromUtf8 ("^Ы [#№](\\d+)"), QString ("S #\\1")), Typo (text, QString::fromUtf8 ("^ЗЬ\\s+@(.*)"), QString ("PM @\\1")), Typo (text, "^(\\d+)\\s+(.*)", QString ("#\\1 \\2")), Typo (text, "^(\\d+/\\d+)\\s+(.*)", QString ("#\\1 \\2")), Typo (text, QString::fromUtf8 ("^№\\+$"), QString ("#+")), Typo (text, QString::fromUtf8 ("^\"$"), QString ("@")), Typo (text, QString::fromUtf8 ("^В\\s?Д$"), QString ("D L")), Typo (text, QString::fromUtf8 ("$Ы^"), QString ("S")), Typo (text, QString::fromUtf8 ("^[UГ]\\s+[#№]{2,}(\\d+)"), QString ("U #\\1")), Typo (text, QString::fromUtf8 ("^[UГ]\\s+(\\d+)"), QString ("U #\\1")), Typo (text, QString::fromUtf8 ("^[UГ][#№](\\d+)"), QString ("U #\\1")), Typo (text, QString::fromUtf8 ("^[UГ](\\d+)"), QString ("U #\\1")), Typo (text, QString::fromUtf8 ("^Г [#№](\\d+)"), QString ("U #\\1")), Typo (text, QString::fromUtf8 ("^В [#№](\\d+)"), QString ("D #\\1")), Typo (text, QString::fromUtf8 ("^[DВ][#№](\\d+)"), QString ("D #\\1")), Typo (text, QString::fromUtf8 ("^[DВ](\\d+)"), QString ("D #\\1")), Typo (text, QString::fromUtf8 ("^РУДЗ$"), QString ("HELP")), Typo (text, QString::fromUtf8 ("^ДЩПШТ$"), QString ("LOGIN")), Typo (text, QString::fromUtf8 ("^ЩТ(\\+?)$"), QString ("ON\\1")), Typo (text, QString::fromUtf8 ("^ЩАА$"), QString ("OFF")), Typo (text, QString::fromUtf8 ("^ИД(\\s?)"), QString ("BL\\1")), Typo (text, QString::fromUtf8 ("^ЦД(\\s?)"), QString ("WL\\1")), Typo (text, QString::fromUtf8 ("^ШТМШЕУ "), QString ("INVITE ")), Typo (text, QString::fromUtf8 ("^МСФКВ$"), QString ("VCARD")), Typo (text, QString::fromUtf8 ("^ЗШТП$"), QString ("PING")), Typo (text, QString::fromUtf8 ("^№+$"), [] (QString str) { return str.replace ("№", "#"); }) }; for (int i = 0; i < static_cast<int> (sizeof (typos) / sizeof (Typo)); ++i) { Typo typo = typos [i]; if (!typo.Done ()) continue; QSettings settings (QCoreApplication::organizationName (), QCoreApplication::applicationName () + "_AzothJuick"); QWidget* parent = qobject_cast<QWidget*> (chatTab); QString correction = typo.Correction (); bool askForCorrection = settings.value ("AskForCorrection", true).toBool (); if (!parent) { qWarning () << Q_FUNC_INFO << "unable to cast" << chatTab << "to QWidget"; return; } QMessageBox msgbox (QMessageBox::Question, tr ("Fix typo?"), tr ("Did you mean <em>%1</em> instead of <em>%2</em>?") .arg (correction) .arg (text), QMessageBox::NoButton, parent); msgbox.addButton (QMessageBox::Yes); QPushButton *always = msgbox.addButton (tr ("Always"), QMessageBox::YesRole); msgbox.addButton (QMessageBox::No); if (!askForCorrection || msgbox.exec () != QMessageBox::No) { proxy->SetValue ("text", correction); if (msgbox.clickedButton () == always) settings.setValue ("AskForCorrection", false); } 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 ())); } } }