aboutsummaryrefslogtreecommitdiffstats
path: root/shell/Evolution-Storage.idl
blob: 2d6928938b137492a12e67ae860cbc63e93d986b (plain) (blame)
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 * Storage interface for the Evolution shell.
 *
 * Authors:
 *   Ettore Perazzoli <ettore@ximian.com>
 *
 * Copyright (C) 2000, 2001 Ximian, Inc.
 */

#include <Bonobo.idl>

module GNOME {
module Evolution {
    interface Storage;
    interface StorageListener;

    interface Storage : Bonobo::Unknown {
        exception AlreadyListening {};
        exception NotFound {};

        enum Result {
            OK,
            UNSUPPORTED_OPERATION,
            UNSUPPORTED_TYPE,
            INVALID_URI,
            ALREADY_EXISTS,
            DOES_NOT_EXIST,
            PERMISSION_DENIED,
            NO_SPACE,
            NOT_EMPTY,
            NOT_ONLINE,
            GENERIC_ERROR
        };

        struct FolderResult {
            Result result;
            string path;
        };

        /* The name of the storage.  */
        readonly attribute string name;

        /* Whether the storage has folders from other user's.  */
        readonly attribute boolean hasSharedFolders;

        /* Get information for a folder.  NOTE: evolutionUri in the
           returned Folder is going to be an empty string if you use
           this function.  */
        Folder getFolderAtPath (in string path)
            raises (NotFound);
        
        /* Flat list of the folders in the storage.  */
        readonly attribute FolderList folderList;

        /* The folder property items (for right-click menu etc.).  */

        struct FolderPropertyItem {
            string label;
            string tooltip;
            Icon icon; // Currently unused
        };
        typedef sequence<FolderPropertyItem> FolderPropertyItemList;

        readonly attribute FolderPropertyItemList folderPropertyItems;

        /* Folder Operations.  */

        void asyncCreateFolder (in string path,
                    in string type,
                    in string description,
                    in string parent_physical_uri,
                    in Bonobo::Listener listener);

        void asyncRemoveFolder (in string path,
                    in string physical_uri,
                    in Bonobo::Listener listener);

        void asyncXferFolder (in string source_path,
                      in string destination_path,
                      in boolean remove_source,
                      in Bonobo::Listener listener);

        /* Open remote nodes.  */
        void asyncOpenFolder (in string path,
                      in Bonobo::Listener listener);

        /* Set unread count.  */
        void updateFolder (in string path,
                   in long unread_count);

        /* Shared folders.  */
        void asyncDiscoverSharedFolder (in string user,
                        in string folder_name,
                        in Bonobo::Listener listener);
        void cancelDiscoverSharedFolder (in string user,
                         in string folder_name);
        void asyncRemoveSharedFolder   (in string path,
                        in Bonobo::Listener listener);

        /* Listener handling.  */
        void addListener (in StorageListener listener)
            raises (AlreadyListening);
        void removeListener (in StorageListener listener)
            raises (NotFound);

        /* (This should probably be in a separate interface, but
           creating a new interface in Bonobo is so painful that I'll
           just keep it here for now.  */
        void showFolderProperties (in string path,
                       in short itemNumber,
                       in long parentWindowId);
    };

    interface StorageListener {
        exception Exists {};
        exception NotFound {};

        void notifyDestroyed ();

        /* FIXME exceptions don't make much sense here...  */

        void notifyFolderCreated (in string path,
                      in Folder folder)
            raises (Exists);
        
        void notifyFolderUpdated (in string path,
                      in long   unread_count)
            raises (NotFound);

        void notifyFolderRemoved (in string path)
            raises (NotFound);

        void notifyHasSubfolders (in string path,
                      in string message)
            raises (NotFound);
    };

    interface StorageRegistry : Bonobo::Unknown {
        exception Exists {};
        exception NotFound {};
        exception AlreadyListening {};

        typedef sequence<Storage> StorageList;
        
        enum MessageType {
            STORAGE_CREATED,
            STORAGE_DESTROYED
        };

        struct NotifyResult {
            MessageType type;
            string name;
        };
        
        StorageListener addStorage (in Storage storage,
                        in string name)
            raises (Exists);

        StorageList getStorageList ();
        
        Storage getStorageByName (in string name)
            raises (NotFound);

        void removeStorageByName (in string name)
            raises (NotFound);

        void addListener (in Bonobo::Listener listener)
            raises (AlreadyListening);

        void removeListener (in Bonobo::Listener listener)
            raises (NotFound);

        Folder getFolderByUri (in string uri)
            raises (NotFound);
    };
};
};