]> err.no Git - scalable-opengroupware.org/blob - SOGo/SoObjects/Sieve/SOGoSieveBaseObject.m
git-svn-id: http://svn.opengroupware.org/SOGo/trunk@900 d1b88da0-ebda-0310-925b-ed51d...
[scalable-opengroupware.org] / SOGo / SoObjects / Sieve / SOGoSieveBaseObject.m
1 /*
2   Copyright (C) 2004-2005 SKYRIX Software AG
3
4   This file is part of OpenGroupware.org.
5
6   OGo is free software; you can redistribute it and/or modify it under
7   the terms of the GNU Lesser General Public License as published by the
8   Free Software Foundation; either version 2, or (at your option) any
9   later version.
10
11   OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12   WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14   License for more details.
15
16   You should have received a copy of the GNU Lesser General Public
17   License along with OGo; see the file COPYING.  If not, write to the
18   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19   02111-1307, USA.
20 */
21
22 #include "SOGoSieveBaseObject.h"
23 #include <Mailer/SOGoMailManager.h>
24 #include <Mailer/SOGoMailAccount.h>
25 #include "common.h"
26 #include <NGImap4/NGSieveClient.h>
27 #include <NGObjWeb/SoObject+SoDAV.h>
28 #include <NGObjWeb/SoHTTPAuthenticator.h>
29 #include <NGExtensions/NSURL+misc.h>
30
31 @implementation SOGoSieveBaseObject
32
33 - (void)dealloc {
34   [self->sieveClient release];
35   [super dealloc];
36 }
37
38 /* hierarchy */
39
40 - (SOGoMailAccount *)mailAccountFolder {
41   if (![[self container] respondsToSelector:_cmd]) {
42     [self logWithFormat:@"WARNING: weird container of mailfolder: %@",
43             [self container]];
44     return nil;
45   }
46   
47   return [[self container] mailAccountFolder];
48 }
49
50 /* IMAP4 */
51
52 - (NGImap4ConnectionManager *)mailManager {
53   return [[self mailAccountFolder] mailManager];
54 }
55 - (NSURL *)imap4URL {
56   return [[self mailAccountFolder] imap4URL];
57 }
58
59 - (NSString *)imap4Password {
60   return [[self mailAccountFolder] imap4Password];
61 }
62
63 - (void)flushMailCaches {
64 }
65
66 /* Sieve */
67
68 - (NGSieveClient *)sieveClient {
69   id res;
70   
71   if (self->sieveClient != nil)
72     return self->sieveClient;
73   
74   /* check container */
75
76   res = [self container];
77   if ([res respondsToSelector:_cmd]) {
78     if ((res = [res sieveClient]) != nil) {
79       self->sieveClient = [res retain];
80       return self->sieveClient;
81     }
82   }
83   
84   /* create client */
85   
86   self->sieveClient =
87     [[NGSieveClient alloc] initWithHost:[[self imap4URL] host]];
88   if (self->sieveClient == nil)
89     return nil;
90   
91   /* login */
92   
93   res = [self->sieveClient 
94              login:[[self imap4URL] user] 
95              password:[self imap4Password]];
96   
97   if (![[res valueForKey:@"result"] boolValue]) {
98     [self logWithFormat:
99             @"ERROR: could not login '%@'(%@) into Sieve server: %@: %@",
100             [[self imap4URL] user], [self imap4Password],
101             self->sieveClient, res];
102     [self->sieveClient release]; self->sieveClient = nil;
103     return nil;
104   }
105   
106   return self->sieveClient;
107 }
108
109 /* debugging */
110
111 - (NSString *)loggingPrefix {
112   /* improve perf ... */
113   return [NSString stringWithFormat:@"<0x%08X[%@]:%@>",
114                      self, NSStringFromClass([self class]),
115                      [self nameInContainer]];
116 }
117 @end /* SOGoSieveBaseObject */