1 /* 2 | Copyright (C) 2002-2007 Jorg Schuler <jcsjcs at users sourceforge net> 3 | Part of the gtkpod project. 4 | 5 | URL: http://www.gtkpod.org/ 6 | URL: http://gtkpod.sourceforge.net/ 7 | 8 | This program is free software; you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation; either version 2 of the License, or 11 | (at your option) any later version. 12 | 13 | This program is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program; if not, write to the Free Software 20 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 | 22 | iTunes and iPod are trademarks of Apple 23 | 24 | This product is not supported/written/published by Apple! 25 | 26 | $Id$ 27 */ 28 29 #ifndef __MISC_H__ 30 #define __MISC_H__ 31 32 #ifdef HAVE_CONFIG_H 33 # include <config.h> 34 #endif 35 36 #include <glib/gi18n-lib.h> 37 #include <gtk/gtk.h> 38 #include <glade/glade.h> 39 #include <stdio.h> 40 #include <libxml/xmlversion.h> 41 #include <libxml/xmlmemory.h> 42 #include "file.h" 43 #include "display_itdb.h" 44 #include "display.h" 45 #include "confirmation.h" 46 #include "time.h" 47 48 49 #define C_FREE(a) {g_free(a); a=NULL;} 50 51 /* where to find the scripts */ 52 extern const gchar *SCRIPTDIR; 53 54 /* version of GTK_CHECK_VERSION that uses the runtime variables 55 gtk_*_version... instead of the compile-time constants 56 GTK_*_VERSION */ 57 #define RUNTIME_GTK_CHECK_VERSION(major,minor,micro) \ 58 (gtk_major_version > (major) || \ 59 (gtk_major_version == (major) && gtk_minor_version > (minor)) || \ 60 (gtk_major_version == (major) && gtk_minor_version == (minor) && \ 61 gtk_micro_version >= (micro))) 62 63 /* compare a and b, return sign (a-b) -- it has to be this way rather 64 than just calculate a-b, because a and b might be unsigned... */ 65 #define COMP(a,b) (a<b ? -1:a>b ? +1:0) 66 67 /* Response for the Apply button (we cannot use GTK_RESPONSE_APPLY) 68 * because that is only emitted if a filename is present */ 69 enum { RESPONSE_APPLY = 5 }; 70 71 /* indicates whether widgets are currently blocked */ 72 extern gboolean widgets_blocked; 73 /* full path to 'gtkpod.glade', defined in main.c */ 74 extern gchar *xml_file; 75 76 /* Some symbols not necessarily defined */ 77 78 gchar *utf8_strcasestr (const gchar *haystack, const gchar *needle); 79 80 gchar *get_user_string (gchar *title, gchar *message, gchar *dflt, 81 gchar *opt_msg, gboolean *opt_state, const gchar *accept_button); 82 Playlist *add_new_pl_user_name (iTunesDB *itdb, gchar *dflt, gint32 pos); 83 void add_new_pl_or_spl_user_name (iTunesDB *itdb, gchar *dflt, gint32 pos); 84 void create_add_files_fileselector (void); 85 void create_add_playlists_fileselector (void); 86 gchar *concat_dir (G_CONST_RETURN gchar *dir, G_CONST_RETURN gchar *file); 87 gchar *concat_dir_if_relative (G_CONST_RETURN gchar *base_dir, 88 G_CONST_RETURN gchar *rel_dir); 89 float get_ms_since (GTimeVal *old_time, gboolean update); 90 gint get_sort_tab_number (gchar *text); 91 gboolean parse_tracks_from_string (gchar **s, Track **track); 92 gboolean parse_artwork_from_string(gchar **s, Artwork **artwork); 93 void gtkpod_init (int argc, char *argv[]); 94 void gtkpod_shutdown (void); 95 96 gchar *get_allowed_percent_char (void); 97 T_item TM_to_T (TM_item sm); 98 T_item char_to_T (char c); 99 T_item ST_to_T (ST_CAT_item st); 100 const gchar *get_tm_string (TM_item tm); 101 const gchar *get_tm_tooltip (TM_item tm); 102 const gchar *get_t_string (T_item t); 103 const gchar *get_t_tooltip (T_item t); 104 105 void delete_playlist_head (DeleteAction deleteaction); 106 void delete_track_head (DeleteAction deleteaction); 107 void delete_entry_head (gint entry_inst, DeleteAction deleteaction); 108 109 void delete_populate_settings (struct DeleteData *dd, 110 gchar **label, gchar **title, 111 gboolean *confirm_again, 112 gchar **confirm_again_key, 113 GString **str); 114 115 void block_widgets (void); 116 void release_widgets (void); 117 void update_blocked_widget (GtkWidget *w, gboolean sens); 118 119 /*void mount_ipod(void); 120 void unmount_ipod(void);*/ 121 void call_script (gchar *script, ...); 122 123 gchar **build_argv_from_strings (const gchar *first_arg, ...); 124 125 void delete_track_ok (struct DeleteData *dd); 126 127 void gtkpod_warning (const gchar *format, ...); 128 void gtkpod_warning_simple (const gchar *format, ...); 129 void gtkpod_warning_hig (GtkWindow *parent, 130 GtkMessageType icon, 131 const gchar *primary_text, 132 const gchar *secondary_text); 133 134 gchar *time_time_to_string (time_t t); 135 gchar *time_fromtime_to_string (time_t t); 136 gchar *time_totime_to_string (time_t t); 137 time_t time_string_to_time (const gchar *str); 138 time_t time_string_to_fromtime (const gchar *str); 139 time_t time_string_to_totime (const gchar *str); 140 time_t time_get_time (Track *track, T_item t_item); 141 gchar *time_field_to_string (Track *track, T_item t_item); 142 void time_set_time (Track *track, time_t t, T_item t_item); 143 144 gchar *get_filesize_as_string (double size); 145 146 gchar *make_sortkey (const gchar *name); 147 gint compare_string (const gchar *str1, const gchar *str2); 148 void compare_string_fuzzy_generate_keys (void); 149 gint compare_string_fuzzy (const gchar *str1, const gchar *str2); 150 const gchar *fuzzy_skip_prefix (const gchar *sortkey); 151 gint compare_string_case_insensitive (const gchar *str1, 152 const gchar *str2); 153 gint compare_string_start_case_insensitive (const gchar *haystack, 154 const gchar *needle); 155 156 gchar *filename_from_uri (const char *uri, 157 char **hostname, 158 GError **error); 159 160 void generate_category_playlists (iTunesDB *itdb, T_item cat); 161 Playlist *generate_displayed_playlist (void); 162 Playlist *generate_selected_playlist (void); 163 void randomize_current_playlist (void); 164 Playlist *generate_random_playlist (iTunesDB *itdb); 165 Playlist *generate_not_listed_playlist (iTunesDB *itdb); 166 Playlist *generate_playlist_with_name (iTunesDB *itdb, GList *tracks, 167 gchar *pl_name, gboolean del_old); 168 Playlist *generate_new_playlist (iTunesDB *itdb, GList *tracks); 169 void most_listened_pl (iTunesDB *itdb); 170 void never_listened_pl (iTunesDB *itdb); 171 void last_listened_pl(iTunesDB *itdb); 172 void most_rated_pl(iTunesDB *itdb); 173 void since_last_pl(iTunesDB *itdb); 174 void each_rating_pl (iTunesDB *itdb); 175 176 guint32 utf16_strlen (gunichar2 *utf16); 177 gunichar2 *utf16_strdup (gunichar2 *utf16); 178 179 void check_db (iTunesDB *db); 180 181 gboolean mkdirhier(const gchar *dirname, gboolean silent); 182 gboolean mkdirhierfile(const gchar *filename); 183 gint64 get_size_of_directory (const gchar *dir); 184 gchar *convert_filename (const gchar *filename); 185 186 guint32 replaygain_to_soundcheck (gdouble gain); 187 gdouble soundcheck_to_replaygain (guint32 soundcheck); 188 189 190 void option_set_radio_button (GladeXML *win_xml, 191 const gchar *prefs_string, 192 const gchar **widgets, 193 gint dflt); 194 gint option_get_radio_button (GladeXML *win_xml, 195 const gchar *prefs_string, 196 const gchar **widgets); 197 void option_set_folder (GtkFileChooser *fc, 198 const gchar *prefs_string); 199 void option_get_folder (GtkFileChooser *fc, 200 const gchar *prefs_string, 201 gchar **value); 202 void option_set_filename (GtkFileChooser *fc, 203 const gchar *prefs_string); 204 void option_get_filename (GtkFileChooser *fc, 205 const gchar *prefs_string, 206 gchar **value); 207 void option_set_string (GladeXML *win_xml, 208 const gchar *name, 209 const gchar *dflt); 210 void option_get_string (GladeXML *win_xml, 211 const gchar *name, 212 gchar **value); 213 void option_set_toggle_button (GladeXML *win_xml, 214 const gchar *name, 215 gboolean dflt); 216 gboolean option_get_toggle_button (GladeXML *win_xml, 217 const gchar *name); 218 219 gchar *get_string_from_template (Track *track, 220 const gchar *template, 221 gboolean is_filename, 222 gboolean silent); 223 gchar *get_string_from_full_template (Track *track, 224 const gchar *full_template, 225 gboolean is_filename); 226 227 gchar *which (const gchar *exe); 228 229 GladeXML *gtkpod_xml_new (const gchar *xml_file, const gchar *name); 230 GtkWidget *gtkpod_xml_get_widget (GladeXML *xml, const gchar *name); 231 232 gchar *get_itdb_prefs_key (gint index, const gchar *subkey); 233 gchar *get_playlist_prefs_key (gint index, Playlist *pl, const gchar *subkey); 234 gint get_itdb_index (iTunesDB *itdb); 235 gchar *get_itdb_prefs_string (iTunesDB *itdb, const gchar *subkey); 236 gchar *get_playlist_prefs_string (Playlist *playlist, const gchar *subkey); 237 gint get_itdb_prefs_int (iTunesDB *itdb, const gchar *subkey); 238 gint get_playlist_prefs_int (Playlist *playlist, const gchar *subkey); 239 gboolean get_itdb_prefs_string_value (iTunesDB *itdb, const gchar *subkey, 240 gchar **value); 241 gboolean get_itdb_prefs_int_value (iTunesDB *itdb, const gchar *subkey, 242 gint *value); 243 void set_itdb_prefs_string (iTunesDB *itdb, 244 const gchar *subkey, const gchar *value); 245 void set_itdb_index_prefs_string (gint index, 246 const gchar *subkey, const gchar *value); 247 void set_itdb_prefs_int (iTunesDB *itdb, const gchar *subkey, gint value); 248 void set_itdb_index_prefs_int (gint index, 249 const gchar *subkey, gint value); 250 void remove_itdb_prefs (iTunesDB *itdb); 251 void load_ipod_prefs (iTunesDB *itdb, const gchar *mountpoint); 252 gboolean save_ipod_prefs (iTunesDB *itdb, const gchar *mountpoint); 253 254 gboolean get_offline (iTunesDB *itdb); 255 #endif 256