📄 kphoneview.cpp
字号:
void KPhoneView::listDoubleClicked( QListViewItem *i ) { KCallWidget *k; k= ( (KCallViewItem *) i )->call; if(k) { if(k->isHidden()) k->show();else k->hide(); }}void KPhoneView::contactDoubleClicked( QListViewItem *i ){ if( !buttonSipUri->text().compare( "Set Identity" ) ){ QMessageBox::information( this, "Dialling", "Set First Identity." ); return; } QString subject = ( (ContactsListViewItem *) i )->getCall()->getSubject(); SipUri uri = SipUri( buttonSipUri->text() ); KInstantMessageWidget *imwidget; for( imwidget = imwList.first(); imwidget != 0; imwidget = imwList.next() ) { if( imwidget->getCall()->getSubject() == uri.uri() && imwidget->getRemote() == subject ) { imwidget->show(); return; } } SipCall *initcall = new SipCall( user ); initcall->setSubject( uri.uri() ); imwidget = new KInstantMessageWidget( sipauthentication, initcall, this ); imwList.append( imwidget ); imwidget->setRemote( subject ); imwidget->show();}void KPhoneView::contactSendMessage(){ QString subject = ""; if( clist->currentItem() != 0 ) { subject = ((ContactsListViewItem *)clist->currentItem())->getCall()->getSubject(); } if( !buttonSipUri->text().compare( "Set Identity" ) ){ QMessageBox::information( this, KStatics::xBase , "Set First Identity." ); return; } SipUri uri = user->getUri(); KInstantMessageWidget *imwidget; if( clist->currentItem() ) { QString subject = ( (ContactsListViewItem *)clist->currentItem() )->getCall()->getSubject(); if( clist->currentItem() != 0 ) { for( imwidget = imwList.first(); imwidget != 0; imwidget = imwList.next() ) { if( imwidget->getCall()->getSubject() == uri.uri() && imwidget->getRemote() == subject ) { imwidget->show(); return; } } } } SipCall *initcall = new SipCall( user ); initcall->setSubject( uri.uri() ); imwidget = new KInstantMessageWidget( sipauthentication, initcall, this ); imwList.append( imwidget ); imwidget->setRemote( subject ); imwidget->show();}void KPhoneView::hangupCW() { updateWidgetList(); if( tlist->currentItem() != 0 ) { ((KCallViewItem *) tlist->currentItem() )->call->hangupCall(); }}void KPhoneView::holdCW() { KCallWidget *k; updateWidgetList(); if( tlist->currentItem() != 0 ) { k=((KCallViewItem *) tlist->currentItem() )->call; if(k) { if(k->isHidden()) k->show(); k->holdCall(); } }}void KPhoneView::transferCW() { KCallWidget *k; updateWidgetList(); if( tlist->currentItem() != 0 ) { k=((KCallViewItem *) tlist->currentItem() )->call; if(k) { if(k->isHidden()) k->show(); k->showTransferDialog(); } }}void KPhoneView::referCW() { KCallWidget *k; updateWidgetList(); if( tlist->currentItem() != 0 ) { k=((KCallViewItem *) tlist->currentItem() )->call; if(k) { if(k->isHidden()) k->show(); k->showReferDialog(); } }}void KPhoneView::renegCodecCW() { KCallWidget *k; updateWidgetList(); if( tlist->currentItem() != 0 ) { k=((KCallViewItem *) tlist->currentItem() )->call; if(k) { if(k->isHidden()) k->show(); k->renegCodec(); } }}void KPhoneView::toggleCW() { KCallWidget *k; updateWidgetList(); if( tlist->currentItem() != 0 ) { k=((KCallViewItem *) tlist->currentItem() )->call; if(k) { if(k->isHidden()) { k->show(); } else { k->hide(); } } }}void KPhoneView::startCWbyContact(SipCall::CallType ct){ updateWidgetList(); QString subject = ""; if( clist->currentItem() != 0 ) { subject = ((ContactsListViewItem *)clist->currentItem())->getCall()->getSubject(); } if( !buttonSipUri->text().compare( "Set Identity" ) ){ QMessageBox::information( this, "Dialling", "Set First Identity." ); return; } SipCall *newcall = new SipCall( user, QString::null, ct ); newcall->setSubject( user->getUri().uri() ); KCallWidget *widget = new KCallWidget( sipauthentication, sessionControl, newcall, callAudio, this, this ,NULL ,0 ); cwList.append( widget ); widget->setRemote( subject ); connect( widget, SIGNAL( redirectCall( const SipUri &, const QString &, int, KCallWidget *, int ) ), this, SLOT( redirectCall( const SipUri &, const QString &, int, KCallWidget *, int ) ) ); connect( widget, SIGNAL( informPhoneView( int ,int) ), this, SLOT( informPhoneView( int ,int) ) ); widget->show();}void KPhoneView::contactCall(){ startCWbyContact(SipCall::StandardCall);}void KPhoneView::contactExt1(){ startCWbyContact(SipCall::extCall1);}void KPhoneView::contactExt2(){ startCWbyContact(SipCall::extCall2);}void KPhoneView::contactExt3(){ startCWbyContact(SipCall::extCall3);}void KPhoneView::contactExt4(){ startCWbyContact(SipCall::extCall4);}void KPhoneView::contactVideoCall(){ startCWbyContact(SipCall::videoCall);}void KPhoneView::contactAuViCall(){ startCWbyContact(SipCall::auviCall);}void KPhoneView::showPhoneBook(){ infostat1->setText(sic->getContactText()); QSettings settings; QString p = KStatics::dBase + getUserPrefix() + "/local/"; QString file = settings.readEntry( p + "/PhoneBook", "" ); QString label; QString s; if( file.isEmpty() ) { if( getUserPrefix().isEmpty() ) { file = QDir::homeDirPath() + "/." + KStatics::xBase + "-phonebook.xml"; } else { file = QDir::homeDirPath() + "/." + KStatics::xBase + "_" + getUserPrefix() + "phonebook.xml"; } } IncomingCall *incomingCall; QPtrList<IncomingCall> r; QPtrList<IncomingCall> m; QPtrList<IncomingCall> dlc; //+++++++++++++++++++++++++++++ read the CallRegister QDateTime dt; int year,month,day,hour,min,sec; int count = 0; p = KStatics::dBase + getUserPrefix() + "CallRegister"; label.setNum( count ); label = p + "/Received" + label; s = settings.readEntry( label, "" ); while( !s.isEmpty() ) { year = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); month = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); day = s.left( s.find( '-' ) ).toInt(); s = s.mid( s.find( '-' ) + 1 ); hour = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); min = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); sec = s.left( s.find( '[' ) ).toInt(); dt.setDate( QDate( year, month, day ) ); dt.setTime( QTime( hour, min, sec ) ); s = s.left( s.find( ']' ) ); s = s.mid( s.find( '[' ) + 1 ); incomingCall = new IncomingCall( s, dt ); r.append( incomingCall ); label.setNum( ++count ); label = p + "/Received" + label; s = settings.readEntry( label, "" ); } count = 0; label.setNum( count ); label = p + "/Missed" + label; s = settings.readEntry( label, "" ); while( !s.isEmpty() ) { year = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); month = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); day = s.left( s.find( '-' ) ).toInt(); s = s.mid( s.find( '-' ) + 1 ); hour = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); min = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); sec = s.left( s.find( '[' ) ).toInt(); dt.setDate( QDate( year, month, day ) ); dt.setTime( QTime( hour, min, sec ) ); s = s.left( s.find( ']' ) ); s = s.mid( s.find( '[' ) + 1 ); incomingCall = new IncomingCall( s, dt ); m.append( incomingCall ); label.setNum( ++count ); label = p + "/Missed" + label; s = settings.readEntry( label, "" ); } count = 0; label.setNum( count ); label = p + "/Dialled" + label; s = settings.readEntry( label, "" ); while( !s.isEmpty() ) { year = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); month = s.left( s.find( '.' ) ).toInt(); s = s.mid( s.find( '.' ) + 1 ); day = s.left( s.find( '-' ) ).toInt(); s = s.mid( s.find( '-' ) + 1 ); hour = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); min = s.left( s.find( ':' ) ).toInt(); s = s.mid( s.find( ':' ) + 1 ); sec = s.left( s.find( '[' ) ).toInt(); dt.setDate( QDate( year, month, day ) ); dt.setTime( QTime( hour, min, sec ) ); s = s.left( s.find( ']' ) ); s = s.mid( s.find( '[' ) + 1 ); incomingCall = new IncomingCall( s, dt ); dlc.append( incomingCall ); label.setNum( ++count ); label = p + "/Dialled" + label; s = settings.readEntry( label, "" ); } PhoneBook *phoneBook = new PhoneBook(file, this, getUserPrefix() + "Phone Book", r, m, dlc, rejectedContactList ); phoneBook->exec(); rejectedContactList = phoneBook->getRejectedContactsList(); saveRejectContactList(); updateContacts( file ); lineeditCall->setText(""); QString di=phoneBook->getUri(); lineeditCall->setText(di.mid(di.find("sip")));}void KPhoneView::addContactToPhoneBook( SipCallMember *member ){ QSettings settings; QString p = KStatics::dBase + getUserPrefix() + "/local/"; QString file = settings.readEntry( p + "/PhoneBook", "" ); if( file.isEmpty() ) { if( getUserPrefix().isEmpty() ) { file = QDir::homeDirPath() + "/." + KStatics::xBase + "-phonebook.xml"; } else { file = QDir::homeDirPath() + "/." + KStatics::xBase + "_" + getUserPrefix() + "phonebook.xml"; } } QPtrList<IncomingCall> r; QPtrList<IncomingCall> m; QPtrList<IncomingCall> di; QStringList s; PhoneBook *phoneBook = new PhoneBook( file, this, getUserPrefix() + "Phone Book", r, m, di, s ); phoneBook->addContact( member ); updateContacts( file );}void KPhoneView::terminateSubscribes( int mess, SipCall *call ){delete call;}void KPhoneView::updateSubscribes( void ){ QSettings settings; QString p = KStatics::dBase + getUserPrefix() + "/local"; QString file = settings.readEntry( p + "/PhoneBook", "" ); if( file.isEmpty() ) { if( getUserPrefix().isEmpty() ) { file = QDir::homeDirPath() + "/." + KStatics::xBase + "-phonebook.xml"; } else { file = QDir::homeDirPath() + "/." + KStatics::xBase + "_" + getUserPrefix() + "phonebook.xml"; } } updateContacts( file );}void KPhoneView::updateContacts( QString file ){ QString uristr; SipCallMember *member; SipCall *newcall; QFile xmlFile( file ); QXmlInputSource source( xmlFile ); QXmlSimpleReader reader; ContactParser parser; reader.setContentHandler( &parser ); reader.parse( source ); SipCallIterator it( client->getCallList() ); QStringList::Iterator itStr; QStringList sl = parser.getListContacts(); bool find; it.toFirst(); while ( it.current() ) { find = true; if( it.current()->getCallType() == SipCall::outSubscribeCall ) { find = false; for ( itStr = sl.begin(); itStr != sl.end(); ++itStr ) { QString subject = QString(*itStr); if( subject.contains( ";" ) ) { subject = subject.left( subject.find( ";" ) ); } if( subject == it.current()->getSubject() ) { find = true; break; } } if( !find ) { disconnect( it.current(), 0, 0, 0 ); delete it.current(); } } if( find ) { ++it; } } for ( QStringList::Iterator itStr = sl.begin(); itStr != sl.end(); ++itStr ) { uristr = QString(*itStr); if( !uristr.isEmpty() ) { find = false; QString subject = QString(*itStr); QString contactStr = ""; if( subject.contains( ";" ) ) { contactStr = subject.mid( subject.find( ";" ) + 1 ); subject = subject.left( subject.find( ";" ) ); } for ( it.toFirst(); it.current(); ++it ) { if( subject == it.current()->getSubject() && it.current()->getCallStatus() != SipCall::callDead ) { if( !contactStr.isEmpty() ) { it.current()->setContactStr( contactStr ); } else { it.current()->setContactStr( subject ); } find = true; break; } } if( !find ) { if(reg) { // we only start a subscription if the user ist registered or needs no registation if ( (reg->getRegisterState() == SipRegister::Connected ) || pointtopoint ){ newcall = new SipCall( user, QString::null, SipCall::outSubscribeCall ); newcall->setSubject( uristr ); SipUri remoteuri( uristr ); member = new SipCallMember( newcall, remoteuri ); connect( member, SIGNAL( statusUpdated( SipCallMember * ) ), clist, SLOT( auditList() ) ); connect( member, SIGNAL( statusUpdated( SipCallMember * ) ), sipauthentication, SLOT( authRequest( SipCallMember * ) ) ); member->requestSubscribe( subscribeExpiresTime ); if( !contactStr.isEmpty() ) { newcall->setContactStr( contactStr ); } else { newcall->setContactStr( subject ); } } } } } } clist->auditList();}void KPhoneView::localStatusUpdate( void ){ QString subject; QIconSet icon; SipCallIterator it( client->getCallList() ); if( reg == 0 ) { return; } if( setSubscribeOffline && reg->getRegisterState() == SipRegister::Connected ) { setSubscribeOffline = false; isOnline = false; QIconSet icon; icon.setPixmap(SHARE_DIR "/icons/offline.png", QIconSet::Automatic ); buttonOffOnline->setIconSet( icon ); buttonUpdate->setEnabled( false ); buttonOffOnline->setEnabled( false ); it.toFirst(); for( it.toFirst(); it.current(); ++it ) { if( it.current()->getCallType() == SipCall::outSubscribeCall ) { if( it.current()->getCallStatus() == SipCall::callInProgress ) { SipCallMember *member = it.current()->getMemberList().toFirst(); if( member ) { member->requestClearSubscribe(); } } } } } else { if( reg->getRegisterState() == SipRegister::NotConnected ) { isOnline = false; QIconSet icon1; icon1.setPixmap(SHARE_DIR "/icons/offline.png", QIconSet::Automatic ); buttonOffOnline->setIconSet( icon1 ); buttonUpdate->setEnabled( false ); buttonOffOnline->setEnabled( false ); } else if( reg->getRegisterState() == SipRegister::Connected ) { if( buttonSetOffline ) { buttonOffOnline->setEnabled( true ); } else { isOnline = true; QIconSet icon2; icon2.setPixmap(SHARE_DIR "/icons/online.png", QIconSet::Automatic ); buttonOffOnline->setIconSet( icon2 ); buttonUpdate->setEnabled( true ); buttonOffOnline->setEnabled( true ); it.toFirst(); for( it.toFirst(); it.current(); ++it ) { if( it.current()->getCallType() == SipCall::outSubscribeCall ) { if( it.current()->getCallStatus() != SipCall::callDead ) { SipCallMember *member = it.current()->getMemberList().toFirst(); if( member ) { member->requestSubscribe( subscribeExpiresTime ); } } } } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -