我在Qt / C ++中为Slack创建了一个独立于平台的联系人列表式独立客户端。
单击我的联系人列表中的项目时,它使用Slack的深层链接方案在官方Slack-Client中导航。
问题是,当点击我的列表中的用户项目(获取用户ID并创建链接)时,松弛客户端将只进入im对话框,如果它之前已打开(如果我有一个im历史记录与那个用户)。
否则它只显示该用户的团队目录上下文,我手动点击“消息”实际进入聊天对话框。
是否真的没有办法只使用松弛://深层链接?
我现在能想到的唯一解决方案是在打开链接之前使用我的应用程序中的api调用打开一个新的即时消息(如果不存在)。或者可以在应用启动时为所有用户打开即时消息。
但这是一种肮脏的解决方法,我不喜欢。
有没有更优雅的方式直接转到新的IM而不是这个?
编辑:快速没有错误处理的解决方法就是这样:
void Window::contactListDoubleClicked(QTableWidgetItem *item)
{
QString id = listWidget->item(item->row(),1)->text();
int type = listWidget->item(item->row(),3)->text().toInt();
if (type == 1) { // if item is a user, we have to ensure that im exists by requesting im.open
QEventLoop eventLoop;
QNetworkAccessManager mgr;
QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QNetworkRequest req(QUrl(QString("https://slack.com/api/im.open?token=").append(m_token).append("&user=").append(id)));
QNetworkReply *reply = mgr.get(req);
// block stack until reply is ready
eventLoop.exec();
qDebug() << reply->readAll();
QDesktopServices::openUrl(QUrl(QString("slack://user?team=XXXXXXXX&id=").append(id),QUrl::TolerantMode));
} else {
QDesktopServices::openUrl(QUrl(QString("slack://channel?team=XXXXXXX&id=").append(id),QUrl::TolerantMode));
}
}