📄 channelwgt.cpp
字号:
logMessage(Hdr); Message* msg = new Message(Hdr); m_chatMsgs->addMsg(msg); mw_chatText->addMsg(msg); mw_clearChatText->addMsg(msg);}//\*****************************************************************************void ChannelWgt::addMsg2Chat(Message* msg){ if(msg) { qDebug("[ChannelWgt::addMsg2Chat]: adding: %s\n", msg->msg().toLocal8Bit().data()); mw_chatText->addMsg(msg); if(!isSystemMsg(msg->type())) mw_clearChatText->addMsg(msg); }}//\*****************************************************************************void ChannelWgt::addUser(QC_DatagramHeader* Hdr){ UserWgt* usr; UserInfo* info; UserStatistics* stats; QByteArray buf; qDebug("[ChannelWgt::addUser]: uid = %s", QHostAddress(Hdr->src_ip).toString().toAscii().data()); if(!(usr = m_users->enableIfExists(Hdr->src_ip))) { info = new UserInfo(); if(!info) return; stats = new UserStatistics; if(!stats) return; usr = new UserWgt(); if(!usr) return; usr->setInfo(info); usr->setStats(stats); m_users->addUser(usr); } else info = usr->info(); // this is only needed in server mode usr->info()->setUid(Hdr->src_ip); addUserInfo(usr, Hdr); mw_usersList->addUser(usr); m_usersModel->resort(); updateUsersView();}//\*****************************************************************************void ChannelWgt::hideUser(QC_DatagramHeader* Hdr){ UserWgt* user; if(m_users->exists(Hdr->src_ip)) { user = m_users->findUser(Hdr->src_ip); if(user) { mw_usersList->hideUser(user); user->info()->setEnabled(false); } } m_usersModel->resort(); updateUsersView();}//\*****************************************************************************void ChannelWgt::addUserInfo(QC_DatagramHeader* Hdr){ UserWgt* usr = m_users->findUser(Hdr->src_ip); if(NULL == usr) { usr = new UserWgt(); usr->setInfo(new UserInfo()); m_users->addUser(usr); } addUserInfo(usr, Hdr);}void ChannelWgt::addUserInfo(UserWgt* usr, QC_DatagramHeader* Hdr){ QByteArray buf; QPixmap* icon, *tmp; QCryptographicHash md5_hash(QCryptographicHash::Md5); bool need_avatar = true; if(!(buf = ChatCore::getParametr("IpAddress" , Hdr->parametrs)).isNull()) usr->info()->setIP((QString().fromUtf8(buf)).toLongLong()); usr->info()->setGender(QString().fromUtf8(ChatCore::getParametr("Gender", Hdr->parametrs)).toInt()); if(!(buf = ChatCore::getParametr("OS" , Hdr->parametrs)).isNull()) usr->stats()->setOs(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("Uptime" , Hdr->parametrs)).isNull()) usr->stats()->setUptime((QString().fromUtf8(buf)).toLong()); if(!(buf = ChatCore::getParametr("ChatTime" , Hdr->parametrs)).isNull()) usr->stats()->setChatTime((QString().fromUtf8(buf)).toLong()); if(!(buf = ChatCore::getParametr("LastName" , Hdr->parametrs)).isNull()) usr->info()->setLastName (QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("FirstName" , Hdr->parametrs)).isNull()) usr->info()->setFirstName (QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("SecondName" , Hdr->parametrs)).isNull()) usr->info()->setSecondName (QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("DateOfBorn" , Hdr->parametrs)).isNull()) usr->info()->setDateOfBorn(QDate().fromString(QString().fromUtf8(buf))); if(!(buf = ChatCore::getParametr("Address" , Hdr->parametrs)).isNull()) usr->info()->setAddress(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("HomePhone" , Hdr->parametrs)).isNull()) usr->info()->setHomePhone(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("MobilePhone", Hdr->parametrs)).isNull()) usr->info()->setMobilePhone(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("WorkPhone" , Hdr->parametrs)).isNull()) usr->info()->setWorkPhone(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("e-mail" , Hdr->parametrs)).isNull()) usr->info()->setE_mail(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("ICQ" , Hdr->parametrs)).isNull()) usr->info()->setICQ(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("Homepage" , Hdr->parametrs)).isNull()) usr->info()->setHomepage(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("AboutInfo" , Hdr->parametrs)).isNull()) usr->info()->setAboutInfo(QString().fromUtf8(buf)); if(!(buf = ChatCore::getParametr("StatusDescription", Hdr->parametrs)).isNull()) usr->info()->setStatusDescription(QString().fromUtf8(buf));// if(!(buf = ChatCore::getParametr("Gender", Hdr->parametrs)).isNull())// usr->info()->setGender(QString().fromUtf8(buf).toInt()); usr->info()->setStatus (Hdr->status); buf = ChatCore::getParametr("Icon", Hdr->parametrs); if(!buf.isNull()) { md5_hash.addData(buf); usr->info()->setAvatarHash(md5_hash.result()); icon = new QPixmap(); icon->loadFromData(buf); need_avatar = false; } else icon = usr->info()->avatar(); tmp = drawUsersIcon(icon, usr->info()); usr->setIcon(QIcon(*tmp)); delete tmp; if(!need_avatar) delete icon; buf = ChatCore::getParametr("PhotoOk", Hdr->parametrs); if(buf.isNull()) { buf = ChatCore::getParametr("Photo", Hdr->parametrs); if(!buf.isNull()) usr->info()->setPhoto(buf); buf = ChatCore::getParametr("PhotoHash", Hdr->parametrs); usr->info()->setPhotoHash(buf); } buf = ChatCore::getParametr("PictureOk", Hdr->parametrs); if(buf.isNull()) { buf = ChatCore::getParametr("Picture", Hdr->parametrs); if(!buf.isNull()) usr->info()->setPicture(buf); buf = ChatCore::getParametr("PictureHash", Hdr->parametrs); usr->info()->setPictureHash(buf); } if(need_avatar) { ChatCore::addParametr("IconHash", usr->info()->avatarHash(), m_parametrs); emitSomeData(AbstractChatCore::AVATAR_REQUEST, "", Hdr->src_ip); } usr->info()->setProgramVerName(Hdr->versionName); usr->info()->setNickname (Hdr->name); usr->info()->setCompName (Hdr->comp_name); usr->info()->setStatus (Hdr->status); usr->info()->setStatusDescription(QString().fromUtf8(ChatCore::getParametr("StatusDescription", Hdr->parametrs))); usr->setData(Qt::StatusTipRole, usr->info()->nickname() + tr(" on ") + usr->info()->compName() + "[" + QHostAddress(usr->info()->ip()).toString() + "]" + tr(" running QChat ") + usr->info()->programVerName() ); usr->setData(Qt::ToolTipRole, usr->info()->statusDescription());}//\*****************************************************************************void ChannelWgt::slot_refreshUL(){ qDebug("\n[ChannelWgt::slot_refreshUL]\n"); mw_usersList->clear(); m_users->disableAll();// slot_statusRequest(); slot_deepRefreshUL();}//\*****************************************************************************void ChannelWgt::slot_chbxInfChgd(){ if(m_sysMessagesChbx->checkState() == Qt::Checked) { mw_chatTextStack->setCurrentIndex(1); m_displayInfoMsgs = false; } if(m_sysMessagesChbx->checkState() == Qt::Unchecked) { m_displayInfoMsgs = true; mw_chatTextStack->setCurrentIndex(0); }}//\*****************************************************************************void ChannelWgt::sendInfoAnswer(QC_DatagramHeader* Hdr){ uchar photo_ok = 0; uchar pic_ok = 0; QByteArray ba; if(m_status != Globals::INVISIBLE) { UserInfo::myInfo()->setStatus(m_name, m_status); UserInfo::myInfo()->setStatusDescription(m_name, m_statusWgt->description()); ba = ChatCore::getParametr("PhotoHash" , Hdr->parametrs); if(!ba.isEmpty()) photo_ok = UserInfo::myInfo()->photoHash() == ba; ba = ChatCore::getParametr("PictureHash", Hdr->parametrs); if(!ba.isEmpty()) pic_ok = UserInfo::myInfo()->pictureHash() == ba; emit infoAnswer(m_name, Hdr->src_ip, m_type, pic_ok | (2 * photo_ok)); }}//\*****************************************************************************void ChannelWgt::sendStatusAnswer(quint64 uid, bool changed, bool send_icon){ if(m_status != Globals::INVISIBLE) { UserInfo::myInfo()->setStatus(m_name, m_status); UserInfo::myInfo()->setStatusDescription(m_name, m_statusDescription); if(m_type == 1) { emit statusAnswer(m_name, Globals::localhost(), m_type, changed, send_icon); emit statusAnswer(m_name, m_destUid, m_type, changed, send_icon); } else emit statusAnswer(m_name, uid, m_type, changed, send_icon); }}//\*****************************************************************************void ChannelWgt::slot_infoRequest(UserWgt* user){ m_parametrs.clear(); if(QFile::exists(user->info()->pictureFilename())) ChatCore::addParametr("PictureHash", user->info()->pictureHash(), m_parametrs); if(QFile::exists(user->info()->photoFilename())) ChatCore::addParametr("PhotoHash" , user->info()->photoHash() , m_parametrs); emit sendSomeData(m_name, user->info()->uid(), AbstractChatCore::INFO_REQUEST, "", m_type, &m_parametrs);}//\*****************************************************************************void ChannelWgt::slot_statusChanged(){ UserInfo::myInfo()->setStatus (m_name, m_status = m_statusWgt->status()); UserInfo::myInfo()->setStatusDescription(m_name, m_statusDescription = m_statusWgt->description()); sendStatusAnswer(QChatSettings::settings()->broadcast().toIPv4Address(), m_oldStatus != m_status); m_oldStatus = m_status;}//\*****************************************************************************void ChannelWgt::slot_startStatusChangedTimer(){ m_statusChangedTimer->setInterval(1 * 1000); m_statusChangedTimer->setSingleShot(true); m_statusChangedTimer->start();}void ChannelWgt::getSmilesFromData(QC_DatagramHeader * Hdr) // TODO rewrite{ m_smilesFromSender->clear(); QFile file; QString fname; QString str; QByteArray barr_hash; QByteArray barr1; QByteArray barr = ChatCore::getParametr("Smiles", Hdr->parametrs); QByteArray sm_ba; QCryptographicHash md5_hash(QCryptographicHash::Md5); int len; qDebug("[ChannelWgt::getSmilesFromData]: Smiles = %s", QString().fromUtf8(barr).toLocal8Bit().data()); for(int i = 0; i < barr.size(); i++) { sm_ba.clear(); for(; barr.at(i) != 0 && i < barr.size(); i++) sm_ba.append(barr.at(i)); str = QString().fromUtf8(sm_ba); qDebug("[ChannelWgt::getSmilesFromData]: str = %s", str.toLocal8Bit().data()); barr1 = ChatCore::getParametr("Smile" + str, Hdr->parametrs); md5_hash.addData(barr1); barr_hash = md5_hash.result(); md5_hash.reset(); fname = QDir::tempPath() + "/smile"; fname.append('_'); len = barr_hash.size(); for(int i = 0; i < len; i++) fname.append(QString::number((uchar)barr_hash.at(i), 16)); file.setFileName(fname); if(file.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) file.write(barr1); else qWarning("[ChannelWgt::getSmilesFromData]: couldn't open file %s for writing", fname.toLocal8Bit().data()); file.close(); m_smilesFromSender->append(Smile(QStringList(str), fname)); }}void ChannelWgt::initChannel(){ emit sendSomeData(m_name, QChatSettings::settings()->broadcast().toIPv4Address(), AbstractChatCore::MSGS_NUM_REQUEST, "", m_type, NULL); m_msgsReqSent = QTime::currentTime(); m_msgsReqReceived = m_msgsReqSent; connect(m_initTimer, SIGNAL(timeout()), this, SLOT(slot_finMsgsHistoryReq())); m_msgsReqNum = 0; m_initTimer->setSingleShot(true); m_initTimer->start(QChatSettings::settings()->historyReqTimeout()); slot_statusRequest(); slot_connected();}void ChannelWgt::rebuildChatText(){ mw_chatText ->clear(); mw_clearChatText->clear(); for(uint i = 0; i < m_chatMsgs->size(); i++) addMsg2Chat(m_chatMsgs->msg(i));}void ChannelWgt::slot_finMsgsHistoryReq()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -