diff options
Diffstat (limited to 'kbugbuster/backend/person.cpp')
-rw-r--r-- | kbugbuster/backend/person.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/kbugbuster/backend/person.cpp b/kbugbuster/backend/person.cpp new file mode 100644 index 00000000..a9f63be0 --- /dev/null +++ b/kbugbuster/backend/person.cpp @@ -0,0 +1,74 @@ +#include <kdebug.h> + +#include "person.h" + +Person::Person( const QString &fullName ) +{ + int emailPos = fullName.find( '<' ); + if ( emailPos < 0 ) { + email = fullName; + } else { + email = fullName.mid( emailPos + 1, fullName.length() - 1 ); + name = fullName.left( emailPos - 1 ); + } +} + +QString Person::fullName(bool html) const +{ + if( name.isEmpty() ) + { + if( email.isEmpty() ) + return i18n( "Unknown" ); + else + return email; + } + else + { + if( email.isEmpty() ) + return name; + else + if ( html ) { + return name + " <" + email + ">"; + } else { + return name + " <" + email + ">"; + } + } +} + +Person Person::parseFromString( const QString &_str ) +{ + Person res; + + QString str = _str; + + int ltPos = str.find( '<' ); + if ( ltPos != -1 ) + { + int gtPos = str.find( '>', ltPos ); + if ( gtPos != -1 ) + { + res.name = str.left( ltPos - 1 ); + str = str.mid( ltPos + 1, gtPos - ( ltPos + 1 ) ); + } + } + + int atPos = str.find( '@' ); + int spacedAtPos = str.find( QString::fromLatin1( " at " ) ); + if ( atPos == -1 && spacedAtPos != -1 ) + str.replace( spacedAtPos, 4, QString::fromLatin1( "@" ) ); + + int spacePos = str.find( ' ' ); + while ( spacePos != -1 ) + { + str[ spacePos ] = '.'; + spacePos = str.find( ' ', spacePos ); + } + + res.email = str; + + return res; +} + +/** + * vim:et:ts=4:sw=4 + */ |