[f-spot] Support loading files with no extensions
- From: Ruben Vermeersch <rubenv src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [f-spot] Support loading files with no extensions
- Date: Tue, 11 Aug 2009 10:55:40 +0000 (UTC)
commit a41352f10074d4acc7b1e7eafe5a1484ee70bed4
Author: Gabriel Burt <gabriel burt gmail com>
Date: Mon Aug 10 16:55:04 2009 -0700
Support loading files with no extensions
src/Imaging/ImageFile.cs | 35 ++++++++++++++++++++++++++++++-----
src/Loaders/ImageLoader.cs | 33 +++++++++------------------------
2 files changed, 39 insertions(+), 29 deletions(-)
---
diff --git a/src/Imaging/ImageFile.cs b/src/Imaging/ImageFile.cs
index e1bb72e..2d729f1 100644
--- a/src/Imaging/ImageFile.cs
+++ b/src/Imaging/ImageFile.cs
@@ -15,6 +15,7 @@ namespace FSpot {
protected Uri uri;
static System.Collections.Hashtable name_table;
+ internal static System.Collections.Hashtable NameTable { get { return name_table; } }
public ImageFile (string path)
{
@@ -65,6 +66,22 @@ namespace FSpot {
name_table [".raf"] = typeof (FSpot.Raf.RafFile);
name_table [".x3f"] = typeof (FSpot.X3f.X3fFile);
+ // add mimetypes for fallback
+ name_table ["image/bmp"] = name_table ["image/x-bmp"] = name_table [".bmp"];
+ name_table ["image/gif"] = name_table [".gif"];
+ name_table ["image/pjpeg"] = name_table ["image/jpeg"] = name_table ["image/jpg"] = name_table [".jpg"];
+ name_table ["image/x-png"] = name_table ["image/png"] = name_table [".png"];
+ name_table ["image/svg+xml"] = name_table [".svg"];
+ name_table ["image/tiff"] = name_table [".tiff"];
+ name_table ["image/x-dcraw"] = name_table [".raw"];
+ name_table ["image/x-ciff"] = name_table [".crw"];
+ name_table ["image/x-mrw"] = name_table [".mrw"];
+ name_table ["image/x-x3f"] = name_table [".x3f"];
+ name_table ["image/x-orf"] = name_table [".orf"];
+ name_table ["image/x-nef"] = name_table [".nef"];
+ name_table ["image/x-cr2"] = name_table [".cr2"];
+ name_table ["image/x-raf"] = name_table [".raf"];
+
//as xcf pixbufloader is not part of gdk-pixbuf, check if it's there,
//and enable it if needed.
foreach (Gdk.PixbufFormat format in Gdk.Pixbuf.Formats)
@@ -167,11 +184,21 @@ namespace FSpot {
public static bool HasLoader (Uri uri)
{
+ return GetLoaderType (uri) != null;
+ }
+
+ private static System.Type GetLoaderType (Uri uri)
+ {
string path = uri.AbsolutePath;
string extension = System.IO.Path.GetExtension (path).ToLower ();
System.Type t = (System.Type) name_table [extension];
-
- return (t != null);
+
+ if (t == null) {
+ GLib.FileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", GLib.FileQueryInfoFlags.None, null);
+ t = (System.Type) name_table [info.ContentType];
+ }
+
+ return t;
}
[Obsolete ("use Create (System.Uri) instead")]
@@ -182,9 +209,7 @@ namespace FSpot {
public static ImageFile Create (Uri uri)
{
- string path = uri.AbsolutePath;
- string extension = System.IO.Path.GetExtension (path).ToLower ();
- System.Type t = (System.Type) name_table [extension];
+ System.Type t = GetLoaderType (uri);
ImageFile img;
if (t != null)
diff --git a/src/Loaders/ImageLoader.cs b/src/Loaders/ImageLoader.cs
index 762e66c..94b20fb 100644
--- a/src/Loaders/ImageLoader.cs
+++ b/src/Loaders/ImageLoader.cs
@@ -22,28 +22,10 @@ namespace FSpot.Loaders {
static ImageLoader ()
{
name_table = new Dictionary<string, System.Type> ();
- name_table [".svg"] = typeof (GdkImageLoader);
- name_table [".gif"] = typeof (GdkImageLoader);
- name_table [".bmp"] = typeof (GdkImageLoader);
- name_table [".jpeg"] = typeof (GdkImageLoader);
- name_table [".jpg"] = typeof (GdkImageLoader);
- name_table [".png"] = typeof (GdkImageLoader);
- name_table [".cr2"] = typeof (GdkImageLoader);
- name_table [".nef"] = typeof (GdkImageLoader);
- name_table [".pef"] = typeof (GdkImageLoader);
- name_table [".raw"] = typeof (GdkImageLoader);
- name_table [".kdc"] = typeof (GdkImageLoader);
- name_table [".arw"] = typeof (GdkImageLoader);
- name_table [".tiff"] = typeof (GdkImageLoader);
- name_table [".tif"] = typeof (GdkImageLoader);
- name_table [".orf"] = typeof (GdkImageLoader);
- name_table [".srf"] = typeof (GdkImageLoader);
- name_table [".dng"] = typeof (GdkImageLoader);
- name_table [".crw"] = typeof (GdkImageLoader);
- name_table [".ppm"] = typeof (GdkImageLoader);
- name_table [".mrw"] = typeof (GdkImageLoader);
- name_table [".raf"] = typeof (GdkImageLoader);
- name_table [".x3f"] = typeof (GdkImageLoader);
+ System.Type gdk_loader = typeof (GdkImageLoader);
+ foreach (string key in ImageFile.NameTable.Keys) {
+ name_table [key] = gdk_loader;
+ }
//as xcf pixbufloader is not part of gdk-pixbuf, check if it's there,
//and enable it if needed.
@@ -62,8 +44,11 @@ namespace FSpot.Loaders {
System.Type t;
IImageLoader loader;
- if (!name_table.TryGetValue (extension, out t))
- throw new Exception ("Loader requested for unknown file type: "+extension);
+ if (!name_table.TryGetValue (extension, out t)) {
+ GLib.FileInfo info = GLib.FileFactory.NewForUri (uri).QueryInfo ("standard::type,standard::content-type", GLib.FileQueryInfoFlags.None, null);
+ if (!name_table.TryGetValue (info.ContentType, out t))
+ throw new Exception ("Loader requested for unknown file type: "+extension);
+ }
loader = (IImageLoader) System.Activator.CreateInstance (t);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]