560
582
connect(ActiveProfiles::instance(), SIGNAL(raiseMainWindow()), SLOT(raiseMainwin()));
583
connect(ActiveProfiles::instance(), SIGNAL(openUri(const QUrl &)), SLOT(doOpenUri(const QUrl &)));
585
DesktopUtil::setUrlHandler("xmpp", this, "doOpenUri");
587
if(AvCallManager::isSupported()) {
588
options_avcall_update();
589
AvCallManager::setAudioOutDevice(PsiOptions::instance()->getOption("options.media.devices.audio-output").toString());
590
AvCallManager::setAudioInDevice(PsiOptions::instance()->getOption("options.media.devices.audio-input").toString());
591
AvCallManager::setVideoInDevice(PsiOptions::instance()->getOption("options.media.devices.video-input").toString());
592
AvCallManager::setBasePort(PsiOptions::instance()->getOption("options.p2p.bytestreams.listen-port").toInt());
593
AvCallManager::setExternalAddress(PsiOptions::instance()->getOption("options.p2p.bytestreams.external-address").toString());
599
bool PsiCon::haveAutoUpdater() const
601
return d->autoUpdater != 0;
565
604
void PsiCon::registerCaps(const QString& ext, const QStringList& features)
567
606
DiscoItem::Identity identity = { "client", ApplicationInfo::name(), "pc" };
793
void PsiCon::createAccount(const QString &name, const Jid &j, const QString &pass, bool opt_host, const QString &host, int port, bool legacy_ssl_probe, UserAccount::SSLFlag ssl, QString proxy)
834
void PsiCon::createAccount(const QString &name, const Jid &j, const QString &pass, bool opt_host, const QString &host, int port, bool legacy_ssl_probe, UserAccount::SSLFlag ssl, QString proxy, const QString &tlsOverrideDomain, const QByteArray &tlsOverrideCert)
795
d->contactList->createAccount(name, j, pass, opt_host, host, port, legacy_ssl_probe, ssl, proxy);
836
d->contactList->createAccount(name, j, pass, opt_host, host, port, legacy_ssl_probe, ssl, proxy, tlsOverrideDomain, tlsOverrideCert);
798
839
PsiAccount *PsiCon::createAccount(const UserAccount& acc)
950
void PsiCon::doOpenUri(const QUrl &uriToOpen)
991
void PsiCon::doOpenUri(const QUrl &uri)
955
QUrl uri(uriToOpen); // got to copy, because setQueryDelimiters() is not const
957
qWarning("uri: " + uri.toString());
993
qDebug() << "uri: " << uri.toString();
961
if (uri.scheme() != "xmpp") { // try handling legacy URIs
962
QMessageBox::warning(0, tr("Warning"), QString("URI (link) type \"%1\" is unsupported.").arg(uri.scheme()));
996
if (uri.scheme() != "xmpp") {
997
QMessageBox::critical(0, tr("Unsupported URI type"), QString("URI (link) type \"%1\" is not supported.").arg(uri.scheme()));
967
1002
PsiAccount *pa = 0;
968
if (uri.authority().isEmpty()) {
1003
//if (uri.authority().isEmpty()) {
969
1004
pa = d->contactList->defaultAccount();
971
QMessageBox::warning(0, tr("Warning"), QString("You don't have any account enabled."));
975
qWarning("uri auth: [" + uri.authority() + "]");
977
Jid authJid = JIDUtil::fromString(uri.authority());
978
foreach(PsiAccount* acc, d->contactList->enabledAccounts()) {
979
if (acc->jid().compare(authJid, false)) {
985
foreach(PsiAccount* acc, d->contactList->accounts()) {
986
if (acc->jid().compare(authJid, false)) {
987
QMessageBox::warning(0, tr("Warning"), QString("The account for %1 JID is disabled right now.").arg(authJid.bare()));
988
return; // FIX-ME: Should suggest enabling it now
993
QMessageBox::warning(0, tr("Warning"), QString("You don't have an account for %1.").arg(authJid.bare()));
1006
QMessageBox::critical(0, tr("Error"), QString("You need to have an account configured and enabled to open URIs (links)."));
1000
QString path = uri.path();
1001
if (path.startsWith('/')) // this happens when authority part is present
1003
Jid entity = JIDUtil::fromString(path);
1007
uri.setQueryDelimiters('=', ';');
1009
QString querytype = uri.queryItems().value(0).first; // defaults to empty string
1011
if (querytype == "message") {
1012
if (uri.queryItemValue("type") == "chat")
1013
pa->actionOpenChat(entity);
1015
pa->dj_newMessage(entity, uri.queryItemValue("body"), uri.queryItemValue("subject"), uri.queryItemValue("thread"));
1018
else if (querytype == "roster") {
1019
pa->openAddUserDlg(entity, uri.queryItemValue("name"), uri.queryItemValue("group"));
1021
else if (querytype == "join") {
1022
pa->actionJoin(entity, uri.queryItemValue("password"));
1024
else if (querytype == "vcard") {
1025
pa->actionInfo(entity);
1027
else if (querytype == "disco") {
1028
pa->actionDisco(entity, uri.queryItemValue("node"));
1031
pa->actionSendMessage(entity);
1010
// TODO: finish authority component handling
1013
// qDebug() << "uri auth: [" << uri.authority() << "]");
1015
// // is there such account ready to use?
1016
// Jid authJid = JIDUtil::fromString(uri.authority());
1017
// foreach (PsiAccount* acc, d->contactList->enabledAccounts()) {
1018
// if (acc->jid().compare(authJid, false)) {
1023
// // or maybe it is configured but not enabled?
1025
// foreach (PsiAccount* acc, d->contactList->accounts()) {
1026
// if (acc->jid().compare(authJid, false)) {
1027
// QMessageBox::error(0, tr("Error"), QString("The account for %1 JID is disabled right now.").arg(authJid.bare()));
1028
// return; // TODO: Should suggest enabling it now
1035
// QMessageBox::error(0, tr("Error"), QString("You don't have an account for %1.").arg(authJid.bare()));
1035
1045
void PsiCon::doToolbars()
1098
1108
updateS5BServerAddresses();
1110
if(AvCallManager::isSupported()) {
1111
AvCallManager::setAudioOutDevice(PsiOptions::instance()->getOption("options.media.devices.audio-output").toString());
1112
AvCallManager::setAudioInDevice(PsiOptions::instance()->getOption("options.media.devices.audio-input").toString());
1113
AvCallManager::setVideoInDevice(PsiOptions::instance()->getOption("options.media.devices.video-input").toString());
1114
AvCallManager::setBasePort(PsiOptions::instance()->getOption("options.p2p.bytestreams.listen-port").toInt());
1115
AvCallManager::setExternalAddress(PsiOptions::instance()->getOption("options.p2p.bytestreams.external-address").toString());
1100
1118
// mainwin stuff
1101
1119
d->mainwin->setWindowOpts(PsiOptions::instance()->getOption("options.ui.contactlist.always-on-top").toBool(), (PsiOptions::instance()->getOption("options.ui.systemtray.enable").toBool() && PsiOptions::instance()->getOption("options.contactlist.use-toolwindow").toBool()));
1102
1120
d->mainwin->setUseDock(PsiOptions::instance()->getOption("options.ui.systemtray.enable").toBool());
1312
if(e->type() == PsiEvent::AvCallType) {
1313
AvCallEvent *ae = (AvCallEvent *)e;
1314
AvCall *sess = ae->takeAvCall();
1315
e->account()->eventQueue()->dequeue(e);
1316
e->account()->queueChanged();
1317
e->account()->cpUpdate(*u);
1319
if(!sess->jid().isEmpty()) {
1320
CallDlg *w = new CallDlg(e->account(), 0);
1321
w->setAttribute(Qt::WA_DeleteOnClose);
1322
w->setIncoming(sess);
1326
QMessageBox::information(0, tr("Call ended"), tr("Other party canceled call."));
1294
1333
bool isChat = false;
1295
1334
bool sentToChatWindow = false;
1296
1335
if ( e->type() == PsiEvent::Message ) {
1440
1479
AccountRegDlg w(proxy());
1441
1480
int n = w.exec();
1442
1481
if (n == QDialog::Accepted) {
1443
contactList()->createAccount(w.jid().node(),w.jid(),w.pass(),w.useHost(),w.host(),w.port(),w.legacySSLProbe(),w.ssl(),w.proxy(),false);
1482
contactList()->createAccount(w.jid().node(),w.jid(),w.pass(),w.useHost(),w.host(),w.port(),w.legacySSLProbe(),w.ssl(),w.proxy(),w.tlsOverrideDomain(), w.tlsOverrideCert(), false);