• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.14.10 API Reference
  • KDE Home
  • Contact Us
 

KIMAP Library

  • kimap
namespacejob.cpp
1/*
2 Copyright (c) 2009 Kevin Ottens <ervin@kde.org>
3
4 This library is free software; you can redistribute it and/or modify it
5 under the terms of the GNU Library General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or (at your
7 option) any later version.
8
9 This library is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12 License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to the
16 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 02110-1301, USA.
18*/
19
20#include "namespacejob.h"
21
22#include <KDE/KDebug>
23#include <KDE/KLocalizedString>
24
25#include "job_p.h"
26#include "listjob.h"
27#include "message_p.h"
28#include "rfccodecs.h"
29#include "session_p.h"
30#include "imapstreamparser.h"
31
32namespace KIMAP
33{
34 class NamespaceJobPrivate : public JobPrivate
35 {
36 public:
37 NamespaceJobPrivate( Session *session, const QString& name ) : JobPrivate( session, name ) { }
38 ~NamespaceJobPrivate() { }
39
40 QList<MailBoxDescriptor> processNamespaceList( const QList<QByteArray> &namespaceList )
41 {
42 QList<MailBoxDescriptor> result;
43
44 foreach ( const QByteArray &namespaceItem, namespaceList ) {
45 ImapStreamParser parser( 0 );
46 parser.setData( namespaceItem );
47
48 try {
49 QList<QByteArray> parts = parser.readParenthesizedList();
50 if ( parts.size() < 2 ) {
51 continue;
52 }
53 MailBoxDescriptor descriptor;
54 descriptor.name = QString::fromUtf8( decodeImapFolderName( parts[0] ) );
55 descriptor.separator = QLatin1Char( parts[1][0] );
56
57 result << descriptor;
58 } catch ( KIMAP::ImapParserException e ) {
59 qWarning() << "The stream parser raised an exception during namespace list parsing:" << e.what();
60 qWarning() << "namespacelist:" << namespaceList;
61 }
62
63 }
64
65 return result;
66 }
67
68 QList<MailBoxDescriptor> personalNamespaces;
69 QList<MailBoxDescriptor> userNamespaces;
70 QList<MailBoxDescriptor> sharedNamespaces;
71 };
72}
73
74using namespace KIMAP;
75
76NamespaceJob::NamespaceJob( Session *session )
77 : Job( *new NamespaceJobPrivate( session, i18n( "Namespace" ) ) )
78{
79}
80
81NamespaceJob::~NamespaceJob()
82{
83}
84
85QList<MailBoxDescriptor> NamespaceJob::personalNamespaces() const
86{
87 Q_D( const NamespaceJob );
88 return d->personalNamespaces;
89}
90
91QList<MailBoxDescriptor> NamespaceJob::userNamespaces() const
92{
93 Q_D( const NamespaceJob );
94 return d->userNamespaces;
95}
96
97QList<MailBoxDescriptor> NamespaceJob::sharedNamespaces() const
98{
99 Q_D( const NamespaceJob );
100 return d->sharedNamespaces;
101}
102
103bool NamespaceJob::containsEmptyNamespace() const
104{
105 Q_D( const NamespaceJob );
106 QList<MailBoxDescriptor> completeList = d->personalNamespaces
107 + d->userNamespaces
108 + d->sharedNamespaces;
109
110 foreach ( const MailBoxDescriptor &descriptor, completeList ) {
111 if ( descriptor.name.isEmpty() ) {
112 return true;
113 }
114 }
115
116 return false;
117}
118
119void NamespaceJob::doStart()
120{
121 Q_D( NamespaceJob );
122 d->tags << d->sessionInternal()->sendCommand( "NAMESPACE" );
123}
124
125void NamespaceJob::handleResponse( const Message &response )
126{
127 Q_D( NamespaceJob );
128 if ( handleErrorReplies( response ) == NotHandled ) {
129 if ( response.content.size() >= 5 &&
130 response.content[1].toString() == "NAMESPACE" ) {
131 // Personal namespaces
132 d->personalNamespaces = d->processNamespaceList( response.content[2].toList() );
133
134 // User namespaces
135 d->userNamespaces = d->processNamespaceList( response.content[3].toList() );
136
137 // Shared namespaces
138 d->sharedNamespaces = d->processNamespaceList( response.content[4].toList() );
139 }
140 }
141}
KIMAP::ImapStreamParser
Parser for IMAP messages that operates on a local socket stream.
Definition: imapstreamparser.h:54
rfccodecs.h
This file is part of the IMAP support library and defines the RfcCodecs class.
KIMAP::decodeImapFolderName
QByteArray decodeImapFolderName(const QByteArray &inSrc)
Converts an UTF-7 encoded IMAP mailbox to a QByteArray.
Definition: rfccodecs.cpp:71
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Jul 21 2022 00:00:00 by doxygen 1.9.5 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KIMAP Library

Skip menu "KIMAP Library"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs-4.14.10 API Reference

Skip menu "kdepimlibs-4.14.10 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal