1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsAbOSXDirectory_h___
#define nsAbOSXDirectory_h___
#include "mozilla/Attributes.h"
#include "nsISupports.h"
#include "nsAbBaseCID.h"
#include "nsAbDirProperty.h"
#include "nsIAbDirectoryQuery.h"
#include "nsIAbDirectorySearch.h"
#include "nsIAbDirSearchListener.h"
#include "nsIMutableArray.h"
#include "nsInterfaceHashtable.h"
#include "nsAbOSXCard.h"
#include <CoreFoundation/CoreFoundation.h>
class nsIAbManager;
class nsIAbBooleanExpression;
#define NS_ABOSXDIRECTORY_URI_PREFIX NS_ABOSXDIRECTORY_PREFIX "://"
#define NS_IABOSXDIRECTORY_IID \
{ 0x87ee4bd9, 0x8552, 0x498f, \
{ 0x80, 0x85, 0x34, 0xf0, 0x2a, 0xbb, 0x56, 0x16 } }
class nsIAbOSXDirectory : public nsISupports
{
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IABOSXDIRECTORY_IID)
virtual nsresult AssertChildNodes() = 0;
virtual nsresult Update() = 0;
virtual nsresult AssertDirectory(nsIAbManager *aManager,
nsIAbDirectory *aDirectory) = 0;
virtual nsresult AssertCard(nsIAbManager *aManager,
nsIAbCard *aCard) = 0;
virtual nsresult UnassertCard(nsIAbManager *aManager,
nsIAbCard *aCard,
nsIMutableArray *aCardList) = 0;
virtual nsresult UnassertDirectory(nsIAbManager *aManager,
nsIAbDirectory *aDirectory) = 0;
virtual nsresult DeleteUid(const nsACString &aUid) = 0;
virtual nsresult GetURI(nsACString &aURI) = 0;
virtual nsresult Init(const char *aUri) = 0;
virtual nsresult GetCardByUri(const nsACString &aUri, nsIAbOSXCard **aResult) = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIAbOSXDirectory, NS_IABOSXDIRECTORY_IID)
class nsAbOSXDirectory final : public nsAbDirProperty,
public nsIAbDirSearchListener,
public nsIAbOSXDirectory
{
public:
nsAbOSXDirectory();
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIABDIRSEARCHLISTENER
// nsIAbOSXDirectory method
NS_IMETHOD Init(const char *aUri) override;
// nsAbDirProperty methods
NS_IMETHOD GetReadOnly(bool *aReadOnly) override;
NS_IMETHOD GetChildCards(nsISimpleEnumerator **aCards) override;
NS_IMETHOD GetChildNodes(nsISimpleEnumerator **aNodes) override;
NS_IMETHOD GetIsQuery(bool *aResult) override;
NS_IMETHOD HasCard(nsIAbCard *aCard, bool *aHasCard) override;
NS_IMETHOD HasDirectory(nsIAbDirectory *aDirectory, bool *aHasDirectory) override;
NS_IMETHOD GetURI(nsACString &aURI) override;
NS_IMETHOD GetCardFromProperty(const char *aProperty,
const nsACString &aValue,
bool caseSensitive,
nsIAbCard **aResult) override;
NS_IMETHOD GetCardsFromProperty(const char *aProperty,
const nsACString &aValue,
bool aCaseSensitive,
nsISimpleEnumerator **aResult) override;
NS_IMETHOD CardForEmailAddress(const nsACString &aEmailAddress,
nsIAbCard **aResult) override;
// nsIAbOSXDirectory
nsresult AssertChildNodes() override;
nsresult AssertDirectory(nsIAbManager *aManager,
nsIAbDirectory *aDirectory) override;
nsresult AssertCard(nsIAbManager *aManager,
nsIAbCard *aCard) override;
nsresult UnassertCard(nsIAbManager *aManager,
nsIAbCard *aCard,
nsIMutableArray *aCardList) override;
nsresult UnassertDirectory(nsIAbManager *aManager,
nsIAbDirectory *aDirectory) override;
nsresult Update() override;
nsresult DeleteUid(const nsACString &aUid) override;
nsresult GetCardByUri(const nsACString &aUri, nsIAbOSXCard **aResult) override;
nsresult GetRootOSXDirectory(nsIAbOSXDirectory **aResult);
private:
~nsAbOSXDirectory();
nsresult FallbackSearch(nsIAbBooleanExpression *aExpression,
nsISimpleEnumerator **aCards);
// This is a list of nsIAbCards, kept separate from m_AddressList because:
// - nsIAbDirectory items that are mailing lists, must keep a list of
// nsIAbCards in m_AddressList, however
// - nsIAbDirectory items that are address books, must keep a list of
// nsIAbDirectory (i.e. mailing lists) in m_AddressList, AND no nsIAbCards.
//
// This wasn't too bad for mork, as that just gets a list from its database,
// but because we store our own copy of the list, we must store a separate
// list of nsIAbCards here. nsIMutableArray is used, because then it is
// interchangeable with m_AddressList.
nsCOMPtr<nsIMutableArray> mCardList;
nsInterfaceHashtable<nsCStringHashKey, nsIAbOSXCard> mCardStore;
nsCOMPtr<nsIAbOSXDirectory> mCacheTopLevelOSXAb;
};
#endif // nsAbOSXDirectory_h___
|