1 /*
2 * Copyright (C) 2009, Nokia <ivan.frade@nokia.com>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #include "config-miners.h"
21
22 #include <stdlib.h>
23 #include <locale.h>
24
25 #include <glib/gi18n.h>
26
27 #include <libtracker-miners-common/tracker-log.h>
28
29 #include "tracker-writeback.h"
30 #include "tracker-config.h"
31
32 #define ABOUT \
33 "Tracker " PACKAGE_VERSION "\n"
34
35 #define LICENSE \
36 "This program is free software and comes without any warranty.\n" \
37 "It is licensed under version 2 or later of the General Public " \
38 "License which can be viewed at:\n" \
39 "\n" \
40 " http://www.gnu.org/licenses/gpl.txt\n"
41
42 #define QUIT_TIMEOUT 30 /* 1/2 minutes worth of seconds */
43
44 static gboolean version;
45 static gint verbosity = -1;
46 static gboolean disable_shutdown;
47
48 static GOptionEntry entries[] = {
49 { "version", 'V', 0,
50 G_OPTION_ARG_NONE, &version,
51 N_("Displays version information"),
52 NULL },
53 { "verbosity", 'v', 0,
54 G_OPTION_ARG_INT, &verbosity,
55 N_("Logging, 0 = errors only, "
56 "1 = minimal, 2 = detailed and 3 = debug (default=0)"),
57 NULL },
58 /* Debug run is used to avoid that the mainloop exits, so that
59 * as a developer you can be relax when running the tool in gdb */
60 { "disable-shutdown", 'd', 0,
61 G_OPTION_ARG_NONE, &disable_shutdown,
62 N_("Disable shutting down after 30 seconds of inactivity"),
63 NULL },
64 { NULL }
65 };
66
67
68 static void
sanity_check_option_values(TrackerConfig * config)69 sanity_check_option_values (TrackerConfig *config)
70 {
71 g_message ("General options:");
72 g_message (" Verbosity ............................ %d",
73 tracker_config_get_verbosity (config));
74 }
75
76 int
main(int argc,char * argv[])77 main (int argc,
78 char *argv[])
79 {
80 TrackerConfig *config;
81 TrackerController *controller;
82 GOptionContext *context;
83 GMainLoop *loop;
84 GError *error = NULL;
85 gchar *log_filename;
86 guint shutdown_timeout;
87
88 /* Set up locale */
89 setlocale (LC_ALL, "");
90
91 bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
92 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
93 textdomain (GETTEXT_PACKAGE);
94
95 /* Translators: this message will appear immediately after the
96 * usage string - Usage: COMMAND <THIS_MESSAGE>
97 */
98 context = g_option_context_new (_("— start the tracker writeback service"));
99
100 g_option_context_add_main_entries (context, entries, NULL);
101 g_option_context_parse (context, &argc, &argv, &error);
102 g_option_context_free (context);
103
104 if (version) {
105 g_print ("\n" ABOUT "\n" LICENSE "\n");
106 return EXIT_SUCCESS;
107 }
108
109 /* Initialize logging */
110 config = tracker_config_new ();
111
112 if (verbosity > -1) {
113 tracker_config_set_verbosity (config, verbosity);
114 }
115
116 tracker_log_init (tracker_config_get_verbosity (config),
117 &log_filename);
118 if (log_filename != NULL) {
119 g_message ("Using log file:'%s'", log_filename);
120 g_free (log_filename);
121 }
122
123 sanity_check_option_values (config);
124
125 if (disable_shutdown) {
126 shutdown_timeout = 0;
127 } else {
128 shutdown_timeout = QUIT_TIMEOUT;
129 }
130
131 controller = tracker_controller_new (shutdown_timeout, &error);
132
133 if (error) {
134 g_critical ("Error creating controller: %s", error->message);
135 g_error_free (error);
136 return EXIT_FAILURE;
137 }
138
139 g_message ("Main thread is: %p", g_thread_self ());
140
141 loop = g_main_loop_new (NULL, FALSE);
142 g_main_loop_run (loop);
143
144
145 tracker_log_shutdown ();
146
147 g_object_unref (controller);
148
149 g_main_loop_unref (loop);
150
151 g_object_unref (config);
152
153 return EXIT_SUCCESS;
154 }
155