+static void cleancache_r(gchar *path)
+{
+ GDir *dir = g_dir_open(path, 0, NULL);
+ if (!dir)
+ return;
+ const gchar *child;
+ while ((child = g_dir_read_name(dir))) {
+ gchar *child_path = g_build_filename(path, child, NULL);
+ if (g_file_test(child_path, G_FILE_TEST_IS_DIR)) {
+ cleancache_r(child_path);
+ } else {
+ struct stat st;
+ g_stat(child_path, &st);
+ if (st.st_atime < time(NULL)-60*60*24)
+ g_remove(child_path);
+ }
+ g_free(child_path);
+ }
+ g_dir_close(dir);
+ g_rmdir(path);
+}
+G_MODULE_EXPORT void on_cleancache(GtkMenuItem *menu, AWeatherGui *self)
+{
+ g_debug("AWeatherGui: on_cleancache");
+ /* Todo: move this to grits */
+ gchar *cache = g_build_filename(g_get_user_cache_dir(), "grits", NULL);
+ cleancache_r(cache);
+}
+
+G_MODULE_EXPORT void on_help(GtkMenuItem *menu, AWeatherGui *self)
+{
+ GError *err = NULL;
+ const gchar *name = gtk_buildable_get_name(GTK_BUILDABLE(menu));
+ gchar *page = g_str_has_suffix(name, "userguide") ? "userguide" :
+ g_str_has_suffix(name, "manpage") ? "aweather" : NULL;
+ if (page == NULL) {
+ g_warning("Unknown help page: %s", page);
+ return;
+ }
+ gchar *path = g_strdup_printf("%s/%s.html", HTMLDIR, page);
+ g_strdelimit(path, "/", G_DIR_SEPARATOR);
+ gchar *argv[] = {"xdg-open", path, NULL};
+ g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &err);
+ if (err) {
+ g_warning("Unable to open help page: %s - %s",
+ argv[1], err->message);
+ g_error_free(err);
+ }
+ g_free(path);
+}
+
+void on_radar_changed(GtkMenuItem *menu, AWeatherGui *self)
+{
+ city_t *city = g_object_get_data(G_OBJECT(menu), "city");
+ grits_viewer_set_location(self->viewer,
+ city->pos.lat, city->pos.lon, EARTH_R/35);
+ /* Focus radar tab */
+ GtkWidget *config = aweather_gui_get_widget(self, "main_tabs");
+ gint npages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(config));
+ for (int i = 0; i < npages; i++) {
+ GtkWidget *child = gtk_notebook_get_nth_page(GTK_NOTEBOOK(config), i);
+ const gchar *plugin = gtk_notebook_get_tab_label_text(GTK_NOTEBOOK(config), child);
+ if (g_str_equal(plugin, "radar"))
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(config), i);
+ }
+}
+