⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kphoneview.cpp

📁 KphoneSI (kpsi) is a SIP (Session Initiation Protocol) user agent for Linux, with which you can in
💻 CPP
📖 第 1 页 / 共 3 页
字号:
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 + -