aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/idl/addressbook.idl
blob: 9a7743f97400fe21812312c3e3af21769abe75ed (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
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
 *
 * Author:
 *   Nat Friedman (nat@helixcode.com)
 *
 * Copyright 2000, Helix Code, Inc.
 */

#include <Bonobo.idl>

module Evolution {

    typedef string CardId;
    typedef string VCard;
    typedef sequence<VCard> VCardList;

    interface CardCursor : Bonobo::Unknown {
        long   get_length ();
        string get_nth    (in long n);
    };

    /* 
     * A book view is a live view of a book.  It's either a view
     * of all the cards in the book or a view of a query.  When
     * created, it will get a series of signal_card_added calls
     * for all objects in the initial set.  After that, it will
     * get added, removed, or changed signals whenever the book
     * changes (if it affects the set of viewed cards.)
     */
    interface BookViewListener : Bonobo::Unknown {
        void signal_card_added (in VCardList cards);
        void signal_card_removed (in CardId id);
        void signal_card_changed (in VCardList cards);
    };
    
    interface BookView : Bonobo::Unknown {
    };

    interface Book : Bonobo::Unknown {
        /*
         * Fetching cards in the addresbook.
         */
        VCard get_vcard (in CardId id);

        /*
         * Permissions.  the first form is general write
         * permission (whether or not the user can add or
         * remove or modify any entry in the addressbook.)
         *
         * if can_write returns TRUE, can_write_card can still
         * return FALSE if the user doesn't have permission to
         * modify/remove that specific card.
         */
        boolean can_write ();
        boolean can_write_card (in CardId Id);

        /*
         * Adding and deleting cards in the book.
         */
        void create_card (in VCard vcard);
        void remove_card (in CardId Id);
            
        /*
         * Modifying cards in the addressbook.
         */
        void modify_card (in VCard vcard);
        
        /*
         * These two functions return a cursor to the book
         * listener.  This is for people who want a snapshot
         * of the addressbook.  The syntax for the query
         * string is not yet defined.
         */
        void get_cursor (in string query);
        
        /*
         * These two functions return a book view to the book
         * listener.  This is for people who want a live view
         * of the addressbook.
         */
        void get_book_view(in BookViewListener listener, in string query);

        void check_connection ();

        string get_name ();
    };

    interface BookListener : Bonobo::Unknown {

        enum CallStatus {
            Success,
            RepositoryOffline,
            PermissionDenied,
            CardNotFound,
            ProtocolNotSupported,
            OtherError
        };

        void respond_create_card (in CallStatus status, in CardId Id);

        void respond_remove_card (in CallStatus status);

        void respond_modify_card (in CallStatus status);
        
        void report_open_book_progress (in string status_message, in short percent);

        void respond_open_book (in CallStatus status, in Book book);

        void respond_get_cursor (in CallStatus status, in CardCursor cursor);

        void respond_get_view (in CallStatus status, in BookView view);

        /**
         * report_connection_status:
         *
         * Used to report changes in the connection to the
         * contact repository.  This is often a response to a
         * call to check_connection() on the Book, but wombat
         * is free to report the connection status without
         * being asked.
         */
        void report_connection_status (in boolean connected);
    };

    interface BookFactory : Bonobo::Unknown {
        exception ProtocolNotSupported {};

        void open_book (in string uri, in BookListener listener)
            raises (ProtocolNotSupported);
    };
};