summaryrefslogtreecommitdiff
path: root/src/anastasis/anastasis-gtk.h
blob: 7c2bd789c29ab3ea56da200cd863ae5f400159e1 (plain)
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
/*
     This file is part of anastasis-gtk.
     Copyright (C) 2020 Anastasis SARL

     Anastasis is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published
     by the Free Software Foundation; either version 3, or (at your
     option) any later version.

     Anastasis is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     General Public License for more details.

     You should have received a copy of the GNU General Public License
     along with Anastasis; see the file COPYING.  If not, write to the
     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     Boston, MA 02110-1301, USA.
*/

/**
 * @file src/anastasis/anastasis-gtk.h
 * @brief Definitions of the main Gtk GUI.
 * @author Christian Grothoff
 * @author Dennis Neufeld
 */
#ifndef ANASTASIS_GTK_H
#define ANASTASIS_GTK_H
#include <gnunet-gtk/gnunet_gtk.h>
#include <gtk/gtk.h>
#include <anastasis/anastasis_service.h>
#include <anastasis/anastasis_redux.h>

/**
 * Handle to our main loop.
 */
extern struct GNUNET_GTK_MainLoop *AG_ml;

/**
 * Active policy discovery job, or NULL.
 */
extern struct ANASTASIS_PolicyDiscovery *AG_pd;

/**
 * Our configuration.
 */
extern const struct GNUNET_CONFIGURATION_Handle *AG_cfg;

/**
 * Hash map from UUID hashes to GtkWidgets.
 */
extern struct GNUNET_CONTAINER_MultiHashMap *AG_entry_attributes;

/**
 * Actual state.
 */
extern json_t *AG_redux_state;

/**
 * Handle to an ongoing action.
 */
extern struct ANASTASIS_ReduxAction *AG_ra;

/**
 * Curl context for communication with taler backend
 */
extern struct GNUNET_CURL_Context *AG_ctx;

/**
 * State associated with a background long action.
 */
struct ANASTASIS_LongAction
{
  /**
   * Action handle of the background action.
   */
  struct ANASTASIS_ReduxAction *ra;

  /**
   * Handle to task to reschedule the action.
   */
  struct GNUNET_SCHEDULER_Task *task;

  /**
   * Next time we schedule the task.
   */
  struct GNUNET_TIME_Absolute next_time;

};


/**
 * Enumeration for long poll actions we have.
 */
enum ANASTASIS_LongActionKind
{
  /**
   * Poll on async challenge completion.
   */
  ANASTASIS_LP_POLL_CHALLENGES,

  /**
   * Poll for /config on all known providers.
   */
  ANASTASIS_LP_SYNC_PROVIDERS,

  /**
   * Wait for challenge-specific providers being ready.
   */
  ANASTASIS_LP_POLL_PROVIDERS,

  /**
   * Number of pollers we have.
   */
  ANASTASIS_LP_CNT /* must be last! */
};

/**
 * Handle to an ongoing background action.
 */
extern struct ANASTASIS_LongAction AG_lacs[ANASTASIS_LP_CNT];


/**
 * Stop long polling action in the background.
 * Should be called whenever we leave the
 * challenge-selecting state.
 */
void
AG_stop_long_action (void);


/**
 * Load #AG_redux_state from @a filename.
 *
 * @param filename to load
 */
void
AG_load (const char *filename);

#endif