static GDate* iso2GDate(const gchar* date) { GDate* gdate; gchar** parts = NULL; int i; g_return_val_if_fail(date != NULL, NULL); gdate = g_date_new(); parts = g_strsplit(date, "-", 3); if (! is_iso_string(parts)) return NULL; if (!parts) return NULL; for (i = 0; i < 3; i++) { int t = atoi(parts[i]); switch (i) { case 0: if (t < 1 || t > 9999) { free_all(gdate, parts); return NULL; } g_date_set_year(gdate, t); break; case 1: if (t < 1 || t > 12) { free_all(gdate, parts); return NULL; } g_date_set_month(gdate, t); break; case 2: if (t < 1 || t > 31) { free_all(gdate, parts); return NULL; } g_date_set_day(gdate, t); break; } } g_strfreev(parts); return gdate; }
void gnc_gdate_set_fiscal_year_end (GDate *date, const GDate *fy_end) { GDate temp; gboolean new_fy; g_return_if_fail(date); g_return_if_fail(fy_end); /* Compute the FY end that occurred this CY */ temp = *fy_end; g_date_set_year(&temp, g_date_get_year(date)); /* Has it already passed? */ new_fy = (g_date_compare(date, &temp) > 0); /* Set end date */ *date = temp; if (new_fy) g_date_add_years(date, 1); }
void contacts_create_birthdays_window (GUI *appGUI) { GtkWidget *vbox1; GtkWidget *hseparator; GtkWidget *hbuttonbox; GtkWidget *close_button; GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *scrolledwindow; gint i, n, id, age; guint32 date; gchar *text, buffer[BUFFER_SIZE], buff[BUFFER_SIZE]; GtkTreeIter iter, n_iter; GDate *cdate_birthday, *cdate_current; guint b_day, b_month, b_year; guint c_day, c_month, c_year; gboolean flag, leap; cdate_birthday = g_date_new (); g_return_if_fail (cdate_birthday != NULL); cdate_current = g_date_new (); g_return_if_fail (cdate_current != NULL); i = n = 0; while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, NULL, i++)) { gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_BIRTH_DAY_DATE, &date, -1); if (date) n++; } if (n == 0) { gui_create_dialog (GTK_MESSAGE_INFO, _("No birthdays defined"), GTK_WINDOW (appGUI->main_window)); return; } appGUI->cnt->birthdays_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (appGUI->cnt->birthdays_window), _("Birthdays list")); gtk_window_set_position (GTK_WINDOW (appGUI->cnt->birthdays_window), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_default_size (GTK_WINDOW (appGUI->cnt->birthdays_window), config.contacts_birthdays_win_w, config.contacts_birthdays_win_h); gtk_window_set_modal (GTK_WINDOW (appGUI->cnt->birthdays_window), TRUE); g_signal_connect (G_OBJECT (appGUI->cnt->birthdays_window), "delete_event", G_CALLBACK (birthdays_window_close_cb), appGUI); gtk_window_set_transient_for (GTK_WINDOW (appGUI->cnt->birthdays_window), GTK_WINDOW (appGUI->main_window)); gtk_container_set_border_width (GTK_CONTAINER (appGUI->cnt->birthdays_window), 8); g_signal_connect (G_OBJECT (appGUI->cnt->birthdays_window), "key_press_event", G_CALLBACK (birthdays_key_press_cb), appGUI); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (appGUI->cnt->birthdays_window), vbox1); scrolledwindow = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow); gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow, TRUE, TRUE, 0); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); appGUI->cnt->birthdays_list_store = gtk_list_store_new (BIRTHDAYS_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); appGUI->cnt->birthdays_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (appGUI->cnt->birthdays_list_store)); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), config.contacts_rules_hint); gtk_widget_show (appGUI->cnt->birthdays_list); GTK_WIDGET_SET_FLAGS (appGUI->cnt->birthdays_list, GTK_CAN_DEFAULT); gtk_container_add (GTK_CONTAINER (scrolledwindow), appGUI->cnt->birthdays_list); appGUI->cnt->birthdays_list_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (appGUI->cnt->birthdays_list)); g_signal_connect (G_OBJECT (appGUI->cnt->birthdays_list), "button_press_event", G_CALLBACK (birthdays_list_dbclick_cb), appGUI); /* create columns */ renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "xpad", 8, NULL); column = gtk_tree_view_column_new_with_attributes (_("Name"), renderer, "text", B_COLUMN_NAME, NULL); gtk_tree_view_column_set_visible (column, TRUE); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_NAME); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Days to birthday"), renderer, "text", B_COLUMN_DAYS_NUM, NULL); gtk_tree_view_column_set_visible (column, FALSE); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); renderer = gtk_cell_renderer_text_new (); g_object_set (G_OBJECT (renderer), "xalign", 1.0, NULL); g_object_set (G_OBJECT (renderer), "xpad", 8, NULL); column = gtk_tree_view_column_new_with_attributes (_("Days to birthday"), renderer, "text", B_COLUMN_DAYS, NULL); gtk_tree_view_column_set_visible (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_DAYS_NUM); g_signal_emit_by_name (column, "clicked"); column = gtk_tree_view_column_new_with_attributes (_("Age"), renderer, "text", B_COLUMN_AGE, NULL); gtk_tree_view_column_set_visible (column, config.visible_age_column); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_AGE); column = gtk_tree_view_column_new_with_attributes (_("Birthday date"), renderer, "text", B_COLUMN_DATE, NULL); gtk_tree_view_column_set_visible (column, config.visible_birthday_date_column); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Zodiac sign"), renderer, "text", B_COLUMN_ZODIAC, NULL); gtk_tree_view_column_set_visible (column, config.visible_zodiac_sign_column); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("ID", renderer, "text", B_COLUMN_ID, NULL); gtk_tree_view_column_set_visible (column, FALSE); gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column); gtk_tree_view_set_enable_search (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), FALSE); i = 0; g_date_set_julian (cdate_current, utl_get_current_julian ()); c_day = g_date_get_day (cdate_current); c_month = g_date_get_month (cdate_current); c_year = g_date_get_year (cdate_current); while (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, NULL, i++)) { gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_BIRTH_DAY_DATE, &date, -1); if (g_date_valid_julian (date)) { /* calculate age */ g_date_set_julian (cdate_birthday, date); b_day = g_date_get_day (cdate_birthday); b_month = g_date_get_month (cdate_birthday); b_year = g_date_get_year (cdate_birthday); age = (gint) c_year - b_year; if (b_month < c_month || (b_month == c_month && b_day < c_day)) age++; if (age < 1) continue; /* name */ flag = FALSE; g_snprintf (buff, BUFFER_SIZE, "(%s)", _("None")); gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_LAST_NAME, &text, -1); if (text != NULL) { flag = TRUE; if (strcmp (text, buff) == 0) { text[0] = '\0'; flag = FALSE; } g_strlcpy (buffer, text, BUFFER_SIZE); g_free (text); } gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_FIRST_NAME, &text, -1); if (text != NULL) { if (strcmp (text, buff) == 0) { text[0] = '\0'; } if (flag == TRUE) { g_strlcat (buffer, " ", BUFFER_SIZE); g_strlcat (buffer, text, BUFFER_SIZE); } else { g_strlcpy (buffer, text, BUFFER_SIZE); } g_free (text); } gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_ID, &id, -1); gtk_list_store_append (appGUI->cnt->birthdays_list_store, &n_iter); gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter, B_COLUMN_ID, id, B_COLUMN_NAME, buffer, B_COLUMN_AGE, age, -1); /* calculate days to birthday */ b_year = c_year; if ((b_month < c_month) || (b_month == c_month && b_day < c_day)) b_year++; leap = FALSE; if (g_date_valid_dmy (b_day, b_month, b_year) == FALSE) { g_date_set_day (cdate_birthday, b_day - 1); leap = TRUE; } g_date_set_year (cdate_birthday, b_year); date = g_date_days_between (cdate_current, cdate_birthday); if (date == 0) { g_snprintf (buffer, BUFFER_SIZE, "%s", _("today")); } else { g_snprintf (buffer, BUFFER_SIZE, leap ? "%d + 1" : "%d", date); } g_date_strftime (buff, BUFFER_SIZE, "%A, ", cdate_birthday); g_strlcat (buff, julian_to_str (g_date_get_julian (cdate_birthday), config.date_format), BUFFER_SIZE); gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter, B_COLUMN_DAYS_NUM, date, B_COLUMN_DAYS, buffer, B_COLUMN_DATE, buff, B_COLUMN_ZODIAC, utl_get_zodiac_name (b_day, b_month), -1); } } g_date_free (cdate_birthday); g_date_free (cdate_current); hseparator = gtk_hseparator_new (); gtk_widget_show (hseparator); gtk_box_pack_start (GTK_BOX (vbox1), hseparator, FALSE, TRUE, 4); hbuttonbox = gtk_hbutton_box_new (); gtk_widget_show (hbuttonbox); gtk_box_pack_start (GTK_BOX (vbox1), hbuttonbox, FALSE, TRUE, 0); gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END); gtk_box_set_spacing (GTK_BOX (hbuttonbox), 4); if (config.default_stock_icons) { close_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); } else { close_button = gtk_button_new_from_stock (OSMO_STOCK_BUTTON_CLOSE); } gtk_widget_show (close_button); g_signal_connect (close_button, "clicked", G_CALLBACK (button_birthdays_window_close_cb), appGUI); gtk_container_add (GTK_CONTAINER (hbuttonbox), close_button); gtk_widget_show (appGUI->cnt->birthdays_window); gtk_widget_grab_focus (close_button); }
/** * Update the example calendar; make sure to take into account the end * specification. **/ static void sxftd_update_example_cal( SXFromTransInfo *sxfti ) { struct tm *tmpTm; time_t tmp_tt; GDate date, startDate, nextDate; GList *schedule = NULL; getEndTuple get; get = sxftd_get_end_info( sxfti ); tmp_tt = gnc_date_edit_get_date( sxfti->startDateGDE ); tmpTm = g_new0( struct tm, 1 ); *tmpTm = *localtime( &tmp_tt ); g_date_clear(&date, 1); g_date_set_day( &date, tmpTm->tm_mday ); g_date_set_month( &date, tmpTm->tm_mon + 1 ); g_date_set_year( &date, tmpTm->tm_year + 1900 ); g_free( tmpTm ); sxftd_update_schedule(sxfti, &date, &schedule); /* go one day before what's in the box so we can get the correct start * date. */ startDate = date; g_date_subtract_days(&date, 1); g_date_clear(&nextDate, 1); recurrenceListNextInstance(schedule, &date, &nextDate); { GtkWidget *w; gchar *name; /* get the name */ w = glade_xml_get_widget(sxfti->gxml, SXFTD_NAME_ENTRY); name = gtk_editable_get_chars(GTK_EDITABLE(w), 0, -1); gnc_dense_cal_store_update_name(sxfti->dense_cal_model, name); g_free(name); } { gchar *schedule_desc; schedule_desc = recurrenceListToCompactString(schedule); gnc_dense_cal_store_update_info(sxfti->dense_cal_model, schedule_desc); g_free(schedule_desc); } switch (get.type) { case NEVER_END: gnc_dense_cal_store_update_recurrences_no_end(sxfti->dense_cal_model, &startDate, schedule); break; case END_ON_DATE: gnc_dense_cal_store_update_recurrences_date_end(sxfti->dense_cal_model, &startDate, schedule, &get.end_date); break; case END_AFTER_N_OCCS: gnc_dense_cal_store_update_recurrences_count_end(sxfti->dense_cal_model, &startDate, schedule, get.n_occurrences); break; default: g_warning("unknown get.type [%d]\n", get.type); break; } gnc_dense_cal_set_month( sxfti->example_cal, g_date_get_month( &startDate ) ); gnc_dense_cal_set_year( sxfti->example_cal, g_date_get_year( &startDate ) ); recurrenceListFree(&schedule); }
void cal_print_get_events (gchar *buffer, guint32 julian, GUI *appGUI) { GtkTreePath *path; GtkTreeIter iter; GtkTreeModel *model; GSList *lnode; struct note *a; gint i; gchar *wbuf1, *wbuf2; gchar buf1[BUFFER_SIZE], buf2[BUFFER_SIZE]; GDate *date, *sdate; gint age, syear; guint32 tsk_julian; gint time; gint max_event_length; GRegex *reg; buffer[0] = '\0'; max_event_length = (config.cal_print_event_length + 2 > BUFFER_SIZE) ? BUFFER_SIZE : config.cal_print_event_length + 2; #ifdef TASKS_ENABLED /* tasks */ if (config.cal_print_tasks) { model = GTK_TREE_MODEL (appGUI->tsk->tasks_list_store); g_return_if_fail (model != NULL); path = gtk_tree_path_new_first (); while (gtk_tree_model_get_iter (model, &iter, path) == TRUE) { gtk_tree_model_get (model, &iter, TA_COLUMN_DUE_DATE_JULIAN, &tsk_julian, TA_COLUMN_CATEGORY, &wbuf1, -1); if (tsk_julian == julian && tasks_category_get_state (wbuf1, STATE_CALENDAR, appGUI) == TRUE) { gtk_tree_model_get (model, &iter, TA_COLUMN_DUE_TIME, &time, TA_COLUMN_SUMMARY, &wbuf2, -1); if (time >= 0) { g_snprintf (buf1, max_event_length, "\n[%02d:%02d] %s", time / 3600, time / 60 % 60, wbuf2); } else { g_snprintf (buf1, max_event_length, "\n%s", wbuf2); } g_strlcat (buffer, buf1, BUFFER_SIZE); g_free (wbuf2); } g_free (wbuf1); gtk_tree_path_next (path); } gtk_tree_path_free (path); } #endif /* TASKS_ENABLED */ #ifdef CONTACTS_ENABLED /* birthdays */ if (config.cal_print_birthdays) { model = GTK_TREE_MODEL (appGUI->cnt->contacts_list_store); g_return_if_fail (model != NULL); date = g_date_new (); g_return_if_fail (date != NULL); sdate = g_date_new_julian (julian); g_return_if_fail (sdate != NULL); syear = g_date_get_year (sdate); path = gtk_tree_path_new_first (); while (gtk_tree_model_get_iter (model, &iter, path) == TRUE) { gtk_tree_model_get (model, &iter, COLUMN_BIRTH_DAY_DATE, &tsk_julian, -1); if (g_date_valid_julian (tsk_julian)) { g_date_set_julian (date, tsk_julian); age = syear - g_date_get_year (date); if (age >= 0) { if (g_date_valid_dmy (g_date_get_day (date), g_date_get_month (date), syear) == FALSE) { g_date_subtract_days (date, 1); } g_date_set_year (date, syear); if (g_date_compare (date, sdate) == 0) { gtk_tree_model_get (model, &iter, COLUMN_FIRST_NAME, &wbuf1, COLUMN_LAST_NAME, &wbuf2, -1); utl_name_strcat (wbuf1, wbuf2, buf2); g_snprintf (buf1, max_event_length, "\n%s (%d)", buf2, age); g_strlcat (buffer, buf1, BUFFER_SIZE); } } } gtk_tree_path_next (path); } gtk_tree_path_free (path); g_date_free (sdate); g_date_free (date); } /* name days */ if (config.cal_print_namedays) { model = GTK_TREE_MODEL (appGUI->cnt->contacts_list_store); g_return_if_fail (model != NULL); date = NULL; date = g_date_new (); g_return_if_fail (date != NULL); sdate = NULL; sdate = g_date_new_julian (julian); g_return_if_fail (sdate != NULL); syear = g_date_get_year (sdate); path = gtk_tree_path_new_first (); while (gtk_tree_model_get_iter (model, &iter, path) == TRUE) { gtk_tree_model_get (model, &iter, COLUMN_NAME_DAY_DATE, &tsk_julian, -1); if (g_date_valid_julian (tsk_julian)) { g_date_set_julian (date, tsk_julian); if (g_date_valid_dmy (g_date_get_day (date), g_date_get_month (date), syear) == TRUE) { g_date_set_year (date, syear); if (g_date_compare (date, sdate) == 0) { gtk_tree_model_get (model, &iter, COLUMN_FIRST_NAME, &wbuf1, COLUMN_LAST_NAME, &wbuf2, -1); utl_name_strcat (wbuf1, wbuf2, buf1); g_snprintf (buf2, max_event_length, "\n%s (%s)", buf1, _("Name day")); g_strlcat (buffer, buf2, BUFFER_SIZE); } } } gtk_tree_path_next (path); } gtk_tree_path_free (path); g_date_free (sdate); g_date_free (date); } #endif /* CONTACTS_ENABLED */ /* day note */ if (config.cal_print_day_notes) { if (appGUI->cal->notes_list != NULL) { wbuf1 = NULL; reg = g_regex_new ("\n", 0, 0, NULL); for (i = 0, lnode = appGUI->cal->notes_list; lnode != NULL; lnode = lnode->next, i++) { a = g_slist_nth_data (appGUI->cal->notes_list, i); if (a->date == julian) { wbuf1 = g_regex_replace_literal (reg, a->note, -1, 0, " ", 0, NULL); break; } } g_regex_unref (reg); } if (wbuf1 != NULL) { g_strstrip (wbuf1); g_snprintf (buf1, max_event_length, "\n%s", wbuf1); g_strlcat (buffer, buf1, BUFFER_SIZE); g_free (wbuf1); } } #ifdef HAVE_LIBICAL /* ical */ if (config.cal_print_ical) { } #endif /* HAVE_LIBICAL */ g_strstrip (buffer); }
GSList * log_read_dates (const char **buffer_lines, time_t current) { int current_year, offsetyear, i, n, rangemin, rangemax, timestamp_len = 0; GSList *days = NULL; GDate *date = NULL; struct tm *tmptm; char *date_string = NULL; Day *day; gboolean done = FALSE; g_return_val_if_fail (buffer_lines != NULL, NULL); n = g_strv_length ((char **) buffer_lines); tmptm = localtime (¤t); current_year = tmptm->tm_year + 1900; offsetyear = 0; /* find the first line with a date we're able to parse */ for (i = 0; buffer_lines[i]; i++) { if ((date = string_get_date (buffer_lines[i], &date_string, ×tamp_len)) != NULL) break; } if (!date) { /* no valid dates in the array, return NULL */ return NULL; } if (!g_date_valid (date)) { g_date_free (date); g_free (date_string); return NULL; } g_date_set_year (date, current_year); day = g_slice_new0 (Day); days = g_slist_append (days, day); /* $i now contains the line number for the first good date */ day->date = date; day->first_line = i; day->last_line = -1; day->timestamp_len = timestamp_len; /* now scan the logfile to get the last line of the day */ rangemin = i; rangemax = n - 1; while (!done) { /* find out the last line of the day we're currently building */ i = n - 1; while (day->last_line < 0) { if (strstr (buffer_lines[i], date_string)) { /* if we find the same string on the last line of the log, we're done */ if (i == n - 1) { done = TRUE; day->last_line = i; break; } /* we're still in a section of lines with the same date; * - if the next one changes, then we're on the last. * - else we keep searching in the following. */ if (!strstr (buffer_lines[i + 1], date_string)) { day->last_line = i; break; } else { rangemin = i; i = floor (((float) i + (float) rangemax) / 2.); } } else { /* we can't find the same date here; go back to a safer range. */ rangemax = i; i = floor (((float) rangemin + (float) i) / 2.); } } g_free (date_string); date_string = NULL; if (!done) { /* this means we finished the current day but we're not at the end * of the buffer: reset the parameters for the next day. */ GDate *newdate = NULL; for (i = day->last_line + 1; buffer_lines[i]; i++) { if ((newdate = string_get_date (buffer_lines[i], &date_string, ×tamp_len)) != NULL) break; } if (date_string == NULL && i == n - 1) { done = TRUE; } /* this will set the last line of the "old" log to either: * - "n - 1" if we can't find another date * - the line before the new date else. */ day->last_line = i - 1; if (newdate) { /* append a new day to the list */ g_date_set_year (newdate, current_year + offsetyear); if (g_date_compare (newdate, date) < 1) { /* this isn't possible, as we're reading the log forward. * so it means that newdate is the next year. */ g_date_add_years (newdate, 1); offsetyear++; } date = newdate; day = g_slice_new0 (Day); days = g_slist_prepend (days, day); day->date = date; day->first_line = i; day->last_line = -1; day->timestamp_len = timestamp_len; rangemin = i; rangemax = n - 1; } } } if (date_string) { g_free (date_string); } /* sort the days in chronological order */ days = g_slist_sort (days, days_compare); return days; }
static gboolean rc_plugin_tag_data_save_cb() { const gchar *title, *artist, *album, *track, *genre; const gchar *year, *comment, *rg, *format, *path_uri; guint year_value, track_value; gdouble rg_value; GDate *date; GstTagList *tag_list; gchar *src_path, *target_path; gboolean flag = FALSE; path_uri = gtk_entry_get_text(GTK_ENTRY(tag_ui.path_entry)); if(path_uri==NULL || strlen(path_uri)==0) return FALSE; if(working_flag) return FALSE; title = gtk_entry_get_text(GTK_ENTRY(tag_ui.title_entry)); artist = gtk_entry_get_text(GTK_ENTRY(tag_ui.artist_entry)); album = gtk_entry_get_text(GTK_ENTRY(tag_ui.album_entry)); track = gtk_entry_get_text(GTK_ENTRY(tag_ui.track_entry)); genre = gtk_entry_get_text(GTK_ENTRY(tag_ui.genre_entry)); year = gtk_entry_get_text(GTK_ENTRY(tag_ui.year_entry)); comment = gtk_entry_get_text(GTK_ENTRY(tag_ui.comment_entry)); rg = gtk_entry_get_text(GTK_ENTRY(tag_ui.rg_entry)); format = gtk_label_get_text(GTK_LABEL(tag_ui.format_entry)); tag_list = gst_tag_list_new(); gst_tag_list_add(tag_list, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_TITLE, title, GST_TAG_ARTIST, artist, GST_TAG_ALBUM, album, GST_TAG_GENRE, genre, GST_TAG_COMMENT, comment, NULL); if(sscanf(track, "%u", &track_value)>=1) { gst_tag_list_add(tag_list, GST_TAG_MERGE_REPLACE, GST_TAG_TRACK_NUMBER, track_value, NULL); } if(sscanf(year, "%u", &year_value)>=1) { date = g_date_new(); g_date_set_year(date, year_value); gst_tag_list_add(tag_list, GST_TAG_MERGE_REPLACE, GST_TAG_DATE, date, NULL); g_date_free(date); } if(sscanf(rg, "%lf", &rg_value)>=1) { gst_tag_list_add(tag_list, GST_TAG_MERGE_REPLACE, GST_TAG_TRACK_GAIN, rg_value, NULL); } src_path = g_filename_from_uri(path_uri, NULL, NULL); target_path = g_strdup_printf("%s.newname", src_path); flag = TRUE; if(g_strcmp0(format, "FLAC")==0) flag = rc_plugin_tag_flac_change(src_path, target_path, tag_list); else if(g_strcmp0(format, "MPEG 1 Audio, Layer 3 (MP3)")==0) flag = rc_plugin_tag_mp3_change(src_path, target_path, tag_list); else if(g_strcmp0(format, "Vorbis")==0) flag = rc_plugin_tag_vorbis_change(src_path, target_path, tag_list); else if(strncmp(format, "Windows Media Audio", 20)==0) flag = rc_plugin_tag_wma_change(src_path, target_path, tag_list); else if(g_strcmp0(format, "MPEG-4 AAC audio")==0) flag = rc_plugin_tag_m4a_change(src_path, target_path, tag_list); else if(g_strcmp0(format, "Monkey's Audio")==0) flag = rc_plugin_tag_ape_change(src_path, target_path, tag_list); else { rc_debug_perror("TagEditor-ERROR: Unsupported format!\n"); flag = FALSE; } gst_tag_list_free(tag_list); if(flag) { gtk_widget_set_sensitive(tag_ui.save_button, FALSE); working_flag = TRUE; if(tag_src_path!=NULL) g_free(tag_src_path); tag_src_path = g_strdup(src_path); if(tag_target_path!=NULL) g_free(tag_target_path); tag_target_path = g_strdup(target_path); } g_free(src_path); g_free(target_path); return FALSE; }