1 /*
2  * Copyright (C) 2008 OpenedHand Ltd.
3  *
4  * Authors: Jorn Baayen <jorn@openedhand.com>
5  *
6  * SPDX-License-Identifier: LGPL-2.1-or-later
7  *
8  */
9 
10 #include <config.h>
11 
12 #include <libgupnp-av/gupnp-search-criteria-parser.h>
13 #include <stdlib.h>
14 
15 static void
begin_parens_cb(G_GNUC_UNUSED GUPnPSearchCriteriaParser * parser,G_GNUC_UNUSED gpointer user_data)16 begin_parens_cb (G_GNUC_UNUSED GUPnPSearchCriteriaParser *parser,
17                  G_GNUC_UNUSED gpointer                   user_data)
18 {
19         g_print ("(");
20 }
21 
22 static void
end_parens_cb(G_GNUC_UNUSED GUPnPSearchCriteriaParser * parser,G_GNUC_UNUSED gpointer user_data)23 end_parens_cb (G_GNUC_UNUSED GUPnPSearchCriteriaParser *parser,
24                G_GNUC_UNUSED gpointer                   user_data)
25 {
26         g_print (")");
27 }
28 
29 static void
conjunction_cb(G_GNUC_UNUSED GUPnPSearchCriteriaParser * parser,G_GNUC_UNUSED gpointer user_data)30 conjunction_cb (G_GNUC_UNUSED GUPnPSearchCriteriaParser *parser,
31                 G_GNUC_UNUSED gpointer                   user_data)
32 {
33         g_print (" and ");
34 }
35 
36 static void
disjunction_cb(G_GNUC_UNUSED GUPnPSearchCriteriaParser * parser,G_GNUC_UNUSED gpointer user_data)37 disjunction_cb (G_GNUC_UNUSED GUPnPSearchCriteriaParser *parser,
38                 G_GNUC_UNUSED gpointer                   user_data)
39 {
40         g_print (" or ");
41 }
42 
43 static gboolean
expression_cb(G_GNUC_UNUSED GUPnPSearchCriteriaParser * parser,const char * property,GUPnPSearchCriteriaOp op,const char * value,G_GNUC_UNUSED GError ** error,G_GNUC_UNUSED gpointer user_data)44 expression_cb (G_GNUC_UNUSED GUPnPSearchCriteriaParser *parser,
45                const char                              *property,
46                GUPnPSearchCriteriaOp                    op,
47                const char                              *value,
48                G_GNUC_UNUSED GError                   **error,
49                G_GNUC_UNUSED gpointer                   user_data)
50 {
51         g_print ("%s %d %s", property, op, value);
52 
53         return TRUE;
54 }
55 
56 int
main(int argc,char ** argv)57 main (int argc, char **argv)
58 {
59         GUPnPSearchCriteriaParser *parser;
60         GError *error;
61 
62         g_assert (argc == 2);
63 
64         parser = gupnp_search_criteria_parser_new ();
65 
66         g_signal_connect (parser,
67                           "begin_parens",
68                           G_CALLBACK (begin_parens_cb),
69                           NULL);
70         g_signal_connect (parser,
71                           "end_parens",
72                           G_CALLBACK (end_parens_cb),
73                           NULL);
74         g_signal_connect (parser,
75                           "conjunction",
76                           G_CALLBACK (conjunction_cb),
77                           NULL);
78         g_signal_connect (parser,
79                           "disjunction",
80                           G_CALLBACK (disjunction_cb),
81                           NULL);
82         g_signal_connect (parser,
83                           "expression",
84                           G_CALLBACK (expression_cb),
85                           NULL);
86 
87         error = NULL;
88         gupnp_search_criteria_parser_parse_text (parser, argv[1], &error);
89         if (error != NULL) {
90                 g_printerr ("Parse error: %s\n", error->message);
91                 g_error_free (error);
92                 return EXIT_FAILURE;
93         }
94 
95         g_print ("\n");
96 
97         g_object_unref (parser);
98 
99         return EXIT_SUCCESS;
100 }
101