1 | /* GStreamer base utils library plugin install support for applications |
2 | * Copyright (C) 2007 Tim-Philipp Müller <tim centricular net> |
3 | * Copyright (C) 2006 Ryan Lortie <desrt desrt ca> |
4 | * |
5 | * This library is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU Library General Public |
7 | * License as published by the Free Software Foundation; either |
8 | * version 2 of the License, or (at your option) any later version. |
9 | * |
10 | * This library is distributed in the hope that it will be useful, |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | * Library General Public License for more details. |
14 | * |
15 | * You should have received a copy of the GNU Library General Public |
16 | * License along with this library; if not, write to the |
17 | * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
18 | * Boston, MA 02110-1301, USA. |
19 | */ |
20 | |
21 | #ifndef __GST_PB_UTILS_INSTALL_PLUGINS_H__ |
22 | #define __GST_PB_UTILS_INSTALL_PLUGINS_H__ |
23 | |
24 | #include <gst/gst.h> |
25 | #include <gst/pbutils/pbutils-prelude.h> |
26 | |
27 | G_BEGIN_DECLS |
28 | |
29 | /* |
30 | * functions for use by applications to initiate installation of missing plugins |
31 | */ |
32 | |
33 | /** |
34 | * GstInstallPluginsReturn: |
35 | * @GST_INSTALL_PLUGINS_SUCCESS: all of the requested plugins could be |
36 | * installed |
37 | * @GST_INSTALL_PLUGINS_NOT_FOUND: no appropriate installation candidate for |
38 | * any of the requested plugins could be found. Only return this if nothing |
39 | * has been installed. Return #GST_INSTALL_PLUGINS_PARTIAL_SUCCESS if |
40 | * some (but not all) of the requested plugins could be installed. |
41 | * @GST_INSTALL_PLUGINS_ERROR: an error occurred during the installation. If |
42 | * this happens, the user has already seen an error message and another |
43 | * one should not be displayed |
44 | * @GST_INSTALL_PLUGINS_CRASHED: the installer had an unclean exit code |
45 | * (ie. death by signal) |
46 | * @GST_INSTALL_PLUGINS_PARTIAL_SUCCESS: some of the requested plugins could |
47 | * be installed, but not all |
48 | * @GST_INSTALL_PLUGINS_USER_ABORT: the user has aborted the installation |
49 | * @GST_INSTALL_PLUGINS_INVALID: the helper returned an invalid status code |
50 | * @GST_INSTALL_PLUGINS_STARTED_OK: returned by gst_install_plugins_async() to |
51 | * indicate that everything went fine so far and the provided callback |
52 | * will be called with the result of the installation later |
53 | * @GST_INSTALL_PLUGINS_INTERNAL_FAILURE: some internal failure has |
54 | * occurred when trying to start the installer |
55 | * @GST_INSTALL_PLUGINS_HELPER_MISSING: the helper script to call the |
56 | * actual installer is not installed |
57 | * @GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS: a previously-started plugin |
58 | * installation is still in progress, try again later |
59 | * |
60 | * Result codes returned by gst_install_plugins_async() and |
61 | * gst_install_plugins_sync(), and also the result code passed to the |
62 | * #GstInstallPluginsResultFunc specified with gst_install_plugins_async(). |
63 | * |
64 | * These codes indicate success or failure of starting an external installer |
65 | * program and to what extent the requested plugins could be installed. |
66 | */ |
67 | typedef enum { |
68 | /* Return codes from the installer. Returned by gst_install_plugins_sync(), |
69 | * or passed as result code to your #GstInstallPluginsResultFunc */ |
70 | GST_INSTALL_PLUGINS_SUCCESS = 0, |
71 | GST_INSTALL_PLUGINS_NOT_FOUND = 1, |
72 | GST_INSTALL_PLUGINS_ERROR = 2, |
73 | GST_INSTALL_PLUGINS_PARTIAL_SUCCESS = 3, |
74 | GST_INSTALL_PLUGINS_USER_ABORT = 4, |
75 | |
76 | /* Returned by gst_install_plugins_sync(), or passed as result code to your |
77 | * #GstInstallPluginsResultFunc */ |
78 | GST_INSTALL_PLUGINS_CRASHED = 100, |
79 | GST_INSTALL_PLUGINS_INVALID, |
80 | |
81 | /* Return codes from starting the external helper, may be returned by both |
82 | * gst_install_plugins_sync() and gst_install_plugins_async(), but should |
83 | * never be seen by a #GstInstallPluginsResultFunc */ |
84 | GST_INSTALL_PLUGINS_STARTED_OK = 200, |
85 | GST_INSTALL_PLUGINS_INTERNAL_FAILURE, |
86 | GST_INSTALL_PLUGINS_HELPER_MISSING, |
87 | GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS |
88 | } GstInstallPluginsReturn; |
89 | |
90 | /** |
91 | * GstInstallPluginsContext: |
92 | * |
93 | * Opaque context structure for the plugin installation. Use the provided |
94 | * API to set details on it. |
95 | */ |
96 | |
97 | #define GST_TYPE_INSTALL_PLUGINS_CONTEXT (gst_install_plugins_context_get_type()) |
98 | |
99 | typedef struct _GstInstallPluginsContext GstInstallPluginsContext; |
100 | |
101 | GST_PBUTILS_API |
102 | GstInstallPluginsContext * gst_install_plugins_context_new (void); |
103 | |
104 | GST_PBUTILS_API |
105 | GstInstallPluginsContext * gst_install_plugins_context_copy (GstInstallPluginsContext * ctx); |
106 | GST_PBUTILS_API |
107 | void gst_install_plugins_context_free (GstInstallPluginsContext * ctx); |
108 | |
109 | GST_PBUTILS_API |
110 | void gst_install_plugins_context_set_confirm_search (GstInstallPluginsContext * ctx, |
111 | gboolean confirm_search); |
112 | |
113 | GST_PBUTILS_API |
114 | void gst_install_plugins_context_set_desktop_id (GstInstallPluginsContext * ctx, |
115 | const gchar * desktop_id); |
116 | |
117 | GST_PBUTILS_API |
118 | void gst_install_plugins_context_set_startup_notification_id (GstInstallPluginsContext * ctx, |
119 | const gchar * startup_id); |
120 | |
121 | GST_PBUTILS_API |
122 | void gst_install_plugins_context_set_xid (GstInstallPluginsContext * ctx, |
123 | guint xid); |
124 | |
125 | GST_PBUTILS_API |
126 | GType gst_install_plugins_context_get_type (void); |
127 | |
128 | /** |
129 | * GstInstallPluginsResultFunc: |
130 | * @result: whether the installation of the requested plugins succeeded or not |
131 | * @user_data: the user data passed to gst_install_plugins_async() |
132 | * |
133 | * The prototype of the callback function that will be called once the |
134 | * external plugin installer program has returned. You only need to provide |
135 | * a callback function if you are using the asynchronous interface. |
136 | */ |
137 | typedef void (*GstInstallPluginsResultFunc) (GstInstallPluginsReturn result, |
138 | gpointer user_data); |
139 | |
140 | GST_PBUTILS_API |
141 | GstInstallPluginsReturn gst_install_plugins_async (const gchar * const * details, |
142 | GstInstallPluginsContext * ctx, |
143 | GstInstallPluginsResultFunc func, |
144 | gpointer user_data); |
145 | |
146 | GST_PBUTILS_API |
147 | GstInstallPluginsReturn gst_install_plugins_sync (const gchar * const * details, |
148 | GstInstallPluginsContext * ctx); |
149 | |
150 | GST_PBUTILS_API |
151 | const gchar * gst_install_plugins_return_get_name (GstInstallPluginsReturn ret); |
152 | |
153 | GST_PBUTILS_API |
154 | gboolean gst_install_plugins_installation_in_progress (void); |
155 | |
156 | GST_PBUTILS_API |
157 | gboolean gst_install_plugins_supported (void); |
158 | |
159 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstInstallPluginsContext, gst_install_plugins_context_free) |
160 | |
161 | G_END_DECLS |
162 | |
163 | #endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */ |
164 | |
165 | |