[cheese/gnome-3-0] Revert "cheese-effects: implement loading cheese effects in libcheese"
- From: Raluca Elena Podiuc <ralucap src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cheese/gnome-3-0] Revert "cheese-effects: implement loading cheese effects in libcheese"
- Date: Sun, 21 Aug 2011 09:16:05 +0000 (UTC)
commit 4c8ce4708a4ff57586d057d4fd35173100372e54
Author: Raluca Elena Podiuc <ralucaelena1985 gmail com>
Date: Sun Aug 21 12:14:46 2011 +0300
Revert "cheese-effects: implement loading cheese effects in libcheese"
Branch gnome-3-0 is freezed for feature and api change among others.
This patch shouldn't have been pushed here, only in master. Sorry.
libcheese/cheese-effect.c | 132 ---------------------------------------
libcheese/cheese-effect.h | 3 -
src/cheese-effects-manager.vala | 76 +++++++++++++++++++++-
src/vapi/cheese-common.vapi | 3 -
4 files changed, 73 insertions(+), 141 deletions(-)
---
diff --git a/libcheese/cheese-effect.c b/libcheese/cheese-effect.c
index 24e9fbb..7045cf1 100644
--- a/libcheese/cheese-effect.c
+++ b/libcheese/cheese-effect.c
@@ -156,135 +156,3 @@ cheese_effect_new (void)
{
return g_object_new (CHEESE_TYPE_EFFECT, NULL);
}
-
-/**
- * cheese_effect_load_from_file: load effect from file
- * @fname: (type filename): name of the file containing effect specification
- *
- * Returns: (transfer full): a #CheeseEffect
- */
-CheeseEffect*
-cheese_effect_load_from_file (const gchar *fname)
-{
- const gchar *GROUP_NAME = "Effect";
- gchar *name, *desc;
- GError *err = NULL;
- CheeseEffect *eff = NULL;
- GKeyFile *kf = g_key_file_new ();
-
- g_key_file_load_from_file (kf, fname, G_KEY_FILE_NONE, &err);
- if (err != NULL)
- goto err_kf_load;
-
- name = g_key_file_get_locale_string (kf, GROUP_NAME, "Name", NULL, &err);
- if (err != NULL)
- goto err_name;
-
- desc = g_key_file_get_string (kf, GROUP_NAME, "PipelineDescription", &err);
- if (err != NULL)
- goto err_desc;
-
- g_key_file_free (kf);
-
- eff = cheese_effect_new ();
- g_object_set (eff, "name", name, NULL);
- g_object_set (eff, "pipeline-desc", desc, NULL);
- g_free (name);
- g_free (desc);
-
- return eff;
-
-err_desc:
- g_free (name);
-err_name:
-err_kf_load:
- g_key_file_free (kf);
- g_warning ("CheeseEffect: couldn't load file %s: %s", fname, err->message);
- g_clear_error (&err);
- return NULL;
-}
-
-/* Returns list of effects loaded from files from @directory.
- Only parses files ending with the '.effects' extension */
-static GList*
-cheese_effect_load_effects_from_directory (const gchar* directory)
-{
- gboolean retval;
- GError *err = NULL;
- GDir *dir = NULL;
- GList *list = NULL;
-
- retval = g_file_test (directory, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
- if (!retval)
- return NULL;
-
- dir = g_dir_open (directory, (guint) 0, &err);
- if (err != NULL)
- {
- g_warning ("CheeseEffect: g_dir_open: %s\n", err->message);
- g_clear_error (&err);
- return NULL;
- }
-
- while (TRUE) {
- CheeseEffect *effect;
- gchar *abs_path;
- const gchar *fname = g_dir_read_name (dir);
-
- /* no more files */
- if (fname == NULL)
- break;
-
- if (!g_str_has_suffix (fname, ".effect"))
- continue;
-
- abs_path = g_build_filename (directory, fname, NULL);
- effect = cheese_effect_load_from_file (abs_path);
- if (effect != NULL)
- list = g_list_append (list, effect);
- g_free (abs_path);
- }
- g_dir_close (dir);
-
- return list;
-}
-
-static GList*
-cheese_effect_load_effects_from_subdirectory (const gchar* directory,
- const gchar* subdirectory)
-{
- GList *list;
- gchar *path = g_build_filename (directory, subdirectory, NULL);
- list = cheese_effect_load_effects_from_directory (path);
- g_free (path);
- return list;
-}
-
-/**
- * cheese_effect_load_effects: load effects from known standard directories.
- *
- * Returns: (element-type Cheese.Effect) (transfer full): List of #CheeseEffect
- */
-GList*
-cheese_effect_load_effects ()
-{
- const gchar *const*data_dirs, *dir;
- GList *ret = NULL, *l;
-
- dir = g_get_user_data_dir (); /* value returned owned by GLib */
- l = cheese_effect_load_effects_from_subdirectory (dir, "gnome-video-effects");
- ret = g_list_concat (ret, l);
-
- data_dirs = g_get_system_data_dirs (); /* value returned owned by GLib */
- if (!data_dirs)
- return ret;
-
- for (; *data_dirs; data_dirs++)
- {
- dir = *data_dirs;
- l = cheese_effect_load_effects_from_subdirectory (dir, "gnome-video-effects");
- ret = g_list_concat (ret, l);
- }
-
- return ret;
-}
diff --git a/libcheese/cheese-effect.h b/libcheese/cheese-effect.h
index 225d2fc..0bd72c7 100644
--- a/libcheese/cheese-effect.h
+++ b/libcheese/cheese-effect.h
@@ -58,9 +58,6 @@ gboolean cheese_effect_is_preview_connected (CheeseEffect *self);
void cheese_effect_enable_preview (CheeseEffect *self);
void cheese_effect_disable_preview (CheeseEffect *self);
-CheeseEffect *cheese_effect_load_from_file (const gchar *fname);
-GList *cheese_effect_load_effects ();
-
G_END_DECLS
#endif /* _CHEESE_EFFECT_H_ */
diff --git a/src/cheese-effects-manager.vala b/src/cheese-effects-manager.vala
index 42fc51c..8bf0f53 100644
--- a/src/cheese-effects-manager.vala
+++ b/src/cheese-effects-manager.vala
@@ -26,8 +26,71 @@ const string GROUP_NAME = "Effect";
internal class Cheese.EffectsManager : GLib.Object
{
+ public static Cheese.Effect? parse_effect_file (string filename)
+ {
+ KeyFile kf = new KeyFile ();
+ Effect eff = new Effect ();
+ var locale = Intl.setlocale (LocaleCategory.ALL, "");
+
+ try
+ {
+ kf.load_from_file (filename, KeyFileFlags.NONE);
+ eff.name = kf.get_locale_string (GROUP_NAME, "Name", locale);
+ eff.pipeline_desc = kf.get_string (GROUP_NAME, "PipelineDescription");
+ }
+ catch (KeyFileError err)
+ {
+ warning ("Error: %s\n", err.message);
+ return null;
+ }
+ catch (FileError err)
+ {
+ warning ("Error: %s\n", err.message);
+ return null;
+ }
+
+ return eff;
+ }
+
public ArrayList<Effect> effects;
+ private ArrayList<Effect> ? load_effects_from_directory (string directory)
+ {
+ ArrayList<Effect> list = new ArrayList<Effect>();
+
+ if (FileUtils.test (directory, FileTest.EXISTS | FileTest.IS_DIR))
+ {
+ Dir dir;
+ string cur_file;
+ try
+ {
+ dir = Dir.open (directory);
+ }
+ catch (FileError err)
+ {
+ warning ("Error: %s\n", err.message);
+ return null;
+ }
+
+
+ cur_file = dir.read_name ();
+ while (cur_file != null)
+ {
+ if (cur_file.has_suffix (".effect"))
+ {
+ Effect effect = EffectsManager.parse_effect_file (GLib.Path.build_filename (directory, cur_file));
+ if (!effects.contains (effect))
+ {
+ message ("Found %s (%s)", effect.name, effect.pipeline_desc);
+ list.add (effect);
+ }
+ }
+ cur_file = dir.read_name ();
+ }
+ }
+ return list;
+ }
+
public EffectsManager ()
{
effects = new ArrayList<Effect>((EqualFunc) cmp_value);
@@ -35,9 +98,16 @@ internal class Cheese.EffectsManager : GLib.Object
public void load_effects ()
{
- GLib.List<Cheese.Effect> effect_list = Cheese.Effect.load_effects ();
- for (int i = 0; i < effect_list.length (); i++)
- effects.add (effect_list<Cheese.Effect>.nth (i).data);
+ string system_effects;
+
+ foreach (string dir in Environment.get_system_data_dirs ())
+ {
+ system_effects = GLib.Path.build_filename (dir, "gnome-video-effects");
+ effects.add_all (load_effects_from_directory (system_effects));
+ }
+
+ string user_effects = GLib.Path.build_filename (Environment.get_user_data_dir (), "gnome-video-effects");
+ effects.add_all (load_effects_from_directory (user_effects));
effects.sort ((CompareFunc) sort_value);
diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi
index be6c51b..d5d8bf2 100644
--- a/src/vapi/cheese-common.vapi
+++ b/src/vapi/cheese-common.vapi
@@ -18,9 +18,6 @@ namespace Cheese
public void enable_preview();
public void disable_preview();
public bool is_preview_connected();
-
- public static Cheese.Effect load_from_file (string fname);
- public static GLib.List<Cheese.Effect> load_effects ();
}
[CCode (cheader_filename = "cheese-camera.h")]
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]