You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(18) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(47) |
Feb
(49) |
Mar
(3) |
Apr
(32) |
May
(79) |
Jun
(91) |
Jul
(116) |
Aug
(143) |
Sep
(53) |
Oct
(68) |
Nov
(8) |
Dec
(82) |
2007 |
Jan
(28) |
Feb
(46) |
Mar
(18) |
Apr
(85) |
May
(77) |
Jun
(44) |
Jul
(66) |
Aug
(79) |
Sep
(9) |
Oct
(95) |
Nov
(68) |
Dec
(57) |
2008 |
Jan
(263) |
Feb
(161) |
Mar
(139) |
Apr
(174) |
May
(180) |
Jun
(181) |
Jul
(159) |
Aug
(124) |
Sep
(95) |
Oct
(48) |
Nov
(126) |
Dec
(71) |
2009 |
Jan
(81) |
Feb
(110) |
Mar
(287) |
Apr
(224) |
May
(137) |
Jun
(72) |
Jul
(295) |
Aug
(173) |
Sep
(111) |
Oct
(82) |
Nov
(128) |
Dec
(53) |
2010 |
Jan
(108) |
Feb
(60) |
Mar
(41) |
Apr
(11) |
May
(22) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <cod...@us...> - 2010-05-23 22:29:25
|
Revision: 6022 http://kmess.svn.sourceforge.net/kmess/?rev=6022&view=rev Author: codingdomain Date: 2010-05-23 22:29:17 +0000 (Sun, 23 May 2010) Log Message: ----------- svn-to-git: fix parameter to git gc. This should be the LAST SVN COMMIT, we've switched to git! :-D Modified Paths: -------------- trunk/svn-to-git/svn-to-git.sh Modified: trunk/svn-to-git/svn-to-git.sh =================================================================== --- trunk/svn-to-git/svn-to-git.sh 2010-05-23 10:34:17 UTC (rev 6021) +++ trunk/svn-to-git/svn-to-git.sh 2010-05-23 22:29:17 UTC (rev 6022) @@ -37,6 +37,7 @@ for dir in $dirs do cd $dir + git gc --aggressive # repack for efficient storage (from 250MB -> 41MB for kmess) git checkout cd .. done This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-05-23 10:34:23
|
Revision: 6021 http://kmess.svn.sourceforge.net/kmess/?rev=6021&view=rev Author: pano9000 Date: 2010-05-23 10:34:17 +0000 (Sun, 23 May 2010) Log Message: ----------- "fix" comment ;-) Modified Paths: -------------- branches/kmess/kmess-2.0.x/src/utils/nowlisteningclient.cpp Modified: branches/kmess/kmess-2.0.x/src/utils/nowlisteningclient.cpp =================================================================== --- branches/kmess/kmess-2.0.x/src/utils/nowlisteningclient.cpp 2010-05-23 10:34:05 UTC (rev 6020) +++ branches/kmess/kmess-2.0.x/src/utils/nowlisteningclient.cpp 2010-05-23 10:34:17 UTC (rev 6021) @@ -218,7 +218,7 @@ /** - * Query Amarok for track information. + * Query Players supporting MPRIS for track information. */ bool NowListeningClient::queryMprisPlayers() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-05-23 10:34:14
|
Revision: 6020 http://kmess.svn.sourceforge.net/kmess/?rev=6020&view=rev Author: pano9000 Date: 2010-05-23 10:34:05 +0000 (Sun, 23 May 2010) Log Message: ----------- "fix" comment ;-) Modified Paths: -------------- trunk/kmess/src/utils/nowlisteningclient.cpp Modified: trunk/kmess/src/utils/nowlisteningclient.cpp =================================================================== --- trunk/kmess/src/utils/nowlisteningclient.cpp 2010-05-23 10:25:51 UTC (rev 6019) +++ trunk/kmess/src/utils/nowlisteningclient.cpp 2010-05-23 10:34:05 UTC (rev 6020) @@ -237,7 +237,7 @@ /** - * Query Amarok for track information. + * Query Players supporting MPRIS for track information. */ bool NowListeningClient::queryMprisPlayers() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-23 10:25:57
|
Revision: 6019 http://kmess.svn.sourceforge.net/kmess/?rev=6019&view=rev Author: fontknocker Date: 2010-05-23 10:25:51 +0000 (Sun, 23 May 2010) Log Message: ----------- Convert SOAP replies to QString using QString::fromUtf8; fixes some UTF-8 encoding problems. Also force the saving of cache files in auto-detected UTF-8. Modified Paths: -------------- trunk/kmess/lib/ChangeLog trunk/kmess/lib/src/soap/addressbookservice.cpp trunk/kmess/lib/src/soap/httpsoapconnection.cpp Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-23 09:51:08 UTC (rev 6018) +++ trunk/kmess/lib/ChangeLog 2010-05-23 10:25:51 UTC (rev 6019) @@ -2,12 +2,13 @@ * AddressBookService: move more to the binding. Also, support adding Yahoo! contacts to the contact list. Add methods addContactToList/removeContactFromList that do exactly as they're named. Add membership list caching; still pretty alpha but - seems stable enough. + seems stable enough. Force QTextStream to write cache data using UTF-8, with auto detect. * MsnSession: start removing the NS as the middle-man between MsnSession and the ABService. MsnSession will be able to call the ABService class directly. * MsnNotificationConnection: start stripping some methods out that are simply wrappers around the ABService. MsnSession will be able to call the AB service directly. Removes the "middle-man", so to speak. * ListsManager: store contacts indexed by lower-case handle. + * HttpSoapConnection: use QString::fromUtf8 to convert server SOAP replies to QStrings. Handles UTF-8 encodings properly. 2010-05-20 Adam Goossens <ad...@km...> Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-23 09:51:08 UTC (rev 6018) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-23 10:25:51 UTC (rev 6019) @@ -1267,6 +1267,8 @@ // put the last save information in the file... // tell QDomDocument to dump itself to the cache file... QTextStream stream( &cache ); + stream.setCodec( QTextCodec::codecForName( "UTF-8" ) ); + stream.setAutoDetectUnicode( true ); data.cacheDocument.save( stream, 2 ); cache.close(); Modified: trunk/kmess/lib/src/soap/httpsoapconnection.cpp =================================================================== --- trunk/kmess/lib/src/soap/httpsoapconnection.cpp 2010-05-23 09:51:08 UTC (rev 6018) +++ trunk/kmess/lib/src/soap/httpsoapconnection.cpp 2010-05-23 10:25:51 UTC (rev 6019) @@ -435,7 +435,7 @@ // Parse the body of the HTTP response (copying the other attributes from the request) SoapMessage *currentResponse = getCurrentRequest( true /* copy */ ); - currentResponse->setMessage( replyContents ); + currentResponse->setMessage( QString::fromUtf8( replyContents ) ); // Log the response to the debugger, if one is present debugResponseReceived( currentResponse ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-23 09:51:15
|
Revision: 6018 http://kmess.svn.sourceforge.net/kmess/?rev=6018&view=rev Author: fontknocker Date: 2010-05-23 09:51:08 +0000 (Sun, 23 May 2010) Log Message: ----------- Add membership list caching. A little alpha but seems to work relatively well - plus it speeds up login. Have to give it time to mature. Fix a couple of doxygen warnings. Index contacts by lowercase handle in ListsManager. Modified Paths: -------------- trunk/kmess/lib/ChangeLog trunk/kmess/lib/src/listsmanager.cpp trunk/kmess/lib/src/msnsession.cpp trunk/kmess/lib/src/soap/addressbookservice.cpp trunk/kmess/lib/src/soap/addressbookservice.h trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp trunk/kmess/lib/src/soap/bindings/abdatatypes.h trunk/kmess/lib/src/soap/bindings/abrequests.cpp trunk/kmess/lib/src/soap/bindings/abrequests.h Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/ChangeLog 2010-05-23 09:51:08 UTC (rev 6018) @@ -1,11 +1,13 @@ 2010-05-23 Adam Goossens <ad...@km...> * AddressBookService: move more to the binding. Also, support adding Yahoo! contacts to the contact list. Add methods - addContactToList/removeContactFromList that do exactly as they're named. + addContactToList/removeContactFromList that do exactly as they're named. Add membership list caching; still pretty alpha but + seems stable enough. * MsnSession: start removing the NS as the middle-man between MsnSession and the ABService. MsnSession will be able to call the ABService class directly. * MsnNotificationConnection: start stripping some methods out that are simply wrappers around the ABService. MsnSession will be able to call the AB service directly. Removes the "middle-man", so to speak. + * ListsManager: store contacts indexed by lower-case handle. 2010-05-20 Adam Goossens <ad...@km...> Modified: trunk/kmess/lib/src/listsmanager.cpp =================================================================== --- trunk/kmess/lib/src/listsmanager.cpp 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/listsmanager.cpp 2010-05-23 09:51:08 UTC (rev 6018) @@ -112,7 +112,7 @@ contact->setGuid( guid ); contact->setNetwork( network ); - contacts_.insert( handle, contact ); + contacts_.insert( handle.toLower(), contact ); debug() << "Adding to list contact" << *contact << "within groups" << groupIds; @@ -362,6 +362,7 @@ { // Firstly, strip out any network ID information. QString handle = search; + if ( handle.contains(':') ) { handle = handle.section( ':', 1 ); @@ -370,10 +371,10 @@ // strip out machine guid. handle = handle.section( ';', 0, 0 ); - // match by handle? - if( contacts_.contains( handle ) ) + // match by handle?` + if( contacts_.contains( handle.toLower() ) ) { - return contacts_.value( handle ); + return contacts_.value( handle.toLower() ); } // no match from the CL...is it "self"? ie, us? @@ -383,9 +384,9 @@ } // is it an unknown contact? - if ( unknownContacts_.contains( handle ) ) + if ( unknownContacts_.contains( handle.toLower() ) ) { - return unknownContacts_.value( handle ); + return unknownContacts_.value( handle.toLower() ); } // no luck searching by handle. search by GUID now. @@ -412,7 +413,7 @@ // Contact is completely unknown. Create a new MsnContact instance. // This is a completely empty instance and has zero list memberships - which makes it "unknown". MsnContact *newContact = new MsnContact( search ); - unknownContacts_.insert( newContact->email(), newContact ); + unknownContacts_.insert( newContact->email().toLower(), newContact ); return newContact; } Modified: trunk/kmess/lib/src/msnsession.cpp =================================================================== --- trunk/kmess/lib/src/msnsession.cpp 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/msnsession.cpp 2010-05-23 09:51:08 UTC (rev 6018) @@ -791,7 +791,7 @@ */ KMess::MsnContact *MsnSession::getContact( const QString &handle ) const { - return listsManager_->contact( handle.toLower() ); + return listsManager_->contact( handle ); } Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-23 09:51:08 UTC (rev 6018) @@ -84,7 +84,7 @@ * @param network Contact network (NetworkMsn or NetworkYahoo). * @param groups List of groups you wish the contact to be added to. Can be empty. */ -void AddressBookService::addContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups ) +void AddressBookService::addContact( const QString &handle, KMess::NetworkType network, const QList<MsnGroup*> &groups ) { if ( handle.isEmpty() || ( network & ( KMess::NetworkMsn | KMess::NetworkYahoo ) ) == 0 ) @@ -105,7 +105,7 @@ * @param contact MsnContact you wish to add. * @param groups A QList of the groups you wish to have the contact added to. This can be empty. */ -void AddressBookService::addContact( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> &groups ) +void AddressBookService::addContact( const KMess::MsnContact *contact, const QList<MsnGroup*> &groups ) { addNewContact( contact->email(), contact->network(), groups ); } @@ -118,7 +118,7 @@ * To add support for Yahoo contacts it may be needed to use the FQY NS command, * as it is used to determine the real type (or types!) of an address. */ -void AddressBookService::addNewContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups ) +void AddressBookService::addNewContact( const QString &handle, KMess::NetworkType network, const QList<MsnGroup*> &groups ) { MsnContact *contact = listsManager_->contact( handle ); if ( contact && contact->isPending() ) @@ -398,15 +398,133 @@ { QDomDocument &cache = membershipCache_.cacheDocument; + ABFindMembershipResult *cResult = new ABFindMembershipResult(); + if ( cache.documentElement().isNull() ) { - cache.appendChild( cache.createProcessingInstruction( "xml", "version='1.0' encoding='utf-8'" ) ); - cache.appendChild( deltas ); + cResult->parse( deltas ); + membershipCache_.cachePtr = cResult; return; } + + ABFindMembershipResult *dResult = new ABFindMembershipResult(); + + cResult->parse( cache.documentElement() ); // FindMembershipResult + dResult->parse( deltas ); + + // these get deleted in parseMembershipLists. + membershipCache_.cachePtr = cResult; + membershipCache_.deltaPtr = dResult; + + // used for fast lookup of cache services in the loop. + QHash<QString,ServiceType*> cachedServices; + foreach( ServiceType *service, cResult->services ) + { + if ( ! cachedServices.contains( service->info.handle.type ) ) + { + cachedServices.insert( service->info.handle.type, service ); + } + } + + foreach( ServiceType *dService, dResult->services ) + { + ServiceType *cService = cachedServices.value( dService->info.handle.type, 0 ); + + // this service is unknown in the cache, so append it. + if ( ! cService ) + { + cResult->services.append( dService ); + continue; + } + + // service is known in cache, so either delete or update. + if ( dService->deleted ) + { + cResult->services.removeAll( cService ); + delete cService; + } + else + { + mergeServiceMemberships( cService, dService ); + } + } + + // that should do it. } + /* +Merges the individual Membership entries from a service into the cache. + +Freaking PITA. +*/ +void AddressBookService::mergeServiceMemberships( ServiceType *cService, ServiceType *dService ) +{ + QHash<QString,ABMembership*> cacheMemberships; + + // used for fast lookups of the membership role. + foreach( ABMembership *membership, cService->memberships ) + { + if ( ! cacheMemberships.contains( membership->memberRole ) ) + { + cacheMemberships.insert( membership->memberRole, membership ); + } + } + + // for each membership in the delta service, grab the corresponding + // cache membership and update it. + foreach( ABMembership *dMembership, dService->memberships ) + { + ABMembership *cMembership = cacheMemberships.value( dMembership->memberRole, 0 ); + + // membership doesn't exist, so it's new in the cache. append it. + if ( ! cMembership ) + { + cService->memberships.append( dMembership ); + continue; + } + + // used for fast lookup of members in this membership role. + QHash<QString,ABBaseMember*> cacheMembers; + foreach( ABBaseMember *m, cMembership->members ) + { + if ( ! cacheMembers.contains( QString::number( m->membershipId ) ) ) + { + cacheMembers.insert( QString::number( m->membershipId ), m ); + } + } + + // now for each member in the delta membership, find its + // corresponding cache member and either update it, delete it, or + // if necessary append a new one. + foreach( ABBaseMember *dMember, dMembership->members ) + { + ABBaseMember *cMember = cacheMembers.value( QString::number( dMember->membershipId ), 0 ); + + // if doesn't exist in cache, new to membership, so append and continue. + if ( ! cMember ) + { + cMembership->members.append( dMember ); + continue; + } + + // is in cache, so delete if deleted, otherwise copy to update. + if ( dMember->deleted ) + { + cMembership->members.removeAll( cMember ); + delete cMember; + } + else + { + // NOTE: I am assuming that typeof(cMember) == typeof(dMember) !!! + *cMember = *dMember; + } + } + } +} + + +/* This method merges the cached contact list data with the deltas retrieved from the SOAP server. It does this by iterating over all the group and contact deltas separately, locating their equivalent @@ -619,7 +737,9 @@ req.lastChange = addressbookCache_.cacheTimestamp.toString( Qt::ISODate ) + addressbookCache_.cacheTimezone; } - sendSecureRequest( req.message(), CONTACTS_API ); + MessageData data; + data.type = "AddressBookRequest"; + sendSecureRequest( req.message( data ), CONTACTS_API ); } @@ -629,16 +749,34 @@ */ void AddressBookService::retrieveMembershipLists() { - readCache( membershipCache_, "/FindMembershipResult/OwnerNamespace/LastChange" ); + // TODO: caching of multiple services? + // TODO: this will only work with a single service in the cache. + // maybe have multiple cache files for multiple services? + // or I'll have to smarten the logic? I don't know yet. + // dotMSN takes the most recent service LastChange value. + readCache( membershipCache_, "/FindMembershipResult/Services/Service/LastChange" ); ABFindMembershipRequest req; req.serviceTypes.append( "Messenger" ); + + if ( membershipCache_.cacheTimestamp.isValid() ) + { + req.deltasOnly = true; + req.lastChange = membershipCache_.cacheTimestamp.toString( Qt::ISODate ) + membershipCache_.cacheTimezone; + } + else + { + req.deltasOnly = false; + } + // req.serviceTypes.append( "Invitation" ); // req.serviceTypes.append( "SocialNetwork" ); // req.serviceTypes.append( "Space" ); // req.serviceTypes.append( "Profile" ); - sendSecureRequest( req.message(), CONTACTS_API ); + MessageData data; + data.type = "MembershipRequest"; + sendSecureRequest( req.message( data ), CONTACTS_API ); } @@ -765,16 +903,15 @@ { mergeMembershipDeltas( deltas ); - ABFindMembershipResult response; - response.parse( deltas ); + ABFindMembershipResult *response = (ABFindMembershipResult*) ( membershipCache_.cachePtr ); - if ( response.services.count() == 0 ) + if ( response->services.count() == 0 ) { retrieveAddressBook(); return; } - foreach( ServiceType *service, response.services ) + foreach( ServiceType *service, response->services ) { KMess::MsnMemberships memberships; @@ -824,8 +961,15 @@ } } + QDomDocument doc; + doc.setContent( SoapUtils::arg( "FindMembershipResult", response->toString() ) ); + membershipCache_.cacheDocument = doc; + saveCache( membershipCache_ ); + delete membershipCache_.cachePtr; + delete membershipCache_.deltaPtr; + // now fetch the address book. retrieveAddressBook(); } @@ -894,22 +1038,38 @@ createAddressBook(); return; } - else if ( errorCode == "InvalidSyncTimeStamp" ) + else if ( errorCode == "FullSyncRequired" || errorCode == "InvalidSyncTimestamp" ) { - debug() << "Sync timestamp was invalid; doing full AB request."; + debug() << "Service has told us we require a full " << type; - #warning InvalidSyncTimestamp - need to identify whether to request Memberships or AB again + ABCacheData *cacheData; + if ( type == "MembershipRequest" ) + { + cacheData = &membershipCache_; + } + else + { + cacheData = &addressbookCache_; + } + // wipe the cache file. - if ( ! QFile( addressbookCache_.cacheFile ).remove() ) + if ( ! QFile( cacheData->cacheFile ).remove() ) { - warning() << "Unable to remove cache file " << addressbookCache_.cacheFile << "; caching will be ignored until this is resolved."; - addressbookCache_.cacheFile = QString(); + warning() << "Unable to remove cache file " << cacheData->cacheFile << "; caching will be ignored until this is resolved."; + cacheData->cacheFile = QString(); } - addressbookCache_.cacheDocument = QDomDocument(); - addressbookCache_.cacheTimestamp = QDateTime(); + cacheData->cacheDocument = QDomDocument(); + cacheData->cacheTimestamp = QDateTime(); - retrieveAddressBook(); + if ( type == "MembershipRequest" ) + { + retrieveMembershipLists(); + } + else + { + retrieveAddressBook(); + } } else { Modified: trunk/kmess/lib/src/soap/addressbookservice.h =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.h 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/addressbookservice.h 2010-05-23 09:51:08 UTC (rev 6018) @@ -56,6 +56,11 @@ QDateTime cacheTimestamp; QString cacheTimezone; QDomDocument cacheDocument; + + // these two are needed so that we can delete them once we're done processing + // them. + SoapType *cachePtr; // stores the ABFindAllResult / ABMembershipResult cache instance + SoapType *deltaPtr; // stores the ABFindAllResult / ABMembershipResult delta instance }; @@ -118,6 +123,7 @@ // Merges AB deltas with the cached data void mergeABDeltas( const QDomElement &deltas ); void mergeMembershipDeltas( const QDomElement &deltas ); + void mergeServiceMemberships( ServiceType *cService, ServiceType *dService ); // Parse the address book void parseAddressBook( const QDomElement &body ); // Parse the membership lists Modified: trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp 2010-05-23 09:51:08 UTC (rev 6018) @@ -300,8 +300,15 @@ { const QDomNode &m = memberList.at( i ); - QString type = XmlFunctions::getNodeAttribute( m, "type" ); - + QString type = XmlFunctions::getNodeAttribute( m, "xsi:type" ); + type = ( type.isEmpty() ? XmlFunctions::getNodeAttribute( m, "type" ) : type ); + + if ( type.isEmpty() ) + { + warning() << "Got empty type for member."; + continue; + } + ABBaseMember *mem = 0; if ( type == "PassportMember" ) @@ -312,6 +319,10 @@ { mem = new ABEmailMember(); } + else + { + warning() << "Unknown member type:" << type; + } // else if ( type == "Circle" ) // { // mem = new ABCircleMember(); @@ -436,6 +447,7 @@ void ABEmailMember::parse( const QDomNode &node ) { + ABBaseMember::parse( node ); parseString( node, "Email", email ); } @@ -565,11 +577,47 @@ /********************************************** +InfoType +***********************************************/ +QString InfoType::toString() const +{ + QString body; + body += arg( "Handle", handle ); + body += arg( "DisplayName", displayName ); + body += arg( "InverseRequired", inverseRequired ); + body += arg( "AuthorizationCriteria", authorizationCriteria ); + body += arg( "RSSUrl", rssURL ); + body += arg( "IsBot", isBot ); + return body; +} + + + +InfoType::operator QString() const +{ + return toString(); +} + + + +void InfoType::parse( const QDomNode &node ) +{ + parseSoapType( node, "Handle", handle ); + parseString( node, "DisplayName", displayName ); + parseBool( node, "InverseRequired", inverseRequired ); + parseString( node, "AuthorizationCriteria", authorizationCriteria ); + parseString( node, "RSSUrl", rssURL ); + parseBool( node, "IsBot", isBot ); +} + + +/********************************************** ServiceType ***********************************************/ QString ServiceType::toString() const { QString body; + body += arg( "Info", info ); body += arg<ABMembership*>( "Memberships", "Membership", memberships ); body += arg( "Changes", changes ); body += arg( "LastChange", lastChange ); @@ -588,6 +636,7 @@ void ServiceType::parse( const QDomNode &node ) { + parseSoapType( node, "Info", info ); parseSoapTypeList<ABMembership>( node, "Memberships", "Membership", memberships ); parseString( node, "Changes", changes ); parseString( node, "LastChange", lastChange ); Modified: trunk/kmess/lib/src/soap/bindings/abdatatypes.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abdatatypes.h 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/bindings/abdatatypes.h 2010-05-23 09:51:08 UTC (rev 6018) @@ -266,19 +266,19 @@ /** * Holds extra information about a service. */ -// struct InfoType : public SoapType -// { -// HandleType handle; -// QString displayName; -// bool inverseRequired; -// QString authorizationCriteria; -// QString rssURL; -// bool isBot; -// -// virtual QString toString() const; -// virtual void parse( const QDomNode &node ); -// virtual operator QString() const; -// } +struct InfoType : public SoapType +{ + HandleType handle; + QString displayName; + bool inverseRequired; + QString authorizationCriteria; + QString rssURL; + bool isBot; + + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; @@ -287,6 +287,7 @@ */ struct ServiceType : public SoapType { + InfoType info; QList<ABMembership*> memberships; QString changes; QString lastChange; Modified: trunk/kmess/lib/src/soap/bindings/abrequests.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.cpp 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/bindings/abrequests.cpp 2010-05-23 09:51:08 UTC (rev 6018) @@ -146,6 +146,8 @@ { QString body; body += arg( "serviceFilter", arg( "Types", "ServiceType", serviceTypes ) ); + body += arg( "deltasOnly", deltasOnly ); + body += arg( "lastChange", lastChange, "0001-01-01T00:00:00.0000000-08:00" ); return body; } Modified: trunk/kmess/lib/src/soap/bindings/abrequests.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.h 2010-05-23 02:45:17 UTC (rev 6017) +++ trunk/kmess/lib/src/soap/bindings/abrequests.h 2010-05-23 09:51:08 UTC (rev 6018) @@ -92,6 +92,8 @@ public: QList<QString> serviceTypes; + QString lastChange; + bool deltasOnly; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-23 02:45:24
|
Revision: 6017 http://kmess.svn.sourceforge.net/kmess/?rev=6017&view=rev Author: fontknocker Date: 2010-05-23 02:45:17 +0000 (Sun, 23 May 2010) Log Message: ----------- Support adding Yahoo! contacts to the contact list (still kinda alpha, but seems to work). More upgrades to the ABService, now everything uses binding classes. Improve the cache logic too. Next challenge: start caching membership lists as well. Modified Paths: -------------- trunk/kmess/lib/ChangeLog trunk/kmess/lib/src/connections/msnnotificationconnection.cpp trunk/kmess/lib/src/connections/msnnotificationconnection.h trunk/kmess/lib/src/listsmanager.cpp trunk/kmess/lib/src/msnsession.cpp trunk/kmess/lib/src/soap/addressbookservice.cpp trunk/kmess/lib/src/soap/addressbookservice.h trunk/kmess/lib/src/soap/bindings/abrequests.cpp trunk/kmess/lib/src/soap/bindings/abrequests.h Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/ChangeLog 2010-05-23 02:45:17 UTC (rev 6017) @@ -1,3 +1,12 @@ +2010-05-23 Adam Goossens <ad...@km...> + + * AddressBookService: move more to the binding. Also, support adding Yahoo! contacts to the contact list. Add methods + addContactToList/removeContactFromList that do exactly as they're named. + * MsnSession: start removing the NS as the middle-man between MsnSession and the ABService. MsnSession will be able to call the + ABService class directly. + * MsnNotificationConnection: start stripping some methods out that are simply wrappers around the ABService. MsnSession will + be able to call the AB service directly. Removes the "middle-man", so to speak. + 2010-05-20 Adam Goossens <ad...@km...> * Add the file abresponse.cpp/abresponse.h. These files have the bindings for a couple of AB response messages. Modified: trunk/kmess/lib/src/connections/msnnotificationconnection.cpp =================================================================== --- trunk/kmess/lib/src/connections/msnnotificationconnection.cpp 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/connections/msnnotificationconnection.cpp 2010-05-23 02:45:17 UTC (rev 6017) @@ -167,48 +167,6 @@ /** - * @brief Re-add a known contact to the friends list - * - * The contact will no longer appear in a "allowed contacts" - * or "removed contacts" group, but appear at the friends list again. - * The contact should exist already at some list - * before (e.g. the block list or friends list). - * - * - * @param handle Email address of the contact. - * @param groups Groups where to add the contact. - */ -void MsnNotificationConnection::contactAddExisting( const QString &handle, const QList<MsnGroup*> &groups ) -{ - debug() << "Re-adding contact " << handle; - - // Request the re-adding of contact to AB - AddressBookService *addressBook = addressBookService(); - addressBook->addContact( handle, groups , true ); -} - - - -/** - * @brief Add a new contact to the list. - * - * This is the standard method to add a contact. Optionally, it can also add it to a specific group. - * - * @param handle Email address of the contact. - * @param groups The groups that the contact should be added to. - */ -void MsnNotificationConnection::contactAddNew( const QString &handle, const QList<MsnGroup*> &groups ) -{ - debug() << "Adding contact " << handle; - - // Request the adding of contact to AB - AddressBookService *addressBook = addressBookService(); - addressBook->addContact( handle, groups ); -} - - - -/** * @brief Adds the given contact to the allow list only. * * It allows the contact to see the online state of the user. @@ -558,11 +516,6 @@ connect( addressBookService_, SIGNAL( contactDeleted(QString) ), this, SLOT ( slotContactDeleted(QString) ) ); - connect( addressBookService_, SIGNAL( contactBlocked(QString) ), - this, SLOT ( slotContactBlocked(QString) ) ); - connect( addressBookService_, SIGNAL( contactUnblocked(QString) ), - this, SLOT ( slotContactUnblocked(QString) ) ); - // Contact added/remove to/from group signals/slots connect( addressBookService_, SIGNAL( contactAddedToGroup(QString,QString) ), this, SLOT ( slotContactAddedToGroup(QString,QString) ) ); @@ -578,10 +531,6 @@ this, SLOT ( slotGroupRenamed(QString,QString) ) ); // Membership and AddressBook signals/slots -// connect( addressBookService_, SIGNAL( gotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ), -// this, SLOT ( slotGotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ) ); -// connect( addressBookService_, SIGNAL( gotAddressBookList(QList<ABContactInfo>) ), -// this, SLOT ( slotGotAddressBookList(QList<ABContactInfo>) ) ); connect( addressBookService_, SIGNAL( addressBookParsed() ), this, SLOT ( slotAddressBookParsed() ) ); @@ -1620,11 +1569,11 @@ const QString payload( "<ml>" "<d n=\"" + splittedHandle[1] + "\">" - "<c n=\"" + splittedHandle[0] + "\" l=\"%1\" t=\"1\" />" + "<c n=\"" + splittedHandle[0] + "\" l=\"%1\" t=\"%2\" />" "</d>" "</ml>" ); - sendCommand( "ADL", QString(), payload.arg( QString::number( list ) ) ); + sendCommand( "ADL", QString(), payload.arg( QString::number( list ) ).arg( listsManager_->contact( handle )->network() ) ); return; } @@ -1720,11 +1669,11 @@ const QString payload( "<ml>" "<d n=\"" + splittedHandle[1] + "\">" - "<c n=\"" + splittedHandle[0] + "\" l=\"%1\" t=\"1\" />" + "<c n=\"" + splittedHandle[0] + "\" l=\"%1\" t=\"%2\" />" "</d>" "</ml>" ); - sendCommand( "RML", QString(), payload.arg( QString::number( list ) ) ); + sendCommand( "RML", QString(), payload.arg( QString::number( list ) ).arg( listsManager_->contact( handle )->network() ) ); } @@ -2559,17 +2508,7 @@ -// Contact blocked -void MsnNotificationConnection::slotContactBlocked( const QString &handle ) -{ - MsnContact *contact = listsManager_->contact( handle ); - KMESS_NULL( contact ); - contact->setMemberships( ( contact->memberships() | MSN_LIST_BLOCKED ) ^ MSN_LIST_ALLOWED ); -} - - - // Contact deleted void MsnNotificationConnection::slotContactDeleted( const QString& contactId ) { @@ -2617,36 +2556,6 @@ /** - * @brief Called when address book services retrieved membership lists. - * - * In this list there are informations about FL, AL, BL lists. - * - */ -// void MsnNotificationConnection::slotGotMembershipLists() -// { -// if( serviceType != "Messenger" ) -// { -// warning() << "Unable to parse membership list:" << serviceType; -// return; -// } -// -// contactsRole_ = contactsRole; -// -// emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_GETTING_CONTACT_LIST ); -// -// // Allow some time until the next message is received -// if( loginTimer_.isActive() ) -// { -// loginTimer_.start(); -// } -// -// AddressBookService *addressBook = addressBookService();; -// addressBook->retrieveAddressBook( cacheFile_ ); -// } - - - -/** * @brief Called when address book services parsed a group. * * @param id the id of the group @@ -2702,17 +2611,6 @@ -void MsnNotificationConnection::slotContactUnblocked( const QString &handle ) -{ - MsnContact *contact = listsManager_->contact( handle ); - if( contact != 0 ) - { - contact->setMemberships( ( contact->memberships() | MSN_LIST_ALLOWED ) ^ MSN_LIST_BLOCKED ); - } -} - - - // Unblock the given contact void MsnNotificationConnection::contactUnblock( const QString &handle ) { Modified: trunk/kmess/lib/src/connections/msnnotificationconnection.h =================================================================== --- trunk/kmess/lib/src/connections/msnnotificationconnection.h 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/connections/msnnotificationconnection.h 2010-05-23 02:45:17 UTC (rev 6017) @@ -147,10 +147,6 @@ public: // Public methods called when user wants to modify his contactlist. They don't be used as slots // Copy contact to another group. void contactAddToGroup( const QString &handle, const QString &groupId ); - // Add an existing contact to the friends list - void contactAddExisting( const QString &handle, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>() ); - // Add a new contact to the list - void contactAddNew( const QString &handle, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>() ); // Adds the given contact to the allow list. void contactAllow( const QString &handle ); // Block the given contact @@ -268,8 +264,6 @@ const QStringList &groupsId ); // Contact added to group void slotContactAddedToGroup( const QString &contactId, const QString &groupId ); - // Contact blocked - void slotContactBlocked( const QString &handle ); // Contact deleted void slotContactDeleted( const QString &contactId ); // Contact removed from group @@ -284,8 +278,6 @@ void slotGroupRemoved( const QString &id ); // Called when a group is renamed void slotGroupRenamed( const QString &id, const QString &newName ); - // Contact unblocked - void slotContactUnblocked( const QString &handle ); private slots: // Private slots related to this class Modified: trunk/kmess/lib/src/listsmanager.cpp =================================================================== --- trunk/kmess/lib/src/listsmanager.cpp 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/listsmanager.cpp 2010-05-23 02:45:17 UTC (rev 6017) @@ -114,7 +114,7 @@ contacts_.insert( handle, contact ); - debug() << "Adding to list contact" << handle << "within groups" << groupIds; + debug() << "Adding to list contact" << *contact << "within groups" << groupIds; // Also add it to the model model_->contactAdd( contact ); Modified: trunk/kmess/lib/src/msnsession.cpp =================================================================== --- trunk/kmess/lib/src/msnsession.cpp 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/msnsession.cpp 2010-05-23 02:45:17 UTC (rev 6017) @@ -448,14 +448,7 @@ debug() << "Adding contact: " << contact; - if( contact->isUnknown() ) - { - msnNotificationConnection_->contactAddNew( contact->email(), groups ); - } - else - { - msnNotificationConnection_->contactAddExisting( contact->email(), groups ); - } + msnNotificationConnection_->addressBookService()->addContact( contact, groups ); } @@ -475,10 +468,7 @@ return; } - MsnContact *contact = listsManager_->contact( handle, true ); - contact->setNetwork( network ); - - contactAdd( contact, groups ); + msnNotificationConnection_->addressBookService()->addContact( handle, network, groups ); } Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-23 02:45:17 UTC (rev 6017) @@ -23,6 +23,7 @@ #include <KMess/NetworkGlobals> #include <KMess/Utils> #include <KMess/MsnGroup> +#include <KMess/MsnContact> #include <QDomDocument> #include <QDomElement> @@ -35,6 +36,7 @@ #include "soapmessage.h" +using namespace KMess; using namespace KMessInternal; @@ -75,43 +77,85 @@ } + /** + * This is an overloaded function. + * @param handle Contact handle. + * @param network Contact network (NetworkMsn or NetworkYahoo). + * @param groups List of groups you wish the contact to be added to. Can be empty. + */ +void AddressBookService::addContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups ) +{ + if ( handle.isEmpty() || + ( network & ( KMess::NetworkMsn | KMess::NetworkYahoo ) ) == 0 ) + { + warning() << "Must have valid handle and valid network type."; + return; + } + + addNewContact( handle, network, groups ); +} + + +/** + * Adds a new contact to the address book. + * + * If the contact is on the pending list then they are first added to our Reverse list. + * + * @param contact MsnContact you wish to add. + * @param groups A QList of the groups you wish to have the contact added to. This can be empty. + */ +void AddressBookService::addContact( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> &groups ) +{ + addNewContact( contact->email(), contact->network(), groups ); +} + + + +/** * @brief Add a new or already known contact to the Address Book. * * To add support for Yahoo contacts it may be needed to use the FQY NS command, * as it is used to determine the real type (or types!) of an address. */ -void AddressBookService::addContact( const QString &handle, const QList<KMess::MsnGroup*> &groups, bool alreadyExists ) +void AddressBookService::addNewContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups ) { - // TODO Add support to yahoo contacts - - QString body( "<ABContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <contacts>\n" - " <Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <contactInfo>\n" ); - if( ! alreadyExists ) + MsnContact *contact = listsManager_->contact( handle ); + if ( contact && contact->isPending() ) { - body += " <contactType>LivePending</contactType>\n"; + // first add them to the RL. then, once that is confirmed, add them to the AB proper. + addContactToList( contact, KMess::MSN_LIST_REVERSE ); + removeContactFromList( contact, KMess::MSN_LIST_PENDING ); } - - body += " <passportName>" + handle + "</passportName>\n" - " <isMessengerUser>true</isMessengerUser>\n" - " <MessengerMemberInfo>\n" - " <DisplayName />\n" - " </MessengerMemberInfo>\n" - " </contactInfo>\n" - " </Contact>\n" - " </contacts>\n"; - if( ! alreadyExists ) + + ABContactAddRequest req; + + ABContact *c = new ABContact(); + + req.enableAllowListManagement = true; + + if ( network == KMess::NetworkYahoo ) { - body += " <options>\n" - " <EnableAllowListManagement>true</EnableAllowListManagement>\n" - " </options>\n"; + ABContactEmail *e = new ABContactEmail(); + e->contactEmailType = "Messenger2"; + e->email = handle; + e->isMessengerEnabled = true; // better be! + e->capability = network; // should be "32" for "Yahoo" + e->propertiesChanged = "Email IsMessengerEnabled Capability"; + + c->contactInfo.emails.append( e ); } - - body += "</ABContactAdd>"; - + else + { + c->contactInfo.contactType = "Regular"; + c->contactInfo.passportName = handle; + c->contactInfo.isMessengerUser = true; + + // TODO: invitations? + } + + req.contacts.append( c ); + QStringList groupsId; foreach ( KMess::MsnGroup *g, groups ) { @@ -120,14 +164,9 @@ MessageData data; data.type = "ContactAdd"; - data.value = QStringList() << handle << groupsId; + data.value = QStringList() << handle << QString::number( network ) << groupsId; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABContactAdd", - createCommonHeader( "ContactSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } @@ -166,15 +205,7 @@ // Block contact void AddressBookService::blockContact( const QString &handle ) { - SoapMessage *message = getMembershipListUpdate( handle, "Block", true ); - - MessageData data; - data.type = "ContactBlock"; - data.value = QStringList() << handle << "BL"; - - message->setData( data ); - - sendSecureRequest( message, "Contacts" ); + addContactToList( listsManager_->contact( handle ), KMess::MSN_LIST_BLOCKED ); } @@ -196,30 +227,6 @@ /** - * @brief Create the common header for the soap requests. - * - * @param partnerScenario the field for the PartnerScenario tag - */ -QString AddressBookService::createCommonHeader( const QString partnerScenario ) -{ - return "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <ApplicationId xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " 996CDE1E-AA53-4477-B943-2BE802EA6166\n" - " </ApplicationId>\n" - " <IsMigration xmlns=\"http://www.msn.com/webservices/AddressBook\">false</IsMigration>\n" - " <PartnerScenario xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - + partnerScenario + - " </PartnerScenario>\n" - "</ABApplicationHeader>\n" - "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <ManagedGroupRequest xmlns=\"http://www.msn.com/webservices/AddressBook\">false</ManagedGroupRequest>\n" - " <TicketToken />\n" // Gets filled in by the base class - "</ABAuthHeader>"; -} - - - -/** * @brief Put the Soap action to update the information about contact. * * @param property the property that has changed (see ContactProperty in addressbookservice.h) @@ -263,7 +270,8 @@ ABContactDeleteRequest req; ABContact *c = new ABContact(); c->contactId = contactId; - + c->fDeleted = true; + req.contacts.append( c ); MessageData data; @@ -419,11 +427,11 @@ // so let's do this: cache.appendChild( cache.createProcessingInstruction( "xml", "version='1.0' encoding='utf-8'" ) ); cache.appendChild( deltas ); - return; // done. + return; } + + QDomElement cacheRoot = cache.documentElement().toElement(); - QDomElement cacheRoot = cache.documentElement().toElement(); // ABFindAllResult - QDomNode cacheContactRoot = cacheRoot.namedItem( "contacts" ); QDomNode cacheGroupRoot = cacheRoot.namedItem( "groups" ); @@ -485,45 +493,65 @@ // next, do the contacts. this is much more fun... while( deltaContacts.size() != 0 ) { - QDomNode deltaContact = deltaContacts.at( 0 ); - QDomNode deltaContactInfo = deltaContact.namedItem( "contactInfo" ); + QDomNode deltaContactNode = deltaContacts.at( 0 ); + ABContact deltaContact; + QString deltaHandle; - QString deltaId = deltaContact.namedItem( "contactId" ).toElement().text(); + deltaContact.parse( deltaContactNode ); + deltaHandle = deltaContact.contactInfo.passportName; + deltaHandle = (deltaHandle.isEmpty() && deltaContact.contactInfo.emails.count() > 0 ) ? deltaContact.contactInfo.emails.at( 0 )->email : deltaHandle; - bool deleted = XmlFunctions::getNodeValue( deltaContact, "fDeleted" ) == "true" ? true : false; + if ( deltaHandle.isEmpty() ) continue; + + bool deleted = deltaContact.fDeleted; bool handled = false; for( int i = 0; i < cacheContacts.size(); i++ ) { - QDomNode cacheContact = cacheContacts.at( i ); - QDomNode cacheContactInfo = cacheContact.namedItem( "contactInfo" ); - - QString cacheId = cacheContact.namedItem( "contactId" ).toElement().text(); - - // make sure we've got the right person. - if ( cacheId != deltaId ) continue; + QDomNode cacheContactNode = cacheContacts.at( i ); - deltaContact.parentNode().removeChild( deltaContact ); + ABContact cacheContact; + QString cacheHandle; + cacheContact.parse( cacheContactNode ); + cacheHandle = cacheContact.contactInfo.passportName; + cacheHandle = ( cacheHandle.isEmpty() && cacheContact.contactInfo.emails.count() > 0 ) ? cacheContact.contactInfo.emails.at( 0 )->email : cacheHandle; + + deltaContactNode.parentNode().removeChild( deltaContactNode ); + + // for a deletion, compare contact Ids only. + if ( deleted && cacheContact.contactId != deltaContact.contactId ) + { + continue; + } + + // for anything else, compare contact handles. + if ( ! deleted && cacheHandle != deltaHandle ) + { + continue; + } + if ( deleted ) { // this contact is gone from AB. - cacheContact.parentNode().removeChild ( cacheContact ); + cacheContactNode.parentNode().removeChild ( cacheContactNode ); } else { // updated. - cacheContact.replaceChild( deltaContactInfo, cacheContactInfo ); + cacheContactNode.parentNode().replaceChild( deltaContactNode, cacheContactNode ); } handled = true; break; } - if ( ! handled ) + // if it hasn't been handled, ie, it wasn't found in the list + // AND it wasn't marked for deletion, append it to the list. + if ( ! handled && ! deleted ) { // new contact! add to cacheContacts - cacheContactRoot.appendChild( deltaContact ); + cacheContactRoot.appendChild( deltaContactNode ); } } @@ -639,12 +667,11 @@ // first thing we have to do is merge the cached data with the deltas. mergeABDeltas( deltaBody ); - - // now we operate on the modified cache data. - ABFindAllResponse response; - response.parse( addressbookCache_.cacheDocument.documentElement() ); - foreach( ABGroup *g, response.groups ) + ABFindAllResponse *response = new ABFindAllResponse(); + response->parse( addressbookCache_.cacheDocument.documentElement() ); + + foreach( ABGroup *g, response->groups ) { if ( g->groupId.isEmpty() || g->groupInfo.name.isEmpty() ) { @@ -656,7 +683,7 @@ debugGroupCount++; } - foreach( ABContact *c, response.contacts ) + foreach( ABContact *c, response->contacts ) { if ( c->contactInfo.contactType == "Me" ) { @@ -676,26 +703,8 @@ QString handle; handle = c->contactInfo.passportName; + handle = ( handle.isEmpty() && c->contactInfo.emails.count() > 0 ) ? c->contactInfo.emails.at(0)->email : handle; - // no email from the passportName element. - // try their first contactInfo email if they have one. - if ( handle.isEmpty() ) - { - if ( c->contactInfo.emails.count() == 0 ) - { - continue; // skip it - the contact has no email information. - } - - foreach( ABContactEmail *e, c->contactInfo.emails ) - { - if ( e->isMessengerEnabled ) - { - handle = e->email; - break; - } - } - } - if ( handle.isEmpty() ) { warning() << "Handle for contact was empty. XML dump:" << c->toString(); @@ -728,20 +737,23 @@ i.next(); QString handle = i.key(); RoleInfo info = i.value(); - + + listsManager_->contactAdd( info.handle, info.displayName, info.memberships, QStringList(), QString(), info.network ); + if( ( info.memberships & KMess::MSN_LIST_PENDING ) != 0 ) { - listsManager_->contactAdd( info.handle, info.displayName, info.memberships, QStringList(), QString(), info.network ); emit newPendingContact( listsManager_->contact( info.handle ) ); } } } - debug() << "Address book successfully parsed: found" << response.contacts.count() << "contacts and" << debugGroupCount << "groups."; + debug() << "Address book successfully parsed: found" << response->contacts.count() << "contacts and" << debugGroupCount << "groups."; // save it to disk (also throws away cache data from memory) saveCache( addressbookCache_ ); + delete response; + // Signal that the of address book has been parsed emit addressBookParsed(); } @@ -966,12 +978,17 @@ QStringList info ( data.value.toStringList() ); const QString& handle ( info.takeFirst() ); + NetworkType network = (NetworkType) ( info.takeFirst().toInt() ); const QStringList& groupsId ( info ); const QString& contactId( body.elementsByTagName( "guid" ).item(0).toElement().text() ); - + // If the contact is valid, signal that the contact was added to AB if( ! contactId.isEmpty() && ! handle.isEmpty() ) { + MsnContact *c = listsManager_->contact( handle, true /* create */); + c->setNetwork( network ); + c->setGuid( contactId ); + emit contactAdded( handle, contactId, groupsId ); } } @@ -986,20 +1003,25 @@ emit contactDeleted( contactId ); } } - else if( data.type == "ContactBlock" || data.type == "ContactUnblock" ) + /* + If a contact is added to the Allowed or Blocked list, then + emit contactBlocked/contactUnblocked as appropriate. + */ + else if ( data.type.contains( "ListAdd" ) ) { - // A contact was added to the Membership list in a certain Role + QString handle = data.value.toString(); + + KMess::MsnContact *c = listsManager_->contact( handle ); + KMESS_ASSERT( c ); // c must be valid! - const QStringList& info ( data.value.toStringList() ); - const QString& handle( info.value( 0 ) ); - const QString& role ( info.value( 1 ) ); - - if( role == "BL" ) + if ( data.type == "ListAdd-" + QString::number( KMess::MSN_LIST_BLOCKED ) ) { + c->setMemberships( ( c->memberships() | KMess::MSN_LIST_BLOCKED ) ^ KMess::MSN_LIST_ALLOWED ); emit contactBlocked( handle ); } - else if( role == "AL" ) + else if ( data.type == "ListAdd-" + QString::number( KMess::MSN_LIST_ALLOWED ) ) { + c->setMemberships( ( c->memberships() | KMess::MSN_LIST_ALLOWED) ^ KMess::MSN_LIST_BLOCKED ); emit contactUnblocked( handle ); } } @@ -1097,60 +1119,113 @@ } - // Unblock contact void AddressBookService::unblockContact( const QString &handle ) { - SoapMessage *message = getMembershipListUpdate( handle, "Allow", true ); + addContactToList( listsManager_->contact( handle ), KMess::MSN_LIST_ALLOWED ); +} + + +/** + * Adds a contact to the given membership role. + * + * @param contact MsnContact you wish to add. + * @param role The role you wish to add the contact to. + */ +void AddressBookService::addContactToList( const KMess::MsnContact *contact, KMess::MsnMembership role ) +{ + AddMemberRequest req; + + req.memberships.append( createMembership( contact, role ) ); + MessageData data; - data.type = "ContactUnblock"; - data.value = QStringList() << handle << "AL"; + data.type = "ListAdd-" + QString::number( role ); + data.value = contact->email(); + + // have to use ContactSave partner scenario for changing the RL. + if ( role == KMess::MSN_LIST_REVERSE ) + { + req.setPartnerScenario( "ContactSave" ); + } + + sendSecureRequest( req.message( data ), CONTACTS_API ); +} - message->setData( data ); - sendSecureRequest( message, "Contacts" ); + +void AddressBookService::removeContactFromList( const KMess::MsnContact *contact, KMess::MsnMembership role ) +{ + DeleteMemberRequest req; + + req.memberships.append( createMembership( contact, role ) ); + + MessageData data; + data.type = "ListRemove-" + QString::number( role ); + data.value = contact->email(); + + // have to use ContactSave partner scenario for changing the RL. + if ( role == KMess::MSN_LIST_REVERSE ) + { + req.setPartnerScenario( "ContactSave" ); + } + + sendSecureRequest( req.message( data ), CONTACTS_API ); } -// Create a message to update the membership list -SoapMessage *AddressBookService::getMembershipListUpdate( const QString &handle, const QString &role, bool adding ) +/** + * Creates an ABMembership structure which represents a membership update for the given contact in a role + * @param contact The contact you wish to update + * @param role The MsnMembership you wish to add the contact to. + */ +ABMembership *AddressBookService::createMembership( const KMess::MsnContact *contact, KMess::MsnMembership role ) { - QString body( "<AddMember xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <serviceHandle>\n" - " <Id>0</Id>\n" - " <Type>Messenger</Type>\n" - " <ForeignId></ForeignId>\n" - " </serviceHandle>\n" - " <memberships>\n" - " <Membership>\n" - " <MemberRole>" + role + "</MemberRole>\n" - " <Members>\n" - " <Member xsi:type=\"PassportMember\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" - " <Type>Passport</Type>\n" - " <State>Accepted</State>\n" - " <PassportName>" + handle + "</PassportName>\n" - " </Member>\n" - " </Members>\n" - " </Membership>\n" - " </memberships>\n" - "</AddMember>" ); - - QString action; - if( adding ) + ABMembership *m = new ABMembership(); + ABBaseMember *mem; + + switch( role ) { - action = "http://www.msn.com/webservices/AddressBook/AddMember"; + case KMess::MSN_LIST_ALLOWED: + m->memberRole = "Allow"; + break; + + case KMess::MSN_LIST_BLOCKED: + m->memberRole = "Block"; + break; + + case KMess::MSN_LIST_REVERSE: + m->memberRole = "Reverse"; + break; + + case KMess::MSN_LIST_PENDING: + m->memberRole = "Pending"; + break; + + default: + warning() << "Cannot handle membership role:" << role; + return 0; } + + if ( contact->network() == KMess::NetworkMsn ) + { + mem = new ABPassportMember(); + ABPassportMember *p = (ABPassportMember *)mem; + + p->passportName = contact->email(); + p->state = "Accepted"; + } else { - action = "http://www.msn.com/webservices/AddressBook/DeleteMember"; + mem = new ABEmailMember(); + ABEmailMember *e = (ABEmailMember *)mem; + e->email = contact->email(); + e->state = "Accepted"; } - - return new SoapMessage( SERVICE_URL_ADDRESSBOOK_SHARING, - action, - createCommonHeader( "BlockUnblock" ), - body ); + + m->members.append( mem ); + m->membershipIsComplete = true; + return m; } - Modified: trunk/kmess/lib/src/soap/addressbookservice.h =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.h 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/soap/addressbookservice.h 2010-05-23 02:45:17 UTC (rev 6017) @@ -81,8 +81,10 @@ AddressBookService( KMess::MsnSession *session, ListsManager *listsManager, QObject *parent = 0 ); // The destructor virtual ~AddressBookService(); - // Add contact to AB - void addContact( const QString &handle, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>(), bool alreadyExists = false ); + // Add contact to the AB by using a specific handle and network type. + void addContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>() ); + // Add a contact to the AB + void addContact( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>() ); // Add contact to group void addContactToGroup( const QString &contactId, const QString &groupId ); // Add group @@ -99,18 +101,20 @@ void deleteGroup( const QString &groupId ); // Retrieve the address book and membership lists. void fetchAddressBook( const QString &cacheDir = QString() ); - // Create a message to update the membership list - SoapMessage *getMembershipListUpdate( const QString &handle, const QString &role, bool adding ); // Rename group void renameGroup( const QString &groupId, const QString &name ); // Unblock contact void unblockContact( const QString &handle ); private: // private methods + // Internal: add a contact to a list. + void addContactToList( const KMess::MsnContact *c, KMess::MsnMembership role ); + // Internal: Add contact to AB. Performs the request. + void addNewContact( const QString &handle, KMess::NetworkType network, const QList<KMess::MsnGroup*> &groups = QList<KMess::MsnGroup*>() ); // Request creation of a new address book (for new accounts) void createAddressBook(); - // Create the common header for the soap requests - QString createCommonHeader( const QString partnerScenario = "Initial" ); + // Create an ABMembership update request. + ABMembership *createMembership( const KMess::MsnContact *contact, KMess::MsnMembership role ); // Merges AB deltas with the cached data void mergeABDeltas( const QDomElement &deltas ); void mergeMembershipDeltas( const QDomElement &deltas ); @@ -125,6 +129,8 @@ // Reads the cache for a given cache data object. lastChange is the path to the "lastChange" XML element // with the change timestamp. void readCache( ABCacheData &data, const QString &lastChangePath ); + // Internal: remove a contact from a list. + void removeContactFromList( const KMess::MsnContact *c, KMess::MsnMembership role ); // Retrieve the address book void retrieveAddressBook(); // Retrieve the membership lists Modified: trunk/kmess/lib/src/soap/bindings/abrequests.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.cpp 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/soap/bindings/abrequests.cpp 2010-05-23 02:45:17 UTC (rev 6017) @@ -79,6 +79,20 @@ } +/** + * Change the partner scenario for this request. + * Mostly useful for the Add/Delete contact from list + * actions which must operate either on the "ContactSave" + * scenario or the "BlockUnblock" scenario. + * + * @param partnerScenario The new partnerScenario to use. + */ +void ABRequest::setPartnerScenario( const QString &partnerScenario ) +{ + scenario_ = partnerScenario; +} + + /*********************************** START ABCONTACTADD ************************************/ Modified: trunk/kmess/lib/src/soap/bindings/abrequests.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.h 2010-05-20 11:33:02 UTC (rev 6016) +++ trunk/kmess/lib/src/soap/bindings/abrequests.h 2010-05-23 02:45:17 UTC (rev 6017) @@ -36,7 +36,8 @@ virtual ~ABRequest() {} SoapMessage *message( MessageData data = MessageData() ); - + void setPartnerScenario( const QString &partnerScenario ); + protected: virtual QString body() = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-20 11:33:11
|
Revision: 6016 http://kmess.svn.sourceforge.net/kmess/?rev=6016&view=rev Author: fontknocker Date: 2010-05-20 11:33:02 +0000 (Thu, 20 May 2010) Log Message: ----------- Add abresponse.cpp / abresponse.h which contain a couple of response binding classes. Convert a little more of the AB to the binding. Next challenge: properly support adding Yahoo! contacts. Modified Paths: -------------- trunk/kmess/lib/ChangeLog trunk/kmess/lib/src/CMakeLists.txt trunk/kmess/lib/src/soap/addressbookservice.cpp Added Paths: ----------- trunk/kmess/lib/src/soap/bindings/abresponse.cpp trunk/kmess/lib/src/soap/bindings/abresponse.h Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-18 14:45:45 UTC (rev 6015) +++ trunk/kmess/lib/ChangeLog 2010-05-20 11:33:02 UTC (rev 6016) @@ -1,3 +1,8 @@ +2010-05-20 Adam Goossens <ad...@km...> + + * Add the file abresponse.cpp/abresponse.h. These files have the bindings for a couple of AB response messages. + * AddressBookService: move a few more functions over to the binding. + 2010-05-16 Adam Goossens <ad...@km...> * Start adding a simple XML binding for the address book service. Will make it Modified: trunk/kmess/lib/src/CMakeLists.txt =================================================================== --- trunk/kmess/lib/src/CMakeLists.txt 2010-05-18 14:45:45 UTC (rev 6015) +++ trunk/kmess/lib/src/CMakeLists.txt 2010-05-20 11:33:02 UTC (rev 6016) @@ -42,6 +42,7 @@ soap/roamingservice.cpp soap/soapmessage.cpp soap/bindings/abrequests.cpp + soap/bindings/abresponse.cpp soap/bindings/abdatatypes.cpp soap/bindings/soaputils.cpp Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-18 14:45:45 UTC (rev 6015) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-20 11:33:02 UTC (rev 6016) @@ -134,30 +134,16 @@ void AddressBookService::addContactToGroup( const QString &contactId, const QString &groupId ) { - QString body( "<ABGroupContactAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <groupFilter>\n" - " <groupIds>\n" - " <guid>" + groupId + "</guid>\n" - " </groupIds>\n" - " </groupFilter>\n" - " <contacts>\n" - " <Contact>\n" - " <contactId>" + contactId + "</contactId>\n" - " </Contact>\n" - " </contacts>\n" - "</ABGroupContactAdd>" ); - + ABGroupContactAddRequest req; + + req.groupIds.append( groupId ); + req.contactId = contactId; + MessageData data; data.type = "ContactAddToGroup"; data.value = groupId; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABGroupContactAdd", - createCommonHeader( "GroupSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), "Contacts" ); } Added: trunk/kmess/lib/src/soap/bindings/abresponse.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abresponse.cpp (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abresponse.cpp 2010-05-20 11:33:02 UTC (rev 6016) @@ -0,0 +1,100 @@ +/*************************************************************************** + abresponse.cpp + ------------------- + begin : Sun 16 May 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <QString> + +#include "abbinding.h" +#include "soaputils.h" +#include "../../debug/libkmessdebug.h" + +using namespace KMessInternal::SoapUtils; +using namespace KMessInternal; + +/********************************************** +ABFindAllResponse +***********************************************/ +ABFindAllResponse::~ABFindAllResponse() +{ + qDeleteAll( groups ); + qDeleteAll( contacts ); +} + + +QString ABFindAllResponse::toString() const +{ + QString body; + body += arg<ABGroup*>( "groups", "Group", groups ); + body += arg<ABContact*>( "contacts", "Contact", contacts ); + + QString ab; + ab += arg( "abId", abId ); + ab += arg( "abInfo", abInfo ); + ab += arg( "lastChange", lastChange ); + ab += arg( "dynamicItemLastChanged", dynamicItemLastChanged ); + ab += arg( "createDate", createDate ); + ab += arg( "propertiesChanged", propertiesChanged ); + + body += arg( "ab", ab ); + return body; +} + +ABFindAllResponse::operator QString() const +{ + return toString(); +} + +void ABFindAllResponse::parse( const QDomNode &node ) +{ + parseSoapTypeList<ABGroup>( node, "groups", "Group", groups ); + parseSoapTypeList<ABContact>( node, "contacts", "Contact", contacts ); + + const QDomNode &ab = node.toElement().firstChildElement( "ab" ); + parseString( ab, "abId", abId ); + parseSoapType( ab, "abInfo", abInfo ); + parseString( ab, "lastChange", lastChange ); + parseString( ab, "dynamicItemLastChanged", dynamicItemLastChanged ); + parseString( ab, "createDate", createDate ); + parseString( ab, "propertiesChanged", propertiesChanged ); +} + + + +/********************************************** +ABFindMembershipResult +***********************************************/ +ABFindMembershipResult::~ABFindMembershipResult() +{ + qDeleteAll( services ); +} + + +QString ABFindMembershipResult::toString() const +{ + QString body; + body += arg<ServiceType*> ( "Services", "Service", services ); + return body; +} + +ABFindMembershipResult::operator QString() const +{ + return toString(); +} + +void ABFindMembershipResult::parse( const QDomNode &node ) +{ + parseSoapTypeList<ServiceType>( node, "Services", "Service", services ); +} Added: trunk/kmess/lib/src/soap/bindings/abresponse.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abresponse.h (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abresponse.h 2010-05-20 11:33:02 UTC (rev 6016) @@ -0,0 +1,67 @@ +/*************************************************************************** + abresponse.h + ------------------- + begin : Sun 16 May 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef ABSOAPRESPONSE_H +#define ABSOAPRESPONSE_H + +#include <QByteArray> +#include <QList> + +#include "abdatatypes.h" +#include "../soapmessage.h" + +namespace KMessInternal +{ + +/** + * Represents the result of an ABFindAll request. + */ +struct ABFindAllResponse : public SoapType +{ + QList<ABGroup*> groups; + QList<ABContact*> contacts; + QString abId; + ABInfo abInfo; + QString lastChange; + QString dynamicItemLastChanged; + QString createDate; + QString propertiesChanged; + + ~ABFindAllResponse(); + virtual QString toString() const; + virtual operator QString() const; + virtual void parse( const QDomNode &node ); +}; + + + +/** + * Represents the result of an ABFindAll request. + */ +struct ABFindMembershipResult : public SoapType +{ + QList<ServiceType*> services; + + ~ABFindMembershipResult(); + virtual QString toString() const; + virtual operator QString() const; + virtual void parse( const QDomNode &node ); +}; + +}; // namespace + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2010-05-18 14:45:51
|
Revision: 6015 http://kmess.svn.sourceforge.net/kmess/?rev=6015&view=rev Author: dazjorz Date: 2010-05-18 14:45:45 +0000 (Tue, 18 May 2010) Log Message: ----------- Spellfix Modified Paths: -------------- trunk/kmess/po/nl.po Modified: trunk/kmess/po/nl.po =================================================================== --- trunk/kmess/po/nl.po 2010-05-18 14:35:19 UTC (rev 6014) +++ trunk/kmess/po/nl.po 2010-05-18 14:45:45 UTC (rev 6015) @@ -5650,7 +5650,7 @@ #. i18n: ectx: property (text), widget (QCheckBox, showSecondsCheckbox_) #: rc.cpp:751 msgid "Show s&econds" -msgstr "S&conden weergeven" +msgstr "Se&conden weergeven" #. i18n: file: settings/chatstylepage.ui:362 #. i18n: ectx: attribute (title), widget (QWidget, tab) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2010-05-18 14:35:27
|
Revision: 6014 http://kmess.svn.sourceforge.net/kmess/?rev=6014&view=rev Author: dazjorz Date: 2010-05-18 14:35:19 +0000 (Tue, 18 May 2010) Log Message: ----------- Spellfix Modified Paths: -------------- branches/kmess/kmess-2.0.x/po/nl.po Modified: branches/kmess/kmess-2.0.x/po/nl.po =================================================================== --- branches/kmess/kmess-2.0.x/po/nl.po 2010-05-18 07:57:46 UTC (rev 6013) +++ branches/kmess/kmess-2.0.x/po/nl.po 2010-05-18 14:35:19 UTC (rev 6014) @@ -5947,7 +5947,7 @@ #. i18n: ectx: property (text), widget (QCheckBox, showSecondsCheckbox_) #: rc.cpp:685 msgid "Show s&econds" -msgstr "S&conden weergeven" +msgstr "Se&conden weergeven" #. i18n: file: settings/chatstylepage.ui:362 #. i18n: ectx: attribute (title), widget (QWidget, tab) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <it_...@us...> - 2010-05-18 07:57:55
|
Revision: 6013 http://kmess.svn.sourceforge.net/kmess/?rev=6013&view=rev Author: it_amroth Date: 2010-05-18 07:57:46 +0000 (Tue, 18 May 2010) Log Message: ----------- Removed a CMake listfile entry which didn't exist. Modified Paths: -------------- trunk/kmess/lib/src/CMakeLists.txt Modified: trunk/kmess/lib/src/CMakeLists.txt =================================================================== --- trunk/kmess/lib/src/CMakeLists.txt 2010-05-16 21:21:28 UTC (rev 6012) +++ trunk/kmess/lib/src/CMakeLists.txt 2010-05-18 07:57:46 UTC (rev 6013) @@ -44,7 +44,6 @@ soap/bindings/abrequests.cpp soap/bindings/abdatatypes.cpp soap/bindings/soaputils.cpp - soap/bindings/abresponse.cpp # utils/upnp/igdcontrolpoint.cpp # utils/upnp/layer3forwardingservice.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cod...@us...> - 2010-05-16 21:21:34
|
Revision: 6012 http://kmess.svn.sourceforge.net/kmess/?rev=6012&view=rev Author: codingdomain Date: 2010-05-16 21:21:28 +0000 (Sun, 16 May 2010) Log Message: ----------- svn-to-git: updated scripts to import up till r6011 Modified Paths: -------------- trunk/svn-to-git/authors.txt trunk/svn-to-git/svn-to-git.rules trunk/svn-to-git/svn-to-git.sh Modified: trunk/svn-to-git/authors.txt =================================================================== --- trunk/svn-to-git/authors.txt 2010-05-16 11:36:06 UTC (rev 6011) +++ trunk/svn-to-git/authors.txt 2010-05-16 21:21:28 UTC (rev 6012) @@ -1,6 +1,6 @@ mkb137 Mike K. Bennett <mi...@km...> pregopresto Jan Tönjes <ja...@km...> -vdboor Diederik van der Boor <vd...@km...> +codingdomain Diederik van der Boor <vd...@km...> it_amroth Valerio Pilo <va...@km...> sifcenter Antonio Nastasi <sif...@km...> fontknocker Adam Goossens <fon...@km...> @@ -10,5 +10,7 @@ pano9000 Panagiotis Papadopoulos <pa...@km...> mdcurtis Michael Curtis <mdc...@us...> mjarrett Michael Jarrett <msj...@en...> -seraph Richard Conway <ric...@us...> +richardconway Richard Conway <ric...@us...> drf_av Dario Freddi <dr...@kd...> +gigijoe Steve Chang <ste...@ya...> +madelman madelman <mad...@us...> Modified: trunk/svn-to-git/svn-to-git.rules =================================================================== --- trunk/svn-to-git/svn-to-git.rules 2010-05-16 11:36:06 UTC (rev 6011) +++ trunk/svn-to-git/svn-to-git.rules 2010-05-16 21:21:28 UTC (rev 6012) @@ -163,6 +163,12 @@ # ignore rest end match +match /branches/isf-qt-apichanges/ + # branch uses different path location + repository libisf + branch apichanges +end match + # All corrections made # Global branch regexp @@ -184,6 +190,6 @@ match /tags/([^/]+)/([^/]+)/ repository \1 branch \2 - #branch refs/tags/\2 + #annotated true end match Modified: trunk/svn-to-git/svn-to-git.sh =================================================================== --- trunk/svn-to-git/svn-to-git.sh 2010-05-16 11:36:06 UTC (rev 6011) +++ trunk/svn-to-git/svn-to-git.sh 2010-05-16 21:21:28 UTC (rev 6012) @@ -10,16 +10,20 @@ echo "syncing repository.." rsync -av "rsync://kmess.svn.sourceforge.net/svn/kmess/" $SVNREPOS -# Create dirs +# Remove old dirs dirs=`grep '^create repository' svn-to-git.rules | sed -e 's/create repository\s\+//'` for dir in $dirs do - if [ ! -e $dir ]; then - mkdir $dir - cd $dir - git init - cd .. + if [ -e $dir ]; then + echo "Clearing $dir" + rm -Rf $dir fi + + # create non-bare repository + mkdir $dir + cd $dir + git init + cd .. done # Running svn-all-fast-export. This tool can be compiled from: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-16 11:36:12
|
Revision: 6011 http://kmess.svn.sourceforge.net/kmess/?rev=6011&view=rev Author: fontknocker Date: 2010-05-16 11:36:06 +0000 (Sun, 16 May 2010) Log Message: ----------- Fix up a signal in ContactAddedUserDialog plus use the new MsnSession::setCacheDir method. Modified Paths: -------------- trunk/kmess/ChangeLog trunk/kmess/src/dialogs/contactaddeduserdialog.h trunk/kmess/src/mainwindow.cpp trunk/kmess/src/mainwindow.h Modified: trunk/kmess/ChangeLog =================================================================== --- trunk/kmess/ChangeLog 2010-05-16 11:35:09 UTC (rev 6010) +++ trunk/kmess/ChangeLog 2010-05-16 11:36:06 UTC (rev 6011) @@ -1,3 +1,6 @@ +2010-05-16 (Adam) + * Use the new setCacheDir method of MsnSession, plus fix up some signals in ContactAddedUserDialog. + 2010-05-15 (Pano) * Merged an updated Spanish translation by Mauricio Muñoz Lucero. Modified: trunk/kmess/src/dialogs/contactaddeduserdialog.h =================================================================== --- trunk/kmess/src/dialogs/contactaddeduserdialog.h 2010-05-16 11:35:09 UTC (rev 6010) +++ trunk/kmess/src/dialogs/contactaddeduserdialog.h 2010-05-16 11:36:06 UTC (rev 6011) @@ -64,7 +64,7 @@ signals: // Notify of the choice made by the user - void userChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> groups, const int code ); + void userChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> groups, int code ); }; Modified: trunk/kmess/src/mainwindow.cpp =================================================================== --- trunk/kmess/src/mainwindow.cpp 2010-05-16 11:35:09 UTC (rev 6010) +++ trunk/kmess/src/mainwindow.cpp 2010-05-16 11:36:06 UTC (rev 6011) @@ -1695,8 +1695,8 @@ // Show a dialog and let the user choose whether to add, allow, or block the contact. ContactAddedUserDialog *dialog = new ContactAddedUserDialog( contact ); - connect( dialog, SIGNAL( userChoice(contact,QList<KMess::MsnGroup*>,int) ), - this, SLOT ( slotContactAddedUserDialogChoice(contact,QList<KMess::MsnGroup*>,int) ) ); + connect( dialog, SIGNAL( userChoice( const KMess::MsnContact *,const QList<KMess::MsnGroup*>,int) ), + this, SLOT ( slotContactAddedUserDialogChoice(const KMess::MsnContact *,const QList<KMess::MsnGroup*>,int) ) ); dialog->show(); } @@ -1981,7 +1981,7 @@ // The user was presented the "contact added user" dialog and has made a choice -void MainWindow::slotContactAddedUserDialogChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> &groups, const int code ) +void MainWindow::slotContactAddedUserDialogChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> groups, int code ) { #ifdef KMESSDEBUG_MAINWINDOW kDebug() << "Contact" << contact << "added user, who has choosen option:" << code @@ -2072,8 +2072,8 @@ changedDisplayPicture(); // the cache file for contact list data - QString path = KMessConfig::instance()->getAccountDirectory( account->getHandle() ) + "/contactlist_cache"; - globalSession->setCacheFile( path ); + QString path = KMessConfig::instance()->getAccountDirectory( account->getHandle() ) + "/cache"; + globalSession->setCacheDir( path ); globalSession->logIn( account->getHandle(), passwordToUse, status ); } Modified: trunk/kmess/src/mainwindow.h =================================================================== --- trunk/kmess/src/mainwindow.h 2010-05-16 11:35:09 UTC (rev 6010) +++ trunk/kmess/src/mainwindow.h 2010-05-16 11:36:06 UTC (rev 6011) @@ -208,7 +208,7 @@ // Detect changes in the status of the internet connection void slotConnectionStatusChanged( Solid::Networking::Status newStatus ); // The user was presented the "contact added user" dialog and has made a choice - void slotContactAddedUserDialogChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> &groups, const int code ); + void slotContactAddedUserDialogChoice( const KMess::MsnContact *contact, const QList<KMess::MsnGroup*> groups, int code ); // Record the network library states void slotStatusEvent( KMess::StatusMessageType type, KMess::StatusMessage message, QVariant data ); // Change the status bar message. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-16 11:35:15
|
Revision: 6010 http://kmess.svn.sourceforge.net/kmess/?rev=6010&view=rev Author: fontknocker Date: 2010-05-16 11:35:09 +0000 (Sun, 16 May 2010) Log Message: ----------- Bug fix to last: use the right nodes and paths when fetching lastChange timestamps. Modified Paths: -------------- trunk/kmess/lib/src/soap/addressbookservice.cpp Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-16 11:26:38 UTC (rev 6009) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-16 11:35:09 UTC (rev 6010) @@ -391,7 +391,7 @@ } // get a timestamp out of it if possible. - QString cacheTS = XmlFunctions::getNodeValue( data.cacheDocument.documentElement(), lastChangePath ); + QString cacheTS = XmlFunctions::getNodeValue( data.cacheDocument, lastChangePath ); // QDateTime doesn't handle the "-8:00" that MS adds to the end of the ISODate. data.cacheTimestamp = QDateTime::fromString( cacheTS.left( cacheTS.lastIndexOf("-") ), Qt::ISODate ); @@ -595,7 +595,7 @@ void AddressBookService::retrieveAddressBook() { // step 1: load the cache data. - readCache( addressbookCache_, "/ABFindAllResponse/ABFindAllResult/ab/lastChange" ); + readCache( addressbookCache_, "/ABFindAllResult/ab/lastChange" ); ABFindAllRequest req; @@ -615,7 +615,7 @@ */ void AddressBookService::retrieveMembershipLists() { - readCache( membershipCache_, "/FindMembershipResponse/FindMembershipResult/OwnerNamespace/LastChange" ); + readCache( membershipCache_, "/FindMembershipResult/OwnerNamespace/LastChange" ); ABFindMembershipRequest req; req.serviceTypes.append( "Messenger" ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-05-16 11:26:45
|
Revision: 6009 http://kmess.svn.sourceforge.net/kmess/?rev=6009&view=rev Author: fontknocker Date: 2010-05-16 11:26:38 +0000 (Sun, 16 May 2010) Log Message: ----------- Lots of changes to the ABservice, mostly focused on cache logic and moving to the binding. Moved ListsManager update logic into ABService from NSConnection. Yahoo! contact support improved. ChangeLog has the other changes. Modified Paths: -------------- trunk/kmess/lib/ChangeLog trunk/kmess/lib/include/KMess/msncontact.h trunk/kmess/lib/include/KMess/msnsession.h trunk/kmess/lib/src/CMakeLists.txt trunk/kmess/lib/src/connections/msnnotificationconnection.cpp trunk/kmess/lib/src/connections/msnnotificationconnection.h trunk/kmess/lib/src/debug/debugger.cpp trunk/kmess/lib/src/listsmanager.cpp trunk/kmess/lib/src/listsmanager.h trunk/kmess/lib/src/msnsession.cpp trunk/kmess/lib/src/soap/addressbookservice.cpp trunk/kmess/lib/src/soap/addressbookservice.h trunk/kmess/lib/src/soap/bindings/abbinding.h trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp trunk/kmess/lib/src/soap/bindings/abdatatypes.h trunk/kmess/lib/src/soap/bindings/abrequests.cpp trunk/kmess/lib/src/soap/bindings/abrequests.h Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/ChangeLog 2010-05-16 11:26:38 UTC (rev 6009) @@ -3,6 +3,16 @@ * Start adding a simple XML binding for the address book service. Will make it easier to work with the service plus make it easier to put in Yahoo! and other network support. + * MsnNotificationConnection: moved the listsManager update logic to ABService since + that's probably where it belongs. Renamed createAddressBookService to addressBookService. + * ABService: implement the basics of Membership list caching as well. Now takes a cache directory + instead of cache file. Shifted a few methods over to using the AB binding. Added fetchAddressBook + method which handles the retrieval of membership and addressbook. Refactored the cache logic to reduce + duplication. + * ABService: add better Yahoo! contact support through supporting EmailMember as well as PassportMember. + * CMakeLists.txt: build and link the AB binding. + * Fix some doxygen warnings. + * abdatatypes.cpp: Fix a couple of bugs in the binding (element names). 2010-05-05 Sjors Gielen <sj...@km...> Modified: trunk/kmess/lib/include/KMess/msncontact.h =================================================================== --- trunk/kmess/lib/include/KMess/msncontact.h 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/include/KMess/msncontact.h 2010-05-16 11:26:38 UTC (rev 6009) @@ -29,6 +29,7 @@ { class ListsManager; class MsnNotificationConnection; + class AddressBookService; }; namespace KMess @@ -57,8 +58,8 @@ friend class KMessInternal::ListsManager; friend class KMessInternal::MsnNotificationConnection; friend class MsnSession; + friend class KMessInternal::AddressBookService; - public: // Public methods const ClientCapabilities capabilities() const; QHash<QUuid,MPOPEndpoint*> endpoints() const; Modified: trunk/kmess/lib/include/KMess/msnsession.h =================================================================== --- trunk/kmess/lib/include/KMess/msnsession.h 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/include/KMess/msnsession.h 2010-05-16 11:26:38 UTC (rev 6009) @@ -139,7 +139,7 @@ // Get the logon mode LogonMode logonMode() const; // Set the cache file for contact list data - void setCacheFile( const QString &file ); + void setCacheDir( const QString &path ); // Alter the quantity of unread email void setEmailCount( int change ); // Set the current personal message Modified: trunk/kmess/lib/src/CMakeLists.txt =================================================================== --- trunk/kmess/lib/src/CMakeLists.txt 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/CMakeLists.txt 2010-05-16 11:26:38 UTC (rev 6009) @@ -41,6 +41,10 @@ soap/passportloginservice.cpp soap/roamingservice.cpp soap/soapmessage.cpp + soap/bindings/abrequests.cpp + soap/bindings/abdatatypes.cpp + soap/bindings/soaputils.cpp + soap/bindings/abresponse.cpp # utils/upnp/igdcontrolpoint.cpp # utils/upnp/layer3forwardingservice.cpp Modified: trunk/kmess/lib/src/connections/msnnotificationconnection.cpp =================================================================== --- trunk/kmess/lib/src/connections/msnnotificationconnection.cpp 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/connections/msnnotificationconnection.cpp 2010-05-16 11:26:38 UTC (rev 6009) @@ -156,7 +156,7 @@ { debug() << "adding '" << handle << " to '" << groupId << "'."; - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); MsnContact *contact = listsManager_->contact( handle ); KMESS_NULL( contact ); @@ -183,7 +183,7 @@ debug() << "Re-adding contact " << handle; // Request the re-adding of contact to AB - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->addContact( handle, groups , true ); } @@ -202,7 +202,7 @@ debug() << "Adding contact " << handle; // Request the adding of contact to AB - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->addContact( handle, groups ); } @@ -236,7 +236,7 @@ putAdl( handle, MSN_LIST_ALLOWED ); - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->unblockContact( handle ); } @@ -251,7 +251,7 @@ */ void MsnNotificationConnection::groupAdd( const QString& name ) { - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->addGroup( name ); } @@ -282,7 +282,7 @@ putRml( handle, MSN_LIST_ALLOWED ); putAdl( handle, MSN_LIST_BLOCKED ); - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->blockContact( handle ); } @@ -334,7 +334,7 @@ changeProperty( "MFN", newName ); - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->contactUpdate( AddressBookService::PROPERTY_FRIENDLYNAME, newName ); } @@ -544,11 +544,11 @@ * @brief Create and return one pointer to address book service. * */ -AddressBookService* MsnNotificationConnection::createAddressBookService() +AddressBookService* MsnNotificationConnection::addressBookService() { if( addressBookService_ == 0 ) { - addressBookService_ = new AddressBookService( session_, this ); + addressBookService_ = new AddressBookService( session_, listsManager_, this ); addSoapClient( addressBookService_ ); // Contact actions signals/slots @@ -578,11 +578,13 @@ this, SLOT ( slotGroupRenamed(QString,QString) ) ); // Membership and AddressBook signals/slots - connect( addressBookService_, SIGNAL( gotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ), - this, SLOT ( slotGotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ) ); - connect( addressBookService_, SIGNAL( gotAddressBookList(QList<ABContactInfo>) ), - this, SLOT ( slotGotAddressBookList(QList<ABContactInfo>) ) ); - +// connect( addressBookService_, SIGNAL( gotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ), +// this, SLOT ( slotGotMembershipLists(QString,QHash<QString,KMess::MsnMemberships>) ) ); +// connect( addressBookService_, SIGNAL( gotAddressBookList(QList<ABContactInfo>) ), +// this, SLOT ( slotGotAddressBookList(QList<ABContactInfo>) ) ); + connect( addressBookService_, SIGNAL( addressBookParsed() ), + this, SLOT ( slotAddressBookParsed() ) ); + connect( addressBookService_, SIGNAL( gotGroup(QString,QString) ), this, SLOT ( slotGotGroup(QString,QString) ) ); @@ -1158,7 +1160,10 @@ } // Update contact status. - MsnContact *contact = session_->getContact( idString ); + MsnContact *contact = listsManager_->contact( idString ); + + KMESS_ASSERT( contact ); + MsnStatus lastStatus = contact->status(); contact->setStatus( status ); @@ -1483,12 +1488,10 @@ warning() << "Passport account of the user is not verified yet."; } - emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_GETTING_MEMBERSHIPS ); - - // Retrieve from with one SOAP request the membership list ( where there are the lists for - // FL AL BL contacts ) - AddressBookService *addressBook = createAddressBookService(); - addressBook->retrieveMembershipLists(); + emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_GETTING_CONTACT_LIST ); + + // download the address book and memberships. + addressBookService()->fetchAddressBook( cacheDir_ ); } else { @@ -1803,7 +1806,7 @@ { debug() << "Moving '" << handle << "' from '" << fromGroupId << "' to '" << toGroupId << "'."; - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); MsnContact *contact = listsManager_->contact( handle ); KMESS_NULL( contact ); @@ -2329,7 +2332,7 @@ } // Remove the contact from AB - AddressBookService *addressBook = createAddressBookService();; + AddressBookService *addressBook = addressBookService();; addressBook->deleteContact( contactId ); // if we're not blocking, make sure we force an add to the allow @@ -2345,7 +2348,7 @@ //remove a contact from a single group void MsnNotificationConnection::contactRemoveFromGroup( const QString &handle, const QString &groupId ) { - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); MsnContact *contact = listsManager_->contact( handle ); KMESS_NULL( contact ); @@ -2357,7 +2360,7 @@ // Remove a group void MsnNotificationConnection::groupRemove( const QString &id ) { - AddressBookService *addressBook = createAddressBookService();; + AddressBookService *addressBook = addressBookService();; addressBook->deleteGroup( id ); } @@ -2366,7 +2369,7 @@ // Rename a group void MsnNotificationConnection::groupRename( const QString& id, const QString& newName ) { - AddressBookService *addressBook = createAddressBookService();; + AddressBookService *addressBook = addressBookService();; addressBook->renameGroup( id, newName ); } @@ -2457,12 +2460,12 @@ /** - * Set the path to the cache file. - * @param file The path to the cache file. + * Set the path to the cache directory. + * @param path The path to the cache directory. */ -void MsnNotificationConnection::setCacheFile( const QString &file ) +void MsnNotificationConnection::setCacheDir( const QString &path ) { - cacheFile_ = file; + cacheDir_ = path; } @@ -2514,7 +2517,8 @@ // The contact is added to the reverse list: when the user adds a contact who has added the user, // the user must appear to be present in the contact's list (this avoids seeing the newly added // contact as not having the user in his/her list). - listsManager_->contactAdd( handle, handle, lists | MSN_LIST_REVERSE, QStringList(), contactId ); + #warning TODO: NetworkYahoo. + listsManager_->contactAdd( handle, handle, lists | MSN_LIST_REVERSE, QStringList(), contactId, KMess::NetworkMsn ); contact = listsManager_->contact( handle ); } @@ -2598,52 +2602,13 @@ -void MsnNotificationConnection::slotGotAddressBookList( const QList<ABContactInfo> &contacts ) -{ - debug() << "Parsing address book..."; +/* +Called when the AB service informs us it's completed retrieval and parsing of the address book. - // Stop the login timer to allow parsing the address book. - loginTimer_.stop(); - - QListIterator<ABContactInfo> contact( contacts ); - KMess::MsnMemberships lists; - - // Cycle for each contact - while( contact.hasNext() ) - { - // Grep the main informations - ABContactInfo contactInfo( contact.next() ); - - // If we have the contact in the AB then it is our friend. - lists = contactsRole_.take( contactInfo.handle ) | MSN_LIST_FRIEND; - - // add to contact list model - listsManager_->contactAdd( contactInfo.handle, contactInfo.friendlyName, lists, contactInfo.groupList, contactInfo.contactId ); - - MsnContact *contact = listsManager_->contact( contactInfo.handle ); - KMESS_NULL( contact ); - } - - // If there are contacts not present in AB, but present in Membership List - // add them to contactlist - if( contactsRole_.count() > 0 ) - { - QHashIterator< QString, KMess::MsnMemberships > i( contactsRole_ ); - while( i.hasNext() ) - { - i.next(); - const QString& handle( i.key() ); - lists = i.value(); - listsManager_->contactAdd( handle, handle, lists, QStringList(), QString() ); - } - } - - // Allow some time until the next message is received - if( loginTimer_.isActive() ) - { - loginTimer_.start(); - } - +Here we sent the initial ADL. +*/ +void MsnNotificationConnection::slotAddressBookParsed() +{ emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_UPDATING_SERVER ); putAdl(); @@ -2657,30 +2622,30 @@ * In this list there are informations about FL, AL, BL lists. * */ -void MsnNotificationConnection::slotGotMembershipLists( const QString &serviceType, const QHash<QString,KMess::MsnMemberships> &contactsRole ) -{ - if( serviceType != "Messenger" ) - { - warning() << "Unable to parse membership list:" << serviceType; - return; - } +// void MsnNotificationConnection::slotGotMembershipLists() +// { +// if( serviceType != "Messenger" ) +// { +// warning() << "Unable to parse membership list:" << serviceType; +// return; +// } +// +// contactsRole_ = contactsRole; +// +// emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_GETTING_CONTACT_LIST ); +// +// // Allow some time until the next message is received +// if( loginTimer_.isActive() ) +// { +// loginTimer_.start(); +// } +// +// AddressBookService *addressBook = addressBookService();; +// addressBook->retrieveAddressBook( cacheFile_ ); +// } - contactsRole_ = contactsRole; - emit statusEvent( KMess::TYPE_PROGRESS, KMess::MESSAGE_PROGRESS_GETTING_CONTACT_LIST ); - // Allow some time until the next message is received - if( loginTimer_.isActive() ) - { - loginTimer_.start(); - } - - AddressBookService *addressBook = createAddressBookService();; - addressBook->retrieveAddressBook( cacheFile_ ); -} - - - /** * @brief Called when address book services parsed a group. * @@ -2754,7 +2719,7 @@ putRml( handle, MSN_LIST_BLOCKED ); putAdl( handle, MSN_LIST_ALLOWED ); - AddressBookService *addressBook = createAddressBookService(); + AddressBookService *addressBook = addressBookService(); addressBook->unblockContact( handle ); } Modified: trunk/kmess/lib/src/connections/msnnotificationconnection.h =================================================================== --- trunk/kmess/lib/src/connections/msnnotificationconnection.h 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/connections/msnnotificationconnection.h 2010-05-16 11:26:38 UTC (rev 6009) @@ -127,6 +127,8 @@ MsnNotificationConnection( KMess::MsnSession* session, ListsManager* listsManager ); // The destructor ~MsnNotificationConnection(); + // Create and return one pointer to address book service + AddressBookService *addressBookService(); // Close the connection with the server void closeConnection(); // Open a connection to the server @@ -172,7 +174,7 @@ // send a UUN command void sendUUN( const QString &handle, int type, const QString &body ); // Set the cache file - void setCacheFile( const QString &file ); + void setCacheDir( const QString &path ); public slots: // Change the personal message of the user. @@ -189,8 +191,6 @@ private: // Private methods - // Create and return one pointer to address book service - AddressBookService *createAddressBookService(); // Create the Offline-IM service OfflineImService *createOfflineImService(); // Create the passport login handler @@ -275,9 +275,7 @@ // Contact removed from group void slotContactDeletedFromGroup( const QString &contactId, const QString &groupId ); // Called when address book services retrieved address book list - void slotGotAddressBookList( const QList<ABContactInfo> &contacts ); - // Called when address book services retrieved membership lists - void slotGotMembershipLists( const QString &serviceType, const QHash<QString,KMess::MsnMemberships> &contactsRole ); + void slotAddressBookParsed(); // Called when address book services parsed a group void slotGotGroup( const QString &id, const QString &name ); // Called when a group is added @@ -310,7 +308,7 @@ // The address book service AddressBookService *addressBookService_; // The cache file path - QString cacheFile_; + QString cacheDir_; // The list of contact roles QHash<QString,KMess::MsnMemberships> contactsRole_; // Whether or not the connection has just been established Modified: trunk/kmess/lib/src/debug/debugger.cpp =================================================================== --- trunk/kmess/lib/src/debug/debugger.cpp 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/debug/debugger.cpp 2010-05-16 11:26:38 UTC (rev 6009) @@ -374,7 +374,7 @@ // If the SOAP service we want to (ab)use is not started, start it if( ! service ) { - service = session_->msnNotificationConnection_->createAddressBookService(); + service = session_->msnNotificationConnection_->addressBookService(); } // It will be deleted when the SOAP class is done Modified: trunk/kmess/lib/src/listsmanager.cpp =================================================================== --- trunk/kmess/lib/src/listsmanager.cpp 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/listsmanager.cpp 2010-05-16 11:26:38 UTC (rev 6009) @@ -69,7 +69,7 @@ * tells us that the new contact is now in our list. */ void ListsManager::contactAdd( const QString &handle, const QString &friendlyName, int lists, - QStringList groupIds, const QString &guid ) + QStringList groupIds, const QString &guid, KMess::NetworkType network ) { KMESS_ASSERT( ! handle.isEmpty() ); @@ -80,43 +80,41 @@ return; } - MsnContact *contact; + MsnContact *contact = 0; - // is this contact an "unknown" contact that the user had added? - if ( unknownContacts_.contains( handle ) ) + if ( handle == session_->getHandle() ) { - contact = unknownContacts_.take( handle ); - - contact->setGroupIds( groupIds ); - contact->setMemberships( (MsnMemberships)lists ); - contact->setFriendlyName( friendlyName ); - contact->setGuid( guid ); - - // it's now a known contact since we set non-zero memberships. - } - else if ( handle == session_->getHandle() ) - { // it's ourselves. self_->setMemberships( (MsnMemberships)lists ); self_->setFriendlyName( friendlyName ); self_->setGroupIds( groupIds ); self_->setGuid( guid ); + self_->setNetwork( KMess::NetworkMsn ); // always, duh. contact = self_; + + model_->contactAdd( contact ); + return; } - else + + if ( unknownContacts_.contains( handle ) ) { + contact = unknownContacts_.take( handle ); + } + else + { // Create the new contact contact = new MsnContact( handle, friendlyName, lists, groupIds, guid ); } - // don't add self_ into the contacts_ hash. manage it separately so - // we can keep track of it properly. add it into the model though. - if ( contact != self_ ) - { - contacts_.insert( handle, contact ); + contact->setGroupIds( groupIds ); + contact->setMemberships( (MsnMemberships)lists ); + contact->setFriendlyName( friendlyName ); + contact->setGuid( guid ); + contact->setNetwork( network ); + + contacts_.insert( handle, contact ); - debug() << "Adding to list contact" << handle << "within groups" << groupIds; - } + debug() << "Adding to list contact" << handle << "within groups" << groupIds; // Also add it to the model model_->contactAdd( contact ); Modified: trunk/kmess/lib/src/listsmanager.h =================================================================== --- trunk/kmess/lib/src/listsmanager.h 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/listsmanager.h 2010-05-16 11:26:38 UTC (rev 6009) @@ -62,7 +62,7 @@ public slots: void contactAdd( const QString& handle, const QString& friendlyName, - int lists, QStringList groupIds, const QString& guid ); + int lists, QStringList groupIds, const QString& guid, KMess::NetworkType network ); void contactReadded( const QString &handle ); void contactAddToGroup( const QString& handle, const QString& groupId ); void contactRemoveFromGroup( const QString& handle, const QString& groupId ); Modified: trunk/kmess/lib/src/msnsession.cpp =================================================================== --- trunk/kmess/lib/src/msnsession.cpp 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/msnsession.cpp 2010-05-16 11:26:38 UTC (rev 6009) @@ -347,18 +347,19 @@ /** - * Set the full path to the file that will be used to read/write address book - * cache information. + * Set the full path to the directory that will store address book cache information. * * It is a very good idea to use this feature since it will result in quicker sign in times. * This is because libkmess-msn does not have to read the entire contact list from the server each time, rather, * it only requests the most recent changes. * - * @param file The full path to the caching file. + * If the cache directory does not exist, it will be created. + * + * @param path The full path to the caching directory. */ -void MsnSession::setCacheFile( const QString &file ) +void MsnSession::setCacheDir( const QString &path ) { - msnNotificationConnection_->setCacheFile( file ); + msnNotificationConnection_->setCacheDir( path ); } Modified: trunk/kmess/lib/src/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-16 04:27:59 UTC (rev 6008) +++ trunk/kmess/lib/src/soap/addressbookservice.cpp 2010-05-16 11:26:38 UTC (rev 6009) @@ -17,6 +17,7 @@ #include "debug/libkmessdebug.h" #include "addressbookservice.h" +#include "../listsmanager.h" #include <KMess/MsnSession> #include <KMess/NetworkGlobals> @@ -28,6 +29,7 @@ #include <QDomNode> #include <QFile> #include <QTextCodec> +#include <QDir> #include "../utils/xmlfunctions.h" #include "soapmessage.h" @@ -52,13 +54,15 @@ #define SERVICE_URL_ADDRESSBOOK_SHARING "https://omega.contacts.msn.com/abservice/SharingService.asmx" +#define CONTACTS_API "Contacts" /** * @brief The constructor */ -AddressBookService::AddressBookService( KMess::MsnSession *session, QObject *parent ) +AddressBookService::AddressBookService( KMess::MsnSession *session, ListsManager *listsManager, QObject *parent ) : PassportLoginService( session, parent ) { + listsManager_ = listsManager; } @@ -160,36 +164,15 @@ void AddressBookService::addGroup( const QString &name ) { - QString body( "<ABGroupAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <groupAddOptions>\n" - " <fRenameOnMsgrConflict>false</fRenameOnMsgrConflict>\n" - " </groupAddOptions>\n" - " <groupInfo>\n" - " <GroupInfo>\n" - " <name>" + KMess::Utils::htmlEscape( name ) + "</name>\n" - " <groupType>C8529CE2-6EAD-434d-881F-341E17DB3FF8</groupType>\n" - " <fMessenger>false</fMessenger>\n" - " <annotations>\n" - " <Annotation>\n" - " <Name>MSN.IM.Display</Name>\n" - " <Value>1</Value>\n" - " </Annotation>\n" - " </annotations>\n" - " </GroupInfo>\n" - " </groupInfo>\n" - "</ABGroupAdd>" ); - + ABGroupAddRequest req; + req.groupInfo.name = KMess::Utils::htmlEscape( name ); + req.groupInfo.annotations.append( new ABAnnotation( "MSN.IM.Display", "1" ) ); + MessageData data; data.type = "GroupAdd"; data.value = name; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABGroupAdd", - createCommonHeader( "GroupSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } @@ -218,20 +201,10 @@ */ void AddressBookService::createAddressBook() { - QString body( "<ABAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abInfo>\n" - " <name/>\n" - " <ownerPuid>0</ownerPuid>\n" - " <ownerEmail>" + session_->getSessionSettingString( "AccountHandle" ) + "</ownerEmail>\n" - " <fDefault>true</fDefault>\n" - " </abInfo>\n" - "</ABAdd>" ); - - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABAdd", - createCommonHeader(), - body ), - "Contacts" ); + ABAddRequest req; + req.abInfo.ownerEmail = session_->getSessionSettingString( "AccountHandle" ); + + sendSecureRequest( req.message(), CONTACTS_API ); } @@ -271,129 +244,174 @@ QString propertyString; QString propertiesChanged; + ABContactUpdateRequest req; + + ABContact *c = new ABContact(); + c->contactInfo.contactType = "Me"; + switch( property ) { case PROPERTY_FRIENDLYNAME: - propertyString = " <displayName>" + KMess::Utils::htmlEscape( newValue ) + "</displayName>\n"; - propertiesChanged = "DisplayName"; + c->contactInfo.displayName = KMess::Utils::htmlEscape( newValue ); + c->propertiesChanged = "DisplayName"; break; case PROPERTY_PRIVACY: - propertyString = ( " <annotations>\n" - " <Annotation>\n" - " <Name>MSN.IM.BLP</Name>\n" - " <Value>" + newValue + "</Value>\n" - " </Annotation>\n" - " </annotations>\n"); - propertiesChanged = "Annotation"; + c->contactInfo.annotations.append( new ABAnnotation( "MSN.IM.BLP", newValue ) ); + c->propertiesChanged = "Annotation"; break; default: return; } - QString body( "<ABContactUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <contacts>\n" - " <Contact xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <contactInfo>\n" - " <contactType>Me</contactType>\n" - + propertyString + - " </contactInfo>\n" - " <propertiesChanged>" + propertiesChanged + "</propertiesChanged>\n" - " </Contact>\n" - " </contacts>\n" - "</ABContactUpdate>" ); - - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABContactUpdate", - createCommonHeader( "Timer" ), - body ), - "Contacts" ); + req.contacts.append( c ); + + sendSecureRequest( req.message(), CONTACTS_API ); } void AddressBookService::deleteContact( const QString &contactId ) { - QString body( "<ABContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <contacts>\n" - " <Contact>\n" - " <contactId>" + contactId + "</contactId>\n" - " </Contact>\n" - " </contacts>\n" - "</ABContactDelete>" ); - + ABContactDeleteRequest req; + ABContact *c = new ABContact(); + c->contactId = contactId; + + req.contacts.append( c ); + MessageData data; data.type = "ContactDelete"; data.value = contactId; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABContactDelete", - createCommonHeader( "Timer" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } void AddressBookService::deleteContactFromGroup( const QString &contactId, const QString &groupId ) { - QString body( "<ABGroupContactDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <groupFilter>\n" - " <groupIds>\n" - " <guid>" + groupId + "</guid>\n" - " </groupIds>\n" - " </groupFilter>\n" - " <contacts>\n" - " <Contact>\n" - " <contactId>" + contactId + "</contactId>\n" - " </Contact>\n" - " </contacts>\n" - "</ABGroupContactDelete>" ); - + ABGroupContactDeleteRequest req; + req.groupIds.append( groupId ); + + ABContact *c = new ABContact(); + c->contactId = contactId; + req.contacts.append( c ); + MessageData data; data.type = "ContactDeleteFromGroup"; data.value = QStringList() << contactId << groupId; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABGroupContactDelete", - createCommonHeader( "GroupSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } void AddressBookService::deleteGroup( const QString &groupId ) { - QString body( "<ABGroupDelete xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <groupFilter>\n" - " <groupIds>\n" - " <guid>" + groupId + "</guid>\n" - " </groupIds>\n" - " </groupFilter>\n" - "</ABGroupDelete>" ); - + ABGroupDeleteRequest req; + + req.groupIds.append( groupId ); + MessageData data; data.type = "GroupDelete"; data.value = groupId; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABGroupDelete", - createCommonHeader( "GroupSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } +/** + * Retrieves the address book and memberships from the server and caches them + * in the given cachedir. + * + * @param cacheDir Directory for membership/address book cache data. + */ +void AddressBookService::fetchAddressBook( const QString &cacheDir ) +{ + // ensure the cache is usable. + QDir dir( cacheDir ); + + if ( ! dir.exists() ) + { + QDir temp( dir ); + temp.cdUp(); // up to the parent... + temp.mkpath( dir.dirName() ); // create the cache folder. + } + + if ( ! cacheDir.isEmpty() && dir.exists() ) + { + membershipCache_.cacheFile = cacheDir + "/membership_cache"; + addressbookCache_.cacheFile = cacheDir + "/addressbook_cache"; + } + else + { + warning() << "Cache dir" << cacheDir << "does not exist or is unreadable. Caching will not be used."; + membershipCache_.cacheFile = addressbookCache_.cacheFile = QString(); + } + + // once we get the membership lists and parse them + // parseMembershipLists() will call retrieveAdddressBook(). + retrieveMembershipLists(); +} + + + +/** + * Reads the address book cache file and loads it into addressBookCache_.cacheDocument. + */ +void AddressBookService::readCache( ABCacheData &data, const QString &lastChangePath ) +{ + if ( data.cacheFile.isEmpty() ) + { + return; + } + + QFile fCache( data.cacheFile ); + + if ( ! fCache.open( QIODevice::ReadOnly ) ) + { + return; + } + + // cache is open. read. + if ( ! data.cacheDocument.setContent( &fCache ) ) + { + warning() << "Cache file" << data.cacheFile << "could not be parsed."; + return; + } + + debug() << "Cache file" << data.cacheFile << "opened and parsed OK."; + + if ( data.cacheDocument.isNull() ) + { + // cache is either empty or invalid. + return; + } + + // get a timestamp out of it if possible. + QString cacheTS = XmlFunctions::getNodeValue( data.cacheDocument.documentElement(), lastChangePath ); + + // QDateTime doesn't handle the "-8:00" that MS adds to the end of the ISODate. + data.cacheTimestamp = QDateTime::fromString( cacheTS.left( cacheTS.lastIndexOf("-") ), Qt::ISODate ); + data.cacheTimezone = cacheTS.mid( cacheTS.lastIndexOf("-") ); +} + + + +void AddressBookService::mergeMembershipDeltas( const QDomElement &deltas ) +{ + QDomDocument &cache = membershipCache_.cacheDocument; + + if ( cache.documentElement().isNull() ) + { + cache.appendChild( cache.createProcessingInstruction( "xml", "version='1.0' encoding='utf-8'" ) ); + cache.appendChild( deltas ); + return; + } +} + /* This method merges the cached contact list data with the deltas retrieved from the SOAP server. @@ -404,19 +422,21 @@ As a last step, we simply copy the <ab> node from the server SOAP and replace our local one. That updates our cache timestamp for us. */ -void AddressBookService::mergeCacheDeltas( const QDomElement &deltas ) +void AddressBookService::mergeABDeltas( const QDomElement &deltas ) { + QDomDocument &cache = addressbookCache_.cacheDocument; + // ok, here we go. first step: create the root elements if need be. - if ( cacheDoc_.documentElement().isNull() ) + if ( cache.documentElement().isNull() ) { // the cache is invalid. which should mean that the deltas are in fact the entire contact list. // so let's do this: - cacheDoc_.appendChild( cacheDoc_.createProcessingInstruction( "xml", "version='1.0' encoding='utf-8'" ) ); - cacheDoc_.appendChild( deltas ); + cache.appendChild( cache.createProcessingInstruction( "xml", "version='1.0' encoding='utf-8'" ) ); + cache.appendChild( deltas ); return; // done. } - QDomElement cacheRoot = cacheDoc_.documentElement().firstChild().firstChild().toElement(); // ABFindResponse + QDomElement cacheRoot = cache.documentElement().toElement(); // ABFindAllResult QDomNode cacheContactRoot = cacheRoot.namedItem( "contacts" ); QDomNode cacheGroupRoot = cacheRoot.namedItem( "groups" ); @@ -539,71 +559,22 @@ -// read the cache file from disk and store the result. -void AddressBookService::readCache( const QString &cacheFile ) -{ - if ( cacheFile.isEmpty() ) - { - return; - } - - cacheFile_ = cacheFile; - - QFile fCache( cacheFile ); - - if ( ! fCache.open( QIODevice::ReadOnly ) ) - { - return; - } - - // cache is open. read. - if ( ! cacheDoc_.setContent( &fCache ) ) - { - warning() << "Cache file data could not be parsed; address book caching will not be used."; - return; - } - - debug() << "Cache file" << cacheFile << "opened and parsed OK."; - - // get a timestamp out of it if possible. - QString cacheTS = XmlFunctions::getNodeValue( cacheDoc_.documentElement(), "/ABFindAllResponse/ABFindAllResult/ab/lastChange" ); - - // QDateTime doesn't handle the "-8:00" that MS adds to the end of the ISODate. - cacheTimestamp_ = QDateTime::fromString( cacheTS.left( cacheTS.lastIndexOf("-") ), Qt::ISODate ); - cacheTimezone_ = cacheTS.mid( cacheTS.lastIndexOf("-") ); - - // now we're done. - // retrieveAddressBook() will use the cacheTimestamp_ to request deltas from the server (if the timestamp is valid). - // parseAddressBook() will use the deltas to adjust the cached data before informing the NS connection. -} - - - void AddressBookService::renameGroup( const QString &groupId, const QString &name ) { - QString body( "<ABGroupUpdate xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <groups>\n" - " <Group>\n" - " <groupId>" + groupId + "</groupId>\n" - " <groupInfo>\n" - " <name>" + KMess::Utils::htmlEscape( name ) + "</name>\n" - " </groupInfo>\n" - " <propertiesChanged>GroupName</propertiesChanged>\n" - " </Group>\n" - " </groups>\n" - "</ABGroupUpdate>" ); - + ABGroupUpdateRequest req; + + ABGroup *g = new ABGroup(); + g->groupId = groupId; + g->groupInfo.name = KMess::Utils::htmlEscape( name ); + g->propertiesChanged = "GroupName"; + + req.groups.append( g ); + MessageData data; data.type = "GroupRename"; data.value = QStringList() << groupId << name; - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABGroupUpdate", - createCommonHeader( "GroupSave" ), - body, - data ), - "Contacts" ); + sendSecureRequest( req.message( data ), CONTACTS_API ); } @@ -620,43 +591,21 @@ </code> * It goes on with the headers as usual. Must be tested, I don't know if it works, or * if the response is identical to that of the current AbFindAll. - * - * - * If the cacheFile parameter is non-null, the method first retrieves cached AB data from the - * file and stores it. When the reply is received from the server the deltas are merged into the - * cached data, producing the "new" contact list. This file is then re-cached in the cacheFile. - * - * @param cacheFile The path to a cache file for contact list SOAP data. */ -void AddressBookService::retrieveAddressBook( const QString &cacheFile ) +void AddressBookService::retrieveAddressBook() { // step 1: load the cache data. - readCache( cacheFile ); + readCache( addressbookCache_, "/ABFindAllResponse/ABFindAllResult/ab/lastChange" ); - // now with the cache data, check the cacheTimestamp... + ABFindAllRequest req; - QString body( "<ABFindAll xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <abView>Full</abView>\n" ); - - if( ! cacheTimestamp_.isValid() ) + if ( addressbookCache_.cacheTimestamp.isValid() ) { - body += " <deltasOnly>false</deltasOnly>\n" - " <lastChange>0001-01-01T00:00:00.0000000-08:00</lastChange>\n"; + req.deltasOnly = true; + req.lastChange = addressbookCache_.cacheTimestamp.toString( Qt::ISODate ) + addressbookCache_.cacheTimezone; } - else - { - body += " <deltasOnly>true</deltasOnly>\n" - " <lastChange>" + cacheTimestamp_.toString( Qt::ISODate ) + cacheTimezone_ + "</lastChange>\n"; - } - - body += "</ABFindAll>"; - - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABFindAll", - createCommonHeader(), - body ), - "Contacts" ); + + sendSecureRequest( req.message(), CONTACTS_API ); } @@ -666,26 +615,16 @@ */ void AddressBookService::retrieveMembershipLists() { - QString body( "<FindMembership xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <serviceFilter xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <Types xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Messenger</ServiceType>\n" -// TODO: Adding more WLM features may require retrieval of the membership lists for these services -/* - " <ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Invitation</ServiceType>\n" - " <ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">SocialNetwork</ServiceType>\n" - " <ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Space</ServiceType>\n" - " <ServiceType xmlns=\"http://www.msn.com/webservices/AddressBook\">Profile</ServiceType>\n" -*/ - " </Types>\n" - " </serviceFilter>\n" - "</FindMembership>" ); + readCache( membershipCache_, "/FindMembershipResponse/FindMembershipResult/OwnerNamespace/LastChange" ); - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK_SHARING, - "http://www.msn.com/webservices/AddressBook/FindMembership", - createCommonHeader(), - body ), - "Contacts" ); + ABFindMembershipRequest req; + req.serviceTypes.append( "Messenger" ); +// req.serviceTypes.append( "Invitation" ); +// req.serviceTypes.append( "SocialNetwork" ); +// req.serviceTypes.append( "Space" ); +// req.serviceTypes.append( "Profile" ); + + sendSecureRequest( req.message(), CONTACTS_API ); } @@ -695,20 +634,12 @@ */ void AddressBookService::retrieveGleams() { - QString body( "<ABFindAll xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" - " <abId>00000000-0000-0000-0000-000000000000</abId>\n" - " <abView>Full</abView>\n" - " <deltasOnly>false</deltasOnly>\n" - " <lastChange>0001-01-01T00:00:00.0000000-08:00</lastChange>\n" - " <dynamicItemView>Gleam</dynamicItemView>\n" - " <dynamicItemLastChange>0001-01-01T00:00:00.0000000-08:00</dynamicItemLastChange>\n" - "</ABFindAll>" ); - - sendSecureRequest( new SoapMessage( SERVICE_URL_ADDRESSBOOK, - "http://www.msn.com/webservices/AddressBook/ABFindAll", - createCommonHeader(), - body ), - "Contacts" ); + + ABFindAllRequest req; + req.dynamicItemView = "Gleam"; + req.dynamicItemLastChange = "0001-01-01T00:00:00.0000000-08:00"; + + sendSecureRequest( req.message(), CONTACTS_API ); } @@ -721,230 +652,184 @@ int debugGroupCount = 0; // first thing we have to do is merge the cached data with the deltas. - mergeCacheDeltas( deltaBody ); + mergeABDeltas( deltaBody ); // now we operate on the modified cache data. - QDomElement body = cacheDoc_.documentElement(); + ABFindAllResponse response; + response.parse( addressbookCache_.cacheDocument.documentElement() ); - // Parse the adress book lists - // First parse the one containing the groups - const QDomNodeList& groups( body.elementsByTagName( "Group" ) ); - - for( int index = 0; index < groups.count(); index++ ) + foreach( ABGroup *g, response.groups ) { - const QDomNode& group( groups.item( index ) ); - - const QString& groupId( XmlFunctions::getNodeValue( group, "groupId" ) ); - const QString& name( textNodeDecode( XmlFunctions::getNodeValue( group, "groupInfo/name" ) ) ); - - if( groupId.isEmpty() || name.isEmpty() ) + if ( g->groupId.isEmpty() || g->groupInfo.name.isEmpty() ) { continue; } - - ++debugGroupCount; - emit gotGroup( groupId, name ); + + listsManager_->groupAdd( g->groupId, g->groupInfo.name ); + + debugGroupCount++; } - - // Then parse the list which contains the contacts - const QDomNodeList& contactsNode( body.elementsByTagName( "Contact" ) ); - QList<ABContactInfo> contacts; - QString handle; - QString information; - QStringList guidList; - - for( int index = 0; index < contactsNode.count(); index++ ) + + foreach( ABContact *c, response.contacts ) { - const QDomNode& contact( contactsNode.item( index ) ); - const QDomNode& contactInfo( XmlFunctions::getNode( contact, "contactInfo" ) ); - - // Get some user information - const QString& contactType( XmlFunctions::getNodeValue( contactInfo, "contactType" ) ); - const QString& friendlyName( textNodeDecode( XmlFunctions::getNodeValue( contactInfo, "displayName" ) )); - - // Check if the contact type is Me: it has the information about personal profile - if( contactType == "Me" ) + if ( c->contactInfo.contactType == "Me" ) { - const QString& cid( XmlFunctions::getNodeValue( contactInfo, "CID" ) ); - - // Search for "<annotations>...<Annotation><name>MSN.IM.BLP<name><value>VALUE<value><Annotation>.." - const QDomNodeList& annotations( contactInfo.toElement().elementsByTagName( "Annotation" ) ); - int blp = 0; // = 0 fixes compile time warning - for( int index2 = 0; index2 < annotations.count(); index2++ ) + foreach( ABAnnotation *a, c->contactInfo.annotations ) { - const QDomNode& annotation( annotations.at( index2 ) ); - - if( XmlFunctions::getNodeValue( annotation, "Name" ) == "MSN.IM.BLP" ) + if ( a->name == "MSN.IM.BLP" ) { - // Set BLP argument - blp = XmlFunctions::getNodeValue( annotation, "Value" ).toInt(); + int blp = a->value.toInt(); + emit gotPersonalInformation( QString::number( c->contactInfo.cid ), blp ); break; } } - - emit gotPersonalInformation( cid, blp ); + continue; } - - // If the contact is not in our Messenger contact list, skip it. - if( XmlFunctions::getNodeValue( contactInfo, "isMessengerUser" ) == "false" ) + + QString handle; + + handle = c->contactInfo.passportName; + + // no email from the passportName element. + // try their first contactInfo email if they have one. + if ( handle.isEmpty() ) { - continue; - } + if ( c->contactInfo.emails.count() == 0 ) + { + continue; // skip it - the contact has no email information. + } - ABContactInfo info; + foreach( ABContactEmail *e, c->contactInfo.emails ) + { + if ( e->isMessengerEnabled ) + { + handle = e->email; + break; + } + } + } - // TODO: is this even needed? Can we even get Messenger3 users? - if( XmlFunctions::getNodeValue( contactInfo, "contactEmailType" ) == "Messenger3" ) + if ( handle.isEmpty() ) { - info.isMessenger3 = true; - handle = XmlFunctions::getNodeValue( contactInfo, "email" ).toLower(); - } - else - { - info.isMessenger3 = false; - handle = XmlFunctions::getNodeValue( contactInfo, "passportName" ).toLower(); - } - - // The second condition is an HACK, the handle shouldn't be exist in the list of user - // indeed is impossible to add it on the contact list because microsoft server doesn't accept - // the request. The contact should be removed from the user's list, but for now we prefer to make - // easy the life of the users...for the moment..:P - if( handle.isEmpty() || handle == "mes...@mi..." ) - { - warning() << "Skipped 'mes...@mi...' contact!"; + warning() << "Handle for contact was empty. XML dump:" << c->toString(); continue; } - // Retrieve the other information about the contact - // TODO implement the method for dynamic items, - // please refer to msnpiki in the MSNP13 section. - // and enable retrieval of the other services in - // retrieveMembershipLists(). + + // get the membership. + RoleInfo role = memberships_.take( handle ); + + // and make them a friend (since they're in our AB). + role.memberships |= KMess::MSN_LIST_FRIEND; + + listsManager_->contactAdd( handle, + c->contactInfo.displayName, + role.memberships, + QStringList( c->contactInfo.groupIds ), + c->contactId, + role.network ); - info.handle = handle; - info.friendlyName = friendlyName; - info.contactId = XmlFunctions::getNodeValue( contact, "contactId" ); - info.isMessengerUser = XmlFunctions::getNodeValue( contactInfo, "isMessengerUser" ) == "true"; - info.hasSpace = XmlFunctions::getNodeValue( contactInfo, "hasSpace" ) == "true"; - - // Check if the contact is assigned to any groups - const QDomNodeList& guids( contactInfo.toElement().elementsByTagName( "guid" ) ); - guidList.clear(); - if( ! guids.isEmpty() ) + KMESS_ASSERT( listsManager_->contact( handle ) ); + } + + // now, iterate through the remaining memberships. + // those that are on the Pending list need to be confirmed by the user. + if ( memberships_.count() > 0 ) + { + QHashIterator< QString, RoleInfo > i( memberships_ ); + while ( i.hasNext() ) { - for( int i = 0; i < guids.count(); i++ ) + i.next(); + QString handle = i.key(); + RoleInfo info = i.value(); + + if( ( info.memberships & KMess::MSN_LIST_PENDING ) != 0 ) { - guidList.append( guids.item( i ).toElement().text() ); + listsManager_->contactAdd( info.handle, info.displayName, info.memberships, QStringList(), QString(), info.network ); + emit newPendingContact( listsManager_->contact( info.handle ) ); } - - info.groupList = guidList; } - - contacts.append( info ); } + + debug() << "Address book successfully parsed: found" << response.contacts.count() << "contacts and" << debugGroupCount << "groups."; - debug() << "Address book successfully parsed: found" << contacts.count() << "contacts and" << debugGroupCount << "groups."; - // save it to disk (also throws away cache data from memory) - saveCache(); - + saveCache( addressbookCache_ ); + // Signal that the of address book has been parsed - emit gotAddressBookList( contacts ); + emit addressBookParsed(); } // Parse the membership lists -void AddressBookService::parseMembershipLists( const QDomElement &body ) +void AddressBookService::parseMembershipLists( const QDomElement &deltas ) { - const QDomNodeList& services( body.elementsByTagName( "Service" ) ); - - // New, empty accounts have no Services - if( services.count() == 0 ) + mergeMembershipDeltas( deltas ); + + ABFindMembershipResult response; + response.parse( deltas ); + + if ( response.services.count() == 0 ) { - emit gotMembershipLists( "Messenger", QHash<QString,KMess::MsnMemberships>() ); + retrieveAddressBook(); return; } - - for( int serviceIndex = 0; serviceIndex < services.count(); serviceIndex++ ) + + foreach( ServiceType *service, response.services ) { - const QDomNode& service( services.item( serviceIndex ) ); - - // Get the name of the service - QString serviceType( XmlFunctions::getNodeValue( service, "Info/Handle/Type" ) ); - - if( serviceType.isEmpty() ) + KMess::MsnMemberships memberships; + + foreach( ABMembership *membership, service->memberships ) { - warning() << "Retrieved unknown service type!"; - continue; - } + if ( membership->memberRole == "Allow" ) memberships = KMess::MSN_LIST_ALLOWED; + else if( membership->memberRole == "Block" ) memberships = KMess::MSN_LIST_BLOCKED; + else if( membership->memberRole == "Reverse" ) memberships = KMess::MSN_LIST_REVERSE; + else if( membership->memberRole == "Pending" ) memberships = KMess::MSN_LIST_PENDING; - const QDomNodeList &memberships( XmlFunctions::getNode( service, "Memberships" ).childNodes() ); - - // TODO Parse the timestamp of current retrieve to update the timestamp in the XML list - /* - QDomNodeList listInfo = body.elementsByTagName( "LastChange" ); - QString timestamp( listInfo.item( listInfo.count() - 1 ).toElement().text() ); - */ - - int roleId; - QString role; - QString handle; - - // Parse the service's membership lists and save the results in the contactsRole hash table - QHash<QString,KMess::MsnMemberships> contactsRole; - - for( int index = 0; index < memberships.count(); index++ ) - { - // Parse each role structure - const QDomNode& membership( memberships.item( index ) ); - role = XmlFunctions::getNodeValue( membership, "MemberRole" ); - - roleId = 0; - if( role == "Allow" ) roleId = KMess::MSN_LIST_ALLOWED; - else if( role == "Block" ) roleId = KMess::MSN_LIST_BLOCKED; - else if( role == "Reverse" ) roleId = KMess::MSN_LIST_REVERSE; - else if( role == "Pending" ) roleId = KMess::MSN_LIST_PENDING; - else + foreach( ABBaseMember *member, membership->members ) { - warning() << "Unknown membership role" << role << "in service" << serviceType << "!"; - continue; - } - - // Parse each member - const QDomNodeList& members( membership.toElement().elementsByTagName( "Member" ) ); - for( int i = 0; i < members.count(); i++ ) - { - // FIXME: This only works for the "Messenger" service. Others don't have the PassportName nor Email nodes. - // We need a flexible system! - const QDomNode& memberNode( members.item( i ) ); - handle = XmlFunctions::getNodeValue( memberNode, "PassportName" ).toLower(); - - if( handle.isEmpty() ) + RoleInfo info; + + if( member->type == "Passport" ) { - handle = XmlFunctions::getNodeValue( memberNode, "Email" ).toLower(); - - if( handle.isEmpty() ) - { - continue; - } + ABPassportMember *p = (ABPassportMember *)member; + info.handle = p->passportName; + info.network = KMess::NetworkMsn; } - // HACK: See parseAddressBook() for details - else if( handle == "mes...@mi..." ) + else if ( member->type == "Email" ) { - warning() << "Skipped 'mes...@mi...' contact!"; + ABEmailMember *e = (ABEmailMember *)member; + info.handle = e->email; + info.network = KMess::NetworkYahoo; // for now. + } + else + { + warning() << "Unhandled member type:" << member->type; continue; } + + if ( info.handle == "mes...@mi..." ) + { + continue; // skip? + } + + if ( memberships_.contains( info.handle ) ) + { + info.memberships = memberships_.value( info.handle ).memberships; + } + + info.memberships |= memberships; - // Insert the current contact in the hash with their respective role - // If the contact is already listed, the new value is OR'ed (set bit flag) with the old roleId - contactsRole.insert( handle, contactsRole.value( handle, 0 ) | (KMess::MsnMemberships)roleId ); + memberships_.insert( info.handle, info ); } } - - // When finished parsing the service's memberships list, signal that its list is ready - emit gotMembershipLists( serviceType, contactsRole ); } + + saveCache( membershipCache_ ); + + // now fetch the address book. + retrieveAddressBook(); } @@ -1015,17 +900,18 @@ { debug() << "Sync timestamp was invalid; doing full AB request."; + #warning InvalidSyncTimestamp - need to identify whether to request Memberships or AB again // wipe the cache file. - if ( ! QFile( cacheFile_ ).remove() ) + if ( ! QFile( addressbookCache_.cacheFile ).remove() ) { - warning() << "Unable to remove cache file " << cacheFile_ << "; caching will be ignored until this is resolved."; - cacheFile_ = QString(); + warning() << "Unable to remove cache file " << addressbookCache_.cacheFile << "; caching will be ignored until this is resolved."; + addressbookCache_.cacheFile = QString(); } - cacheDoc_ = QDomDocument(); - cacheTimestamp_ = QDateTime(); + addressbookCache_.cacheDocument = QDomDocument(); + addressbookCache_.cacheTimestamp = QDateTime(); - retrieveAddressBook( cacheFile_ ); + retrieveAddressBook(); } else { @@ -1059,12 +945,12 @@ if( ! body.firstChildElement( "FindMembershipResponse" ).isNull() ) { - parseMembershipLists( body ); + parseMembershipLists( body.firstChildElement( "FindMembershipResponse" ).firstChildElement( "FindMembershipResult" ) ); return; } else if( ! body.firstChildElement( "ABFindAllResponse" ).isNull() ) { - parseAddressBook( body ); + parseAddressBook( body.firstChildElement( "ABFindAllResponse" ).firstChildElement( "ABFindAllResult" ) ); return; } else if( ! body.firstChildElement( "ABContactUpdateResponse" ).isNull() ) @@ -1200,26 +1086,26 @@ // Save cache to a file. // Call this after you're done with cacheDoc_, because it will be thrown away after this // method finishes. -void AddressBookService::saveCache() +void AddressBookService::saveCache( ABCacheData &data ) { - QFile cache( cacheFile_ ); + QFile cache( data.cacheFile ); if ( ! cache.open( QIODevice::WriteOnly ) ) { - warning() << "Cannot open the cache file (" << cacheFile_ << ") for writing; address book caching will not occur."; + warning() << "Cannot open the cache file (" << data.cacheFile << ") for writing; address book caching will not occur."; return; } // put the last save information in the file... // tell QDomDocument to dump itself to the cache file... QTextStream stream( &cache ); - cacheDoc_.save( stream, 2 ); + data.cacheDocument.save( stream, 2 ); cache.close(); - debug() << "Wrote cache to" << cacheFile_; + debug() << "Wrote cache to" << data.cacheFile; // remove... [truncated message content] |
From: <fon...@us...> - 2010-05-16 04:28:08
|
Revision: 6008 http://kmess.svn.sourceforge.net/kmess/?rev=6008&view=rev Author: fontknocker Date: 2010-05-16 04:27:59 +0000 (Sun, 16 May 2010) Log Message: ----------- Start adding a simple XML binding to the address book service. This will make it easier to work with the AB service plus it let's us expand to Yahoo! support easier. Modified Paths: -------------- trunk/kmess/lib/ChangeLog Added Paths: ----------- trunk/kmess/lib/src/soap/bindings/ trunk/kmess/lib/src/soap/bindings/abbinding.h trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp trunk/kmess/lib/src/soap/bindings/abdatatypes.h trunk/kmess/lib/src/soap/bindings/abrequests.cpp trunk/kmess/lib/src/soap/bindings/abrequests.h trunk/kmess/lib/src/soap/bindings/soaputils.cpp trunk/kmess/lib/src/soap/bindings/soaputils.h Modified: trunk/kmess/lib/ChangeLog =================================================================== --- trunk/kmess/lib/ChangeLog 2010-05-15 11:06:33 UTC (rev 6007) +++ trunk/kmess/lib/ChangeLog 2010-05-16 04:27:59 UTC (rev 6008) @@ -1,4 +1,9 @@ +2010-05-16 Adam Goossens <ad...@km...> + * Start adding a simple XML binding for the address book service. Will make it + easier to work with the service plus make it easier to put in Yahoo! and other + network support. + 2010-05-05 Sjors Gielen <sj...@km...> * msnconnection.h, debugger.cpp: Fixed line lengths to fit on 80x24 terminals Added: trunk/kmess/lib/src/soap/bindings/abbinding.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abbinding.h (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abbinding.h 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,24 @@ +/*************************************************************************** + abdatatypes.h + ------------------- + begin : Fri July 25 2008 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef ABBINDINGS_H +#define ABBINDINGS_H + +#include "abdatatypes.h" +#include "abrequests.h" + +#endif Added: trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abdatatypes.cpp 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,562 @@ +/*************************************************************************** + abdatatypes.cpp + ------------------- + begin : Mon Apr 12 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "abdatatypes.h" +#include "soaputils.h" + +#include "../../debug/libkmessdebug.h" +#include "../../utils/xmlfunctions.h" + +using namespace KMessInternal; +using namespace KMessInternal::SoapUtils; + +QString argMember( QString elementName, ABBaseMember *member ); +QString argMember( QString elementName, ABBaseMember *member ) +{ + return QString( "<%1 xsi:type=\"%2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">%3</%1>" ).arg( elementName ).arg( member->type + "Member" ).arg( member->toString() ); +} + +/********************************************** +ABAnnotation +***********************************************/ +ABAnnotation::ABAnnotation( QString annoteName, QString annoteValue ) +: name( annoteName ), + value( annoteValue ) +{ +} + +QString ABAnnotation::toString() const +{ + QString body; + + body += arg( "Name", name ); + body += arg( "Value", value ); + + return body; +} + + +ABAnnotation::operator QString() const +{ + return toString(); +} + + + +void ABAnnotation::parse( const QDomNode &node ) +{ + parseString( node, "Name", name ); + parseString( node, "Value", value ); +} + + +/********************************************** +ABContact +***********************************************/ +QString ABContact::toString() const +{ + QString body; + + body += arg( "contactId", contactId ); + body += arg( "contactInfo", contactInfo ); + body += arg( "propertiesChanged", propertiesChanged ); + body += arg( "fDeleted", fDeleted ); + body += arg( "CreateDate", createDate ); + body += arg( "lastChange", lastChange ); + + return body; +} + + +ABContact::operator QString() const +{ + return toString(); +} + + + +void ABContact::parse( const QDomNode &node ) +{ + parseString ( node, "contactId", contactId ); + parseSoapType ( node, "contactInfo", contactInfo ); + parseString ( node, "propertiesChanged", propertiesChanged ); + parseBool ( node, "fDeleted", fDeleted ); + parseString ( node, "CreateDate", createDate ); + parseString ( node, "lastChange", lastChange ); +} + + +/********************************************** +ABContactInfo +***********************************************/ +ABContactInfo::~ABContactInfo() +{ + qDeleteAll( emails ); + qDeleteAll( phones ); + qDeleteAll( annotations ); +} + +QString ABContactInfo::toString() const +{ + QString body; + + body += arg<ABContactEmail*>( "emails", "email", emails ); + body += arg<ABContactPhone*>( "phones", "phone", phones ); + body += arg<ABAnnotation*>( "annotations", "Annotation", annotations ); + body += arg<QString>( "groupIds", "guid", groupIds ); + body += arg( "contactType", contactType ); + body += arg( "quickName", quickName ); + body += arg( "passportName", passportName ); + body += arg( "displayName", displayName ); + + return body; +} + + + +ABContactInfo::operator QString() const +{ + return toString(); +} + + + +void ABContactInfo::parse( const QDomNode &node ) +{ + parseSoapTypeList<ABContactEmail> ( node, "emails", "email", emails ); + parseSoapTypeList<ABContactPhone> ( node, "phones", "phone", phones ); + parseList ( node, "groupIds", "guid", groupIds ); + parseSoapTypeList<ABAnnotation>( node, "annotations", "Annotation", annotations ); + parseString( node, "contactType", contactType ); + parseString( node, "quickName", quickName ); + parseString( node, "passportName", passportName ); + parseString( node, "displayName", displayName ); + parseLong( node, "CID", cid ); + parseBool( node, "isNotMobileVisible", isNotMobileVisible ); + parseBool( node, "isMobileIMEnabled", isMobileIMEnabled ); + parseBool( node, "isMessengerUser", isMessengerUser ); + parseBool( node, "isFavorite", isFavorite ); + parseBool( node, "hasSpace", hasSpace ); + parseString( node, "propertiesChanged", propertiesChanged ); +} + + +/********************************************** +ABContactPhone +***********************************************/ +QString ABContactPhone::toString() const +{ + QString body; + body += arg( "contactPhoneType", contactPhoneType ); + body += arg( "number", number ); + body += arg( "isMessengerEnabled", isMessengerEnabled ); + return body; +} + + +ABContactPhone::operator QString() const +{ + return toString(); +} + + +void ABContactPhone::parse( const QDomNode &node ) +{ + parseString( node, "contactPhoneType", contactPhoneType ); + parseString( node, "number", number ); + parseBool ( node, "isMessengerEnabled", isMessengerEnabled ); +} + + +/********************************************** +ABContactEmail +***********************************************/ +QString ABContactEmail::toString() const +{ + QString body; + body += arg( "email", email ); + body += arg( "contactEmailType", contactEmailType ); + body += arg( "isMessengerEnabled", isMessengerEnabled ); + body += arg( "Capability", capability ); + body += arg( "propertiesChanged", propertiesChanged ); + return body; +} + + +ABContactEmail::operator QString() const +{ + return toString(); +} + + + +void ABContactEmail::parse( const QDomNode &node ) +{ + parseString( node, "contactEmailType", contactEmailType ); + parseBool ( node, "isMessengerEnabled", isMessengerEnabled ); + parseLong ( node, "Capability", capability ); + parseString( node, "propertiesChanged", propertiesChanged ); +} + + +/********************************************** +ABGroupInfo +***********************************************/ +ABGroupInfo::~ABGroupInfo() +{ + qDeleteAll( annotations ); +} + + + +QString ABGroupInfo::toString() const +{ + QString body; + + body += arg( "groupType", groupType, "C8529CE2-6EAD-434d-881F-341E17DB3FF8" ); + body += arg<ABAnnotation*>( "annotations", "Annotation", annotations ); + body += arg( "name", name ); + body += arg( "IsNotMobileVisible", isNotMobileVisible ); + body += arg( "IsPrivate", isPrivate ); + body += arg( "IsFavorite", isFavorite ); + body += arg( "fMessenger", fMessenger ); + return body; +} + + +ABGroupInfo::operator QString() const +{ + return toString(); +} + + + +void ABGroupInfo::parse( const QDomNode &node ) +{ + parseString( node, "groupType", groupType, "C8529CE2-6EAD-434d-881F-341E17DB3FF8" ); + parseSoapTypeList<ABAnnotation>( node, "annotations", "Annotation", annotations ); + parseString( node, "name", name ); + parseBool( node, "IsNotMobileVisible", isNotMobileVisible ); + parseBool( node, "IsPrivate", isPrivate ); + parseBool( node, "IsFavorite", isFavorite ); + parseBool( node, "fMessenger", fMessenger ); +} + + +/********************************************** +ABMembership +***********************************************/ +ABMembership::~ABMembership() +{ + qDeleteAll( members ); +} + +QString ABMembership::toString() const +{ + QString body; + body += arg( "MemberRole", memberRole ); + + QString memberXml; + + foreach( ABBaseMember *member, members ) + { + memberXml += argMember( "Member", member ); + } + + body += arg( "Members", memberXml ); + body += arg( "MembershipIsComplete", membershipIsComplete ); + return body; +} + + +ABMembership::operator QString() const +{ + return toString(); +} + + + +void ABMembership::parse( const QDomNode &node ) +{ + parseString ( node, "MemberRole", memberRole ); + + const QDomNodeList memberList = node.toElement().elementsByTagName( "Member" ); + for( int i = 0; i < memberList.count(); i++ ) + { + const QDomNode &m = memberList.at( i ); + + QString type = XmlFunctions::getNodeAttribute( m, "type" ); + + ABBaseMember *mem = 0; + + if ( type == "PassportMember" ) + { + mem = new ABPassportMember(); + } + else if ( type == "EmailMember" ) + { + mem = new ABEmailMember(); + } +// else if ( type == "Circle" ) +// { +// mem = new ABCircleMember(); +// } + + if ( mem ) + { + mem->parse( m ); + members.append( mem ); + } + } + + parseBool ( node, "MembershipIsComplete", membershipIsComplete ); +} + + + +/********************************************** +ABBaseMember +***********************************************/ +ABBaseMember::ABBaseMember() +: membershipId( 0 ) +{ +} + +QString ABBaseMember::toString() const +{ + QString body; + body += arg( "MembershipId", (long)membershipId ); + body += arg( "Type", type ); + body += arg( "DisplayName", displayName ); + body += arg( "State", state ); + body += arg( "Deleted", deleted ); + body += arg( "LastChanged", lastChanged ); + body += arg( "JoinedDate", joinedDate ); + body += arg( "ExpirationDate", expirationDate ); + body += arg( "Changes", changes ); + return body; +} + +ABBaseMember::operator QString() const +{ + return toString(); +} + +void ABBaseMember::parse( const QDomNode &node ) +{ + parseLong ( node, "MembershipId", membershipId ); + parseString( node, "Type", type ); + parseString( node, "DisplayName", displayName ); + parseString( node, "State", state ); + parseBool ( node, "Deleted", deleted ); + parseString( node, "LastChanged", lastChanged ); + parseString( node, "JoinedDate", joinedDate ); + parseString( node, "ExpirationDate", expirationDate ); + parseString( node, "Changes", changes ); +} + + + +/********************************************** +ABPassportMember +***********************************************/ +ABPassportMember::ABPassportMember() +: ABBaseMember() +{ + type = "Passport"; + passportId = 0; + cid = 0; +} + +QString ABPassportMember::toString() const +{ + QString body = ABBaseMember::toString(); + body += arg( "PassportName", passportName ); + body += arg( "IsPassportNameHidden", isPassportNameHidden ); + body += arg( "PassportId", passportId ); + body += arg( "CID", cid ); + body += arg( "PassportChanges", passportChanges ); + body += arg( "LookedupByCID", lookedUpByCID ); + return body; +} + +ABPassportMember::operator QString() const +{ + return toString(); +} + +void ABPassportMember::parse( const QDomNode &node ) +{ + ABBaseMember::parse( node ); + parseString( node, "PassportName", passportName ); + parseBool ( node, "IsPassportNameHidden", isPassportNameHidden ); + parseLong ( node, "PassportId", passportId ); + parseLong ( node, "CID", cid ); + parseString( node, "PassportChanges", passportChanges ); + parseBool ( node, "LookedupByCID", lookedUpByCID ); +} + + + +/********************************************** +ABEmailMember +***********************************************/ +ABEmailMember::ABEmailMember() +{ + type = "Email"; +} + + +QString ABEmailMember::toString() const +{ + QString body = ABBaseMember::toString(); + body += arg( "Email", email ); + return body; +} + +ABEmailMember::operator QString() const +{ + return toString(); +} + +void ABEmailMember::parse( const QDomNode &node ) +{ + parseString( node, "Email", email ); +} + + + + +/********************************************** +ABGroup +***********************************************/ +QString ABGroup::toString() const +{ + QString body; + body += arg( "groupId", groupId ); + body += arg( "groupInfo", groupInfo ); + body += arg( "fDeleted", fDeleted ); + body += arg( "lastChange", lastChange ); + body += arg( "propertiesChanged", propertiesChanged ); + + return body; +} + + +ABGroup::operator QString() const +{ + return toString(); +} + + + +void ABGroup::parse( const QDomNode &node ) +{ + parseString ( node, "groupId", groupId ); + parseSoapType ( node, "groupInfo", groupInfo ); + parseBool ( node, "fDeleted", fDeleted ); + parseString ( node, "lastChange", lastChange ); + parseString ( node, "propertiesChanged", propertiesChanged ); +} + + +/********************************************** +ABInfo +***********************************************/ +QString ABInfo::toString() const +{ + QString body; + body += arg( "name", name ); + body += arg( "MigratedTo", migratedTo ); + body += arg( "ownerPuid", ownerPuid ); + body += arg( "OwnerCID", ownerCID ); + body += arg( "ownerEmail", ownerEmail ); + body += arg( "fDefault", fDefault ); + body += arg( "joinedNamespace", joinedNamespace ); + body += arg( "IsBot", isBot ); + body += arg( "IsParentManaged", isParentManaged ); + body += arg( "AccountTierLastChanged", accountTierLastChanged ); + body += arg( "SubscribeExternalPartner", subscribeExternalPartner ); + body += arg( "NotifyExternalPartner", notifyExternalPartner ); + body += arg( "AddressBookType", addressBookType ); + body += arg( "MessengerApplicationServiceCreated", messengerApplicationServiceCreated ); + body += arg( "IsBetaMigrated", isBetaMigrated ); + return body; +} + + + +ABInfo::operator QString() const +{ + return toString(); +} + + + +void ABInfo::parse( const QDomNode &node ) +{ + parseString( node, "name", name ); + parseLong( node, "MigratedTo", migratedTo ); + parseLong( node, "ownerPuid", ownerPuid ); + parseLong( node, "OwnerCID", ownerCID ); + parseString( node, "ownerEmail", ownerEmail ); + parseBool( node, "fDefault", fDefault ); + parseBool( node, "IsBot", isBot ); + parseBool( node, "IsParentManaged", isParentManaged ); + parseString( node, "AccountTierLastChanged", accountTierLastChanged ); + parseBool( node, "SubscribeExternalPartner", subscribeExternalPartner ); + parseBool( node, "NotifyExternalPartner", notifyExternalPartner ); + parseString( node, "AddressBookType", addressBookType ); + parseBool( node, "MessengerApplicationServiceCreated", messengerApplicationServiceCreated ); + parseBool( node, "IsBetaMigrated", isBetaMigrated ); +} + + + +/********************************************** +HandleType +***********************************************/ +HandleType::HandleType() +{ + type = "Messenger"; + id = 0; +} + +QString HandleType::toString() const +{ + QString body; + body += arg( "Id", id ); + body += arg( "Type", type ); + body += arg( "ForeignId", foreignId, QString(), true ); + return body; +} + + + +HandleType::operator QString() const +{ + return toString(); +} + + + +void HandleType::parse( const QDomNode &node ) +{ + parseLong( node, "Id", id ); + parseString( node, "Type", type ); + parseString( node, "ForeignId", foreignId ); +} \ No newline at end of file Added: trunk/kmess/lib/src/soap/bindings/abdatatypes.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abdatatypes.h (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abdatatypes.h 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,266 @@ +/*************************************************************************** + abdatatypes.h + ------------------- + begin : Fri Apr 9 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef ABDATATYPES_H +#define ABDATATYPES_H + +#include "soaputils.h" + +#include <QDebug> +#include <QString> +#include <QList> +#include <QStringList> +#include <QHash> +#include <QDomNode> + +namespace KMessInternal +{ + +struct ABInfo : public SoapType +{ + QString name; + long migratedTo; + long ownerPuid; + long ownerCID; + QString ownerEmail; + bool fDefault; + bool joinedNamespace; + bool isBot; + bool isParentManaged; + QString accountTierLastChanged; + bool subscribeExternalPartner; + bool notifyExternalPartner; + QString addressBookType; + bool messengerApplicationServiceCreated; + bool isBetaMigrated; + + virtual QString toString() const; + virtual operator QString() const; + virtual void parse( const QDomNode &node ); +}; + + + +struct ABBaseMember : public SoapType +{ + protected: + ABBaseMember(); + + public: + long membershipId; + QString type; + QString displayName; + QString state; + bool deleted; + QString lastChanged; + QString joinedDate; + QString expirationDate; + QString changes; + + virtual operator QString() const; + virtual QString toString() const; + virtual void parse( const QDomNode &node ); +}; + + +struct ABPassportMember : public ABBaseMember +{ + ABPassportMember(); + + QString passportName; + bool isPassportNameHidden; + long passportId; + long cid; + QString passportChanges; + bool lookedUpByCID; + + virtual operator QString() const; + virtual QString toString() const; + virtual void parse( const QDomNode &node ); +}; + + +struct ABEmailMember : public ABBaseMember +{ + QString email; + + ABEmailMember(); + virtual operator QString() const; + virtual QString toString() const; + virtual void parse( const QDomNode &node ); +}; + + + +struct ABMembership : public SoapType +{ + QString memberRole; + QList<ABBaseMember*> members; + bool membershipIsComplete; + + virtual void parse( const QDomNode &node ); + virtual QString toString() const; + virtual operator QString() const; + virtual ~ABMembership(); +}; + + +struct ABAnnotation : public SoapType +{ + QString name; + QString value; + + ABAnnotation( QString name = QString(), QString value = QString() ); + + virtual QString toString() const; + virtual operator QString() const; + virtual void parse( const QDomNode &node ); +}; + + +struct ABGroupInfo : public SoapType +{ + QList<ABAnnotation*> annotations; + QString groupType; + QString name; + bool isNotMobileVisible; + bool isPrivate; + bool isFavorite; + bool fMessenger; + + virtual ~ABGroupInfo(); + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + +/** + * Contains information on a group. + */ +struct ABGroup : public SoapType +{ + QString groupId; + ABGroupInfo groupInfo; + bool fDeleted; + QString lastChange; + QString propertiesChanged; + + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + +/** + * Contains information on email addressed for a contact. + */ +struct ABContactEmail : public SoapType +{ + QString contactEmailType; + QString email; + bool isMessengerEnabled; + long capability; + bool messengerEnabledExternally; + QString propertiesChanged; + + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + +/** + * Holds information about a contact's phone number + */ +struct ABContactPhone : public SoapType +{ + QString contactPhoneType; + QString number; + bool isMessengerEnabled; + + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + +/** +* Holds all the detailed information of a contact parsed from the address book. +*/ +struct ABContactInfo : public SoapType +{ + QList<ABContactEmail*> emails; + QList<ABAnnotation*> annotations; + QList<ABContactPhone*> phones; + QList<QString> groupIds; + QString contactType; + QString quickName; + QString passportName; + QString displayName; + long cid; + bool isNotMobileVisible; + bool isMobileIMEnabled; + bool isMessengerUser; + bool isFavorite; + bool hasSpace; + QString propertiesChanged; + + virtual ~ABContactInfo(); + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + +/** + * Represents a contact parsed from the address book. + */ + +struct ABContact : public SoapType +{ + QString contactId; + ABContactInfo contactInfo; + QString propertiesChanged; + bool fDeleted; + QString createDate; + QString lastChange; + + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + + +/** + * Represents handle information used in many AB calls. + */ +struct HandleType : public SoapType +{ + long id; + QString type; + QString foreignId; + + HandleType(); + virtual QString toString() const; + virtual void parse( const QDomNode &node ); + virtual operator QString() const; +}; + + +}; // namespace +#endif Added: trunk/kmess/lib/src/soap/bindings/abrequests.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.cpp (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abrequests.cpp 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,334 @@ +/*************************************************************************** + abrequests.cpp + ------------------- + begin : Fri July 25 2008 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include <QString> + +#include "abbinding.h" +#include "soaputils.h" +#include "../../debug/libkmessdebug.h" + +/** + * @brief URL of the Address Book Service + */ +#define SERVICE_URL_ADDRESSBOOK "https://omega.contacts.msn.com/abservice/abservice.asmx" + +/** + * @brief URL of the Address Book Sharing Service + */ +#define SERVICE_URL_ADDRESSBOOK_SHARING "https://omega.contacts.msn.com/abservice/SharingService.asmx" + +using namespace KMessInternal; +using namespace KMessInternal::SoapUtils; + +ABRequest::ABRequest( QString method, QString partnerScenario, QString url ) +: method_( method ) +, scenario_( partnerScenario ) +, url_ ( url ) +{ + scenario_ = scenario_.isEmpty() ? "Initial" : scenario_; +}; + +SoapMessage* ABRequest::message() +{ + QString bodyStr; + bodyStr += "<" + method_ + " xmlns=\"http://www.msn.com/webservices/AddressBook\">\n"; + bodyStr += "<abId>00000000-0000-0000-0000-000000000000</abId>\n"; + bodyStr += body(); + bodyStr += "</" + method_ + ">"; + + return new SoapMessage( url_, + "http://www.msn.com/webservices/AddressBook/" + method_, + createCommonHeader(), + bodyStr, + MessageData() ); +} + + +/** + * @brief Create the common header for the soap requests. + * + * @param partnerScenario the field for the PartnerScenario tag + */ +QString ABRequest::createCommonHeader() +{ + return "<ABApplicationHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" + " <ApplicationId xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" + " 996CDE1E-AA53-4477-B943-2BE802EA6166\n" + " </ApplicationId>\n" + " <IsMigration xmlns=\"http://www.msn.com/webservices/AddressBook\">false</IsMigration>\n" + " <PartnerScenario xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" + + scenario_ + + " </PartnerScenario>\n" + "</ABApplicationHeader>\n" + "<ABAuthHeader xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" + " <ManagedGroupRequest xmlns=\"http://www.msn.com/webservices/AddressBook\">false</ManagedGroupRequest>\n" + " <TicketToken />\n" // Gets filled in by the base class + "</ABAuthHeader>"; +} + + +/*********************************** + START ABCONTACTADD +************************************/ + +ABContactAddRequest::ABContactAddRequest() +: ABRequest( "ABContactAdd", "ContactSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + +QString ABContactAddRequest::body() +{ + QString body; + body += arg<ABContact*>( "contacts", "Contact", contacts ); + body += arg( "EnableAllowListManagement", enableAllowListManagement ); + return body; +} + + +/*********************************** + START ABFINDALL +************************************/ + +ABFindAllRequest::ABFindAllRequest() +: ABRequest( "ABFindAll", "", SERVICE_URL_ADDRESSBOOK ) +{ + deltasOnly = false; +} + +QString ABFindAllRequest::body() +{ + QString body; + body += arg( "abView", QString( "MessengerClient8" ) ); + body += arg( "deltasOnly", deltasOnly ); + body += arg( "lastChange", lastChange, "0001-01-01T00:00:00.0000000-08:00" ); + body += arg( "dynamicItemVIew", dynamicItemView ); + body += arg( "dynamicItemLastChange", QString( "0001-01-01T00:00:00.0000000-08:00" ) ); + return body; +} + + +/*********************************** + START ABFINDMEMBERSHIP +************************************/ +ABFindMembershipRequest::ABFindMembershipRequest() +: ABRequest( "FindMembership", "", SERVICE_URL_ADDRESSBOOK_SHARING ) +{ +} + + +QString ABFindMembershipRequest::body() +{ + QString body; + body += arg( "serviceFilter", arg( "Types", "ServiceType", serviceTypes ) ); + return body; +} + + +/*********************************** + START ABGroupContactAddRequest +************************************/ +ABGroupContactAddRequest::ABGroupContactAddRequest() +: ABRequest( "ABGroupContactAdd", "GroupSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABGroupContactAddRequest::body() +{ + QString body; + body += arg( "groupFilter", arg( "groupIds", "guid", groupIds ) ); + body += arg( "contacts", arg( "Contact", arg( "contactId", contactId ) ) ); + + return body; +} + + +/*********************************** + START ABAdd +************************************/ +ABAddRequest::ABAddRequest() +: ABRequest( "ABAdd", "", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABAddRequest::body() +{ + return abInfo; +} + + +/*********************************** + START ABGroupAdd +************************************/ +ABGroupAddRequest::ABGroupAddRequest() +: ABRequest( "ABGroupAdd", "GroupSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABGroupAddRequest::body() +{ + QString body; + body += arg( "groupAddOptions", arg( "fRenameOnMsgrConflict", false ) ); + body += arg( "groupInfo", groupInfo ); + + return body; +} + + +/*********************************** + START ABGroupUpdate +************************************/ +ABGroupUpdateRequest::ABGroupUpdateRequest() +: ABRequest( "ABGroupUpdate", "GroupSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABGroupUpdateRequest::body() +{ + QString body; + + body += arg<ABGroup*>( "groups", "Group", groups ); + + return body; +} + + +/*********************************** + START ABContactUpdate +************************************/ +ABContactUpdateRequest::ABContactUpdateRequest() +: ABRequest( "ABContactUpdate", "Timer", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABContactUpdateRequest::body() +{ + QString body; + + body += arg<ABContact*>( "contacts", "Contact", contacts ); + + return body; +} + + +/*********************************** + START ABContactDelete +************************************/ +ABContactDeleteRequest::ABContactDeleteRequest() +: ABRequest( "ABContactDelete", "Timer", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABContactDeleteRequest::body() +{ + QString body; + + body += arg<ABContact*>( "contacts", "Contact", contacts ); + + return body; +} + + +/*********************************** + START ABGroupContactDelete +************************************/ +ABGroupContactDeleteRequest::ABGroupContactDeleteRequest() +: ABRequest( "ABGroupContactDelete", "GroupSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABGroupContactDeleteRequest::body() +{ + QString body; + + body += arg( "groupFilter", arg( "groupIds", "guid", groupIds ) ); + body += arg<ABContact*>( "contacts", "Contact", contacts ); + + return body; +} + + +/*********************************** + START ABGroupDelete +************************************/ +ABGroupDeleteRequest::ABGroupDeleteRequest() +: ABRequest( "ABGroupDelete", "GroupSave", SERVICE_URL_ADDRESSBOOK ) +{ +} + + +QString ABGroupDeleteRequest::body() +{ + QString body; + + body += arg( "groupFilter", arg( "groupIds", "guid", groupIds ) ); + + return body; +} + + + +/*********************************** + START AddMemberRequest +************************************/ +AddMemberRequest::AddMemberRequest() +: ABRequest( "AddMember", "BlockUnblock", SERVICE_URL_ADDRESSBOOK_SHARING ) +{ + // defaults. + serviceHandle.id = 0; + serviceHandle.type = "Messenger"; +} + + +QString AddMemberRequest::body() +{ + QString body; + + body += arg( "serviceHandle", serviceHandle ); + body += arg( "memberships", "Membership", memberships ); + + return body; +} + + +/*********************************** + START DeleteMemberRequqest +************************************/ +DeleteMemberRequest::DeleteMemberRequest() +: ABRequest( "DeleteMember", "BlockUnblock", SERVICE_URL_ADDRESSBOOK_SHARING ) +{ + // defaults. + serviceHandle.id = 0; + serviceHandle.type = "Messenger"; +} + + +QString DeleteMemberRequest::body() +{ + QString body; + + body += arg( "serviceHandle", serviceHandle ); + body += arg( "memberships", "Membership", memberships ); + + return body; +} \ No newline at end of file Added: trunk/kmess/lib/src/soap/bindings/abrequests.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/abrequests.h (rev 0) +++ trunk/kmess/lib/src/soap/bindings/abrequests.h 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,232 @@ +/*************************************************************************** + absoaprequests.h + ------------------- + begin : Fri July 25 2008 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef ABSOAPREQUESTS_H +#define ABSOAPREQUESTS_H + +#include <QByteArray> +#include <QList> + +#include "abdatatypes.h" +#include "../soapmessage.h" + +namespace KMessInternal +{ + +class ABRequest +{ + protected: + ABRequest( QString method, QString partnerScenario, QString url ); + + public: + virtual ~ABRequest() {} + + SoapMessage *message(); + + protected: + virtual QString body() = 0; + + private: + QString createCommonHeader(); + + private: + QString method_; + QString scenario_; + QString action_; + QString url_; +}; + +class ABContactAddRequest : public ABRequest +{ + public: + ABContactAddRequest(); + virtual ~ABContactAddRequest() {} + + protected: + virtual QString body(); + + public: + QList<ABContact*> contacts; + bool enableAllowListManagement; +}; + +class ABFindAllRequest : public ABRequest +{ + public: + ABFindAllRequest(); + virtual ~ABFindAllRequest() {} + + protected: + virtual QString body(); + + public: + bool deltasOnly; + QString lastChange; + QString dynamicItemView; + QString dynamicItemLastChange; +}; + +class ABFindMembershipRequest : public ABRequest +{ + public: + ABFindMembershipRequest(); + virtual ~ABFindMembershipRequest() {} + + protected: + virtual QString body(); + + public: + QList<QString> serviceTypes; + +}; + + +class ABGroupContactAddRequest : public ABRequest +{ + public: + ABGroupContactAddRequest(); + virtual ~ABGroupContactAddRequest() {} + + protected: + virtual QString body(); + + public: + QList<QString> groupIds; + QString contactId; +}; + + +class ABAddRequest : public ABRequest +{ + public: + ABAddRequest(); + + protected: + virtual QString body(); + + public: + ABInfo abInfo; +}; + + + +class ABGroupAddRequest : public ABRequest +{ + public: + ABGroupAddRequest(); + + protected: + virtual QString body(); + + public: + ABGroupInfo groupInfo; +}; + + +class ABGroupUpdateRequest : public ABRequest +{ + public: + ABGroupUpdateRequest(); + + protected: + virtual QString body(); + + public: + QList<ABGroup*> groups; +}; + +class ABContactUpdateRequest : public ABRequest +{ + public: + ABContactUpdateRequest(); + + protected: + virtual QString body(); + + public: + QList<ABContact*> contacts; +}; + +class ABContactDeleteRequest : public ABRequest +{ + public: + ABContactDeleteRequest(); + + protected: + virtual QString body(); + + public: + QList<ABContact*> contacts; +}; + +class ABGroupContactDeleteRequest : public ABRequest +{ + public: + ABGroupContactDeleteRequest(); + + protected: + virtual QString body(); + + public: + QList<QString> groupIds; + QList<ABContact*> contacts; +}; + + +class ABGroupDeleteRequest : public ABRequest +{ + public: + ABGroupDeleteRequest(); + + protected: + virtual QString body(); + + public: + QList<QString> groupIds; +}; + + +class AddMemberRequest : public ABRequest +{ + public: + AddMemberRequest(); + + protected: + virtual QString body(); + + public: + HandleType serviceHandle; + QList<ABMembership*> memberships; +}; + + +class DeleteMemberRequest : public ABRequest +{ + public: + DeleteMemberRequest(); + + protected: + virtual QString body(); + + public: + HandleType serviceHandle; + QList<ABMembership*> memberships; +}; + +}; // namespace + +#endif Added: trunk/kmess/lib/src/soap/bindings/soaputils.cpp =================================================================== --- trunk/kmess/lib/src/soap/bindings/soaputils.cpp (rev 0) +++ trunk/kmess/lib/src/soap/bindings/soaputils.cpp 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,122 @@ +/*************************************************************************** + soaputils.cpp + ------------------- + begin : Mon Apr 12 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#include "soaputils.h" +#include "../../utils/xmlfunctions.h" + +#include <QString> +#include <QList> +#include <QDomNode> + +namespace KMessInternal +{ + +namespace SoapUtils +{ + void appendArg( QString &body, QString arg, QString val, QString defaultValue, bool allowEmpty ) + { + val = ( val.isNull() ? defaultValue : val ); + + if ( ! val.isNull() ) + { + body += QString("<%1>%2</%1>\n").arg( arg ).arg( val ); + } + else if ( val.isEmpty() && allowEmpty ) + { + body += QString("<%1/>").arg( arg ); + } + } + + void appendArg( QString &body, QString arg, long val ) + { + body += QString("<%1>%2</%1>\n").arg( arg ).arg( val ); + } + + void appendArg( QString &body, QString arg, bool val ) + { + appendArg( body, arg, QString( ( val ? "true" : "false" ) ) ); + } + + void parseString( const QDomNode &parent, QString element, QString &target, QString defaultValue ) + { + target = XmlFunctions::getNodeValue( parent, element ); + if ( target.isEmpty() ) + { + target = defaultValue; + } + } + + void parseLong( const QDomNode &parent, QString element, long &target ) + { + target = XmlFunctions::getNodeValue( parent, element ).toLong(); + } + + void parseBool( const QDomNode &parent, QString element, bool &target ) + { + target = XmlFunctions::getNodeValue( parent, element ).toLower() == "true" ? true : false; + } + + void parseList( const QDomNode &parent, QString startElement, QString subElementName, QList<QString> &target ) + { + const QDomNodeList &nodes = XmlFunctions::getNode( parent, startElement ).toElement().elementsByTagName( subElementName ); + + for( int i = 0; i < nodes.count(); i++ ) + { + const QDomNode &n = nodes.at( i ); + target.append( n.toElement().text() ); + } + } + + void parseSoapType( const QDomNode &parent, QString element, SoapType &target ) + { + target.parse( XmlFunctions::getNode( parent, element ) ); + } + + QString arg( QString elementName, QString value, QString defaultValue, bool allowEmpty ) + { + value = ( value.isEmpty() ? defaultValue : value ); + + if ( value.isEmpty() && allowEmpty ) + { + return QString( "<%1/>\n" ).arg( elementName ); + } + else if ( ! value.isEmpty() ) + { + return QString( "<%1>%2</%1>\n" ).arg( elementName ).arg( value ); + } + else + { + return QString(); + } + } + + QString arg( QString elementName, bool value ) + { + return arg( elementName, QString( value ? "true" : "false" ) ); + } + + QString arg( QString elementName, long value ) + { + return arg( elementName, QString::number( value ) ); + } + + QString arg( QString elementName, SoapType *p ) + { + return arg( elementName, p->toString() ); + } +}; + +}; \ No newline at end of file Added: trunk/kmess/lib/src/soap/bindings/soaputils.h =================================================================== --- trunk/kmess/lib/src/soap/bindings/soaputils.h (rev 0) +++ trunk/kmess/lib/src/soap/bindings/soaputils.h 2010-05-16 04:27:59 UTC (rev 6008) @@ -0,0 +1,100 @@ +/*************************************************************************** + soaputils.h + ------------------- + begin : Mon Apr 12 2010 + copyright : (C) 2010 by Adam Goossens + email : ad...@km... + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#ifndef SOAPUTILS_H +#define SOAPUTILS_H + +#include <QString> +#include <QList> +#include <QDomNode> + +#include "../../utils/xmlfunctions.h" + +namespace KMessInternal +{ + +class SoapType +{ + protected: + SoapType() {}; + + public: + virtual ~SoapType() + { + } + + virtual QString toString() const = 0; + virtual operator QString() const = 0; + virtual void parse( const QDomNode &node ) = 0; +}; + +namespace SoapUtils +{ + void appendArg( QString &body, QString arg, QString val, QString defaultValue = QString(), bool allowEmpty = false ); + void appendArg( QString &body, QString arg, long val ); + void appendArg( QString &body, QString arg, bool val ); + template <class T> + void appendList( QString &body, QString arg, QList<T> list ); + + QString arg( QString elementName, QString val, QString defaultValue = QString(), bool allowEmpty = false ); + QString arg( QString elementName, long val ); + QString arg( QString elementName, bool val ); + QString arg( QString elementName, SoapType *ptr ); + + template <class T> QString arg( QString listElement, QString itemElement, QList<T> list ); + + void parseString( const QDomNode &parent, QString element, QString &target, QString defaultValue = QString() ); + void parseLong ( const QDomNode &parent, QString element, long &target ); + void parseBool ( const QDomNode &parent, QString element, bool &target ); + void parseSoapType( const QDomNode &parent, QString element, SoapType &target ); + template <class T> + void parseSoapTypeList ( const QDomNode &parent, QString startElement, QString listElement, QList<T> &target ); + void parseList ( const QDomNode &parent, QString startElement, QString listElement, QList<QString> &target ); + + // these two have to be here because of C++ template compiler wierdness. + template <class T> + QString arg( QString listElement, QString itemElement, QList<T> list ) + { + if ( list.count() == 0 ) return QString(); + + QString res; + + foreach( const T &t, list ) + { + res += arg( itemElement, t ); + } + + return arg( listElement, res ); + } + + template <class T> + void parseSoapTypeList( const QDomNode &parent, QString startElement, QString subElementName, QList<T*> &target ) + { + const QDomNodeList &nodes = XmlFunctions::getNode( parent, startElement ).toElement().elementsByTagName( subElementName ); + + for( int i = 0; i < nodes.count(); i++ ) + { + const QDomNode &n = nodes.at( i ); + T *t = new T(); + t->parse( n ); + target.append( t ); + } + } +}; + +}; + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-05-15 11:06:40
|
Revision: 6007 http://kmess.svn.sourceforge.net/kmess/?rev=6007&view=rev Author: pano9000 Date: 2010-05-15 11:06:33 +0000 (Sat, 15 May 2010) Log Message: ----------- merged an updated Spanish translation Modified Paths: -------------- trunk/kmess/ChangeLog trunk/kmess/po/es.po Modified: trunk/kmess/ChangeLog =================================================================== --- trunk/kmess/ChangeLog 2010-05-14 13:13:41 UTC (rev 6006) +++ trunk/kmess/ChangeLog 2010-05-15 11:06:33 UTC (rev 6007) @@ -1,3 +1,6 @@ +2010-05-15 (Pano) + * Merged an updated Spanish translation by Mauricio Muñoz Lucero. + 2010-05-05 (Sjors) * Make MainWindow search for the application style in the kmess-dev data directory too. Modified: trunk/kmess/po/es.po =================================================================== --- trunk/kmess/po/es.po 2010-05-14 13:13:41 UTC (rev 6006) +++ trunk/kmess/po/es.po 2010-05-15 11:06:33 UTC (rev 6007) @@ -8,19 +8,19 @@ # Juan Pablo González Tognarelli <jot...@gm...>, 2008, 2009. # Alexis Medina <ale...@gm...>, 2009. # Manuel Ramírez <el...@kd...>, 2009. -# Mauricio Muñoz Lucero <rea...@gm...>, 2009. +# Mauricio Muñoz Lucero <rea...@gm...>, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" "POT-Creation-Date: 2009-08-25 16:52+0200\n" -"PO-Revision-Date: 2009-05-25 13:04+0200\n" -"Last-Translator: Mauricio Muñoz Lucero <rea...@gm...>\n" +"PO-Revision-Date: 2010-04-22 12:16+0000\n" +"Last-Translator: \n" "Language-Team: Spanish <kde...@kd...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 0.3\n" +"X-Generator: Lokalize 1.0\n" "First-Translator: Javier Cuesta Alcocer <yov...@ho...>\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Language: es_AR\n" @@ -179,7 +179,7 @@ #: chat/chat.cpp:1176 msgctxt "Warning message shown in chat" msgid "One or more contacts do not support the handwriting message." -msgstr "" +msgstr "Uno o más contactos, no soportan el modo mano alzada." #: chat/chat.cpp:1190 #, kde-format @@ -1073,7 +1073,7 @@ #: dialogs/addemoticondialog.cpp:198 msgid "Please, enter a text to associate with this emoticon" -msgstr "" +msgstr "Por favor, introduzca el texto asociado con el emoticon." #: dialogs/addemoticondialog.cpp:202 msgid "" @@ -1082,6 +1082,11 @@ "brackets with text within (like [b] or [color], which can be text formatting " "options)</li></ul>" msgstr "" +"Los accesos directos no deberán:<ul><li> tener más de 7 caracteres,</li><li> " +"tampoco podran empezar con \"/\" (podrían interferir con los comandos IRC),<" +"/li><li>contain square " +"brackets with text within (like [b] or [color], which can be text formatting " +"options)</li></ul>" #: dialogs/addemoticondialog.cpp:303 #, kde-format @@ -1821,7 +1826,7 @@ #: kmess.cpp:323 msgid "Group adding" -msgstr "" +msgstr "Grupo añadiendo" #: kmess.cpp:323 #, fuzzy @@ -1911,11 +1916,11 @@ #: kmess.cpp:700 msgid "Show &Script Console..." -msgstr "" +msgstr "Mostrar &Script de consola" #: kmess.cpp:701 msgid "New &Account..." -msgstr "Nueva &cuenta..." +msgstr "Nueva &Cuenta..." #: kmess.cpp:702 msgid "Configure Account..." @@ -1964,7 +1969,7 @@ #: kmess.cpp:1278 #, kde-format msgid "Could not find application style '%1'." -msgstr "" +msgstr "No se puede encontrar la aplicación estilo '%1'." #: kmess.cpp:1278 kmess.cpp:1284 kmess.cpp:1293 main.cpp:42 #: settings/accountpage.cpp:483 settings/accountpage.cpp:543 @@ -1974,12 +1979,12 @@ #: kmess.cpp:1284 #, kde-format msgid "Could not load application style '%1'." -msgstr "" +msgstr "No se puede cargar la aplicación estilo '%1'." #: kmess.cpp:1293 #, kde-format msgid "The application style '%1' is broken." -msgstr "" +msgstr "La aplicacion estilo '%1' esta rota." #: kmess.cpp:1326 msgctxt "Dialog box message" @@ -2397,7 +2402,7 @@ #: main.cpp:124 msgid "Émeric Dupont" -msgstr "" +msgstr "Émeric Dupont" #: main.cpp:126 msgid "Hungarian translation" @@ -2436,7 +2441,7 @@ #: main.cpp:131 msgid "Daniel E. Moctezuma" -msgstr "" +msgstr "Daniel E. Moctezuma" #: main.cpp:131 #, fuzzy @@ -2680,13 +2685,16 @@ #: main.cpp:176 msgid "Camille Begue" -msgstr "" +msgstr "Camille Begue" #: main.cpp:176 msgid "" "Chat History functionality when disconnected, autologin checkbox on login " "screen" msgstr "" +"Cunado la funcionalidad del historal este desactivada, la casilla de entrada " +"automática al iniciar sesión" +"pantalla." #: main.cpp:179 msgid "Inspiration and assorted code" @@ -2786,6 +2794,9 @@ "Connect to the specified server instead of the official Live server.\n" "Use \"localhost\" or \"127.0.0.1\" to connect to a local KMess Test Server." msgstr "" +"Conecte a un servidor específico en lugar del servidor official.\n" +"Use \"localhost\" o \"127.0.0.1\" para conectarse al servidor de prueba de " +"KMess." #: model/contactlist.cpp:1006 msgid "Individuals" @@ -3493,7 +3504,7 @@ #: notification/statusnotification.cpp:158 msgctxt "Status event message" msgid "Connection not successful within time limit." -msgstr "" +msgstr "La conexión no satisfactoria en el plazo estipulado" #: notification/statusnotification.cpp:161 #, fuzzy @@ -3529,9 +3540,11 @@ "or a required software package (QCA2) or one of its components may be " "missing." msgstr "" +"No se puede realizar la autenticación!<br/>La red puede estar no disponible, " +"o puede requerir el paquete (QCA2) o uno de estos componentes pueden estar " +"faltando." #: notification/statusnotification.cpp:178 -#, fuzzy msgctxt "Status event detailed message" msgid "" "KMess could not connect to the Live servers.<br/>Make sure you have " @@ -3539,7 +3552,7 @@ "possible that the Live network is unavailable at the moment." msgstr "" "<p>KMess no pudo conectar a los servidores de Live Messenger.<br /" -">Probablemente usted necesiteinstalar los paquetes qca2 y qca2-plugin-ossl " +">Probablemente usted necesite instalar los paquetes qca2 y qca2-plugin-ossl " "para que KMess funcione.<br/>También puede ser posible que la red MSN no " "esté disponible en este momento.</p>" @@ -3547,7 +3560,7 @@ #: notification/statusnotification.cpp:217 msgctxt "Status event message" msgid "An internal error has occurred in KMess. Network connection lost." -msgstr "" +msgstr "Se ha producido un error interno en KMess. Conexión finalizada." #: notification/statusnotification.cpp:219 #, kde-format @@ -3556,6 +3569,8 @@ "KMess has encountered an internal error, and the connection to the server " "was lost.</p><p><i>Server error:</i> %1" msgstr "" +"Kmess ha encontrado un error interno, y se ah perdido la conexión con el " +"servidor </p><p><i>Server error:</i> %1" #: notification/statusnotification.cpp:228 #, fuzzy @@ -3571,16 +3586,19 @@ "connection to the server has been closed to avoid further problems.</" "p><p><i>Error code:</i> %1<br/><p><i>Error message:</i> %2" msgstr "" +"Kmess ha recibido una respuesta inesperada del servidor Live Messenger, y la " +"conexión ha sido cerrada para prevenir problemas futiros.</" +"p><p><i>Error code:</i> %1<br/><p><i>Error message:</i> %2" #: notification/statusnotification.cpp:240 msgctxt "Status event message" msgid "Server request not successful within time limit." -msgstr "" +msgstr "No hubo respuesta por parte del servidor en el tiempo estipulado." #: notification/statusnotification.cpp:243 msgctxt "Status event message" msgid "Unexpected redirection from server. Network connection lost." -msgstr "" +msgstr "Redirección inesperada del servidor. Conexión perdida." #: notification/statusnotification.cpp:247 #, fuzzy @@ -3626,11 +3644,13 @@ "Chat request failed, the Live server is experiencing problems; try again " "later." msgstr "" +"Petición de chat fallida, el servidor Live esta presentado problemas, " +"intente más tarde." #: notification/statusnotification.cpp:266 msgctxt "Status event message" msgid "This user has not logged in." -msgstr "" +msgstr "Este usuario no se ha conectado." #: notification/statusnotification.cpp:269 #, fuzzy @@ -3709,6 +3729,7 @@ msgctxt "Status event message" msgid "This account is not present on this server. Please try again." msgstr "" +"Esta cuenta no esta presente en el servidor. Por favor intente de nuevo" #: notification/statusnotification.cpp:324 #, fuzzy @@ -3792,7 +3813,7 @@ #: settings/accountsettingsdialog.cpp:87 settings/accountsettingsdialog.cpp:88 msgid "Application styles" -msgstr "" +msgstr "Estilo de aplicacion" #: settings/accountsettingsdialog.cpp:94 settings/accountsettingsdialog.cpp:95 msgid "Contact List" @@ -4259,16 +4280,14 @@ #. i18n: file: chat/webcamframe.ui:14 #. i18n: ectx: property (windowTitle), widget (QWidget, WebcamFrame) #: rc.cpp:69 -#, fuzzy msgid "Webcam display" -msgstr "Conversación con cámara web " +msgstr "Visor webcam" #. i18n: file: chat/webcamframe.ui:51 #. i18n: ectx: property (text), widget (QLabel, status_) #: rc.cpp:72 -#, fuzzy msgid "Status text" -msgstr "E&stado al iniciar sesión" +msgstr "Estador del texto" #. i18n: file: dialogs/addcontactdialog.ui:33 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) @@ -4593,9 +4612,8 @@ #. i18n: file: dialogs/scriptconsoledialog.ui:14 #. i18n: ectx: property (windowTitle), widget (QWidget, ScriptConsoleDialog) #: rc.cpp:250 -#, fuzzy msgid "KMess Script Console" -msgstr "Icono de KMess" +msgstr "Consola de Script, Kmess" #. i18n: file: dialogs/transferentry.ui:196 #. i18n: ectx: property (text), widget (KUrlLabel, openLabel_) @@ -4638,9 +4656,8 @@ #. i18n: file: dialogs/welcomedialog.ui:39 #. i18n: ectx: property (title), widget (QWizardPage, welcomePage_) #: rc.cpp:273 rc.cpp:276 -#, fuzzy msgid "Welcome to KMess!" -msgstr "Bienvenido a %1." +msgstr "Bienvenido a Kmess!" #. i18n: file: dialogs/welcomedialog.ui:51 #. i18n: ectx: property (text), widget (QLabel, label_8) @@ -4654,6 +4671,14 @@ "annoy you for a long time</b>: a few weeks as a minimum.</p>\n" "<p>See the last page in this wizard for more information.</p>" msgstr "" +"<h2>Hey tú!</h2>\n" +"<p>Estas usando KMess desde el tronco... Sabias que ya paso a la version 2." +"1, usted debe estar usando <b> version 2.0.x </b> Si usted quiere usar una " +"version estable de Live Messenger client?</p>\n" +"<p>Si ested quiere realmente ver el pre-alpha 2.1 que se esta desarrollando " +", este dialogo <b> podria molestarle a usted un tiempo</b>: un par de " +"semanas como minimo.</p>\n" +"<p>Vea la última página para más información.</p>" #. i18n: file: dialogs/welcomedialog.ui:67 #. i18n: ectx: property (text), widget (QLabel, label_2) @@ -4662,6 +4687,8 @@ "This wizard will ask you a few questions, and if you want, it can tell you " "about all the excellent features KMess has." msgstr "" +"Este asistente le hara unas pequeñas preguntas, y si usted lo desea, le " +"comentara sobre todas las excelentes características de KMess." #. i18n: file: dialogs/welcomedialog.ui:77 #. i18n: ectx: property (text), widget (QLabel, label_7) @@ -4671,6 +4698,10 @@ "later. Alternatively, if you want to see this wizard again, you can click " "Actions, then Show configuration wizard." msgstr "" +"Usted puede cambiar todos estos ajustes y mucho más en las preferencias KMess" +"más tarde. haga clic en otra parte, si desea ver el asistente de nuevo, " +"puede hacer" +"Acciones y luego Show configuration wizard." #. i18n: file: dialogs/welcomedialog.ui:113 #. i18n: ectx: property (text), widget (QLabel, label_4) @@ -4679,12 +4710,14 @@ "KMess can keep track of your conversations for you! That way, you will " "always be able to look up old conversations." msgstr "" +"KMess puede realizar un seguimiento de sus conversaciones para usted! De " +"esta forma, sera capaz de mirar arriba antiguas conversaciones." #. i18n: file: dialogs/welcomedialog.ui:123 #. i18n: ectx: property (text), widget (QCheckBox, keepInternalLogs_) #: rc.cpp:297 msgid "I want KMess to keep internal logs for me." -msgstr "" +msgstr "Quiero KMess para mantener registros internos para mí." #. i18n: file: dialogs/welcomedialog.ui:130 #. i18n: ectx: property (text), widget (QLabel, label_5) @@ -4693,25 +4726,26 @@ "KMess can also log to another location, for example, if you want to take " "your chat logs with you on a USB stick." msgstr "" +"KMess también puede iniciar una sesión en otra ubicación, por ejemplo, si " +"usted quiere puede tomar sus registros de charla con una memoria USB." #. i18n: file: dialogs/welcomedialog.ui:140 #. i18n: ectx: property (text), widget (QCheckBox, keepExternalLogs_) #: rc.cpp:303 msgid "I want KMess to also save my chat logs elsewhere." -msgstr "" +msgstr "Quiero KMess para guardar mis registros de chat en otros lugares." #. i18n: file: dialogs/welcomedialog.ui:147 #. i18n: ectx: property (text), widget (QLabel, label_6) #: rc.cpp:306 msgid "Insert directory chooser here." -msgstr "" +msgstr "Inserte aquí el selector de directorio" #. i18n: file: dialogs/welcomedialog.ui:177 #. i18n: ectx: property (title), widget (QWizardPage, wizardPage3) #: rc.cpp:309 -#, fuzzy msgid "\"Now Listening\" feature" -msgstr "Escuchando ahora a: %1" +msgstr "\"Ahora escucha\" función" #. i18n: file: dialogs/welcomedialog.ui:183 #. i18n: ectx: property (text), widget (QLabel, label) @@ -4720,6 +4754,9 @@ "KMess can display what song you are currently listening to, if your music " "player supports that. For example, Amarok is known to work with this." msgstr "" +"KMess puede mostrar qué canción estás escuchando en ese momento, si su " +"reproductor es compatible con eso. Por ejemplo, Amarok se sabe que funciona " +"con esto." #. i18n: file: dialogs/welcomedialog.ui:194 #. i18n: ectx: property (text), widget (QLabel, label_3) @@ -4728,30 +4765,34 @@ "You are currently listening to:\n" "\tJohn O'Callaghan - Surreal (Club Mix)" msgstr "" +"Usted está escuchando en ese momento:\n" +"\tJohn O'Callaghan - Surreal (Club Mix)" #. i18n: file: dialogs/welcomedialog.ui:201 #. i18n: ectx: property (text), widget (QCheckBox, enableNowListening_) #: rc.cpp:319 msgid "I want my contacts to be able to see this!" -msgstr "" +msgstr "Quiero que mis contactos puedan ver esto!" #. i18n: file: dialogs/welcomedialog.ui:228 #. i18n: ectx: property (title), widget (QWizardPage, wizardPage) #: rc.cpp:322 msgid "Using version 2.1-dev" -msgstr "" +msgstr "Usando la versión 2.1-dev" #. i18n: file: dialogs/welcomedialog.ui:234 #. i18n: ectx: property (text), widget (QLabel, label_9) #: rc.cpp:325 msgid "You are using KMess version 2.1-dev. Here is a warning up front:" msgstr "" +"Estás usando la versión 2.1 KMess-dev. Aquí está una advertencia por " +"adelantado:" #. i18n: file: dialogs/welcomedialog.ui:244 #. i18n: ectx: property (text), widget (QLabel, label_10) #: rc.cpp:328 msgid "<h2>STUFF WON'T WORK!</h2>" -msgstr "" +msgstr "<h2>Hay cosas que no funcionan</h2>" #. i18n: file: dialogs/welcomedialog.ui:254 #. i18n: ectx: property (text), widget (QLabel, label_11) @@ -4761,6 +4802,9 @@ "like bleeding edge and can live with all the bugs, including those that will " "completely destroy your computer and social life on MSN." msgstr "" +"Hay, en este momento, *no* hay verdaderas razones para permanecer en el " +"2,1-dev, a menos que a usted le guste vivir con todos los errores, incluidos " +"la destruccion completamente el equipo y la vida social en el MSN." #. i18n: file: dialogs/welcomedialog.ui:264 #. i18n: ectx: property (text), widget (QLabel, label_12) @@ -4769,18 +4813,22 @@ "For more information on switching to the stable 2.0 branch, copy-paste this " "link into your web browser:" msgstr "" +"Para obtener más información sobre cómo cambiar a la versión estable 2.0, " +"copiar y pegar este enlace en su navegador web:" #. i18n: file: dialogs/welcomedialog.ui:274 #. i18n: ectx: property (text), widget (QLineEdit, lineEdit) #: rc.cpp:337 msgid "http://bit.ly/FVtmo" -msgstr "" +msgstr "http://bit.ly/FVtmo" #. i18n: file: dialogs/welcomedialog.ui:284 #. i18n: ectx: property (text), widget (QLabel, label_13) #: rc.cpp:340 msgid "Using 2.0 is *HIGHLY* recommended until 2.1 becomes more stable." msgstr "" +"Usar 2,0 es ALTAMENTE recomendado hasta que la version 2,1 se vuelve más " +"estable." #. i18n: file: dialogs/welcomedialog.ui:294 #. i18n: ectx: property (text), widget (QLabel, label_14) @@ -4789,6 +4837,9 @@ "In any case, don't report bugs on things being broken, it's supposed to be " "broken! We consider that a feature in trunk. ;-)" msgstr "" +"En cualquier caso, no informar sobre errores en las cosas que estan rotas, " +"se supone que estan rotas! Consideramos que una característica en el tronco. " +";-)" #. i18n: file: initialview.ui:66 #. i18n: ectx: property (toolTip), widget (DisplayPictureWidget, pictureLabel_) @@ -4863,9 +4914,8 @@ #. i18n: file: initialview.ui:263 #. i18n: ectx: property (text), widget (QCheckBox, rememberAutoLoginCheckBox_) #: rc.cpp:385 -#, fuzzy msgid "Log in automatically" -msgstr "Iniciar &sesión con esta cuenta automáticamente" +msgstr "Iniciar sesión automáticamente" #. i18n: file: initialview.ui:307 #. i18n: ectx: property (toolTip), widget (QPushButton, connectButton_) @@ -5238,14 +5288,14 @@ "You can make KMess to log in automatically when started, but you need to " "save the password of the account you wish to connect." msgstr "" +"Usted puede hacer que KMess inicie sesión automáticamente cuando se inicia, " +"pero hay que guardar la contraseña de la cuenta que desea conectar." #. i18n: file: settings/accountsmanagerpage.ui:63 #. i18n: ectx: property (text), widget (QCheckBox, autoLoginCheckBox_) #: rc.cpp:551 -#, fuzzy msgid "&Login automatically with this account:" -msgstr "" -"Si está activado, KMess iniciará sesión con esta cuenta automáticamente." +msgstr "&Entrar automáticamente con esta cuenta:" #. i18n: file: settings/accountsmanagerpage.ui:113 #. i18n: ectx: property (toolTip), widget (QPushButton, addAccountButton_) @@ -5302,7 +5352,7 @@ #. i18n: ectx: property (text), widget (QCheckBox, livePreviewCheck_) #: rc.cpp:586 msgid "Live preview" -msgstr "" +msgstr "Vista previa." #. i18n: file: settings/chatloggingpage.ui:17 #. i18n: ectx: property (toolTip), widget (QCheckBox, logChatsCheckBox_) @@ -6149,13 +6199,15 @@ #. i18n: ectx: attribute (title), widget (QWidget, tab_4) #: rc.cpp:978 msgid "Miscellaneous" -msgstr "" +msgstr "Misceláneo" #. i18n: file: settings/miscellaneouspage.ui:442 #. i18n: ectx: property (toolTip), widget (QCheckBox, hiddenStartCheckBox_) #: rc.cpp:981 msgid "Check this box to not show the KMess login window when it starts." msgstr "" +"Marque esta casilla para no mostrar la ventana de acceso KMess cuando se " +"inicia." #. i18n: file: settings/miscellaneouspage.ui:445 #. i18n: ectx: property (whatsThis), widget (QCheckBox, hiddenStartCheckBox_) @@ -6164,12 +6216,14 @@ "When this option is checked, KMess will start hidden, but will still be " "accessible from the system tray icon." msgstr "" +"Cuando esta opción está activada, KMess arrancará oculto, pero seguirá" +"accesibles desde el icono de la bandeja del sistema." #. i18n: file: settings/miscellaneouspage.ui:448 #. i18n: ectx: property (text), widget (QCheckBox, hiddenStartCheckBox_) #: rc.cpp:987 msgid " Hide KMess at startup" -msgstr "" +msgstr "Ocultar KMess en el arranque" #~ msgid "Your name" #~ msgstr "Su nombre" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <it_...@us...> - 2010-05-14 13:13:48
|
Revision: 6006 http://kmess.svn.sourceforge.net/kmess/?rev=6006&view=rev Author: it_amroth Date: 2010-05-14 13:13:41 +0000 (Fri, 14 May 2010) Log Message: ----------- kmess-2.0.x: Fixed a bug which made login to fail when the roaming service gives us a changed display picture before setting the initial status. Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-05-08 16:28:10 UTC (rev 6005) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-05-14 13:13:41 UTC (rev 6006) @@ -1,3 +1,7 @@ +2010-05-13 (Valerio) + * Fixed bug which made login to fail when the roaming service gives us a changed display + picture before setting the initial status. + 2010-05-08 (Pano) * Merged an updated Dutch translation by Heimen Stoffels. @@ -22,7 +26,7 @@ 2010-03-30 (Adam) * Add Francesco Nwokeka to the credits dialog for the Now Playing toggle button. - * Workaround a Qt 4.6.1/4.6.2 bug which was causing multiple copies of a single DP to appear in the "set previous + * Workaround a Qt 4.6.1/4.6.2 bug which was causing multiple copies of a single DP to appear in the "set previous display picture" dialog and the contact properties dialog. 2010-03-28 (Adam) Modified: branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp =================================================================== --- branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp 2010-05-08 16:28:10 UTC (rev 6005) +++ branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp 2010-05-14 13:13:41 UTC (rev 6006) @@ -79,6 +79,7 @@ connected_(false), currentAccount_(0), enableNotifications_(false), + goneOnline_(false), initialized_(false), isInitiatingConnection_(false), lastStatus_(-1), @@ -109,7 +110,7 @@ loginTimer_.setSingleShot( true ); connect( &loginTimer_, SIGNAL( timeout() ), this, SLOT ( slotAuthenticationFailed() ) ); - + notificationUnlockTimer_.setSingleShot( true ); connect( ¬ificationUnlockTimer_, SIGNAL( timeout() ), this, SLOT( unlockNotifications() ) ); } @@ -343,7 +344,7 @@ */ void MsnNotificationConnection::changedMsnObject() { - if(isConnected()) + if( isConnected() && goneOnline_ ) { // Send the same status message, with a new msn object changeStatus(currentAccount_->getStatus()); @@ -386,7 +387,7 @@ AddressBookService *addressBook = createAddressBookService(); addressBook->contactUpdate( AddressBookService::PROPERTY_FRIENDLYNAME, newName ); - + RoamingService *roaming = createRoamingService(); roaming->updateProfile(); @@ -537,6 +538,14 @@ */ void MsnNotificationConnection::changeStatus( const Status newStatus ) { + const QString& statusCode( MsnStatus::getCode( newStatus ) ); + + if( newStatus == STATUS_OFFLINE ) + { + kWarning() << "Cannot change status to Offline!"; + return; + } + quint32 capabilities = Contact::MSN_CAP_INK_GIF // If Isf-Qt is disabled, we can still receive GIF images | Contact::MSN_CAP_WINKS @@ -552,15 +561,8 @@ capabilities |= Contact::MSN_CAP_INK_ISF; #endif - const QString& statusCode( MsnStatus::getCode( newStatus ) ); const QString objStr( QUrl::toPercentEncoding( currentAccount_->getMsnObjectString() ) ); - /* - // To test the old file transfer: - sendCommand( "CHG", newStatus + " 0"); - return; - */ - if( objStr.isEmpty() ) { // Just don't send it if we don't have it. @@ -628,6 +630,8 @@ offlineImService_ = 0; passportLoginService_ = 0; isInitiatingConnection_ = false; + initialStatusSent_ = false; + goneOnline_ = false; lastStatus_ = -1; roamingService_ = 0; @@ -849,18 +853,18 @@ // Initialize a triple-DES CBC encryption gcry_cipher_hd_t handle; gcry_cipher_open( &handle, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_CBC, 0 ); - + // Set key and IV gcry_cipher_setkey( handle, key.constData(), key.size() ); gcry_cipher_setiv( handle, iv.constData(), iv.size() ); - + // Encrypt the data. The out buffer has to have the same size as the in buffer. char *encrypted = new char[ secret.size() ]; gcry_cipher_encrypt( handle, (void*) encrypted, secret.size(), secret.constData(), secret.size() ); - + // Clean up the cipher handle gcry_cipher_close( handle ); - + QByteArray encryptedByteArray( encrypted, secret.size() ); delete [] encrypted; return encryptedByteArray; @@ -917,7 +921,15 @@ } initialStatusSent_ = true; + if( goneOnline_ ) + { #ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Already gone online, skipping call."; +#endif + return; + } + +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL kDebug() << "Going online!"; #endif @@ -989,6 +1001,8 @@ // start a sliding timer: whilst we're receiving the first ILNs do not display notifications. // when 10sec have elapsed after the last ILN then we unlock the notifications. notificationUnlockTimer_.start( 10000 ); + + goneOnline_ = true; } @@ -1787,7 +1801,7 @@ if( !gcry_control( GCRYCTL_INITIALIZATION_FINISHED_P ) ) { gcry_check_version( 0 ); - + // We don't need secure memory for this, I guess... Passwords and // everything have already been sent. gcry_control( GCRYCTL_DISABLE_SECMEM, 0 ); @@ -1914,7 +1928,7 @@ } enableNotifications_ = false; - + // If the last connection was using HTTP, try again using TCP first. switchToTcpSocket(); @@ -2579,7 +2593,7 @@ // Remove the contact from AB AddressBookService *addressBook = createAddressBookService();; addressBook->deleteContact( contactId ); - + // if not blocking, make sure we re-add to the Allow list. // ABContactDelete removes them from the Allow list for some reason. This was what // caused the "you've been added" dialog to popup for deleted contacts on the next login. @@ -3043,7 +3057,7 @@ openConnection(); return; } - + // Clean up the mess left by the SOAP classes if( qobject_cast<OfflineImService*>( sender() ) != 0 ) { Modified: branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h =================================================================== --- branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h 2010-05-08 16:28:10 UTC (rev 6005) +++ branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h 2010-05-14 13:13:41 UTC (rev 6006) @@ -338,6 +338,8 @@ CurrentAccount *currentAccount_; // Whether or not to enable presence notifications bool enableNotifications_; + // Whether the goOnline() operation was completed + bool goneOnline_; // Group where to initially place a newly added contact QString initialContactAddedGroup_; // Whether or not the object was initialized This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-05-08 16:28:17
|
Revision: 6005 http://kmess.svn.sourceforge.net/kmess/?rev=6005&view=rev Author: pano9000 Date: 2010-05-08 16:28:10 +0000 (Sat, 08 May 2010) Log Message: ----------- Merged an updated Dutch translation Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/po/nl.po Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-05-08 08:23:45 UTC (rev 6004) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-05-08 16:28:10 UTC (rev 6005) @@ -1,3 +1,5 @@ +2010-05-08 (Pano) + * Merged an updated Dutch translation by Heimen Stoffels. 2010-05-08 (sifcenter) * Fixed bug on show listening music when the user is busy (maybe also with other states): the bit operation doesn't work Modified: branches/kmess/kmess-2.0.x/po/nl.po =================================================================== --- branches/kmess/kmess-2.0.x/po/nl.po 2010-05-08 08:23:45 UTC (rev 6004) +++ branches/kmess/kmess-2.0.x/po/nl.po 2010-05-08 16:28:10 UTC (rev 6005) @@ -12,13 +12,14 @@ # Sjors Gielen <da...@km...>, 2009. # Sjors Gielen <sj...@km...>, 2009, 2010. # Heimen <vis...@gm...>, 2010. +# Heimen Stoffels <vis...@gm...>, 2010. msgid "" msgstr "" "Project-Id-Version: nl\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" "POT-Creation-Date: 2010-05-03 21:06+0200\n" -"PO-Revision-Date: 2010-03-27 14:50+0100\n" -"Last-Translator: Heimen <vis...@gm...>\n" +"PO-Revision-Date: 2010-05-05 17:28+0200\n" +"Last-Translator: Heimen Stoffels <vis...@gm...>\n" "Language-Team: <en...@li...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -170,8 +171,7 @@ #: chat/chat.cpp:1187 #, kde-format msgctxt "Warning message shown in chat, %1 is the contact's friendly name" -msgid "" -"%1 has sent you a voice clip, but KMess does not support voice clips yet." +msgid "%1 has sent you a voice clip, but KMess does not support voice clips yet." msgstr "" "%1 heeft u een voiceclip verstuurd, maar KMess ondersteunt nog geen " "voiceclips." @@ -189,14 +189,12 @@ #: chat/chat.cpp:1212 msgctxt "Warning message shown in chat" msgid "One or more contacts do not support the handwriting message." -msgstr "" -"Één of meer contactpersonen ondersteunen het handgeschreven bericht niet." +msgstr "Één of meer contactpersonen ondersteunen het handgeschreven bericht niet." #: chat/chat.cpp:1226 #, kde-format msgctxt "Warning message shown in chat, %1 is the contact's friendly name" -msgid "" -"%1 has sent you a Live Messenger feature that KMess does not support yet." +msgid "%1 has sent you a Live Messenger feature that KMess does not support yet." msgstr "" "%1 heeft u een Live Messenger-mogelijkheid verstuurd die KMess nog niet " "ondersteunt." @@ -423,8 +421,7 @@ #: chat/chatmessageview.cpp:345 #, kde-format -msgctxt "" -"Header of a chat file saved in HTML: %1 is the contact, %2 the date and time" +msgctxt "Header of a chat file saved in HTML: %1 is the contact, %2 the date and time" msgid "Chat with %1<br/>Started on: %2" msgstr "Gesprek met %1<br/>Gestart op: %2" @@ -693,8 +690,7 @@ #: chat/chatwindow.cpp:1172 msgid "<html>You cannot use the /block command in a group chat.</html>" -msgstr "" -"<html>In een groepsgesprek kunt u het /block commando niet gebruiken.</html>" +msgstr "<html>In een groepsgesprek kunt u het /block commando niet gebruiken.</html>" #: chat/chatwindow.cpp:1174 msgctxt "Caption when trying to block someone in a group chat" @@ -835,10 +831,8 @@ #: chat/chatwindow.cpp:2806 msgctxt "Label text" -msgid "" -"Winks are disabled: some of the contacts do not support receiving winks." -msgstr "" -"Winks zijn uitgeschakeld: één of meer contactpersonen ondersteunt winks niet." +msgid "Winks are disabled: some of the contacts do not support receiving winks." +msgstr "Winks zijn uitgeschakeld: één of meer contactpersonen ondersteunt winks niet." #: chat/chatwindow.cpp:2812 msgctxt "Label text" @@ -1221,8 +1215,7 @@ #: dialogs/contactpropertiesdialog.cpp:666 msgctxt "Dialog box text" msgid "Are you sure you want to use the display picture of this contact?" -msgstr "" -"Weet u zeker dat u de schermafbeelding van deze contactpersoon wil gebruiken?" +msgstr "Weet u zeker dat u de schermafbeelding van deze contactpersoon wil gebruiken?" #: dialogs/contactpropertiesdialog.cpp:668 msgid "Copy Contact Picture" @@ -1739,8 +1732,7 @@ #: initialview.cpp:274 msgctxt "Status message on login screen" msgid "Cannot reconnect: this account has no saved password" -msgstr "" -"Kan niet opnieuw verbinden: dit account heeft geen opgeslagen wachtwoord." +msgstr "Kan niet opnieuw verbinden: dit account heeft geen opgeslagen wachtwoord." #: initialview.cpp:309 initialview.cpp:417 #, kde-format @@ -1760,8 +1752,7 @@ #: initialview.cpp:443 #, kde-format msgctxt "Status message on login screen" -msgid "" -"Waiting %1 second before reconnection...<br /><a href='%2'>Reconnect now!</a>" +msgid "Waiting %1 second before reconnection...<br /><a href='%2'>Reconnect now!</a>" msgid_plural "" "Waiting %1 seconds before reconnection...<br /><a href='%2'>Reconnect now!</" "a>" @@ -1795,8 +1786,7 @@ #: kmess.cpp:217 #, kde-format msgid "<html>The contact <b>%1</b> is already in your contact list.</html>" -msgstr "" -"<html>De contactpersoon <b>%1</b> staat al in uw contactenlijst.</html>" +msgstr "<html>De contactpersoon <b>%1</b> staat al in uw contactenlijst.</html>" #: kmess.cpp:217 msgid "Contact Information" @@ -1928,8 +1918,7 @@ #: kmess.cpp:1778 #, kde-format -msgctxt "" -"Main window caption: switched order to easily distinguish it from chats" +msgctxt "Main window caption: switched order to easily distinguish it from chats" msgid "KMess - %1" msgstr "KMess - %1" @@ -2203,18 +2192,15 @@ #: kmessview.cpp:2252 msgid "Show contacts what you are listening to (click to disable)" -msgstr "" -"Laat contacten zien welke muziek ik beluister (klik om uit te schakelen)" +msgstr "Laat contacten zien welke muziek ik beluister (klik om uit te schakelen)" #: kmessview.cpp:2257 msgid "Show contacts what you are listening to (click to enable)" -msgstr "" -"Laat contacten zien welke muziek ik beluister (klik om in te schakelen)" +msgstr "Laat contacten zien welke muziek ik beluister (klik om in te schakelen)" #: kmessviewdelegate.cpp:290 #, kde-format -msgctxt "" -"Group name in the contact list with online/total contacts of that group" +msgctxt "Group name in the contact list with online/total contacts of that group" msgid "%1 (%2/%3)" msgstr "%1 (%2/%3)" @@ -2302,8 +2288,7 @@ msgid "" "German translation, testing, documentation, web master, project management, " "etc..." -msgstr "" -"Duitse vertaling, testen, documentatie, webmaster, projectmanagement, enz..." +msgstr "Duitse vertaling, testen, documentatie, webmaster, projectmanagement, enz..." #: main.cpp:75 msgid "Dane Harnett" @@ -2598,8 +2583,7 @@ msgstr "Andrea Decorte" #: main.cpp:131 -msgid "" -"More Italian translation, Group selection in 'contact added user' dialog" +msgid "More Italian translation, Group selection in 'contact added user' dialog" msgstr "" "Verdere Italiaanse vertaling, groepselectie in dialoogvenster 'toegevoegde " "gebruiker contacteren'" @@ -2880,8 +2864,7 @@ msgstr "Anastasios Bourazanis" #: main.cpp:181 -msgid "" -"Emoticon preview in settings page,clickable contact properties dialog text" +msgid "Emoticon preview in settings page,clickable contact properties dialog text" msgstr "" "Emoticonweergave op de instellingspagina, klikbare text in het " "contacteigenschappen-venster" @@ -2898,11 +2881,11 @@ #: main.cpp:183 msgid "Francesco Nwokeka" -msgstr "" +msgstr "Francesco Nwokeka" #: main.cpp:183 msgid "Now Listening toggle button above the contact list." -msgstr "" +msgstr "Nu aan het luisteren naar aan/uit-knop boven de contactpersonenlijst." #: main.cpp:186 msgid "Inspiration and assorted code" @@ -2936,16 +2919,14 @@ #: main.cpp:189 msgid "Close-to-tray icon screenshot code" -msgstr "" -"Code voor screenshot met instructies betreft het sluiten naar het systeemvak" +msgstr "Code voor screenshot met instructies betreft het sluiten naar het systeemvak" #: main.cpp:190 msgid "Amarok" msgstr "Amarok" #: main.cpp:190 -msgid "" -"Custom crash handler implementation, System tray icon overlay implementation" +msgid "Custom crash handler implementation, System tray icon overlay implementation" msgstr "" "Implementatie van eigen crash-handler, implementatie van embleem op het " "systeemvak-icoon" @@ -2954,8 +2935,7 @@ msgid "" "KNotify not giving focus bug fix and KWin focus stealing prevention " "workaround" -msgstr "" -"KNotify geeft geen focus bug fix en KWin focus stealing prevention workaround" +msgstr "KNotify geeft geen focus bug fix en KWin focus stealing prevention workaround" #: main.cpp:191 msgid "Quassel" @@ -3062,8 +3042,7 @@ #: network/applications/filetransfer.cpp:290 #: network/applications/filetransferp2p.cpp:376 #, kde-format -msgid "" -"The transfer of the file "%1" failed. Could not save the file." +msgid "The transfer of the file "%1" failed. Could not save the file." msgstr "" "De overdracht van bestand "%1" is mislukt. Kon het bestand niet " "opslaan." @@ -3073,8 +3052,7 @@ msgid "" "The transfer of the file "%1" failed. Could not open the " "destination file." -msgstr "" -"De overdracht van "%1" is mislukt. Kon het bronbestand niet openen." +msgstr "De overdracht van "%1" is mislukt. Kon het bronbestand niet openen." #: network/applications/filetransfer.cpp:319 msgid "Transfer accepted." @@ -3091,8 +3069,7 @@ #: network/applications/filetransferp2p.cpp:548 #, kde-format msgid "The contact has cancelled the transfer of the file "%1"." -msgstr "" -"De contactpersoon heeft de bestandsoverdracht van "%1" geannuleerd." +msgstr "De contactpersoon heeft de bestandsoverdracht van "%1" geannuleerd." #: network/applications/filetransfer.cpp:432 #: network/applications/filetransferp2p.cpp:559 @@ -3125,16 +3102,13 @@ #: network/applications/filetransfer.cpp:742 #: network/applications/filetransferp2p.cpp:811 #, kde-format -msgid "" -"The transfer of the file "%1" failed. The file does not exist." -msgstr "" -"Bestandsoverdracht van "%1" is mislukt. Het bestand bestaat niet." +msgid "The transfer of the file "%1" failed. The file does not exist." +msgstr "Bestandsoverdracht van "%1" is mislukt. Het bestand bestaat niet." #: network/applications/filetransfer.cpp:747 #: network/applications/filetransferp2p.cpp:816 #, kde-format -msgid "" -"The transfer of the file "%1" failed. The file could not be read." +msgid "The transfer of the file "%1" failed. The file could not be read." msgstr "" "Bestandsoverdracht van "%1" is mislukt. Het bestand kan niet " "gelezen worden." @@ -3191,8 +3165,7 @@ #, kde-format msgctxt "Error message shown in chat, %1 is the contact's friendly name" msgid "<html>The handwritten message to %1 could not be delivered.</html>" -msgstr "" -"<html>Het verzenden van het handgeschreven bericht naar %1 is mislukt.</html>" +msgstr "<html>Het verzenden van het handgeschreven bericht naar %1 is mislukt.</html>" #: network/applications/mimeapplication.cpp:154 msgid "The invitation was rejected. It is not supported by the other client." @@ -3252,14 +3225,12 @@ #: network/applications/p2papplication.cpp:1192 msgid "The invitation was cancelled. Message was not directed to us." -msgstr "" -"De uitnodiging is geannuleerd. Het bericht werd niet naar ons verstuurd." +msgstr "De uitnodiging is geannuleerd. Het bericht werd niet naar ons verstuurd." #: network/applications/p2papplication.cpp:1744 #: network/applications/p2papplicationbase.cpp:855 #: network/applications/p2papplicationbase.cpp:935 -msgid "" -"The transfer failed. The contact sent bad data, or KMess does not support it." +msgid "The transfer failed. The contact sent bad data, or KMess does not support it." msgstr "" "De overdracht is afgebroken. De contactpersoon heeft corrupte data " "verzonden, of KMess ondersteunt dit niet." @@ -3281,8 +3252,7 @@ #: network/applications/p2papplication.cpp:2144 #: network/applications/p2papplication.cpp:3378 msgid "Reverting to indirect file transfer (this could be slow)." -msgstr "" -"Terugschakelen naar indirecte bestandsoverdracht (is mogelijk langzaam)" +msgstr "Terugschakelen naar indirecte bestandsoverdracht (is mogelijk langzaam)" #: network/applications/p2papplication.cpp:3169 msgid "Waiting for connection" @@ -3371,8 +3341,7 @@ #: network/extra/msnftpconnection.cpp:126 #, kde-format msgid "The contact has cancelled the transfer of file "%1"." -msgstr "" -"De contactpersoon heeft de bestandsoverdracht van "%1" geannuleerd." +msgstr "De contactpersoon heeft de bestandsoverdracht van "%1" geannuleerd." #: network/extra/msnftpconnection.cpp:133 msgid "Failed" @@ -3399,8 +3368,7 @@ #: network/extra/msnftpconnection.cpp:469 #, kde-format msgid "The transfer of %1 failed. A connection could not be made." -msgstr "" -"De overdracht van %1 is mislukt. Er kon geen verbinding worden gemaakt." +msgstr "De overdracht van %1 is mislukt. Er kon geen verbinding worden gemaakt." #: network/extra/msnftpconnection.cpp:470 msgid "Unable to make a connection." @@ -3421,8 +3389,7 @@ #: network/msnconnection.cpp:385 msgid "The email address you have tried to add is not a Live Messenger account" -msgstr "" -"Het e-mailadres dat u probeert toe te voegen, is geen Live Messenger-account." +msgstr "Het e-mailadres dat u probeert toe te voegen, is geen Live Messenger-account." #: network/msnconnection.cpp:390 msgid "Domain name missing" @@ -3440,8 +3407,7 @@ msgid "" "This account name is invalid, or your Passport account has not been " "confirmed yet" -msgstr "" -"deze accountnaam is ongeldig, of uw Passport-account is nog niet bevestigd" +msgstr "deze accountnaam is ongeldig, of uw Passport-account is nog niet bevestigd" #: network/msnconnection.cpp:404 msgid "Your contact list is full" @@ -3486,8 +3452,7 @@ msgid "" "Your contact list has too many groups; you are allowed to only have at most " "30" -msgstr "" -"Uw contactenlijst heeft te veel groepen; u mag maximaal 30 groepen hebben" +msgstr "Uw contactenlijst heeft te veel groepen; u mag maximaal 30 groepen hebben" #: network/msnconnection.cpp:441 msgid "This group cannot be changed" @@ -3547,8 +3512,7 @@ msgstr "Niet ingelogd" #: network/msnconnection.cpp:493 -msgctxt "" -"MSN error, due to e.g. trying the beta service without an allowed account" +msgctxt "MSN error, due to e.g. trying the beta service without an allowed account" msgid "This account was denied access to the Live Messenger service" msgstr "Dit account heeft geen toegang tot de Live Messenger-service" @@ -3607,8 +3571,7 @@ msgstr "Geen nieuwe contacten accepteren" #: network/msnconnection.cpp:559 -msgid "" -"You have a Kids Passport account, you need parental consent to chat online" +msgid "You have a Kids Passport account, you need parental consent to chat online" msgstr "" "Je hebt een Kids Passport-account, dus heb je toestemming van je ouders " "nodig om online te chatten" @@ -3636,10 +3599,8 @@ "serverfout op" #: network/msnconnection.cpp:596 -msgid "" -"The Live Messenger service is temporarily unavailable. The server is too busy" -msgstr "" -"De Live Messenger-service is tijdelijk onbeschikbaar, de server is overbelast" +msgid "The Live Messenger service is temporarily unavailable. The server is too busy" +msgstr "De Live Messenger-service is tijdelijk onbeschikbaar, de server is overbelast" #: network/msnconnection.cpp:600 msgid "Peer notification server down" @@ -3672,8 +3633,7 @@ #: network/msnconnection.cpp:635 #, kde-format -msgid "" -"Unknown error code received from the server: %1<br/>Technical details: %2" +msgid "Unknown error code received from the server: %1<br/>Technical details: %2" msgstr "Onbekende foutcode ontvangen van server: %1<br/>Technische details: %2" #: network/msnconnection.cpp:657 @@ -3849,8 +3809,7 @@ #: network/msnnotificationconnection.cpp:3157 #, kde-format -msgctxt "" -"Connection error (Server-reported user error): passive notification message" +msgctxt "Connection error (Server-reported user error): passive notification message" msgid "<p><i>Error</i>: %1</p>" msgstr "<p><i>Fout</i>: %1</p>" @@ -3862,8 +3821,7 @@ #: network/msnnotificationconnection.cpp:3170 #, kde-format -msgctxt "" -"Connection error (Server-reported server error): passive notification message" +msgctxt "Connection error (Server-reported server error): passive notification message" msgid "<p><i>Messenger Service Error</i>: %1</p>" msgstr "<p><i>Messenger Service-fout</i>: %1</p>" @@ -3875,8 +3833,7 @@ #: network/msnnotificationconnection.cpp:3180 #, kde-format -msgctxt "" -"Connection error (Server-reported client error): passive notification message" +msgctxt "Connection error (Server-reported client error): passive notification message" msgid "<p><i>KMess Error</i>: %1</p>" msgstr "<p><i>Foutmelding van KMess</i></p><p>%1</p>" @@ -3909,8 +3866,7 @@ #: network/msnsocketbase.cpp:135 msgctxt "Dialog box message" msgid "Enter your username and password to access the network proxy." -msgstr "" -"Voer uw gebruikersnaam en wachtwoord in om aan te melden bij de netwerkproxy." +msgstr "Voer uw gebruikersnaam en wachtwoord in om aan te melden bij de netwerkproxy." #: network/msnsockethttp.cpp:691 #, kde-format @@ -4354,8 +4310,7 @@ #: settings/miscellaneouspage.cpp:286 msgid "You have to specify a console command to launch a custom web browser!" -msgstr "" -"U moet een terminalcommando opgeven om een eigen webbrowser op te starten." +msgstr "U moet een terminalcommando opgeven om een eigen webbrowser op te starten." #: settings/miscellaneouspage.cpp:291 #, c-format @@ -4428,8 +4383,7 @@ msgstr "Welkom bij %1." #: utils/likeback/likeback.cpp:336 -msgctxt "" -"Welcome dialog text, explanation for both the like and dislike buttons" +msgctxt "Welcome dialog text, explanation for both the like and dislike buttons" msgid "" "Each time you have a great or frustrating experience, please click on the " "appropriate face below the window title-bar, briefly describe what you like " @@ -4477,8 +4431,7 @@ #: utils/likeback/likeback.cpp:380 msgctxt "Welcome dialog text, usage example" -msgid "" -"<b>I dislike</b> the welcome page of this assistant. Too time consuming." +msgid "<b>I dislike</b> the welcome page of this assistant. Too time consuming." msgstr "" "De welkomstpagina van deze assistent <b>gebruik ik niet</b>. Kost onnodig " "veel tijd." @@ -4520,8 +4473,7 @@ #: utils/likeback/likebackdialog.cpp:140 #, kde-format -msgctxt "" -"Feedback dialog text, message with one accepted language for the comments" +msgctxt "Feedback dialog text, message with one accepted language for the comments" msgid "" "Please, write it in <b>%1</b>, or the developers will not be able to read " "your comment!<br/>You may want to use an <a href=\"%2\">online translation " @@ -4546,8 +4498,7 @@ "vertaalhulpmiddel</a> gebruiken.<br/>" #: utils/likeback/likebackdialog.cpp:168 -msgctxt "" -"Feedback dialog text, message to remind to balance the likes and dislikes" +msgctxt "Feedback dialog text, message to remind to balance the likes and dislikes" msgid "" "To make the comments you send more useful in improving this application, try " "to send the same amount of positive and negative comments.<br/>" @@ -4579,10 +4530,8 @@ #: utils/likeback/likebackdialog.cpp:225 #, kde-format -msgid "" -"The email address you have entered is not valid, and cannot be used: '%1'" -msgstr "" -"Het ingevoerde e-mailadres is niet geldig, en kan niet gebruikt worden: '%1'" +msgid "The email address you have entered is not valid, and cannot be used: '%1'" +msgstr "Het ingevoerde e-mailadres is niet geldig, en kan niet gebruikt worden: '%1'" #: utils/likeback/likebackdialog.cpp:299 msgctxt "Dialog box text" @@ -4796,8 +4745,7 @@ #. i18n: file: dialogs/awaymessagedialog.ui:19 #. i18n: ectx: property (whatsThis), widget (QLabel, label) #: rc.cpp:101 -msgid "" -"Enter a message to be automatically sent to people who try to message you." +msgid "Enter a message to be automatically sent to people who try to message you." msgstr "" "Voer een bericht in dat automatisch wordt verzonden naar mensen die u " "proberen te bereiken." @@ -4876,8 +4824,7 @@ #. i18n: ectx: property (toolTip), widget (QLabel, imageContact_) #: rc.cpp:141 msgid "Click or Drag&Drop to change the image for this contact" -msgstr "" -"Klik of klik-en-sleep om het plaatje van deze contactpersoon te veranderen" +msgstr "Klik of klik-en-sleep om het plaatje van deze contactpersoon te veranderen" #. i18n: file: dialogs/contactpropertiesdialog.ui:72 #. i18n: ectx: property (toolTip), widget (QPushButton, restoreButton_) @@ -4927,8 +4874,7 @@ #. i18n: ectx: property (toolTip), widget (QPushButton, useButton_) #: rc.cpp:165 msgid "Click here to use the selected picture as your display picture" -msgstr "" -"Klik hier om de geselecteerde foto te gebruiken als uw schermafbeelding" +msgstr "Klik hier om de geselecteerde foto te gebruiken als uw schermafbeelding" #. i18n: file: dialogs/contactpropertiesdialog.ui:370 #. i18n: ectx: property (text), widget (QPushButton, useButton_) @@ -5136,10 +5082,8 @@ #. i18n: file: initialview.ui:179 #. i18n: ectx: property (toolTip), widget (KComboBox, handleCombobox_) #: rc.cpp:287 -msgid "" -"Enter here the email address of your registered Passport or Live account" -msgstr "" -"Voer hier het e-mailadres in van uw geregistreerde Passport- of Live-account" +msgid "Enter here the email address of your registered Passport or Live account" +msgstr "Voer hier het e-mailadres in van uw geregistreerde Passport- of Live-account" #. i18n: file: initialview.ui:195 #. i18n: ectx: property (text), widget (QLabel, TextLabel3) @@ -5163,8 +5107,7 @@ #. i18n: ectx: property (toolTip), widget (QComboBox, initialStatus_) #: rc.cpp:299 msgid "Choose a status to set when successfully connected." -msgstr "" -"Kies een status die wordt ingesteld wanneer u succesvol bent aangemeld." +msgstr "Kies een status die wordt ingesteld wanneer u succesvol bent aangemeld." #. i18n: file: initialview.ui:269 #. i18n: ectx: property (toolTip), widget (QCheckBox, rememberAccountCheckBox_) @@ -5184,8 +5127,7 @@ msgid "" "If you choose to remember an account within KMess, you can also save its " "password" -msgstr "" -"U kunt ook uw wachtwoord bewaren wanneer u KMess uw account laat onthouden" +msgstr "U kunt ook uw wachtwoord bewaren wanneer u KMess uw account laat onthouden" #. i18n: file: initialview.ui:288 #. i18n: ectx: property (text), widget (QCheckBox, rememberPasswordCheckBox_) @@ -5202,8 +5144,7 @@ #. i18n: file: initialview.ui:345 #. i18n: ectx: property (toolTip), widget (QPushButton, connectButton_) #: rc.cpp:323 -msgid "" -"Click this button to start using KMess, or to cancel a connection attempt" +msgid "Click this button to start using KMess, or to cancel a connection attempt" msgstr "" "Klik op deze knop om te beginnen met KMess, of om een loginpoging te " "annuleren" @@ -5420,8 +5361,7 @@ #. i18n: ectx: property (whatsThis), widget (QComboBox, initialStatus_) #: rc.cpp:427 msgid "Here you can select which status KMess should set, after logging in." -msgstr "" -"Hier kunt u selecteren welke status KMess moet aannemen, na het inloggen." +msgstr "Hier kunt u selecteren welke status KMess moet aannemen, na het inloggen." #. i18n: file: settings/accountpage.ui:375 #. i18n: ectx: property (whatsThis), widget (QLabel, verifyLabel_) @@ -5521,8 +5461,7 @@ #. i18n: file: settings/accountpage.ui:582 #. i18n: ectx: property (whatsThis), widget (QLabel, idleLabel2_) #: rc.cpp:466 rc.cpp:472 rc.cpp:475 -msgid "" -"Controls the number of minutes before KMess changes the status to \"Idle\"." +msgid "Controls the number of minutes before KMess changes the status to \"Idle\"." msgstr "" "Bepaalt het aantal minuten voordat KMess de status verandert naar \"Inactief" "\"." @@ -5677,8 +5616,7 @@ #. i18n: ectx: property (toolTip), widget (QLabel, label_2) #: rc.cpp:541 msgid "With this option, you can choose how KMess will save your chats" -msgstr "" -"Met deze optie kunt u kiezen op welke manier KMess uw chatgesprekken bewaart." +msgstr "Met deze optie kunt u kiezen op welke manier KMess uw chatgesprekken bewaart." #. i18n: file: settings/chatloggingpage.ui:54 #. i18n: ectx: property (text), widget (QLabel, label_2) @@ -6066,8 +6004,7 @@ #. i18n: ectx: property (text), widget (QCheckBox, useFontEffectsCheckBox_) #: rc.cpp:709 msgid "Use font &effects in messages, like *bold*, /italic/, and _underline_" -msgstr "" -"Gebruik &effecten in berichten, zoals *vet*, /schuin/ en _onderstreept_" +msgstr "Gebruik &effecten in berichten, zoals *vet*, /schuin/ en _onderstreept_" #. i18n: file: settings/chatstylepage.ui:555 #. i18n: ectx: property (whatsThis), widget (QCheckBox, enableChatFormattingCheckBox_) @@ -6304,8 +6241,7 @@ #. i18n: ectx: property (toolTip), widget (QRadioButton, useKDEBrowserRadio_) #: rc.cpp:833 msgid "Choose this option to use the browser used by the rest of KDE." -msgstr "" -"Kies deze optie om de browser te gebruiken die door KDE gebruikt wordt." +msgstr "Kies deze optie om de browser te gebruiken die door KDE gebruikt wordt." #. i18n: file: settings/miscellaneouspage.ui:36 #. i18n: ectx: property (text), widget (QRadioButton, useKDEBrowserRadio_) @@ -6333,8 +6269,7 @@ #. i18n: ectx: property (toolTip), widget (QRadioButton, useCustomMailClientRadio_) #: rc.cpp:845 rc.cpp:880 msgid "Choose this option to enter the path to your favorite browser." -msgstr "" -"Kies deze optie om het commando voor uw favoriete browser in te voeren." +msgstr "Kies deze optie om het commando voor uw favoriete browser in te voeren." #. i18n: file: settings/miscellaneouspage.ui:83 #. i18n: ectx: property (text), widget (QRadioButton, useCustomBrowserRadio_) @@ -6446,9 +6381,8 @@ #. i18n: file: utils/likeback/likebackbar.ui:32 #. i18n: ectx: property (toolTip), widget (QToolButton, m_likeButton) #: rc.cpp:915 -#, fuzzy msgid "Click here to tell the developers about something you liked" -msgstr "Klik hier om uw accountinstellingen te openen" +msgstr "Klik hier om de ontwikkelaars te vertellen over iets wat u fijn vindt" #. i18n: file: utils/likeback/likebackbar.ui:36 #. i18n: ectx: property (whatsThis), widget (QToolButton, m_likeButton) @@ -6465,18 +6399,22 @@ "checkbox in the Help menu.</html>\n" " " msgstr "" +"<html>Klik op één van deze icoontjes om uw feedback te versturen aan de ontwikkelaars van " +"dit programma. U kunt deze icoontjes uitschakelen via de \"Feedback-pictogrammen weergeven\" - " +"keuze in het Help-menu.</html>\n" +" " #. i18n: file: utils/likeback/likebackbar.ui:49 #. i18n: ectx: property (toolTip), widget (QToolButton, m_dislikeButton) #: rc.cpp:922 msgid "Click here to tell the developers about something you did not like" -msgstr "" +msgstr "Klik hier om de ontwikkelaars te vertellen over iets wat u niet fijn vond" #. i18n: file: utils/likeback/likebackbar.ui:66 #. i18n: ectx: property (toolTip), widget (QToolButton, m_bugButton) #: rc.cpp:929 msgid "Click here to tell the developers about a problem in the application" -msgstr "" +msgstr "Klik hier om de ontwikkelaars te vertellen over een probleem in het programma" #. i18n: file: utils/likeback/likebackbar.ui:83 #. i18n: ectx: property (toolTip), widget (QToolButton, m_featureButton) @@ -6485,51 +6423,50 @@ "Click here to tell the developers about new features you would like to have " "in this application" msgstr "" +"Klik hier om de ontwikkelaars te vertellen over nieuwe mogelijkheden die u zou willen " +"hebben in dit programma" #. i18n: file: utils/likeback/likebackdialog.ui:48 #. i18n: ectx: property (text), widget (QLabel, label_2) #: rc.cpp:943 -#, fuzzy msgid "Your comment:" -msgstr "Uw naam" +msgstr "Uw commentaar:" #. i18n: file: utils/likeback/likebackdialog.ui:74 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) #: rc.cpp:946 -#, fuzzy msgid "Your comment is about:" -msgstr "Uw account is verbannen" +msgstr "Uw commentaar gaat over:" #. i18n: file: utils/likeback/likebackdialog.ui:86 #. i18n: ectx: property (text), widget (QRadioButton, likeRadio_) #: rc.cpp:949 msgid "Something you like" -msgstr "" +msgstr "Iets wat u fijn vindt" #. i18n: file: utils/likeback/likebackdialog.ui:99 #. i18n: ectx: property (text), widget (QRadioButton, dislikeRadio_) #: rc.cpp:952 msgid "Something you dislike" -msgstr "" +msgstr "Iets wat u niet fijn vond" #. i18n: file: utils/likeback/likebackdialog.ui:112 #. i18n: ectx: property (text), widget (QRadioButton, bugRadio_) #: rc.cpp:955 -#, fuzzy msgid "An improper behavior of the application" -msgstr "Help mee het programma te verbeteren" +msgstr "Een verkeerd gedrag van het programma" #. i18n: file: utils/likeback/likebackdialog.ui:125 #. i18n: ectx: property (text), widget (QRadioButton, featureRadio_) #: rc.cpp:958 msgid "A new feature you desire" -msgstr "" +msgstr "Een nieuwe mogelijkheid die u wil" #. i18n: file: utils/likeback/likebackdialog.ui:141 #. i18n: ectx: property (text), widget (QCheckBox, specifyEmailCheckBox_) #: rc.cpp:961 msgid "Specify an email address to be contacted back:" -msgstr "" +msgstr "Laat een e-mailadres achter als u teruggecontacteerd wilt worden:" #. i18n: file: utils/likeback/likebackdialog.ui:188 #. i18n: ectx: property (text), widget (QLabel, label) @@ -6541,8 +6478,9 @@ "<b>Your email address will not be used for anything else but this report.</" "b></html>" msgstr "" +"<html>Een e-mailadres achterlaten zal de ontwikkelaars in staat stellen u om " +"meer informatie te vragen over uw inzending, of om u te vertellen wanneer uw " +"mogelijkheid wordt ingebouwd.<br>\n" +"<b>Uw e-mailadres zal voor niets anders worden gebruikt dan deze inzending.</b> " +"</html>" -#~ msgctxt "Message in list tooltip" -#~ msgid "This contact does not have you in his or her contact list." -#~ msgstr "" -#~ "Deze contactpersoon heeft u niet in zijn of haar contactenlijst staan." This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sif...@us...> - 2010-05-08 08:23:51
|
Revision: 6004 http://kmess.svn.sourceforge.net/kmess/?rev=6004&view=rev Author: sifcenter Date: 2010-05-08 08:23:45 +0000 (Sat, 08 May 2010) Log Message: ----------- Fixed bug on show listening music when the user is busy (maybe also with other states): the bit operation doesn't work if the flags (STATUS_*) have more "1" bits set. Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/src/kmess.cpp Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-05-06 14:08:11 UTC (rev 6003) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-05-08 08:23:45 UTC (rev 6004) @@ -1,4 +1,8 @@ +2010-05-08 (sifcenter) + * Fixed bug on show listening music when the user is busy (maybe also with other states): the bit operation doesn't work + if the flags (STATUS_*) have more "1" bits set. + 2010-05-03 (Pano) * Merged an updated Japanese translation by Daniel E. Moctezuma. Modified: branches/kmess/kmess-2.0.x/src/kmess.cpp =================================================================== --- branches/kmess/kmess-2.0.x/src/kmess.cpp 2010-05-06 14:08:11 UTC (rev 6003) +++ branches/kmess/kmess-2.0.x/src/kmess.cpp 2010-05-08 08:23:45 UTC (rev 6004) @@ -452,7 +452,7 @@ } else { - if ( ( currentAccount_->getStatus() & ( STATUS_INVISIBLE | STATUS_OFFLINE ) ) == 0 ) + if ( currentAccount_->getStatus() != STATUS_INVISIBLE && currentAccount_->getStatus() != STATUS_OFFLINE ) { // Update notification connection. QStringList arguments; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <da...@us...> - 2010-05-05 16:22:35
|
Revision: 5991 http://kmess.svn.sourceforge.net/kmess/?rev=5991&view=rev Author: dazjorz Date: 2010-05-05 16:22:29 +0000 (Wed, 05 May 2010) Log Message: ----------- Append gitignore Modified Paths: -------------- trunk/kmess/.gitignore Modified: trunk/kmess/.gitignore =================================================================== --- trunk/kmess/.gitignore 2010-05-03 19:09:09 UTC (rev 5990) +++ trunk/kmess/.gitignore 2010-05-05 16:22:29 UTC (rev 5991) @@ -7,3 +7,7 @@ # Doxygen files apidocs/ kmess.tag + +# Mac stuff +.DS_Store +finkbuild This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-05-03 19:09:16
|
Revision: 5990 http://kmess.svn.sourceforge.net/kmess/?rev=5990&view=rev Author: pano9000 Date: 2010-05-03 19:09:09 +0000 (Mon, 03 May 2010) Log Message: ----------- maketrans and mergetrans Modified Paths: -------------- branches/kmess/kmess-2.0.x/po/ar.po branches/kmess/kmess-2.0.x/po/ca.po branches/kmess/kmess-2.0.x/po/de.po branches/kmess/kmess-2.0.x/po/el.po branches/kmess/kmess-2.0.x/po/es.po branches/kmess/kmess-2.0.x/po/et.po branches/kmess/kmess-2.0.x/po/fi.po branches/kmess/kmess-2.0.x/po/fr.po branches/kmess/kmess-2.0.x/po/gl.po branches/kmess/kmess-2.0.x/po/hu.po branches/kmess/kmess-2.0.x/po/it.po branches/kmess/kmess-2.0.x/po/ja.po branches/kmess/kmess-2.0.x/po/kmess.pot branches/kmess/kmess-2.0.x/po/nl.po branches/kmess/kmess-2.0.x/po/pt.po branches/kmess/kmess-2.0.x/po/pt_BR.po branches/kmess/kmess-2.0.x/po/ru.po branches/kmess/kmess-2.0.x/po/sk.po branches/kmess/kmess-2.0.x/po/tr.po branches/kmess/kmess-2.0.x/po/zh_CN.po branches/kmess/kmess-2.0.x/po/zh_TW.po Modified: branches/kmess/kmess-2.0.x/po/ar.po =================================================================== --- branches/kmess/kmess-2.0.x/po/ar.po 2010-05-03 19:06:05 UTC (rev 5989) +++ branches/kmess/kmess-2.0.x/po/ar.po 2010-05-03 19:09:09 UTC (rev 5990) @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: ar\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2010-02-25 15:16+0100\n" +"POT-Creation-Date: 2010-05-03 21:06+0200\n" "PO-Revision-Date: 2009-07-24 21:18+0200\n" "Last-Translator: Ma'moun Diraneyya <mam...@gm...>\n" "Language-Team: Arabic <do...@ar...>\n" @@ -30,7 +30,7 @@ msgid "Your name" msgstr "اسمك" -#: account.cpp:57 settings/accountpage.cpp:218 +#: account.cpp:57 settings/accountpage.cpp:220 #: settings/accountsettingsdialog.cpp:205 msgid "yo...@ho..." msgstr "yo...@ho..." @@ -809,51 +809,51 @@ msgid "&Start Private Chat" msgstr "ابدأ محادثة &خاصة" -#: chat/contactframe.cpp:355 kmessview.cpp:689 +#: chat/contactframe.cpp:355 kmessview.cpp:704 msgid "&Send Email" msgstr "أر&سل رسالة بريدية" -#: chat/contactframe.cpp:356 kmessview.cpp:690 +#: chat/contactframe.cpp:356 kmessview.cpp:705 msgid "&View Profile" msgstr "أظ&هر صفحته الشخصية" -#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:692 +#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:707 msgid "&Properties" msgstr "ال&خصائص" -#: chat/contactframe.cpp:360 kmessview.cpp:694 +#: chat/contactframe.cpp:360 kmessview.cpp:709 msgid "&Add Contact" msgstr "أ&ضف المتراسل" -#: chat/contactframe.cpp:361 kmessview.cpp:695 +#: chat/contactframe.cpp:361 kmessview.cpp:710 msgid "A&llow Contact" msgstr "ا&قبل المتراسل" -#: chat/contactframe.cpp:362 kmessview.cpp:698 +#: chat/contactframe.cpp:362 kmessview.cpp:713 msgid "&Delete Contact" msgstr "ا&حذف المتراسل" -#: chat/contactframe.cpp:364 kmessview.cpp:696 +#: chat/contactframe.cpp:364 kmessview.cpp:711 msgid "&Block Contact" msgstr "اح&ظر المتراسل" -#: chat/contactframe.cpp:365 kmessview.cpp:697 +#: chat/contactframe.cpp:365 kmessview.cpp:712 msgid "&Unblock Contact" msgstr "أل&غِ حظر المتراسل" -#: chat/contactframe.cpp:367 kmessview.cpp:701 +#: chat/contactframe.cpp:367 kmessview.cpp:716 msgid "&Friendly Name" msgstr "الاس&م" -#: chat/contactframe.cpp:368 kmessview.cpp:702 +#: chat/contactframe.cpp:368 kmessview.cpp:717 msgid "&Personal Message" msgstr "الر&سالة الشخصية" -#: chat/contactframe.cpp:369 kmessview.cpp:703 +#: chat/contactframe.cpp:369 kmessview.cpp:718 msgid "&Email Address" msgstr "ع&نوان البريد الإلكتروني" -#: chat/contactframe.cpp:370 kmessview.cpp:704 +#: chat/contactframe.cpp:370 kmessview.cpp:719 msgid "Song &Name" msgstr "اسم الأ&غنية" @@ -879,7 +879,7 @@ msgid "&Emoticons" msgstr "الو&جوه" -#: chat/contactframe.cpp:404 kmessview.cpp:739 +#: chat/contactframe.cpp:404 kmessview.cpp:754 msgid "&Copy" msgstr "ا&نسخ" @@ -895,17 +895,17 @@ msgid "The contact is %1" msgstr "المتراسل %1" -#: chat/contactswidget.cpp:298 kmessview.cpp:523 settings/accountpage.cpp:489 +#: chat/contactswidget.cpp:298 kmessview.cpp:538 settings/accountpage.cpp:496 msgid "Downloading of display picture failed" msgstr "فشل تنزيل صورة العرض" -#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:523 -#: kmessview.cpp:560 main.cpp:43 settings/accountpage.cpp:489 -#: settings/accountpage.cpp:550 +#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:538 +#: kmessview.cpp:575 main.cpp:43 settings/accountpage.cpp:496 +#: settings/accountpage.cpp:557 msgid "KMess" msgstr "خميس" -#: chat/contactswidget.cpp:332 kmessview.cpp:558 settings/accountpage.cpp:548 +#: chat/contactswidget.cpp:332 kmessview.cpp:573 settings/accountpage.cpp:555 msgid "" "An error occurred while trying to change the display picture.\n" "Make sure that you have selected an existing image file." @@ -934,7 +934,7 @@ msgid "Edit" msgstr "حرِّر" -#: chat/emoticonswidget.cpp:442 kmess.cpp:580 +#: chat/emoticonswidget.cpp:442 kmess.cpp:583 msgid "Remove" msgstr "أزل" @@ -991,15 +991,15 @@ msgstr "متوافق مع مرسال وِندُز لايف" #: contact/msnstatus.cpp:159 contact/msnstatus.cpp:172 initialview.cpp:85 -#: model/contactlist.cpp:1825 settings/accountpage.cpp:99 +#: model/contactlist.cpp:1825 settings/accountpage.cpp:101 msgid "Online" msgstr "متصل" -#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:102 +#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:104 msgid "Busy" msgstr "مشغول" -#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:100 +#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:102 msgid "Away" msgstr "بعيد" @@ -1011,19 +1011,19 @@ msgid "Idle" msgstr "خامل" -#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:101 +#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:103 msgid "Be Right Back" msgstr "سأعود حالاً" -#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:104 +#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:106 msgid "On the Phone" msgstr "على الهاتف" -#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:103 +#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:105 msgid "Out to Lunch" msgstr "خارج للغداء" -#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:105 +#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:107 msgid "Invisible" msgstr "متخفٍّ" @@ -1137,16 +1137,16 @@ msgid "Contact Properties for %1" msgstr "خصائص المتراسل %1" -#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:816 kmessview.cpp:1290 +#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:819 kmessview.cpp:1306 #: network/msnsockethttp.cpp:199 network/msnsockettcp.cpp:386 msgid "Connected" msgstr "متصل" -#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1296 +#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1312 msgid "Not seen yet" msgstr "لم يُشاهَد بعد" -#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1313 +#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1329 msgid "No messages yet" msgstr "لا رسائل بعد" @@ -1174,20 +1174,20 @@ msgid "Client: %1" msgstr "العميل: %1" -#: dialogs/contactpropertiesdialog.cpp:665 +#: dialogs/contactpropertiesdialog.cpp:666 msgctxt "Dialog box text" msgid "Are you sure you want to use the display picture of this contact?" msgstr "أمتأكد أنك تريد استخدام صورة عرض هذا المتراسل؟" -#: dialogs/contactpropertiesdialog.cpp:667 +#: dialogs/contactpropertiesdialog.cpp:668 msgid "Copy Contact Picture" msgstr "انسخ صورة المتراسل" -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "The selected filetype is not supported by Phonon." msgstr "نوع الملف المُختار غير مدعوم في فُنُن." -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "Unsupported filetype" msgstr "أنواع ملفات غير مدعومة" @@ -1770,22 +1770,22 @@ msgid "Enter a name for the new group:" msgstr "أدخل اسمًا للمجموعة الجديدة:" -#: kmess.cpp:577 +#: kmess.cpp:580 #, kde-format msgid "" "<qt>Are you sure you want to remove the contact <b>%1</b> from your contact " "list?</qt>" msgstr "<qt>أمتأكد أنك تريد إزالة <b>%1</b> من لائحة متراسليك؟</qt>" -#: kmess.cpp:579 +#: kmess.cpp:582 msgid "Remove Contact" msgstr "أزل المتراسل" -#: kmess.cpp:581 +#: kmess.cpp:584 msgid "Remove and Block" msgstr "أزله واحظره" -#: kmess.cpp:627 +#: kmess.cpp:630 #, kde-format msgctxt "dialog text" msgid "" @@ -1794,12 +1794,12 @@ msgstr "" "المجموعة <b>%1</b> ليست فارغة: أزل جميع المتراسلين منها، ثم حاول مجددًا!" -#: kmess.cpp:629 kmess.cpp:636 +#: kmess.cpp:632 kmess.cpp:639 msgctxt "dialog title" msgid "Group Removal" msgstr "إزالة مجموعة" -#: kmess.cpp:634 +#: kmess.cpp:637 #, kde-format msgctxt "dialog text" msgid "" @@ -1807,24 +1807,24 @@ "list?</qt>" msgstr "<qt>أمتأكد أنك تريد إزالة المجموعة <b>%1</b> من لائحة متراسليك؟</qt>" -#: kmess.cpp:637 +#: kmess.cpp:640 msgctxt "dialog button" msgid "Remove" msgstr "أزل" -#: kmess.cpp:666 +#: kmess.cpp:669 msgid "This is a special group, which cannot be changed." msgstr "هذه مجموعة خاصة، ولايمكن تغييرها." -#: kmess.cpp:677 +#: kmess.cpp:680 msgid "Rename Group" msgstr "&غيِّر اسم المجموعة" -#: kmess.cpp:678 +#: kmess.cpp:681 msgid "Enter a new name for this group:" msgstr "أدخل اسمًا جديدًا لهذه المجموعة:" -#: kmess.cpp:755 +#: kmess.cpp:758 #, kde-format msgctxt "dialog text" msgid "" @@ -1833,21 +1833,21 @@ msgstr "" "<p>لا يمكن الولوج آليًا بالحساب <b>%1</b>:<br/>يجب عليك أولاً حفظ كلمة سره!</p>" -#: kmess.cpp:758 +#: kmess.cpp:761 msgctxt "dialog title" msgid "Autologin Failed" msgstr "فشل الولوج الآلي" -#: kmess.cpp:1069 +#: kmess.cpp:1077 msgid "Connection could be down..." msgstr "ربما ينقطع الاتصال..." -#: kmess.cpp:1139 +#: kmess.cpp:1147 msgctxt "Status bar message" msgid "Disconnected" msgstr "انقطع الاتصال" -#: kmess.cpp:1478 +#: kmess.cpp:1482 #, kde-format msgctxt "" "Paragraph to be added to the text of a message dialog box, but only when KDE " @@ -1855,7 +1855,7 @@ msgid "<p>KMess has searched for it in the following folders:<br>%1</p>" msgstr "<p>بحث خميس عنه في المجلدات التالية:<br>%1</p>" -#: kmess.cpp:1490 +#: kmess.cpp:1494 #, kde-format msgctxt "" "Text for a message dialog box; %1 is an explanation about the list of " @@ -1870,12 +1870,12 @@ "p><p>لأنه لم يستطع إيجاد الملف 'kmess.notifyrc' المطلوب، في أي واحد من " "مجلدات التطبيق.</p>%1<p>فضلاً تحقَّق من تثبيتك.</p></html>" -#: kmess.cpp:1496 +#: kmess.cpp:1500 msgctxt "Message box title" msgid "Error With Notifications" msgstr "خطأ بشأن التنبيهات" -#: kmess.cpp:1774 +#: kmess.cpp:1778 #, kde-format msgctxt "" "Main window caption: switched order to easily distinguish it from chats" @@ -1944,7 +1944,7 @@ msgid "&Export Contact List..." msgstr "&صدِّر لائحة المتراسلين..." -#: kmessinterface.cpp:183 kmessview.cpp:691 +#: kmessinterface.cpp:183 kmessview.cpp:706 msgid "Show Chat &History..." msgstr "أظهر &تأريخ المحادثات..." @@ -1996,98 +1996,93 @@ msgid "Show &Network Window..." msgstr "أظهر نافذة الشب&كة..." -#: kmessview.cpp:330 +#: kmessview.cpp:341 #, kde-format msgid "[%1] Logged in with %2" msgstr "[%1] ولجت بالحساب %2" -#: kmessview.cpp:374 +#: kmessview.cpp:389 #, kde-format msgid "[%1] %2 goes online" msgstr "[%1] اتصل %2" -#: kmessview.cpp:379 +#: kmessview.cpp:394 #, kde-format msgid "[%1] %2 goes offline" msgstr "[%1] فصل %2" -#: kmessview.cpp:688 +#: kmessview.cpp:703 msgid "Cha&t" msgstr "حا&دثه" -#: kmessview.cpp:699 +#: kmessview.cpp:714 msgid "&Remove From Group" msgstr "أ&زله من المجموعة" -#: kmessview.cpp:732 +#: kmessview.cpp:747 msgid "&Copy to Group" msgstr "انس&خه إلى المجموعة" -#: kmessview.cpp:733 +#: kmessview.cpp:748 msgid "&Move to Group" msgstr "ان&قله إلى المجموعة" -#: kmessview.cpp:784 +#: kmessview.cpp:799 msgid "Move Group &Down" msgstr "حرّك المجموعة إلى الأس&فل" -#: kmessview.cpp:785 +#: kmessview.cpp:800 msgid "Move Group &Up" msgstr "حرّك المجموعة إلى الأ&على" -#: kmessview.cpp:786 +#: kmessview.cpp:801 msgid "Re&move Group" msgstr "أز&ل المجموعة" -#: kmessview.cpp:787 +#: kmessview.cpp:802 msgid "Re&name Group" msgstr "&غيِّر اسم المجموعة" -#: kmessview.cpp:1237 -msgctxt "Message in list tooltip" -msgid "This contact does not have you in his or her contact list." -msgstr "لست موجودًا على لائحة متراسلي هذا الشخص." - -#: kmessview.cpp:1255 +#: kmessview.cpp:1271 msgctxt "Contact email label in list tooltip" msgid "Email address" msgstr "عنوان البريد" -#: kmessview.cpp:1262 +#: kmessview.cpp:1278 msgctxt "Contact Live Messenger client label in list tooltip" msgid "Client" msgstr "العميل" -#: kmessview.cpp:1274 +#: kmessview.cpp:1290 msgid "Yes" msgstr "نعم" -#: kmessview.cpp:1278 +#: kmessview.cpp:1294 msgid "No" msgstr "لا" -#: kmessview.cpp:1281 +#: kmessview.cpp:1297 msgctxt "Contact blocked status label in list tooltip" msgid "Blocked" msgstr "محظور" -#: kmessview.cpp:1303 +#: kmessview.cpp:1319 msgctxt "Contact last presence label in list tooltip" msgid "Last seen" msgstr "آخر مشاهدة" -#: kmessview.cpp:1320 +#: kmessview.cpp:1336 msgctxt "Contact last message label in list tooltip" msgid "Last message" msgstr "آخر رسالة" -#: kmessview.cpp:1330 +#: kmessview.cpp:1346 #, kde-format msgctxt "Group name in group tooltip" msgid "Group <b>%1</b>" msgstr "المجموعة <b>%1</b>" -#: kmessview.cpp:1338 +#: kmessview.cpp:1354 #, kde-format msgctxt "Contact counters in normal group tooltip, first part" msgid "%1 contact, " @@ -2099,7 +2094,7 @@ msgstr[4] "%1 متراسلاً، " msgstr[5] "%1 متراسل، " -#: kmessview.cpp:1341 +#: kmessview.cpp:1357 #, kde-format msgctxt "Contact counters in normal group tooltip, second part" msgid "%1 online" @@ -2111,7 +2106,7 @@ msgstr[4] "%1 متصلاً" msgstr[5] "%1 متصل" -#: kmessview.cpp:1347 +#: kmessview.cpp:1363 #, kde-format msgctxt "Contacts count in special group tooltip" msgid "%1 contact" @@ -2123,18 +2118,18 @@ msgstr[4] "%1 متراسلاً" msgstr[5] "%1 متراسل" -#: kmessview.cpp:1768 +#: kmessview.cpp:1784 #, fuzzy msgctxt "Default friendly name tooltip" msgid "Click here to change your friendly name" msgstr "انقر هنا لجعل خميس يحفظ كلمة سرِّك" -#: kmessview.cpp:1828 +#: kmessview.cpp:1844 msgctxt "Default personal message shown in the contact list" msgid "[i]Click to set a personal message[/i]" msgstr "" -#: kmessview.cpp:1829 +#: kmessview.cpp:1845 #, fuzzy msgctxt "Default personal message tooltip" msgid "" @@ -2142,15 +2137,15 @@ "along with your friendly name" msgstr "أدخل رسالة هنا لتُعرض لمتراسليك: سيشاهدون هذه الرسالة بعد اسمك" -#: kmessview.cpp:2009 +#: kmessview.cpp:2025 msgid "No chat logs could be found for this contact." msgstr "لا سجلات محادثات موجودة لهذا المتراسل." -#: kmessview.cpp:2010 kmessview.cpp:2016 +#: kmessview.cpp:2026 kmessview.cpp:2032 msgid "No chat history found" msgstr "لا تأريخ محادثات موجود" -#: kmessview.cpp:2015 +#: kmessview.cpp:2031 msgid "" "No chat logs could be found for this contact. Note that new chats are not " "logged; if you want your chats to be logged, you can enable it in your " @@ -2159,7 +2154,7 @@ "لا سجلات محادثات موجودة لهذا المتراسل. لاحظ أنَّ المحادثات الجديد لا تُسجَّل، لكن " "يمكنك إذا أردت تسجيلها أن تفعَّل ذلك من إعدادات الحساب." -#: kmessview.cpp:2209 +#: kmessview.cpp:2233 #, kde-format msgid "%1 new email message" msgid_plural "%1 new email messages" @@ -2170,6 +2165,16 @@ msgstr[4] "%1 رسالة بريدية جديدة" msgstr[5] "%1 رسالة بريدية جديدة" +#: kmessview.cpp:2252 +#, fuzzy +msgid "Show contacts what you are listening to (click to disable)" +msgstr "أظهر للمتراسلين الم&قطوعة التي أستمع إليها" + +#: kmessview.cpp:2257 +#, fuzzy +msgid "Show contacts what you are listening to (click to enable)" +msgstr "أظهر للمتراسلين الم&قطوعة التي أستمع إليها" + #: kmessviewdelegate.cpp:290 #, kde-format msgctxt "" @@ -2846,48 +2851,56 @@ msgid "Marco Mentasti" msgstr "تهكُّم" -#: main.cpp:185 +#: main.cpp:183 +msgid "Francesco Nwokeka" +msgstr "" + +#: main.cpp:183 +msgid "Now Listening toggle button above the contact list." +msgstr "" + +#: main.cpp:186 msgid "Inspiration and assorted code" msgstr "شفرة متجانسة ومُلهِمة" -#: main.cpp:185 +#: main.cpp:186 msgid "KMerlin (kmerlin.olsd.de)" msgstr "كمِرلين (kmerlin.olsd.de)" -#: main.cpp:186 +#: main.cpp:187 msgid "Kopete (kopete.kde.org)" msgstr "كُبِتي (kopete.kde.org)" -#: main.cpp:186 +#: main.cpp:187 msgid "Old popup balloons code, initial p2p code, MSN challenge handler" msgstr "شفرة البالونات المنبثقة القديمة، وشفرة الندِّ للندِّ الأولية، ومُستوثِق MSN" -#: main.cpp:187 +#: main.cpp:188 msgid "Idle timer code" msgstr "شفرة مؤقت الخمول" -#: main.cpp:187 +#: main.cpp:188 msgid "KScreensaver" msgstr "حافظةشاشةك" -#: main.cpp:188 +#: main.cpp:189 msgid "BasKet" msgstr "باسكِت" -#: main.cpp:188 +#: main.cpp:189 msgid "Close-to-tray icon screenshot code" msgstr "شفرة الإغلاق إلى أيقونة صينية النظام" -#: main.cpp:189 +#: main.cpp:190 msgid "Amarok" msgstr "أمارُك" -#: main.cpp:189 +#: main.cpp:190 msgid "" "Custom crash handler implementation, System tray icon overlay implementation" msgstr "تنفيذ مدبِّر انهيار مخصَّص، بالإضافة إلى تنفيذ تراكب أيقونة صينية النظام" -#: main.cpp:190 +#: main.cpp:191 msgid "" "KNotify not giving focus bug fix and KWin focus stealing prevention " "workaround" @@ -2895,11 +2908,11 @@ "إصلاح علَّة اختلال التركيز في مبلِّغك، بالإضافة إلى تحايل منع اختطاف التركيز في " "نافذةك" -#: main.cpp:190 +#: main.cpp:191 msgid "Quassel" msgstr "اكْوَسِل" -#: main.cpp:193 +#: main.cpp:194 msgid "" "You are welcome to send bugfixes and patches to the KMess help forum!\n" "If you feel your name is missing here, please contact us too!" @@ -2907,33 +2920,33 @@ "نُرحِّب بإرسالك إصلاحات للعلل أو رُقَع إلى منتديات مساعدة خميس!\n" "إذا شعرت بأن اسمك مفقود هنا فراسلنا أيضًا رجاءً!" -#: main.cpp:193 +#: main.cpp:194 msgid "Your name here?" msgstr "اسمك هنا؟" -#: main.cpp:196 rc.cpp:1 +#: main.cpp:197 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "محمد عَصَر, عبدالعزيز الشريف, مأمون ديرانية" -#: main.cpp:197 +#: main.cpp:198 msgctxt "EMAIL OF TRANSLATORS" msgid "Your email addresses" msgstr "as...@ar..., a. a-...@ho..., mam...@gm..." -#: main.cpp:203 +#: main.cpp:204 msgid "Do not show the contact list window initially" msgstr "لا تظهر نافذة لائحة المتراسلين ابتدائيًا" -#: main.cpp:204 +#: main.cpp:205 msgid "Autologin with the given email address" msgstr "ولوج آلي بالبريد المُعطى" -#: main.cpp:209 +#: main.cpp:210 msgid "Run a debug test (developer build only)" msgstr "أجرِ اختبارًا تنقيحيًّا (نسخة المطورين فقط)" -#: main.cpp:211 +#: main.cpp:212 msgid "" "Connect to the specified server instead of the official Live server.\n" "Use \"localhost\" or \"127.0.0.1\" to connect to a local KMess Test Server." @@ -4091,21 +4104,21 @@ msgid " - %1 emails" msgstr "as...@ar..., a. a-...@ho..., mam...@gm..." -#: settings/accountpage.cpp:81 +#: settings/accountpage.cpp:83 msgid "Browse..." msgstr "تصفَّح..." -#: settings/accountpage.cpp:82 +#: settings/accountpage.cpp:84 msgid "Browse and Crop Picture..." msgstr "تصفَّح واقتطع صورة..." -#: settings/accountpage.cpp:83 +#: settings/accountpage.cpp:85 msgid "Set Previous Image..." msgstr "عيِّن الصورة السابقة..." #. i18n: file: settings/accountpage.ui:133 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) -#: settings/accountpage.cpp:459 rc.cpp:389 +#: settings/accountpage.cpp:466 rc.cpp:389 msgid "Display Picture" msgstr "صورة العرض" @@ -6351,6 +6364,10 @@ "تقريرك، أو ليخبروك عن موعد إنجاز الميزة التي طلبتها.<br/>\n" "<b>لن يُستخدم عنوان بريدك لأي غرض سوى هذا التقرير.</b></html>" +#~ msgctxt "Message in list tooltip" +#~ msgid "This contact does not have you in his or her contact list." +#~ msgstr "لست موجودًا على لائحة متراسلي هذا الشخص." + #~ msgctxt "Default personal message shown in the contact list" #~ msgid "<Enter your personal message here>" #~ msgstr "<أدخل رسالتك الشخصية هنا>" Modified: branches/kmess/kmess-2.0.x/po/ca.po =================================================================== --- branches/kmess/kmess-2.0.x/po/ca.po 2010-05-03 19:06:05 UTC (rev 5989) +++ branches/kmess/kmess-2.0.x/po/ca.po 2010-05-03 19:09:09 UTC (rev 5990) @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2010-02-25 15:16+0100\n" +"POT-Creation-Date: 2010-05-03 21:06+0200\n" "PO-Revision-Date: 2010-02-27 15:45+0100\n" "Last-Translator: Adrià Arrufat <swi...@gm...>\n" "Language-Team: American English <kde...@kd...>\n" @@ -25,7 +25,7 @@ msgid "Your name" msgstr "El vostre nom" -#: account.cpp:57 settings/accountpage.cpp:218 +#: account.cpp:57 settings/accountpage.cpp:220 #: settings/accountsettingsdialog.cpp:205 msgid "yo...@ho..." msgstr "vos...@ho..." @@ -834,51 +834,51 @@ msgid "&Start Private Chat" msgstr "&Comença una conversa privada" -#: chat/contactframe.cpp:355 kmessview.cpp:689 +#: chat/contactframe.cpp:355 kmessview.cpp:704 msgid "&Send Email" msgstr "&Envia un correu electrònic" -#: chat/contactframe.cpp:356 kmessview.cpp:690 +#: chat/contactframe.cpp:356 kmessview.cpp:705 msgid "&View Profile" msgstr "&Visualitza el perfil" -#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:692 +#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:707 msgid "&Properties" msgstr "&Propietats" -#: chat/contactframe.cpp:360 kmessview.cpp:694 +#: chat/contactframe.cpp:360 kmessview.cpp:709 msgid "&Add Contact" msgstr "&Afegeix el contacte" -#: chat/contactframe.cpp:361 kmessview.cpp:695 +#: chat/contactframe.cpp:361 kmessview.cpp:710 msgid "A&llow Contact" msgstr "Permet al contacte" -#: chat/contactframe.cpp:362 kmessview.cpp:698 +#: chat/contactframe.cpp:362 kmessview.cpp:713 msgid "&Delete Contact" msgstr "E&sborra el contacte" -#: chat/contactframe.cpp:364 kmessview.cpp:696 +#: chat/contactframe.cpp:364 kmessview.cpp:711 msgid "&Block Contact" msgstr "Bloqueja el contacte" -#: chat/contactframe.cpp:365 kmessview.cpp:697 +#: chat/contactframe.cpp:365 kmessview.cpp:712 msgid "&Unblock Contact" msgstr "&Desbloqueja el contacte" -#: chat/contactframe.cpp:367 kmessview.cpp:701 +#: chat/contactframe.cpp:367 kmessview.cpp:716 msgid "&Friendly Name" msgstr "&Nom amistós" -#: chat/contactframe.cpp:368 kmessview.cpp:702 +#: chat/contactframe.cpp:368 kmessview.cpp:717 msgid "&Personal Message" msgstr "&Missatge persona" -#: chat/contactframe.cpp:369 kmessview.cpp:703 +#: chat/contactframe.cpp:369 kmessview.cpp:718 msgid "&Email Address" msgstr "Adreça de correu electrònic" -#: chat/contactframe.cpp:370 kmessview.cpp:704 +#: chat/contactframe.cpp:370 kmessview.cpp:719 msgid "Song &Name" msgstr "&Nom de la cançó" @@ -904,7 +904,7 @@ msgid "&Emoticons" msgstr "&Emoticones" -#: chat/contactframe.cpp:404 kmessview.cpp:739 +#: chat/contactframe.cpp:404 kmessview.cpp:754 msgid "&Copy" msgstr "&Copia" @@ -920,17 +920,17 @@ msgid "The contact is %1" msgstr "El contacte està %1" -#: chat/contactswidget.cpp:298 kmessview.cpp:523 settings/accountpage.cpp:489 +#: chat/contactswidget.cpp:298 kmessview.cpp:538 settings/accountpage.cpp:496 msgid "Downloading of display picture failed" msgstr "La descàrrega de la imatge ha fallat" -#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:523 -#: kmessview.cpp:560 main.cpp:43 settings/accountpage.cpp:489 -#: settings/accountpage.cpp:550 +#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:538 +#: kmessview.cpp:575 main.cpp:43 settings/accountpage.cpp:496 +#: settings/accountpage.cpp:557 msgid "KMess" msgstr "KMess" -#: chat/contactswidget.cpp:332 kmessview.cpp:558 settings/accountpage.cpp:548 +#: chat/contactswidget.cpp:332 kmessview.cpp:573 settings/accountpage.cpp:555 msgid "" "An error occurred while trying to change the display picture.\n" "Make sure that you have selected an existing image file." @@ -959,7 +959,7 @@ msgid "Edit" msgstr "Edita" -#: chat/emoticonswidget.cpp:442 kmess.cpp:580 +#: chat/emoticonswidget.cpp:442 kmess.cpp:583 msgid "Remove" msgstr "Esborra" @@ -1016,15 +1016,15 @@ msgstr "Windows Live Messenger compatible" #: contact/msnstatus.cpp:159 contact/msnstatus.cpp:172 initialview.cpp:85 -#: model/contactlist.cpp:1825 settings/accountpage.cpp:99 +#: model/contactlist.cpp:1825 settings/accountpage.cpp:101 msgid "Online" msgstr "En línia " -#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:102 +#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:104 msgid "Busy" msgstr "Ocupat" -#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:100 +#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:102 msgid "Away" msgstr "Absent" @@ -1036,19 +1036,19 @@ msgid "Idle" msgstr "Inactiu" -#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:101 +#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:103 msgid "Be Right Back" msgstr "Ara torno" -#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:104 +#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:106 msgid "On the Phone" msgstr "Al telèfon" -#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:103 +#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:105 msgid "Out to Lunch" msgstr "Estic menjant" -#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:105 +#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:107 msgid "Invisible" msgstr "Invisible" @@ -1166,16 +1166,16 @@ msgid "Contact Properties for %1" msgstr "Propietats del contacte %1" -#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:816 kmessview.cpp:1290 +#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:819 kmessview.cpp:1306 #: network/msnsockethttp.cpp:199 network/msnsockettcp.cpp:386 msgid "Connected" msgstr "Connectat" -#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1296 +#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1312 msgid "Not seen yet" msgstr "Mai vist encara" -#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1313 +#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1329 msgid "No messages yet" msgstr "Cap missatge encara" @@ -1203,20 +1203,20 @@ msgid "Client: %1" msgstr "Client: %1" -#: dialogs/contactpropertiesdialog.cpp:665 +#: dialogs/contactpropertiesdialog.cpp:666 msgctxt "Dialog box text" msgid "Are you sure you want to use the display picture of this contact?" msgstr "Esteu segurs que voleu fer servir la imatge d'aquest contacte?" -#: dialogs/contactpropertiesdialog.cpp:667 +#: dialogs/contactpropertiesdialog.cpp:668 msgid "Copy Contact Picture" msgstr "Copia la imatge del contacte" -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "The selected filetype is not supported by Phonon." msgstr "El fitxer triat no està suportat per Phonon." -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "Unsupported filetype" msgstr "Tipus de fitxes no suportat" @@ -1800,7 +1800,7 @@ msgid "Enter a name for the new group:" msgstr "Escriviu un nom per al nou grup:" -#: kmess.cpp:577 +#: kmess.cpp:580 #, kde-format msgid "" "<qt>Are you sure you want to remove the contact <b>%1</b> from your contact " @@ -1809,15 +1809,15 @@ "<qt>Esteu segurs que voleu esborrar el contacte <b>%1</b> de la vostra " "llista de contactes?</qt>" -#: kmess.cpp:579 +#: kmess.cpp:582 msgid "Remove Contact" msgstr "Esborra el contacte" -#: kmess.cpp:581 +#: kmess.cpp:584 msgid "Remove and Block" msgstr "Esborra i bloqueja" -#: kmess.cpp:627 +#: kmess.cpp:630 #, kde-format msgctxt "dialog text" msgid "" @@ -1827,12 +1827,12 @@ "El grup <b>%1</b> no està buit: treieu o esborreu tots els contactes del " "grup i torneu-ho a provar!" -#: kmess.cpp:629 kmess.cpp:636 +#: kmess.cpp:632 kmess.cpp:639 msgctxt "dialog title" msgid "Group Removal" msgstr "Esborrament del grup" -#: kmess.cpp:634 +#: kmess.cpp:637 #, kde-format msgctxt "dialog text" msgid "" @@ -1842,24 +1842,24 @@ "<qt>Esteu segurs que voleu esborrar el grup <b>%1</b> de la vostra llista de " "contactes?</qt>" -#: kmess.cpp:637 +#: kmess.cpp:640 msgctxt "dialog button" msgid "Remove" msgstr "Esborra" -#: kmess.cpp:666 +#: kmess.cpp:669 msgid "This is a special group, which cannot be changed." msgstr "Aques es un grup especial, que no es pot canviar." -#: kmess.cpp:677 +#: kmess.cpp:680 msgid "Rename Group" msgstr "Reanomena el grup" -#: kmess.cpp:678 +#: kmess.cpp:681 msgid "Enter a new name for this group:" msgstr "Escriviu un nom nou per aquest grup:" -#: kmess.cpp:755 +#: kmess.cpp:758 #, kde-format msgctxt "dialog text" msgid "" @@ -1869,21 +1869,21 @@ "<p>No es pot connectar automàticament amb aquest compte <b>%1</b>:<br/" ">primer heu de desar la contrasenya del compte!</p>" -#: kmess.cpp:758 +#: kmess.cpp:761 msgctxt "dialog title" msgid "Autologin Failed" msgstr "Autoconnexió fallida" -#: kmess.cpp:1069 +#: kmess.cpp:1077 msgid "Connection could be down..." msgstr "La connexió podria estar caiguda " -#: kmess.cpp:1139 +#: kmess.cpp:1147 msgctxt "Status bar message" msgid "Disconnected" msgstr "Desconnectat" -#: kmess.cpp:1478 +#: kmess.cpp:1482 #, kde-format msgctxt "" "Paragraph to be added to the text of a message dialog box, but only when KDE " @@ -1891,7 +1891,7 @@ msgid "<p>KMess has searched for it in the following folders:<br>%1</p>" msgstr "<p>KMess ho ha cercat a les següents carpetes:<br>%1</p>" -#: kmess.cpp:1490 +#: kmess.cpp:1494 #, kde-format msgctxt "" "Text for a message dialog box; %1 is an explanation about the list of " @@ -1906,12 +1906,12 @@ "fitxer 'kmess.notifyrc' no s'ha pogut trobar en cap carpeta del'aplicació.</" "p>%1<p>Si us plau, verifiqueu la vostra instal·lació.</p></html>" -#: kmess.cpp:1496 +#: kmess.cpp:1500 msgctxt "Message box title" msgid "Error With Notifications" msgstr "Error amb les notificacions" -#: kmess.cpp:1774 +#: kmess.cpp:1778 #, kde-format msgctxt "" "Main window caption: switched order to easily distinguish it from chats" @@ -1980,7 +1980,7 @@ msgid "&Export Contact List..." msgstr "&Exporta la llista de contactes..." -#: kmessinterface.cpp:183 kmessview.cpp:691 +#: kmessinterface.cpp:183 kmessview.cpp:706 msgid "Show Chat &History..." msgstr "Mostra l'&historial de conversa..." @@ -2032,98 +2032,93 @@ msgid "Show &Network Window..." msgstr "Mostra la &fonestra de connexions..." -#: kmessview.cpp:330 +#: kmessview.cpp:341 #, kde-format msgid "[%1] Logged in with %2" msgstr "[%1] Connectat amb %2" -#: kmessview.cpp:374 +#: kmessview.cpp:389 #, kde-format msgid "[%1] %2 goes online" msgstr "[%1] %2 s'ha connectat" -#: kmessview.cpp:379 +#: kmessview.cpp:394 #, kde-format msgid "[%1] %2 goes offline" msgstr "[%1] %2 s'ha desconnectat" -#: kmessview.cpp:688 +#: kmessview.cpp:703 msgid "Cha&t" msgstr "Con&versa" -#: kmessview.cpp:699 +#: kmessview.cpp:714 msgid "&Remove From Group" msgstr "&Esborra del grup" -#: kmessview.cpp:732 +#: kmessview.cpp:747 msgid "&Copy to Group" msgstr "&Copia al grup" -#: kmessview.cpp:733 +#: kmessview.cpp:748 msgid "&Move to Group" msgstr "&Mou al grup" -#: kmessview.cpp:784 +#: kmessview.cpp:799 msgid "Move Group &Down" msgstr "Mou el grup a&vall" -#: kmessview.cpp:785 +#: kmessview.cpp:800 msgid "Move Group &Up" msgstr "Mou el gru am&unt" -#: kmessview.cpp:786 +#: kmessview.cpp:801 msgid "Re&move Group" msgstr "Es&borra el grup" -#: kmessview.cpp:787 +#: kmessview.cpp:802 msgid "Re&name Group" msgstr "Rea&nomena el grup" -#: kmessview.cpp:1237 -msgctxt "Message in list tooltip" -msgid "This contact does not have you in his or her contact list." -msgstr "Aquesta persona no us té a la seva llista de contactes." - -#: kmessview.cpp:1255 +#: kmessview.cpp:1271 msgctxt "Contact email label in list tooltip" msgid "Email address" msgstr "Correu electrònic" -#: kmessview.cpp:1262 +#: kmessview.cpp:1278 msgctxt "Contact Live Messenger client label in list tooltip" msgid "Client" msgstr "Client" -#: kmessview.cpp:1274 +#: kmessview.cpp:1290 msgid "Yes" msgstr "Sí" -#: kmessview.cpp:1278 +#: kmessview.cpp:1294 msgid "No" msgstr "No" -#: kmessview.cpp:1281 +#: kmessview.cpp:1297 msgctxt "Contact blocked status label in list tooltip" msgid "Blocked" msgstr "Bloquejat" -#: kmessview.cpp:1303 +#: kmessview.cpp:1319 msgctxt "Contact last presence label in list tooltip" msgid "Last seen" msgstr "Vist per últim cop" -#: kmessview.cpp:1320 +#: kmessview.cpp:1336 msgctxt "Contact last message label in list tooltip" msgid "Last message" msgstr "Darrer missatge" -#: kmessview.cpp:1330 +#: kmessview.cpp:1346 #, kde-format msgctxt "Group name in group tooltip" msgid "Group <b>%1</b>" msgstr "Grup <b>%1</b>" -#: kmessview.cpp:1338 +#: kmessview.cpp:1354 #, kde-format msgctxt "Contact counters in normal group tooltip, first part" msgid "%1 contact, " @@ -2131,7 +2126,7 @@ msgstr[0] "%1 contacte, " msgstr[1] "%1 contactes, " -#: kmessview.cpp:1341 +#: kmessview.cpp:1357 #, kde-format msgctxt "Contact counters in normal group tooltip, second part" msgid "%1 online" @@ -2139,7 +2134,7 @@ msgstr[0] "%1 connectat " msgstr[1] "%1 connectats " -#: kmessview.cpp:1347 +#: kmessview.cpp:1363 #, kde-format msgctxt "Contacts count in special group tooltip" msgid "%1 contact" @@ -2147,17 +2142,17 @@ msgstr[0] "%1 contacte" msgstr[1] "%1 contactes" -#: kmessview.cpp:1768 +#: kmessview.cpp:1784 msgctxt "Default friendly name tooltip" msgid "Click here to change your friendly name" msgstr "Cliqueu aquí per canviar el vostre nom amistós" -#: kmessview.cpp:1828 +#: kmessview.cpp:1844 msgctxt "Default personal message shown in the contact list" msgid "[i]Click to set a personal message[/i]" msgstr "[i]Cliqueu aquí per escriure un missatge personal[/i]" -#: kmessview.cpp:1829 +#: kmessview.cpp:1845 msgctxt "Default personal message tooltip" msgid "" "Click here to insert a message to show to your contacts: they will see it " @@ -2166,15 +2161,15 @@ "Escriviu aquí un missatge per mostrar als vostres contactes: el veuran " "juntament amb el vostre nom amistós" -#: kmessview.cpp:2009 +#: kmessview.cpp:2025 msgid "No chat logs could be found for this contact." msgstr "No s'han trobat registres de conversa per aquest contacte." -#: kmessview.cpp:2010 kmessview.cpp:2016 +#: kmessview.cpp:2026 kmessview.cpp:2032 msgid "No chat history found" msgstr "No s'ha trobat cap historial de converses." -#: kmessview.cpp:2015 +#: kmessview.cpp:2031 msgid "" "No chat logs could be found for this contact. Note that new chats are not " "logged; if you want your chats to be logged, you can enable it in your " @@ -2184,13 +2179,23 @@ "noves converses no s'estan enregistrant; si voleu que es registrin, podeu " "activar l'opció a les preferències del vostre compte." -#: kmessview.cpp:2209 +#: kmessview.cpp:2233 #, kde-format msgid "%1 new email message" msgid_plural "%1 new email messages" msgstr[0] "%1 correu electrònic nou" msgstr[1] "%1 correus electrònics nous" +#: kmessview.cpp:2252 +#, fuzzy +msgid "Show contacts what you are listening to (click to disable)" +msgstr "Mostra als contactes què estic escoltant" + +#: kmessview.cpp:2257 +#, fuzzy +msgid "Show contacts what you are listening to (click to enable)" +msgstr "Mostra als contactes què estic escoltant" + #: kmessviewdelegate.cpp:290 #, kde-format msgctxt "" @@ -2875,62 +2880,70 @@ msgid "Marco Mentasti" msgstr "Marco Mentasti" -#: main.cpp:185 +#: main.cpp:183 +msgid "Francesco Nwokeka" +msgstr "" + +#: main.cpp:183 +msgid "Now Listening toggle button above the contact list." +msgstr "" + +#: main.cpp:186 msgid "Inspiration and assorted code" msgstr "Codi d'inspiració i variat" -#: main.cpp:185 +#: main.cpp:186 msgid "KMerlin (kmerlin.olsd.de)" msgstr "KMerlin (kmerlin.olsd.de)" -#: main.cpp:186 +#: main.cpp:187 msgid "Kopete (kopete.kde.org)" msgstr "Kopete (kopete.kde.org)" -#: main.cpp:186 +#: main.cpp:187 msgid "Old popup balloons code, initial p2p code, MSN challenge handler" msgstr "" "Codi de les notificacions de globus antigues, codi inicial p2p, control dels " "reptes de msn" -#: main.cpp:187 +#: main.cpp:188 msgid "Idle timer code" msgstr "Codi de temporització a la inactivitat" -#: main.cpp:187 +#: main.cpp:188 msgid "KScreensaver" msgstr "KScreensaver" -#: main.cpp:188 +#: main.cpp:189 msgid "BasKet" msgstr "BasKet" -#: main.cpp:188 +#: main.cpp:189 msgid "Close-to-tray icon screenshot code" msgstr "Codi de tancar a la safata del sistema amb una captura de pantalla" -#: main.cpp:189 +#: main.cpp:190 msgid "Amarok" msgstr "Amarok" -#: main.cpp:189 +#: main.cpp:190 msgid "" "Custom crash handler implementation, System tray icon overlay implementation" msgstr "" "Implementació del manipulador de fallades personalitzat, nova icona de la " "safata del sistema" -#: main.cpp:190 +#: main.cpp:191 msgid "" "KNotify not giving focus bug fix and KWin focus stealing prevention " "workaround" msgstr "Correcció de focus per KNotify i de pèrdua de focus per KWin" -#: main.cpp:190 +#: main.cpp:191 msgid "Quassel" msgstr "Quassel" -#: main.cpp:193 +#: main.cpp:194 msgid "" "You are welcome to send bugfixes and patches to the KMess help forum!\n" "If you feel your name is missing here, please contact us too!" @@ -2939,34 +2952,34 @@ "Si trobeu que el vostre nom hauria de figurar aquí, si us plau, contacteu " "amb nosaltres!" -#: main.cpp:193 +#: main.cpp:194 msgid "Your name here?" msgstr "El vostre nom aquí?" -#: main.cpp:196 rc.cpp:1 +#: main.cpp:197 rc.cpp:1 msgctxt "NAME OF TRANSLATORS" msgid "Your names" msgstr "Adrià Arrufat,Jaume Cornadó" -#: main.cpp:197 +#: main.cpp:198 msgctxt "EMAIL OF TRANSLATORS" msgid "Your email addresses" msgstr "swi...@gm...,ja...@ll..." -#: main.cpp:203 +#: main.cpp:204 msgid "Do not show the contact list window initially" msgstr "No mostris la llista de contactes a l'inici" -#: main.cpp:204 +#: main.cpp:205 msgid "Autologin with the given email address" msgstr "Autoconnecta't amb aquesta adreça de correu elctrònic" -#: main.cpp:209 +#: main.cpp:210 msgid "Run a debug test (developer build only)" msgstr "" "Executa una prova amb depuració (només per a compilacions de desenvolupadors)" -#: main.cpp:211 +#: main.cpp:212 msgid "" "Connect to the specified server instead of the official Live server.\n" "Use \"localhost\" or \"127.0.0.1\" to connect to a local KMess Test Server." @@ -4177,21 +4190,21 @@ msgid " - %1 emails" msgstr " - %1 correus electrònics " -#: settings/accountpage.cpp:81 +#: settings/accountpage.cpp:83 msgid "Browse..." msgstr "Examina..." -#: settings/accountpage.cpp:82 +#: settings/accountpage.cpp:84 msgid "Browse and Crop Picture..." msgstr "Examina i retalla una imatge..." -#: settings/accountpage.cpp:83 +#: settings/accountpage.cpp:85 msgid "Set Previous Image..." msgstr "Posa una imatge anterior..." #. i18n: file: settings/accountpage.ui:133 #. i18n: ectx: property (title), widget (QGroupBox, groupBox_2) -#: settings/accountpage.cpp:459 rc.cpp:389 +#: settings/accountpage.cpp:466 rc.cpp:389 msgid "Display Picture" msgstr "Imatge a mostrar" @@ -6525,6 +6538,10 @@ "<b>La vostra adreça de correu electrònic no serà utilitzada per res més que " "això.</b></html>" +#~ msgctxt "Message in list tooltip" +#~ msgid "This contact does not have you in his or her contact list." +#~ msgstr "Aquesta persona no us té a la seva llista de contactes." + #~ msgctxt "Default personal message shown in the contact list" #~ msgid "<Enter your personal message here>" #~ msgstr "<Escriviu aquí el vostre missatge personal>" Modified: branches/kmess/kmess-2.0.x/po/de.po =================================================================== --- branches/kmess/kmess-2.0.x/po/de.po 2010-05-03 19:06:05 UTC (rev 5989) +++ branches/kmess/kmess-2.0.x/po/de.po 2010-05-03 19:09:09 UTC (rev 5990) @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" -"POT-Creation-Date: 2010-02-25 15:16+0100\n" +"POT-Creation-Date: 2010-05-03 21:06+0200\n" "PO-Revision-Date: 2010-04-15 22:09+0200\n" "Last-Translator: Panagiotis Papadopoulos <pa...@gm...>\n" "Language-Team: German <kde...@kd...>\n" @@ -27,7 +27,7 @@ msgid "Your name" msgstr "Ihr Name" -#: account.cpp:57 settings/accountpage.cpp:218 +#: account.cpp:57 settings/accountpage.cpp:220 #: settings/accountsettingsdialog.cpp:205 msgid "yo...@ho..." msgstr "si...@ho..." @@ -164,8 +164,8 @@ msgid "" "%1 has sent you a voice clip, but KMess does not support voice clips yet." msgstr "" -"%1 hat Ihnen eine Sprachaufzeichnung gesendet, KMess unterstützt " -"aber Sprachaufzeichnungen noch nicht." +"%1 hat Ihnen eine Sprachaufzeichnung gesendet, KMess unterstützt aber " +"Sprachaufzeichnungen noch nicht." #: chat/chat.cpp:1201 #, kde-format @@ -174,8 +174,8 @@ "%1 has sent you an action message, but KMess does not support action " "messages yet." msgstr "" -"%1 hat Ihnen eine Aktionsnachricht gesendet, KMess unterstützt " -"aber Aktionsnachrichten noch nicht." +"%1 hat Ihnen eine Aktionsnachricht gesendet, KMess unterstützt aber " +"Aktionsnachrichten noch nicht." #: chat/chat.cpp:1212 msgctxt "Warning message shown in chat" @@ -239,8 +239,7 @@ "have the "cabextract" program installed." msgstr "" "Sie haben ein Animoticon von %1 erhalten, es kann aber nicht angezeigt " -"werden. Bitte stellen Sie sicher, dass „cabextract“ installiert " -"ist." +"werden. Bitte stellen Sie sicher, dass „cabextract“ installiert ist." #: chat/chat.cpp:1330 #, kde-format @@ -251,10 +250,8 @@ "You received the "%2" wink from %1, but it could not be displayed. " "Make sure you have the "cabextract" program installed." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " -"nicht " -"angezeigt werden. Bitte stellen Sie sicher, dass „cabextract“ " -"installiert ist." +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber nicht angezeigt " +"werden. Bitte stellen Sie sicher, dass „cabextract“ installiert ist." #: chat/chat.cpp:1342 #, kde-format @@ -276,10 +273,9 @@ "You received the "%2" wink from %1, but it could not be displayed. " "Extracting the wink package with "cabextract" has failed." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " -"nicht " -"angezeigt werden. Das Entpacken des Animoticonpakets mit „" -"cabextract“ ist fehlgeschlagen." +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber nicht angezeigt " +"werden. Das Entpacken des Animoticonpakets mit „cabextract“ ist " +"fehlgeschlagen." #: chat/chat.cpp:1363 #, kde-format @@ -300,8 +296,8 @@ "You received the "%2" wink from %1, but it could not be displayed. " "The data could not be read." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " -"nicht angezeigt werden. Die Daten können nicht gelesen werden." +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber nicht angezeigt " +"werden. Die Daten können nicht gelesen werden." #: chat/chat.cpp:1414 #, kde-format @@ -367,8 +363,8 @@ "The file "%1" could not be found on your computer, and the " "download failed." msgstr "" -"Die Datei „%1“ kann auf dem Computer nicht gefunden werden und " -"der Download ist fehlgeschlagen." +"Die Datei „%1“ kann auf dem Computer nicht gefunden werden und der Download " +"ist fehlgeschlagen." #: chat/chat.cpp:1656 #, kde-format @@ -830,8 +826,8 @@ "Handwriting is disabled: this contact does not support receiving handwritten " "messages." msgstr "" -"Handschriftmodus ist deaktiviert: Der Kontakt kann keine " -"handgeschriebenen Nachrichten empfangen." +"Handschriftmodus ist deaktiviert: Der Kontakt kann keine handgeschriebenen " +"Nachrichten empfangen." #. i18n: file: chat/chatwindow.ui:276 #. i18n: ectx: property (toolTip), widget (QToolButton, winksButton_) @@ -857,51 +853,51 @@ msgid "&Start Private Chat" msgstr "&Privaten Chat beginnen" -#: chat/contactframe.cpp:355 kmessview.cpp:689 +#: chat/contactframe.cpp:355 kmessview.cpp:704 msgid "&Send Email" msgstr "E-Mail &senden" -#: chat/contactframe.cpp:356 kmessview.cpp:690 +#: chat/contactframe.cpp:356 kmessview.cpp:705 msgid "&View Profile" msgstr "&Profil anzeigen" -#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:692 +#: chat/contactframe.cpp:358 chat/contactframe.cpp:411 kmessview.cpp:707 msgid "&Properties" msgstr "&Eigenschaften" -#: chat/contactframe.cpp:360 kmessview.cpp:694 +#: chat/contactframe.cpp:360 kmessview.cpp:709 msgid "&Add Contact" msgstr "&Kontakt hinzufügen" -#: chat/contactframe.cpp:361 kmessview.cpp:695 +#: chat/contactframe.cpp:361 kmessview.cpp:710 msgid "A&llow Contact" msgstr "Kontakt er&lauben" -#: chat/contactframe.cpp:362 kmessview.cpp:698 +#: chat/contactframe.cpp:362 kmessview.cpp:713 msgid "&Delete Contact" msgstr "Kontakt löschen" -#: chat/contactframe.cpp:364 kmessview.cpp:696 +#: chat/contactframe.cpp:364 kmessview.cpp:711 msgid "&Block Contact" msgstr "Kontakt &blockieren" -#: chat/contactframe.cpp:365 kmessview.cpp:697 +#: chat/contactframe.cpp:365 kmessview.cpp:712 msgid "&Unblock Contact" msgstr "Blockier&ung aufheben" -#: chat/contactframe.cpp:367 kmessview.cpp:701 +#: chat/contactframe.cpp:367 kmessview.cpp:716 msgid "&Friendly Name" msgstr "&Spitzname" -#: chat/contactframe.cpp:368 kmessview.cpp:702 +#: chat/contactframe.cpp:368 kmessview.cpp:717 msgid "&Personal Message" msgstr "&Statusnachricht" -#: chat/contactframe.cpp:369 kmessview.cpp:703 +#: chat/contactframe.cpp:369 kmessview.cpp:718 msgid "&Email Address" msgstr "&E-Mail-Adresse" -#: chat/contactframe.cpp:370 kmessview.cpp:704 +#: chat/contactframe.cpp:370 kmessview.cpp:719 msgid "Song &Name" msgstr "Namen des Musiktitels" @@ -927,7 +923,7 @@ msgid "&Emoticons" msgstr "&Emoticons" -#: chat/contactframe.cpp:404 kmessview.cpp:739 +#: chat/contactframe.cpp:404 kmessview.cpp:754 msgid "&Copy" msgstr "&Kopieren" @@ -943,17 +939,17 @@ msgid "The contact is %1" msgstr "Der Kontakt ist %1" -#: chat/contactswidget.cpp:298 kmessview.cpp:523 settings/accountpage.cpp:489 +#: chat/contactswidget.cpp:298 kmessview.cpp:538 settings/accountpage.cpp:496 msgid "Downloading of display picture failed" msgstr "Herunterladen des Anzeigebildes fehlgeschlagen" -#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:523 -#: kmessview.cpp:560 main.cpp:43 settings/accountpage.cpp:489 -#: settings/accountpage.cpp:550 +#: chat/contactswidget.cpp:298 chat/contactswidget.cpp:334 kmessview.cpp:538 +#: kmessview.cpp:575 main.cpp:43 settings/accountpage.cpp:496 +#: settings/accountpage.cpp:557 msgid "KMess" msgstr "KMess" -#: chat/contactswidget.cpp:332 kmessview.cpp:558 settings/accountpage.cpp:548 +#: chat/contactswidget.cpp:332 kmessview.cpp:573 settings/accountpage.cpp:555 msgid "" "An error occurred while trying to change the display picture.\n" "Make sure that you have selected an existing image file." @@ -982,7 +978,7 @@ msgid "Edit" msgstr "Bearbeiten" -#: chat/emoticonswidget.cpp:442 kmess.cpp:580 +#: chat/emoticonswidget.cpp:442 kmess.cpp:583 msgid "Remove" msgstr "Entfernen" @@ -1039,15 +1035,15 @@ msgstr "Kompatibel zu Windows Live Messenger" #: contact/msnstatus.cpp:159 contact/msnstatus.cpp:172 initialview.cpp:85 -#: model/contactlist.cpp:1825 settings/accountpage.cpp:99 +#: model/contactlist.cpp:1825 settings/accountpage.cpp:101 msgid "Online" msgstr "Online" -#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:102 +#: contact/msnstatus.cpp:160 initialview.cpp:88 settings/accountpage.cpp:104 msgid "Busy" msgstr "Beschäftigt" -#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:100 +#: contact/msnstatus.cpp:161 initialview.cpp:86 settings/accountpage.cpp:102 msgid "Away" msgstr "Abwesend" @@ -1059,19 +1055,19 @@ msgid "Idle" msgstr "Inaktiv" -#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:101 +#: contact/msnstatus.cpp:164 initialview.cpp:87 settings/accountpage.cpp:103 msgid "Be Right Back" msgstr "Bin gleich zurück" -#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:104 +#: contact/msnstatus.cpp:165 initialview.cpp:90 settings/accountpage.cpp:106 msgid "On the Phone" msgstr "Am Telefon" -#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:103 +#: contact/msnstatus.cpp:166 initialview.cpp:89 settings/accountpage.cpp:105 msgid "Out to Lunch" msgstr "Beim Mittagessen" -#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:105 +#: contact/msnstatus.cpp:167 initialview.cpp:91 settings/accountpage.cpp:107 msgid "Invisible" msgstr "Unsichtbar" @@ -1189,16 +1185,16 @@ msgid "Contact Properties for %1" msgstr "Kontakteigenschaften von %1" -#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:816 kmessview.cpp:1290 +#: dialogs/contactpropertiesdialog.cpp:399 kmess.cpp:819 kmessview.cpp:1306 #: network/msnsockethttp.cpp:199 network/msnsockettcp.cpp:386 msgid "Connected" msgstr "Verbunden" -#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1296 +#: dialogs/contactpropertiesdialog.cpp:405 kmessview.cpp:1312 msgid "Not seen yet" msgstr "Noch nicht gesehen" -#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1313 +#: dialogs/contactpropertiesdialog.cpp:416 kmessview.cpp:1329 msgid "No messages yet" msgstr "Bisher keine Nachrichten erhalten" @@ -1226,21 +1222,21 @@ msgid "Client: %1" msgstr "Programm: %1" -#: dialogs/contactpropertiesdialog.cpp:665 +#: dialogs/contactpropertiesdialog.cpp:666 msgctxt "Dialog box text" msgid "Are you sure you want to use the display picture of this contact?" msgstr "" "Sind Sie sicher, dass Sie das Anzeigebild dieses Kontakts benutzen möchten?" -#: dialogs/contactpropertiesdialog.cpp:667 +#: dialogs/contactpropertiesdialog.cpp:668 msgid "Copy Contact Picture" msgstr "Kontakt-Anzeigebild kopieren" -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "The selected filetype is not supported by Phonon." msgstr "Der ausgewählte Dateityp wird nicht von Phonon unterstützt." -#: dialogs/contactpropertiesdialog.cpp:720 +#: dialogs/contactpropertiesdialog.cpp:721 msgid "Unsupported filetype" msgstr "Nicht unterstützter Dateityp" @@ -1761,8 +1757,8 @@ "Waiting for an Internet connection to reconnect...<br /><a href='%" "1'>Reconnect now!</a>" msgstr "" -"Auf Internetverbindung warten, um die Verbindung wiederherzustellen …" -"<br /><a href='%1'>Jetzt wiederverbinden</a>" +"Auf Internetverbindung warten, um die Verbindung wiederherzustellen …<br /" +"><a href='%1'>Jetzt wiederverbinden</a>" #: initialview.cpp:422 msgctxt "Status message on login screen" @@ -1826,7 +1822,7 @@ msgid "Enter a name for the new group:" msgstr "Geben Sie einen Namen für die neue Gruppe ein:" -#: kmess.cpp:577 +#: kmess.cpp:580 #, kde-format msgid "" "<qt>Are you sure you want to remove the contact <b>%1</b> from your contact " @@ -1835,15 +1831,15 @@ "<qt>Sind Sie sicher, dass Sie <b>%1</b> von Ihrer Kontaktliste entfernen " "wollen?</qt>" -#: kmess.cpp:579 +#: kmess.cpp:582 msgid "Remove Contact" msgstr "Kontakt löschen" -#: kmess.cpp:581 +#: kmess.cpp:584 msgid "Remove and Block" msgstr "Löschen und blockieren" -#: kmess.cpp:627 +#: kmess.cpp:630 #, kde-format msgctxt "dialog text" msgid "" @@ -1853,12 +1849,12 @@ "Die Gruppe <b>%1</b> ist nicht leer! Entfernen Sie alle darin befindlichen " "Kontakte und versuchen Sie es erneut." -#: kmess.cpp:629 kmess.cpp:636 +#: kmess.cpp:632 kmess.cpp:639 msgctxt "dialog title" msgid "Group Removal" msgstr "Entfernen einer Gruppe" -#: kmess.cpp:634 +#: kmess.cpp:637 #, kde-format msgctxt "dialog text" msgid "" @@ -1868,24 +1864,24 @@ "<qt>Sind Sie sicher, dass Sie die Gruppe <b>%1</b> aus Ihrer Kontaktliste " "entfernen möchten?</qt>" -#: kmess.cpp:637 +#: kmess.cpp:640 msgctxt "dialog button" msgid "Remove" msgstr "Löschen" -#: kmess.cpp:666 +#: kmess.cpp:669 msgid "This is a special group, which cannot be changed." msgstr "Das ist eine spezielle Gruppe, die nicht verändert werden kann." -#: kmess.cpp:677 +#: kmess.cpp:680 msgid "Rename Group" msgstr "Gruppe umbenennen" -#: kmess.cpp:678 +#: kmess.cpp:681 msgid "Enter a new name for this group:" msgstr "Geben Sie einen neuen Namen für die Gruppe ein:" -#: kmess.cpp:755 +#: kmess.cpp:758 #, kde-format msgctxt "dialog text" msgid "" @@ -1895,21 +1891,21 @@ "<p>Die automatische Anmeldung funktioniert nicht mit diesem Zugang: <b>%1</" "b>.<br/>Sie müssen erst das Passwort des Zugangs speichern.</p>" -#: kmess.cpp:758 +#: kmess.cpp:761 msgctxt "dialog title" msgid "Autologin Failed" msgstr "Automatische Anmeldung fehlgeschlagen" -#: kmess.cpp:1069 +#: kmess.cpp:1077 msgid "Connection could be down..." msgstr "Verbindung könnte unterbrochen sein …" -#: kmess.cpp:1139 +#: kmess.cpp:1147 msgctxt "Status bar message" msgid "Disconnected" msgstr "Verbindung getrennt" -#: kmess.cpp:1478 +#: kmess.cpp:1482 #, kde-format msgctxt "" "Paragraph to be added to the text of a message dialog box, but only when KDE " @@ -1917,7 +1913,7 @@ msgid "<p>KMess has searched for it in the following folders:<br>%1</p>" msgstr "<p>KMess hat in den folgenden Ordner danach gesucht:<br>%1</p>" -#: kmess.cpp:1490 +#: kmess.cpp:1494 #, kde-format msgctxt "" "Text for a message dialog box; %1 is an explanation about the list of " @@ -1933,12 +1929,12 @@ "der folgenden Ordner gefunden werden:</p>%1<p>Bitte überprüfen Sie Ihre " "Installation.</p></html>" -#: kmess.cpp:1496 +#: kmess.cpp:1500 msgctxt "Message box title" msgid "Error With Notifications" msgstr "Benachrichtigungsfehler" -#: kmess.cpp:1774 +#: kmess.cpp:1778 #, kde-format msgctxt "" "Main window caption: switched order to easily distinguish it from chats" @@ -2007,7 +2003,7 @@ msgid "&Export Contact List..." msgstr "Kontaktliste &exportieren …" -#: kmessinterface.cpp:183 kmessview.cpp:691 +#: kmessinterface.cpp:183 kmessview.cpp:706 msgid "Show Chat &History..." msgstr "C&hat-Protokolle anzeigen …" @@ -2059,98 +2055,93 @@ msgid "Show &Network Window..." msgstr "&Netzwerkfenster anzeigen …" -#: kmessview.cpp:330 +#: kmessview.cpp:341 #, kde-format msgid "[%1] Logged in with %2" msgstr "[%1] angemeldet mit %2" -#: kmessview.cpp:374 +#: kmessview.cpp:389 #, kde-format msgid "[%1] %2 goes online" msgstr "[%1] %2 hat sich angemeldet" -#: kmessview.cpp:379 +#: kmessview.cpp:394 #, kde-format msgid "[%1] %2 goes offline" msgstr "[%1] %2 hat sich abgemeldet" -#: kmessview.cpp:688 +#: kmessview.cpp:703 msgid "Cha&t" msgstr "Cha&t" -#: kmessview.cpp:699 +#: kmessview.cpp:714 msgid "&Remove From Group" msgstr "Aus G&ruppe entfernen" -#: kmessview.cpp:732 +#: kmessview.cpp:747 msgid "&Copy to Group" msgstr "In Gruppe kopieren" -#: kmessview.cpp:733 +#: kmessview.cpp:748 msgid "&Move to Group" msgstr "In Gruppe verschieben" -#: kmessview.cpp:784 +#: kmessview.cpp:799 msgid "Move Group &Down" msgstr "Gruppe nach unten verschieben" -#: kmessview.cpp:785 +#: kmessview.cpp:800 msgid "Move Group &Up" msgstr "Gruppe nach &oben verschieben" -#: kmessview.cpp:786 +#: kmessview.cpp:801 msgid "Re&move Group" msgstr "Gruppe löschen" -#: kmessview.cpp:787 +#: kmessview.cpp:802 msgid "Re&name Group" msgstr "Gruppe umbe&nennen" -#: kmessview.cpp:1237 -msgctxt "Message in list tooltip" -msgid "This contact does not have you in his or her contact list." -msgstr "Dieser Kontakt hat Sie nicht in seiner/ihrer Kontaktliste." - -#: kmessview.cpp:1255 +#: kmessview.cpp:1271 msgctxt "Contact email label in list tooltip" msgid "Email address" msgstr "E-Mail-Adresse" -#: kmessview.cpp:1262 +#: kmessview.cpp:1278 msgctxt "Contact Live Messenger client label in list tooltip" msgid "Client" msgstr "Programm" -#: kmessview.cpp:1274 +#: kmessview.cpp:1290 msgid "Yes" msgstr "Ja" -#: kmessview.cpp:1278 +#: kmessview.cpp:1294 msgid "No" msgstr "Nein" -#: kmessview.cpp:1281 +#: kmessview.cpp:1297 msgctxt "Contact blocked status label in list tooltip" msgid "Blocked" msgstr "Blockiert" -#: kmessview.cpp:1303 +#: kmessview.cpp:1319 msgctxt "Contact last presence label in list tooltip" msgid "Last seen" msgstr "Zuletzt online" -#: kmessview.cpp:1320 +#: kmessview.cpp:1336 msgctxt "Contact last message label in list tooltip" msgid "Last message" msgstr "Letzte Nachricht" -#: kmessview.cpp:1330 +#: kmessview.cpp:1346 #, kde-format msgctxt "Group name in group tooltip" msgid "Group <b>%1</b>" msgstr "Gruppe <b>%1</b>" -#: kmessview.cpp:1338 +#: kmessview.cpp:1354 #, kde-format msgctxt "Contact counters in normal group tooltip, first part" msgid "%1 contact, " @@ -2158,7 +2149,7 @@ msgstr[0] "%1 Kontakt, " msgstr[1] "%1 Kontakte, " -#: kmessview.cpp:1341 +#: kmessview.cpp:1357 #, kde-format msgctxt "Contact counters in normal group tooltip, second part" msgid "%1 online" @@ -2166,7 +2157,7 @@ msgstr[0] "%1 online" msgstr[1] "%1 online" -#: kmessview.cpp:1347 +#: kmessview.cpp:1363 #, kde-format msgctxt "Contacts count in special group tooltip" msgid "%1 contact" @@ -2174,35 +2165,34 @@ msgstr[0] "%1 Kontakt" msgstr[1] "%1 Kontakte" -#: kmessview.cpp:1768 +#: kmessview.cpp:1784 msgctxt "Default friendly name tooltip" msgid "Click here to change your friendly name" msgstr "Klicken Sie hier, um Ihren Spitznamen zu ändern." -#: kmessview.cpp:1828 +#: kmessview.cpp:1844 msgctxt "Default personal message shown in the contact list" msgid "[i]Click to set a personal message[/i]" msgstr "[i]Hier klicken, um Statusnachricht einzugeben[/i]" -#: kmessview.cpp:1829 +#: kmessview.cpp:1845 msgctxt "Default personal message tooltip" msgid "" "Click here to insert a message to show to your contacts: they will see it " "along with your friendly name" msgstr "" "Klicken Sie hier, um eine Nachricht einzugeben, die Ihre Kontakte sehen " -"sollen. Sie wird " -"neben Ihrem Spitznamen zu sehen sein." +"sollen. Sie wird neben Ihrem Spitznamen zu sehen sein." -#: kmessview.cpp:2009 +#: kmessview.cpp:2025 msgid "No chat logs could be found for this contact." msgstr "Es können keine Chat-Protokolle für diesen Kontakt gefunden werden." -#: kmessview.cpp:2010 kmessview.cpp:2016 +#: kmessview.cpp:2026 kmessview.cpp:2032 msgid "No chat history found" msgstr "Keine Chat-Protokolle gefunden" -#: kmessview.cpp:2015 +#: kmessview.cpp:2031 msgid "" "No chat logs could be found for this contact. Note that new chats are not " "logged; if you want your chats to be logged, you can enable it in your " @@ -2212,13 +2202,23 @@ "Sie, dass neue Chats standardmäßig nicht protokolliert werden. Sie können " "das protokollieren Ihrer Chats, in den Zugangseinstellungen aktivieren." -#: kmessview.cpp:2209 +#: kmessview.cpp:2233 #, kde-format msgid "%1 new email message" msgid_plural "%1 new email messages" msgstr[0] "%1 neue E-Mail-Nachricht" msgstr[1] "%1 neue E-Mail-Nachrichten" +#: kmessview.cpp:2252 +#, fuzzy +msgid "Show contacts what you are listening to (click to disable)" +msgstr "Kontakten zeigen welc&hen Musiktitel Sie gerade hören" + +#: kmessview.cpp:2257 +#, fuzzy +msgid "Show contacts what you are listening to (click to enable)" +msgstr "Kontakten ... [truncated message content] |
From: <pan...@us...> - 2010-05-03 19:06:11
|
Revision: 5989 http://kmess.svn.sourceforge.net/kmess/?rev=5989&view=rev Author: pano9000 Date: 2010-05-03 19:06:05 +0000 (Mon, 03 May 2010) Log Message: ----------- merged an updated japanese translation Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/po/ja.po Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-04-25 18:51:04 UTC (rev 5988) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-05-03 19:06:05 UTC (rev 5989) @@ -1,4 +1,7 @@ +2010-05-03 (Pano) + * Merged an updated Japanese translation by Daniel E. Moctezuma. + 2010-04-25 (Pano) * Merged an updated Japanese translation by Daniel E. Moctezuma. Modified: branches/kmess/kmess-2.0.x/po/ja.po =================================================================== --- branches/kmess/kmess-2.0.x/po/ja.po 2010-04-25 18:51:04 UTC (rev 5988) +++ branches/kmess/kmess-2.0.x/po/ja.po 2010-05-03 19:06:05 UTC (rev 5989) @@ -10,7 +10,7 @@ "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" "POT-Creation-Date: 2010-02-25 15:16+0100\n" -"PO-Revision-Date: 2010-04-23 13:51-0700\n" +"PO-Revision-Date: 2010-05-02 21:33-0700\n" "Last-Translator: Daniel E. Moctezuma <shi...@gm...>\n" "Language-Team: Japanese <kde...@kd...>\n" "MIME-Version: 1.0\n" @@ -286,9 +286,7 @@ msgid "" "%1 has gone offline. Any messages you send will be delivered the next time " "he or she logs in." -msgstr "" -"%1 さんはサインアウトしました。メッセージを送信すると、その人は次回のサインイ" -"ン時にメッセージを受け取ります。" +msgstr "%1 さんはサインアウトしました。メッセージを送信すると、そのコンタクトは次回のサインイン時にメッセージを受け取ります。" #: chat/chat.cpp:1419 #, kde-format @@ -360,9 +358,7 @@ msgid "" "%1 is currently offline. Any messages you send will be delivered the next " "time he or she logs in." -msgstr "" -"%1 さんが現在はオフラインです。メッセージを送信すると、その人は次回のサインイ" -"ン時にメッセージを受け取ります。" +msgstr "%1 さんが現在はオフラインです。メッセージを送信すると、そのコンタクトは次回のサインイン時にメッセージを受け取ります。" #: chat/chatmaster.cpp:1316 #, kde-format @@ -699,12 +695,11 @@ msgstr "手書きのメッセージの送信に失敗しました:知り合いはサポートしていません。" #: chat/chatwindow.cpp:1534 -#, fuzzy msgctxt "Error message shown in chat" msgid "" "Failed to send the handwritten message: an error has occurred while creating " "it." -msgstr "%1 さんに手書きのメッセージの送信に失敗しました。" +msgstr "%1 さんに手書きのメッセージの送信に失敗しました:作成中エラーが発生しました。" #: chat/chatwindow.cpp:1824 msgctxt "Chat window caption, without contact name" @@ -1772,7 +1767,7 @@ msgstr "削除して禁止する" #: kmess.cpp:627 -#, fuzzy, kde-format +#, kde-format msgctxt "dialog text" msgid "" "The group <b>%1</b> is not empty! First remove all contacts from it, then " @@ -1829,7 +1824,7 @@ #: kmess.cpp:1069 #, fuzzy msgid "Connection could be down..." -msgstr "接続はダウンするかもしれません..." +msgstr "接続はダウンしてる可能性があります..." #: kmess.cpp:1139 msgctxt "Status bar message" @@ -2112,7 +2107,7 @@ msgid "" "Click here to insert a message to show to your contacts: they will see it " "along with your friendly name" -msgstr "" +msgstr "ここをクリックして、あなたのコンタクトに公開する表示メッセージを入力できます:ニックネームと一緒に表示します。" #: kmessview.cpp:2009 msgid "No chat logs could be found for this contact." @@ -2962,7 +2957,7 @@ msgid "" "The transfer of the file "%1" failed. Could not open the " "destination file." -msgstr ""%1" のファイル転送に失敗して、開くことができませんでした。" +msgstr ""%1" のファイル転送に失敗して、開けませんでした。" #: network/applications/filetransfer.cpp:319 msgid "Transfer accepted." @@ -3196,7 +3191,7 @@ #: network/applications/p2papplicationbase.cpp:1210 msgid "The transfer failed. Could not open data source." -msgstr "転送に失敗しました。データソースが開けられません。" +msgstr "転送に失敗しました。データソースが開けませんでした。" #: network/applications/unknownapplication.cpp:53 #, kde-format @@ -3245,11 +3240,11 @@ #: network/extra/msnftpconnection.cpp:398 #, kde-format msgid "The transfer of %1 failed. Could not open a local port." -msgstr "%1 のファイル転送に失敗しました。ロカールポートが開けられません。" +msgstr "%1 のファイル転送に失敗しました。ロカールポートが開けませんでした。" #: network/extra/msnftpconnection.cpp:399 msgid "Could not open a local port." -msgstr "ローカルポートを開くことができませんでした。" +msgstr "ローカルポートを開けませんでした。" #: network/extra/msnftpconnection.cpp:456 msgid "Initiating file transfer" @@ -3521,7 +3516,7 @@ #, kde-format msgid "" "Unknown error code received from the server: %1<br/>Technical details: %2" -msgstr "" +msgstr "サーバから不明なコードが受信しました:%1<br/>詳細: %2" #: network/msnconnection.cpp:657 #, kde-format @@ -4326,14 +4321,14 @@ msgstr "開発者にコメントを送信" #: utils/likeback/likebackdialog.cpp:140 -#, kde-format +#, fuzzy, kde-format msgctxt "" "Feedback dialog text, message with one accepted language for the comments" msgid "" "Please, write it in <b>%1</b>, or the developers will not be able to read " "your comment!<br/>You may want to use an <a href=\"%2\">online translation " "tool</a> to translate your message.<br/>" -msgstr "メッセージを<b>%1</b>で書いてください(<a href=\"%2\">翻訳機経由</a>でもできます)。<br/>" +msgstr "メッセージを<b>%1</b>で書いてください(<a href=\"%3\">翻訳機経由</a>でもできます)。<br/>" #: utils/likeback/likebackdialog.cpp:152 #, kde-format @@ -4395,7 +4390,6 @@ msgstr "コメントが送信しました" #: utils/likeback/likebackdialog.cpp:313 -#, fuzzy msgctxt "Dialog box text" msgid "" "<p>There has been an error while trying to send the comment.</p><p>Please, " @@ -5280,7 +5274,7 @@ #, fuzzy msgid "" "Controls the number of minutes before KMess changes the status to \"Idle\"." -msgstr "アイドルになる前の数分をコントロールできます。" +msgstr "アイドルになる前の分の数をコントロールできます。" # This string should be translated as a single whitespace. Please don't erase it. #. i18n: file: settings/accountpage.ui:559 @@ -5333,10 +5327,11 @@ #. i18n: file: settings/accountsmanagerpage.ui:76 #. i18n: ectx: property (toolTip), widget (QPushButton, addAccountButton_) #: rc.cpp:496 +#, fuzzy msgid "" "Click here to create a new KMess account for an email already associated to " "a Live account" -msgstr "" +msgstr "ここをクリックして、既に Live アカウントに関連付けてるメールアドレスの新規 KMess アカウントを作成できます。" #. i18n: file: settings/accountsmanagerpage.ui:79 #. i18n: ectx: property (text), widget (QPushButton, addAccountButton_) @@ -5501,7 +5496,7 @@ #. i18n: ectx: property (toolTip), widget (QRadioButton, monthRadioButton_) #: rc.cpp:582 msgid "Create directories to organize chats by year then by month" -msgstr "" +msgstr "チャットを月で並べ替えするためにディレクトリを作成します。" #. i18n: file: settings/chatloggingpage.ui:188 #. i18n: ectx: property (whatsThis), widget (QRadioButton, monthRadioButton_) @@ -5528,7 +5523,7 @@ #. i18n: ectx: property (toolTip), widget (QRadioButton, dayRadioButton_) #: rc.cpp:594 msgid "Create directories to organize chats by year, by month, then by day" -msgstr "" +msgstr "チャットを年、月、日で並べ替えするためにディレクトリを作成します。" #. i18n: file: settings/chatloggingpage.ui:211 #. i18n: ectx: property (whatsThis), widget (QRadioButton, dayRadioButton_) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-04-25 18:51:10
|
Revision: 5988 http://kmess.svn.sourceforge.net/kmess/?rev=5988&view=rev Author: pano9000 Date: 2010-04-25 18:51:04 +0000 (Sun, 25 Apr 2010) Log Message: ----------- merged an updated Japanese translation Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/po/ja.po Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-04-15 20:13:00 UTC (rev 5987) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-04-25 18:51:04 UTC (rev 5988) @@ -1,4 +1,7 @@ +2010-04-25 (Pano) + * Merged an updated Japanese translation by Daniel E. Moctezuma. + 2010-04-15 (Pano) * Merged an updated German translation. Modified: branches/kmess/kmess-2.0.x/po/ja.po =================================================================== --- branches/kmess/kmess-2.0.x/po/ja.po 2010-04-15 20:13:00 UTC (rev 5987) +++ branches/kmess/kmess-2.0.x/po/ja.po 2010-04-25 18:51:04 UTC (rev 5988) @@ -1,19 +1,17 @@ # Japanese Translation -# by Daniel E. Moctezuma. -# (2009) +# by Daniel E. Moctezuma # # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # -# Daniel E. Moctezuma <shi...@gm...>, 2009. -# eduardo, 2010. +# Daniel E. Moctezuma <shi...@gm...>, 2009, 2010. msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" "POT-Creation-Date: 2010-02-25 15:16+0100\n" -"PO-Revision-Date: 2010-03-31 16:32-0700\n" -"Last-Translator: eduardo\n" +"PO-Revision-Date: 2010-04-23 13:51-0700\n" +"Last-Translator: Daniel E. Moctezuma <shi...@gm...>\n" "Language-Team: Japanese <kde...@kd...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -111,13 +109,13 @@ msgstr "%1 (このメッセージは自動的に送信されました)" #: chat/chat.cpp:827 -#, fuzzy, kde-format +#, kde-format msgid "" "<html>KMess could not save the log for this chat:<br />The chat logs " "directory, "%1", does not exist.</html>" msgstr "" -"<html>KMess はこの会話のチャット・ログを保存できませんでした:<br/>"%" -"1" のチャット・ログのディレクトリは存在しません。</html>" +"<html>KMess はこの会話のチャット・ログを保存できませんでした:<br/>"%1" " +"のチャット・ログのディレクトリは存在しません。</html>" #: chat/chat.cpp:969 msgctxt "Message shown in the chat window (when the wink name is unknown)" @@ -527,14 +525,13 @@ msgstr "マイ絵文字" #: chat/chatwindow.cpp:376 -#, fuzzy msgid "" "<html>There are multiple tabs open in this chat window. Do you want to close " "the current tab only, or all tabs?<br /><br /><i>Note: You can close all " "tabs at once by pressing Alt+F4.</i></html>" msgstr "" "<html>複数のタブを閉じようとしています。現在のタブまたはすべてのタブを閉じま" -"すか?<br /><br /><i>注:Alt+F4を押すと、すべてのタブを閉じることができます。" +"すか?<br /><br /><i>注:Alt+F4 を押すと、すべてのタブを閉じることができます。" "</i></html>" #: chat/chatwindow.cpp:380 @@ -650,7 +647,6 @@ msgstr "チャットウィンドウをクリアする(&L)" #: chat/chatwindow.cpp:1106 -#, fuzzy msgid "" "<html>You used an incorrect syntax for the /status command. The correct " "syntax is: <b>/status online|away|idle|brb|busy|lunch|phone|invisible</b>." @@ -1535,7 +1531,7 @@ #: emoticontheme.cpp:865 msgid "Crossed fingers" -msgstr "" +msgstr "交差指" #: emoticontheme.cpp:866 msgid "Auto" @@ -1776,12 +1772,12 @@ msgstr "削除して禁止する" #: kmess.cpp:627 -#, kde-format +#, fuzzy, kde-format msgctxt "dialog text" msgid "" "The group <b>%1</b> is not empty! First remove all contacts from it, then " "try again!" -msgstr "" +msgstr "<b>%1</b> のグループは空ではありません!まずそのグループのすべてのコンタクトを削除して、もう一度試してください。" #: kmess.cpp:629 kmess.cpp:636 msgctxt "dialog title" @@ -1841,7 +1837,7 @@ msgstr "サインアウトしました" #: kmess.cpp:1478 -#, fuzzy, kde-format +#, kde-format msgctxt "" "Paragraph to be added to the text of a message dialog box, but only when KDE " "gives a list of folders where to search for an application file" @@ -2127,14 +2123,13 @@ msgstr "チャット履歴が見つかりませんでした" #: kmessview.cpp:2015 -#, fuzzy msgid "" "No chat logs could be found for this contact. Note that new chats are not " "logged; if you want your chats to be logged, you can enable it in your " "account settings." msgstr "" -"この知り合いとチャット履歴が見つかりませんでした。新規チャットは保存されてい" -"ません。アカウントの設定で有効にできます。" +"この知り合いのチャット履歴が見つかりませんでした。新規チャットは保存されてい" +"ません。保存したい場合にはアカウントの設定で有効にできます。" #: kmessview.cpp:2209 #, kde-format @@ -2526,12 +2521,9 @@ msgstr "Andrea Decorte" #: main.cpp:131 -#, fuzzy msgid "" "More Italian translation, Group selection in 'contact added user' dialog" -msgstr "" -"もっとイタリア語の翻訳、「contact added user」のグループセレクションのダイア" -"ログ" +msgstr "もっとイタリア語の翻訳、「contact added user」のグループセレクションのダイアログ" #: main.cpp:133 msgid "Daniel E. Moctezuma" @@ -2762,7 +2754,7 @@ #: main.cpp:176 msgid "GnomeMeeting developer" -msgstr "GnomeMeetingの開発者" +msgstr "GnomeMeeting の開発者" #: main.cpp:177 msgid "Guy with a bag over his head" @@ -3343,7 +3335,6 @@ msgstr "グループ名はコンタクトリストに既にあります。他の名前を入力してください。" #: network/msnconnection.cpp:437 -#, fuzzy msgid "" "Your contact list has too many groups; you are allowed to only have at most " "30" @@ -3362,9 +3353,8 @@ msgstr "グループは空きではありません" #: network/msnconnection.cpp:454 -#, fuzzy msgid "The group name is too long; it cannot be longer than 61 characters" -msgstr "グループ名は長すぎます。61 バイトを超えられません。" +msgstr "グループ名は長すぎます。61文字を超えられません。" #: network/msnconnection.cpp:459 msgid "Attempted to change group \"0\"" @@ -3423,7 +3413,7 @@ #: network/msnconnection.cpp:505 msgid "Challenge response failed" -msgstr "" +msgstr "チャレンジレスポンスに失敗しました" #: network/msnconnection.cpp:510 msgid "Bad command data" @@ -3458,9 +3448,8 @@ msgstr "認証チケットが間違っています。" #: network/msnconnection.cpp:551 -#, fuzzy msgid "You cannot start a chat with someone while you are invisible" -msgstr "潜伏中で誰もとチャットできません" +msgstr "潜伏中誰かとチャットを開始することができません。" #: network/msnconnection.cpp:555 msgid "Not accepting new contacts" @@ -3481,7 +3470,7 @@ #: network/msnconnection.cpp:576 msgid "Error accessing contact list, try again later" -msgstr "" +msgstr "コンタクトリストにアクセスできませんでした。後でもう一度試してください。" #: network/msnconnection.cpp:585 msgid "" @@ -3641,14 +3630,12 @@ "%1</i> としてサインインしました。</p>" #: network/msnnotificationconnection.cpp:3111 -#, fuzzy msgctxt "Connection error: passive notification message" msgid "" "<p>Unable to connect to the Live Messenger service.<br/>Maybe you need to " "authenticate before you can access the network?</p>" msgstr "" -"<p>Live Messengerサービスに接続できませんでした。<br/>ネットワークにアクセス" -"する前に確認が必要があるのを行ってください。</p>" +"<p>Live Messenger サービスに接続できませんでした。<br/>ネットワークにアクセスする前に認証するが必要可能性があります。</p>" #: network/msnnotificationconnection.cpp:3114 #, kde-format @@ -4026,7 +4013,7 @@ msgid "" "Closing the main window will keep KMess running in the system tray. Use " "'Quit' from the 'Connect' menu to quit the application." -msgstr "" +msgstr "メインウィンドウを閉じても KMess はシステムトレイで実行し続けます。終了するには「接続」メニューから「終了」を選択してください。" #: notification/systemtraywidget.cpp:96 notification/systemtraywidget.cpp:195 #: notification/systemtraywidget.cpp:205 @@ -4046,10 +4033,10 @@ msgstr "<br><b>%1</b> (%2)%3" #: notification/systemtraywidget.cpp:258 -#, fuzzy, kde-format +#, kde-format msgctxt "Tray icon email count, HTML version" msgid "<br />%1 emails" -msgstr "shi...@gm..." +msgstr "<br />%1 メール" #: notification/systemtraywidget.cpp:263 #, kde-format @@ -4108,7 +4095,6 @@ msgstr "チャット履歴" #: settings/accountsettingsdialog.cpp:155 -#, fuzzy msgctxt "Button tooltip text" msgid "" "Click here to delete this account from the list of registered accounts.\n" @@ -4116,7 +4102,7 @@ "will be deleted when you disconnect." msgstr "" "ここをクリックして、登録したアカウントリストからアカウントを削除します。\n" -"現在接続しているアカウントとゲストアカウントを削除できません。" +"現在接続しているアカウントとゲストアカウントを削除できなくて、サインアウトするときに削除します。" #: settings/accountsettingsdialog.cpp:207 #, kde-format @@ -4340,17 +4326,17 @@ msgstr "開発者にコメントを送信" #: utils/likeback/likebackdialog.cpp:140 -#, fuzzy, kde-format +#, kde-format msgctxt "" "Feedback dialog text, message with one accepted language for the comments" msgid "" "Please, write it in <b>%1</b>, or the developers will not be able to read " "your comment!<br/>You may want to use an <a href=\"%2\">online translation " "tool</a> to translate your message.<br/>" -msgstr "<b>%1</b>で書いてください(<a href=\"%3\">翻訳機経由</a>もできます)。<br/>" +msgstr "メッセージを<b>%1</b>で書いてください(<a href=\"%2\">翻訳機経由</a>でもできます)。<br/>" #: utils/likeback/likebackdialog.cpp:152 -#, fuzzy, kde-format +#, kde-format msgctxt "" "Feedback dialog text, message with list of accepted languages for the " "comments" @@ -4359,7 +4345,7 @@ "read your comment!<br/>You may want to use an <a href=\"%3\">online " "translation tool</a> to translate your message.<br/>" msgstr "" -"<b>%1か%2</b>で書いてください(<a href=\"%3\">翻訳機経由</a>もできます)。" +"メッセージを<b>%1か%2</b>で書いてください(<a href=\"%3\">翻訳機経由</a>でもできます)。" "<br/>" #: utils/likeback/likebackdialog.cpp:168 @@ -4368,10 +4354,9 @@ msgid "" "To make the comments you send more useful in improving this application, try " "to send the same amount of positive and negative comments.<br/>" -msgstr "" +msgstr "このアプリケーションを改善するためにコメントを正負の同量を送信してみてください。<br/>" #: utils/likeback/likebackdialog.cpp:177 -#, fuzzy msgctxt "Feedback dialog text, text to disallow feature requests" msgid "" "Please, do not ask for new features: this kind of request will be ignored." @@ -4387,7 +4372,7 @@ msgid "" "<p>You can provide the developers a brief description of your opinions about " "%1.<br/>%2 %3%4</p>" -msgstr "<p>開発者に%1について意見を説明できます。<br/>%2 %3%4</p>" +msgstr "<p>開発者に %1 について意見を説明できます。<br/>%2 %3%4</p>" #: utils/likeback/likebackdialog.cpp:225 #, kde-format @@ -4410,11 +4395,12 @@ msgstr "コメントが送信しました" #: utils/likeback/likebackdialog.cpp:313 +#, fuzzy msgctxt "Dialog box text" msgid "" "<p>There has been an error while trying to send the comment.</p><p>Please, " "try again later.</p>" -msgstr "" +msgstr "<p>コメントを送信中にエラーが発生しました。</p><p>後でもう一度試してください。</p>" #: utils/likeback/likebackdialog.cpp:315 msgctxt "Dialog box title" @@ -4458,7 +4444,7 @@ msgid "" "Click this button to show all default Live Messenger emoticons, so you can " "easily insert them in your messages." -msgstr "" +msgstr "このボタンをクリックして、すべての既定の Live Messenger アイコンを表示します。" #. i18n: file: chat/chatwindow.ui:257 #. i18n: ectx: property (toolTip), widget (QToolButton, customEmoticonButton_) @@ -4599,7 +4585,6 @@ #. i18n: file: dialogs/awaymessagedialog.ui:19 #. i18n: ectx: property (whatsThis), widget (QLabel, label) #: rc.cpp:101 -#, fuzzy msgid "" "Enter a message to be automatically sent to people who try to message you." msgstr "あなたに連絡してる人に送信する自動的なメッセージを入力してください。" @@ -4637,6 +4622,7 @@ #. i18n: file: dialogs/chathistorydialog.ui:167 #. i18n: ectx: property (text), widget (QCheckBox, fromBox_) #: rc.cpp:120 +#, fuzzy msgid "from" msgstr "から" @@ -4748,6 +4734,9 @@ "right-click on a received emoticon and choose \"Hide this Emoticon\". With " "this page, you can restore the hidden emoticons.</html>" msgstr "" +"<html>" +"このコンタクトから受信した絵文字を隠すことができます。隠すために受信した絵文字に右クリックをして、「絵文字を隠す」をクリックしてください。ここで隠した絵文" +"字を復元できます。</html>" #. i18n: file: dialogs/contactpropertiesdialog.ui:477 #. i18n: ectx: property (toolTip), widget (QPushButton, removeEmoticonButton_) @@ -4956,7 +4945,6 @@ #. i18n: file: initialview.ui:243 #. i18n: ectx: property (toolTip), widget (QComboBox, initialStatus_) #: rc.cpp:299 -#, fuzzy msgid "Choose a status to set when successfully connected." msgstr "接続に成功したとき、状態を選択。" @@ -4995,10 +4983,9 @@ #. i18n: file: initialview.ui:345 #. i18n: ectx: property (toolTip), widget (QPushButton, connectButton_) #: rc.cpp:323 -#, fuzzy msgid "" "Click this button to start using KMess, or to cancel a connection attempt" -msgstr "このボタンをクリックして、KMess を使うまたは接続の試しをキャンセルする。" +msgstr "このボタンをクリックして、KMess を使用するまたは接続の試しをキャンセルする。" #. i18n: file: initialview.ui:444 #. i18n: ectx: property (text), widget (KUrlLabel, newAccountLabel_) @@ -5619,7 +5606,7 @@ #. i18n: ectx: property (whatsThis), widget (QLabel, textLabel1) #: rc.cpp:634 msgid "Allows you to change the theme KMess uses to display all chat messages." -msgstr "" +msgstr "KMess のチャットメッセージが使ってるテーマを変更できます。" #. i18n: file: settings/chatstylepage.ui:41 #. i18n: ectx: property (text), widget (QLabel, textLabel1) @@ -5858,6 +5845,8 @@ "your inbox. The number of unread email messages is shown above the contact " "list. This option is only available for Live Mail accounts." msgstr "" +"有効したら、メールを受信したときに通知を表示して、コンタクトリストの上に未読メールの数を表示します。このオプションは Live Mail " +"のアカウントだけ使えます。" #. i18n: file: settings/contactlistpage.ui:26 #. i18n: ectx: property (text), widget (QCheckBox, showEmailInfoCheckBox_) @@ -6051,7 +6040,7 @@ msgid "" "Check this box to use the Live Mail webmail site when you connect with " "accounts compatible with Live Mail." -msgstr "" +msgstr "このボックスをチェックして、Live Mail 互換性のアカウントに接続するとき、Live Mail ウェブメールサイトを使えます。" #. i18n: file: settings/miscellaneouspage.ui:160 #. i18n: ectx: property (text), widget (QCheckBox, useLiveMailCheckbox_) @@ -6135,6 +6124,9 @@ "checkbox in the Help menu.</html>\n" " " msgstr "" +"<html>このアイコンをクリックして、開発者にフォードバックを送信できます。「ヘルプ」のメニューで「フィードバックアイコン」を無効できます。<" +"/html>\n" +" " #. i18n: file: utils/likeback/likebackbar.ui:49 #. i18n: ectx: property (toolTip), widget (QToolButton, m_dislikeButton) @@ -6208,6 +6200,8 @@ "<b>Your email address will not be used for anything else but this report.</" "b></html>" msgstr "" +"<html>メールアドレスを入力したら、開発者はコメントについてもっと情報を尋ねて、いつ尋ねた機能を実装することについて返信できます。<br/>\n" +"<b>あなたのメールアドレスはこのレポーを返信するために使います。</b></html>" #~ msgctxt "Default personal message shown in the contact list" #~ msgid "<Enter your personal message here>" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pan...@us...> - 2010-04-15 20:13:07
|
Revision: 5987 http://kmess.svn.sourceforge.net/kmess/?rev=5987&view=rev Author: pano9000 Date: 2010-04-15 20:13:00 +0000 (Thu, 15 Apr 2010) Log Message: ----------- translation update Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/po/de.po Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2010-04-11 10:27:41 UTC (rev 5986) +++ branches/kmess/kmess-2.0.x/ChangeLog 2010-04-15 20:13:00 UTC (rev 5987) @@ -1,4 +1,7 @@ +2010-04-15 (Pano) + * Merged an updated German translation. + 2010-04-02 (Pano) * Merged an updated Dutch translation by Heimen Stoffels. Modified: branches/kmess/kmess-2.0.x/po/de.po =================================================================== --- branches/kmess/kmess-2.0.x/po/de.po 2010-04-11 10:27:41 UTC (rev 5986) +++ branches/kmess/kmess-2.0.x/po/de.po 2010-04-15 20:13:00 UTC (rev 5987) @@ -10,9 +10,9 @@ "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: http://www.kmess.org/board/\n" "POT-Creation-Date: 2010-02-25 15:16+0100\n" -"PO-Revision-Date: 2010-03-25 15:05+0100\n" +"PO-Revision-Date: 2010-04-15 22:09+0200\n" "Last-Translator: Panagiotis Papadopoulos <pa...@gm...>\n" -"Language-Team: de <kde...@kd...>\n" +"Language-Team: German <kde...@kd...>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -134,7 +134,7 @@ #, kde-format msgctxt "Message shown in the chat window, %1 is the wink name" msgid "You have sent the "%1" wink!" -msgstr "Sie haben das „%1“-Animoticon gesendet!" +msgstr "Sie haben das „%1“-Animoticon gesendet!" #: chat/chat.cpp:1007 msgid "" @@ -229,7 +229,7 @@ "Message shown in the chat window, %1 is the contact's friendly name, %2 is " "the wink name" msgid "%1 has sent you a wink: "%2"!" -msgstr "%1 hat Ihnen ein Animoticon gesendet: „%2“!" +msgstr "%1 hat Ihnen ein Animoticon gesendet: „%2“!" #: chat/chat.cpp:1321 #, kde-format @@ -239,7 +239,7 @@ "have the "cabextract" program installed." msgstr "" "Sie haben ein Animoticon von %1 erhalten, es kann aber nicht angezeigt " -"werden. Bitte stellen Sie sicher, dass „cabextract“ installiert " +"werden. Bitte stellen Sie sicher, dass „cabextract“ installiert " "ist." #: chat/chat.cpp:1330 @@ -251,9 +251,9 @@ "You received the "%2" wink from %1, but it could not be displayed. " "Make sure you have the "cabextract" program installed." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " "nicht " -"angezeigt werden. Bitte stellen Sie sicher, dass „cabextract“ " +"angezeigt werden. Bitte stellen Sie sicher, dass „cabextract“ " "installiert ist." #: chat/chat.cpp:1342 @@ -264,7 +264,7 @@ "wink package with "cabextract" has failed." msgstr "" "Sie haben ein Animoticon von %1 erhalten, es kann aber nicht angezeigt " -"werden. Das Entpacken des Animoticonpakets mit „cabextract“ ist " +"werden. Das Entpacken des Animoticonpakets mit „cabextract“ ist " "fehlgeschlagen." #: chat/chat.cpp:1351 @@ -276,10 +276,10 @@ "You received the "%2" wink from %1, but it could not be displayed. " "Extracting the wink package with "cabextract" has failed." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " "nicht " -"angezeigt werden. Das Entpacken des Animoticonpakets mit „" -"cabextract“ ist fehlgeschlagen." +"angezeigt werden. Das Entpacken des Animoticonpakets mit „" +"cabextract“ ist fehlgeschlagen." #: chat/chat.cpp:1363 #, kde-format @@ -300,7 +300,7 @@ "You received the "%2" wink from %1, but it could not be displayed. " "The data could not be read." msgstr "" -"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " +"Sie haben das „%2“-Animoticon von %1 erhalten, es kann aber " "nicht angezeigt werden. Die Daten können nicht gelesen werden." #: chat/chat.cpp:1414 @@ -320,7 +320,7 @@ #: chat/chat.cpp:1429 #, kde-format msgid "%1 has changed his or her status to "%2"." -msgstr "%1 hat seinen/ihren Status auf „%2“ gesetzt." +msgstr "%1 hat seinen/ihren Status auf „%2“ gesetzt." #: chat/chat.cpp:1460 #, kde-format @@ -367,7 +367,7 @@ "The file "%1" could not be found on your computer, and the " "download failed." msgstr "" -"Die Datei „%1“ kann auf dem Computer nicht gefunden werden und " +"Die Datei „%1“ kann auf dem Computer nicht gefunden werden und " "der Download ist fehlgeschlagen." #: chat/chat.cpp:1656 @@ -412,7 +412,7 @@ #: chat/chatmaster.cpp:1467 #, kde-format msgid "%1 is sending a wink: "%2"" -msgstr "%1 sendet ein Animoticon: „%2“" +msgstr "%1 sendet ein Animoticon: „%2“" #: chat/chatmessagestyle.cpp:383 #, kde-format @@ -830,7 +830,7 @@ "Handwriting is disabled: this contact does not support receiving handwritten " "messages." msgstr "" -"Handschriftmodus ist deaktiviert: Dieser Kontakt kann keine " +"Handschriftmodus ist deaktiviert: Der Kontakt kann keine " "handgeschriebenen Nachrichten empfangen." #. i18n: file: chat/chatwindow.ui:276 @@ -3057,7 +3057,7 @@ #: network/applications/filetransferp2p.cpp:233 #, kde-format msgid "The contact wants to send you a file: "%1" (%2)." -msgstr "Der Kontakt will Ihnen eine Datei senden: „%1“ (%2)." +msgstr "Der Kontakt will Ihnen eine Datei senden: „%1“ (%2)." #: network/applications/filetransfer.cpp:260 #: network/applications/filetransferp2p.cpp:346 @@ -3066,7 +3066,7 @@ "The file "%1" already exists.\n" "Do you want to overwrite it?" msgstr "" -"Die Datei „%1“ existiert bereits.\n" +"Die Datei „%1“ existiert bereits.\n" "Möchten Sie sie überschreiben?" #: network/applications/filetransfer.cpp:290 @@ -3075,7 +3075,7 @@ msgid "" "The transfer of the file "%1" failed. Could not save the file." msgstr "" -"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " +"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " "kann nicht gespeichert werden." #: network/applications/filetransfer.cpp:295 @@ -3084,7 +3084,7 @@ "The transfer of the file "%1" failed. Could not open the " "destination file." msgstr "" -"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Zieldatei " +"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Zieldatei " "kann nicht geöffnet werden." #: network/applications/filetransfer.cpp:319 @@ -3102,20 +3102,19 @@ #: network/applications/filetransferp2p.cpp:548 #, kde-format msgid "The contact has cancelled the transfer of the file "%1"." -msgstr "" -"Der Kontakt hat die Übertragung der Datei „%1“ abgebrochen." +msgstr "Der Kontakt hat die Übertragung der Datei „%1“ abgebrochen." #: network/applications/filetransfer.cpp:432 #: network/applications/filetransferp2p.cpp:559 #, kde-format msgid "You have cancelled the transfer of the file "%1"." -msgstr "Sie haben die Übertragung der Datei „%1“ abgebrochen." +msgstr "Sie haben die Übertragung der Datei „%1“ abgebrochen." #: network/applications/filetransfer.cpp:443 #: network/applications/filetransferp2p.cpp:570 #, kde-format msgid "You have rejected the transfer of the file "%1"." -msgstr "Sie haben die Übertragung der Datei „%1“ abgelehnt." +msgstr "Sie haben die Übertragung der Datei „%1“ abgelehnt." #: network/applications/filetransfer.cpp:490 msgid "Connection established" @@ -3125,13 +3124,13 @@ #: network/applications/filetransferp2p.cpp:674 #, kde-format msgid "Successfully sent the file "%1"." -msgstr "Die Datei „%1“ ist erfolgreich übertragen worden." +msgstr "Die Datei „%1“ ist erfolgreich übertragen worden." #: network/applications/filetransfer.cpp:585 #: network/applications/filetransferp2p.cpp:678 #, kde-format msgid "Successfully received the file "%1"." -msgstr "Die Datei „%1“ ist erfolgreich empfangen worden." +msgstr "Die Datei „%1“ ist erfolgreich empfangen worden." #: network/applications/filetransfer.cpp:742 #: network/applications/filetransferp2p.cpp:811 @@ -3139,7 +3138,7 @@ msgid "" "The transfer of the file "%1" failed. The file does not exist." msgstr "" -"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " +"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " "existiert nicht." #: network/applications/filetransfer.cpp:747 @@ -3148,20 +3147,20 @@ msgid "" "The transfer of the file "%1" failed. The file could not be read." msgstr "" -"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " +"Die Übertragung der Datei „%1“ ist fehlgeschlagen. Die Datei " "kann nicht gelesen werden." #: network/applications/filetransfer.cpp:774 #: network/applications/filetransferp2p.cpp:850 #, kde-format msgid "Sending file "%1" (%2)." -msgstr "Sende Datei „%1“ (%2)." +msgstr "Sende Datei „%1“ (%2)." #: network/applications/filetransfer.cpp:799 #: network/applications/filetransferp2p.cpp:888 #, kde-format msgid "The contact has accepted the transfer of the file "%1"." -msgstr "Der Kontakt hat der Übertragung der Datei „%1“ zugestimmt." +msgstr "Der Kontakt hat der Übertragung der Datei „%1“ zugestimmt." #: network/applications/filetransfer.cpp:817 #: network/applications/filetransferp2p.cpp:393 @@ -3181,7 +3180,7 @@ #: network/applications/filetransferp2p.cpp:404 #, kde-format msgid "You have accepted the transfer of the file "%1"." -msgstr "Sie haben der Übertragung der Datei „%1“ zugestimmt." +msgstr "Sie haben der Übertragung der Datei „%1“ zugestimmt." #: network/applications/filetransferp2p.cpp:614 msgid "File could not be written" @@ -3378,13 +3377,12 @@ #: network/extra/msnftpconnection.cpp:120 #, kde-format msgid "You have cancelled the transfer of file "%1"." -msgstr "Sie haben die Übertragung der Datei „%1“ abgebrochen." +msgstr "Sie haben die Übertragung der Datei „%1“ abgebrochen." #: network/extra/msnftpconnection.cpp:126 #, kde-format msgid "The contact has cancelled the transfer of file "%1"." -msgstr "" -"Der Kontakt hat die Übertragung der Datei „%1“ abgebrochen." +msgstr "Der Kontakt hat die Übertragung der Datei „%1“ abgebrochen." #: network/extra/msnftpconnection.cpp:133 msgid "Failed" @@ -4680,7 +4678,7 @@ msgid "" "Click this button to switch to the handwriting mode, so you can write or " "paint a handwritten message." -msgstr "Klicken Sie diesen Knopf, um in dem Handschriftmodus zu wechseln." +msgstr "Klicken Sie auf diesen Knopf, um in dem Handschriftmodus zu wechseln." #. i18n: file: chat/chatwindow.ui:238 #. i18n: ectx: property (toolTip), widget (QToolButton, standardEmoticonButton_) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fon...@us...> - 2010-04-11 10:27:47
|
Revision: 5986 http://kmess.svn.sourceforge.net/kmess/?rev=5986&view=rev Author: fontknocker Date: 2010-04-11 10:27:41 +0000 (Sun, 11 Apr 2010) Log Message: ----------- Fix doxygen warnings. Modified Paths: -------------- trunk/kmess/src/dialogs/addcontactdialog.cpp Modified: trunk/kmess/src/dialogs/addcontactdialog.cpp =================================================================== --- trunk/kmess/src/dialogs/addcontactdialog.cpp 2010-04-10 01:44:20 UTC (rev 5985) +++ trunk/kmess/src/dialogs/addcontactdialog.cpp 2010-04-11 10:27:41 UTC (rev 5986) @@ -32,7 +32,8 @@ * The dialog is instantly shown as modal when the class is instantiated. * * @param handle Reference to the handle of the contact to add - * @param groupsId Reference to the added contact's initial groups + * @param groups Reference to the added contact's initial groups + * @param network Reference to the contact's network. * @param parent Parent widget */ AddContactDialog::AddContactDialog( QString &handle, GroupsList &groups, KMess::NetworkType &network, QWidget *parent ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |