void pragha_scanner_scan_library(PraghaScanner *scanner) { PraghaPreferences *preferences; gchar *last_scan_time = NULL; if(scanner->update_timeout) return; preferences = pragha_preferences_get(); /* Get last time that update the library and folders to analyze */ last_scan_time = pragha_preferences_get_string(preferences, GROUP_LIBRARY, KEY_LIBRARY_LAST_SCANNED); if (last_scan_time) { if (!g_time_val_from_iso8601(last_scan_time, &scanner->last_update)) g_warning("Unable to convert last rescan time"); g_free(last_scan_time); } scanner->folder_list = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_DIR); scanner->folder_scanned = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_SCANNED); g_object_unref(G_OBJECT(preferences)); /* Update the gui */ scanner->update_timeout = g_timeout_add_seconds(1, (GSourceFunc)pragha_scanner_update_progress, scanner); pragha_preferences_set_show_status_bar (preferences, TRUE); gtk_widget_show_all(scanner->hbox); /* Launch threads */ scanner->no_files_thread = g_thread_new("Count no files", pragha_scanner_count_no_files_worker, scanner); scanner->worker_thread = pragha_async_launch_full(pragha_scanner_scan_worker, pragha_scanner_worker_finished, scanner); }
static void pragha_preferences_load_from_file(PraghaPreferences *preferences) { gboolean approximate_search, instant_search; gboolean shuffle, repeat, use_hint, restore_playlist, software_mixer; gboolean lateral_panel, show_album_art, show_status_bar; gboolean add_recursively, timer_remaining_mode; gchar *audio_sink, *audio_device, *audio_cd_device; gint library_style, sidebar_size; gboolean fuse_folders, sort_by_year; const gchar *user_config_dir; gchar *pragha_config_dir = NULL; GError *error = NULL; PraghaPreferencesPrivate *priv = preferences->priv; /* First check preferences folder or create it */ user_config_dir = g_get_user_config_dir(); pragha_config_dir = g_build_path(G_DIR_SEPARATOR_S, user_config_dir, "/pragha", NULL); if (g_file_test(pragha_config_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR) == FALSE) { if (g_mkdir_with_parents (pragha_config_dir, S_IRWXU) == -1) { g_free(pragha_config_dir); g_critical("Unable to create preferences directory, err: %s", strerror(errno)); return; } CDEBUG(DBG_INFO, "Created .config/pragha folder"); } g_free(pragha_config_dir); /* Does /pragha/config exist ? */ priv->rc_filepath = g_build_path(G_DIR_SEPARATOR_S, user_config_dir, "/pragha/config", NULL); if (g_file_test(priv->rc_filepath, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR) == FALSE) { if (g_creat(priv->rc_filepath, S_IRWXU) == -1) { g_free(priv->rc_filepath); priv->rc_filepath = NULL; g_critical("Unable to create config file, err: %s", strerror(errno)); return; } CDEBUG(DBG_INFO, "Created .config/pragha/config file"); } /* Open the preferences storage file */ priv->rc_keyfile = g_key_file_new(); if (!g_key_file_load_from_file(priv->rc_keyfile, priv->rc_filepath, G_KEY_FILE_NONE, &error)) { g_critical("Unable to load config file (Possible first start), err: %s", error->message); g_error_free(error); return; } /* Open last preferences */ approximate_search = g_key_file_get_boolean(priv->rc_keyfile, GROUP_GENERAL, KEY_APPROXIMATE_SEARCH, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_approximate_search(preferences, approximate_search); } instant_search = g_key_file_get_boolean(priv->rc_keyfile, GROUP_GENERAL, KEY_INSTANT_SEARCH, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_instant_search(preferences, instant_search); } shuffle = g_key_file_get_boolean(priv->rc_keyfile, GROUP_PLAYLIST, KEY_SHUFFLE, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_shuffle(preferences, shuffle); } repeat = g_key_file_get_boolean(priv->rc_keyfile, GROUP_PLAYLIST, KEY_REPEAT, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_repeat(preferences, repeat); } use_hint = g_key_file_get_boolean(priv->rc_keyfile, GROUP_GENERAL, KEY_USE_HINT, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_use_hint(preferences, use_hint); } library_style = g_key_file_get_integer(priv->rc_keyfile, GROUP_LIBRARY, KEY_LIBRARY_VIEW_ORDER, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_library_style(preferences, library_style); } sort_by_year = g_key_file_get_boolean(priv->rc_keyfile, GROUP_LIBRARY, KEY_SORT_BY_YEAR, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_sort_by_year(preferences, sort_by_year); } fuse_folders = g_key_file_get_boolean(priv->rc_keyfile, GROUP_LIBRARY, KEY_FUSE_FOLDERS, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_fuse_folders(preferences, fuse_folders); } restore_playlist = g_key_file_get_boolean(priv->rc_keyfile, GROUP_PLAYLIST, KEY_SAVE_PLAYLIST, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_restore_playlist(preferences, restore_playlist); } audio_sink = g_key_file_get_string(priv->rc_keyfile, GROUP_AUDIO, KEY_AUDIO_SINK, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_audio_sink(preferences, audio_sink); } audio_device = g_key_file_get_string(priv->rc_keyfile, GROUP_AUDIO, KEY_AUDIO_DEVICE, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_audio_device(preferences, audio_device); } software_mixer = g_key_file_get_boolean(priv->rc_keyfile, GROUP_AUDIO, KEY_SOFTWARE_MIXER, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_software_mixer(preferences, software_mixer); } audio_cd_device = g_key_file_get_string(priv->rc_keyfile, GROUP_AUDIO, KEY_AUDIO_CD_DEVICE, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_audio_cd_device(preferences, audio_cd_device); } lateral_panel = g_key_file_get_boolean(priv->rc_keyfile, GROUP_WINDOW, KEY_SIDEBAR, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_lateral_panel(preferences, lateral_panel); } sidebar_size = g_key_file_get_integer(priv->rc_keyfile, GROUP_WINDOW, KEY_SIDEBAR_SIZE, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_sidebar_size(preferences, sidebar_size); } show_album_art = g_key_file_get_boolean(priv->rc_keyfile, GROUP_WINDOW, KEY_SHOW_ALBUM_ART, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_show_album_art(preferences, show_album_art); } show_status_bar = g_key_file_get_boolean(priv->rc_keyfile, GROUP_WINDOW, KEY_STATUS_BAR, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_show_status_bar(preferences, show_status_bar); } add_recursively = g_key_file_get_boolean(priv->rc_keyfile, GROUP_GENERAL, KEY_ADD_RECURSIVELY_FILES, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_add_recursively(preferences, add_recursively); } timer_remaining_mode = g_key_file_get_boolean(priv->rc_keyfile, GROUP_GENERAL, KEY_TIMER_REMAINING_MODE, &error); if (error) { g_error_free(error); error = NULL; } else { pragha_preferences_set_timer_remaining_mode(preferences, timer_remaining_mode); } g_free(audio_sink); g_free(audio_device); g_free(audio_cd_device); }
static void pragha_preferences_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { PraghaPreferences *preferences = PRAGHA_PREFERENCES(object); switch (prop_id) { case PROP_INSTANT_SEARCH: pragha_preferences_set_instant_search(preferences, g_value_get_boolean(value)); break; case PROP_APPROXIMATE_SEARCH: pragha_preferences_set_approximate_search(preferences, g_value_get_boolean(value)); break; case PROP_LIBRARY_STYLE: pragha_preferences_set_library_style(preferences, g_value_get_int(value)); break; case PROP_LIBRARY_SORT_BY_YEAR: pragha_preferences_set_sort_by_year(preferences, g_value_get_boolean(value)); break; case PROP_LIBRARY_FUSE_FOLDERS: pragha_preferences_set_fuse_folders(preferences, g_value_get_boolean(value)); break; case PROP_SHUFFLE: pragha_preferences_set_shuffle(preferences, g_value_get_boolean(value)); break; case PROP_REPEAT: pragha_preferences_set_repeat(preferences, g_value_get_boolean(value)); break; case PROP_USE_HINT: pragha_preferences_set_use_hint(preferences, g_value_get_boolean(value)); break; case PROP_RESTORE_PLAYLIST: pragha_preferences_set_restore_playlist(preferences, g_value_get_boolean(value)); break; case PROP_AUDIO_SINK: pragha_preferences_set_audio_sink(preferences, g_value_get_string(value)); break; case PROP_AUDIO_DEVICE: pragha_preferences_set_audio_device(preferences, g_value_get_string(value)); break; case PROP_SOFTWARE_MIXER: pragha_preferences_set_software_mixer(preferences, g_value_get_boolean(value)); break; case PROP_AUDIO_CD_DEVICE: pragha_preferences_set_audio_cd_device(preferences, g_value_get_string(value)); break; case PROP_LATERAL_PANEL: pragha_preferences_set_lateral_panel(preferences, g_value_get_boolean(value)); break; case PROP_SIDEBAR_SIZE: pragha_preferences_set_sidebar_size(preferences, g_value_get_int(value)); break; case PROP_SHOW_ALBUM_ART: pragha_preferences_set_show_album_art(preferences, g_value_get_boolean(value)); break; case PROP_SHOW_STATUS_BAR: pragha_preferences_set_show_status_bar(preferences, g_value_get_boolean(value)); break; case PROP_ADD_RECURSIVELY: pragha_preferences_set_add_recursively(preferences, g_value_get_boolean(value)); break; case PROP_TIMER_REMAINING_MODE: pragha_preferences_set_timer_remaining_mode(preferences, g_value_get_boolean(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); } }
void pragha_scanner_update_library(PraghaScanner *scanner) { PraghaPreferences *preferences; PraghaDatabase *database; PraghaPreparedStatement *statement; PraghaMusicobject *mobj = NULL; gchar *mask = NULL, *last_scan_time = NULL; const gchar *sql = NULL; guint location_id; GSList *list; if(scanner->update_timeout) return; preferences = pragha_preferences_get(); /* Get last time that update the library and folders to analyze */ last_scan_time = pragha_preferences_get_string(preferences, GROUP_LIBRARY, KEY_LIBRARY_LAST_SCANNED); if (last_scan_time) { if (!g_time_val_from_iso8601(last_scan_time, &scanner->last_update)) g_warning("Unable to convert last rescan time"); g_free(last_scan_time); } scanner->folder_list = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_DIR); scanner->folder_scanned = pragha_preferences_get_filename_list(preferences, GROUP_LIBRARY, KEY_LIBRARY_SCANNED); g_object_unref(G_OBJECT(preferences)); /* Update the gui */ scanner->update_timeout = g_timeout_add_seconds(1, (GSourceFunc)pragha_scanner_update_progress, scanner); pragha_preferences_set_show_status_bar (preferences, TRUE); gtk_widget_show_all(scanner->hbox); /* Append the files from database that no changed. */ database = pragha_database_get(); for(list = scanner->folder_scanned ; list != NULL; list = list->next) { if(is_present_str_list(list->data, scanner->folder_list)) { sql = "SELECT id FROM LOCATION WHERE name LIKE ?"; statement = pragha_database_create_statement (database, sql); mask = g_strconcat (list->data, "%", NULL); pragha_prepared_statement_bind_string (statement, 1, mask); while (pragha_prepared_statement_step (statement)) { location_id = pragha_prepared_statement_get_int (statement, 0); mobj = new_musicobject_from_db(database, location_id); if (G_LIKELY(mobj)) { g_hash_table_insert(scanner->tracks_table, g_strdup(pragha_musicobject_get_file(mobj)), mobj); } pragha_process_gtk_events (); } pragha_prepared_statement_free (statement); g_free(mask); } } g_object_unref(database); /* Launch threads */ scanner->no_files_thread = g_thread_new("Count no files", pragha_scanner_count_no_files_worker, scanner); scanner->worker_thread = pragha_async_launch_full(pragha_scanner_update_worker, pragha_scanner_worker_finished, scanner); }