Merge lp:~ballogy/gloobus-preview/imagemagick into lp:gloobus-preview

Proposed by Balló György
Status: Merged
Merged at revision: 305
Proposed branch: lp:~ballogy/gloobus-preview/imagemagick
Merge into: lp:gloobus-preview
Diff against target: 269 lines (+223/-0)
6 files modified
configure.ac (+1/-0)
src/Makefile.am (+1/-0)
src/gloobus-preview-plugin-manager.cpp (+1/-0)
src/plugin-imagemagick/Makefile.am (+10/-0)
src/plugin-imagemagick/plugin-imagemagick.cpp (+81/-0)
src/plugin-imagemagick/plugin-imagemagick.h (+129/-0)
To merge this branch: bzr merge lp:~ballogy/gloobus-preview/imagemagick
Reviewer Review Type Date Requested Status
Gloobus Developers Pending
Review via email: mp+245368@code.launchpad.net

Description of the change

Add ImageMagick plugin

ImageMagick supports a wide variety of image formats. Use it as fallback if the format is not supported by gdk-pixbuf loaders.

To post a comment you must log in.
304. By Balló György

Fix ordering

305. By Balló György

Add illustrator

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'configure.ac'
--- configure.ac 2014-12-25 16:27:26 +0000
+++ configure.ac 2014-12-29 13:07:34 +0000
@@ -82,6 +82,7 @@
82 src/plugin-compressed/Makefile82 src/plugin-compressed/Makefile
83 src/plugin-djvu/Makefile83 src/plugin-djvu/Makefile
84 src/plugin-icns/Makefile84 src/plugin-icns/Makefile
85 src/plugin-imagemagick/Makefile
85 src/plugin-gstreamer-audio/Makefile86 src/plugin-gstreamer-audio/Makefile
86 src/plugin-gstreamer-video/Makefile87 src/plugin-gstreamer-video/Makefile
87 src/plugin-pdf/Makefile88 src/plugin-pdf/Makefile
8889
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2014-12-25 16:27:26 +0000
+++ src/Makefile.am 2014-12-29 13:07:34 +0000
@@ -7,6 +7,7 @@
7 plugin-compressed \7 plugin-compressed \
8 plugin-djvu \8 plugin-djvu \
9 plugin-icns \9 plugin-icns \
10 plugin-imagemagick \
10 plugin-gstreamer-audio \11 plugin-gstreamer-audio \
11 plugin-gstreamer-video \12 plugin-gstreamer-video \
12 plugin-pdf \13 plugin-pdf \
1314
=== modified file 'src/gloobus-preview-plugin-manager.cpp'
--- src/gloobus-preview-plugin-manager.cpp 2014-12-25 16:21:13 +0000
+++ src/gloobus-preview-plugin-manager.cpp 2014-12-29 13:07:34 +0000
@@ -108,4 +108,5 @@
108#include "plugin-text/plugin-text.h"108#include "plugin-text/plugin-text.h"
109#include "plugin-ttf/plugin-ttf.h"109#include "plugin-ttf/plugin-ttf.h"
110#include "plugin-xps/xps-plugin.h"110#include "plugin-xps/xps-plugin.h"
111#include "plugin-imagemagick/plugin-imagemagick.h"
111}112}
112113
=== added directory 'src/plugin-imagemagick'
=== added file 'src/plugin-imagemagick/Makefile.am'
--- src/plugin-imagemagick/Makefile.am 1970-01-01 00:00:00 +0000
+++ src/plugin-imagemagick/Makefile.am 2014-12-29 13:07:34 +0000
@@ -0,0 +1,10 @@
1plugindir = $(prefix)/lib/gloobus/
2
3AM_CPPFLAGS += $(GTK_CFLAGS)
4AM_LDFLAGS = $(GTK_LIBS)
5
6plugin_LTLIBRARIES = imagemagick.la
7imagemagick_la_SOURCES = plugin-imagemagick.cpp
8imagemagick_la_LDFLAGS = -module -export-dynamic $(AM_LDFLAGS)
9
10noinst_HEADERS = plugin-imagemagick.h
011
=== added file 'src/plugin-imagemagick/plugin-imagemagick.cpp'
--- src/plugin-imagemagick/plugin-imagemagick.cpp 1970-01-01 00:00:00 +0000
+++ src/plugin-imagemagick/plugin-imagemagick.cpp 2014-12-29 13:07:34 +0000
@@ -0,0 +1,81 @@
1#include "plugin-imagemagick.h"
2
3#include <cstdlib>
4#include <sstream>
5#include <glib/gstdio.h>
6#include <gio/gio.h>
7#include <string>
8#include <cstring>
9
10#include "../utils.h"
11
12#define IMAGE_MAX_SIZE 1048576 // 1Mb
13
14static const char* _ATTRIBUTES =
15 G_FILE_ATTRIBUTE_STANDARD_SIZE
16 G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
17;
18
19static gchar * getTempPath( GFile *gfile );
20
21GdkPixbuf * iImagemagick::get_pixbuf ()
22{
23 GdkPixbuf * temp;
24 gchar *path = getPngUri(m_gfile);
25 if (NULL != path) {
26 g_debug("PLUGIN:Filename to load: %s", path);
27 temp = gdk_pixbuf_new_from_file (path, NULL);
28 g_unlink(path);
29 return temp;
30 }
31}
32
33gchar * iImagemagick::getPngUri( GFile *file ) {
34 g_debug("Trying to convert to PNG");
35
36 gchar *tmp = getTempPath(file);
37 if(g_file_test(tmp, G_FILE_TEST_EXISTS)) {
38 return tmp;
39 }
40
41 GFileInfo *info = g_file_query_info(file,
42 _ATTRIBUTES,
43 G_FILE_QUERY_INFO_NONE,
44 NULL,
45 NULL);
46
47
48 if(g_file_info_get_size(info) > IMAGE_MAX_SIZE) {
49 g_free(tmp);
50 return NULL;
51 }
52
53 if (Utils::isProgramAvailable("convert")) {
54 const gchar *type = g_file_info_get_content_type (info);
55 gchar *path = g_file_get_path(file);
56 gchar *cmd = g_strdup_printf("convert \"%s\"[0] \"%s\"", path, tmp);
57
58 if( system(cmd) != 0) {
59 g_warning("Unable to convert file");
60 tmp = NULL;
61 }
62
63 g_free(path);
64 g_free(cmd);
65 }
66
67 return tmp;
68}
69
70static gchar * getTempPath( GFile *gfile )
71{
72 gchar * path = g_file_get_path(gfile);
73 char * hash = g_compute_checksum_for_data(G_CHECKSUM_SHA256,
74 (const guchar*)path,
75 strlen(path));
76
77 gchar *result = g_strdup_printf("/tmp/gloobus.%s.png", hash);
78 g_free(hash);
79 g_debug("Temp path: %s", result);
80 return result;
81}
082
=== added file 'src/plugin-imagemagick/plugin-imagemagick.h'
--- src/plugin-imagemagick/plugin-imagemagick.h 1970-01-01 00:00:00 +0000
+++ src/plugin-imagemagick/plugin-imagemagick.h 2014-12-29 13:07:34 +0000
@@ -0,0 +1,129 @@
1#ifndef _IIMAGEMAGICK_
2#define _IIMAGEMAGICK_
3
4#ifndef PLUGIN_LOADER
5
6#include <gdk-pixbuf/gdk-pixbuf.h>
7
8//#include "../gloobus-preview-plugin-manager.h"
9#include "../gloobus-preview-interface-image.h"
10
11class iImagemagick : public iImage
12{
13 public:
14 virtual GdkPixbuf* get_pixbuf ();
15 private:
16 gchar * getPngUri (GFile *file);
17};
18
19extern "C" interface * create() {
20 return new iImagemagick;
21}
22
23extern "C" void destroy(interface * p) {
24 delete (iImagemagick*)p;
25}
26
27extern "C" int getVersion() {
28 return MANAGER_VERSION;
29}
30
31#endif
32
33#ifdef PLUGIN_LOADER
34
35PluginManager::register_plugin("imagemagick");
36
37if(interface::is_program_available("convert")) {
38 PluginManager::register_filetype("application/dicom", 1);
39 PluginManager::register_filetype("application/illustrator", 1);
40 PluginManager::register_filetype("application/pdf", 1);
41 PluginManager::register_filetype("application/postscript", 1);
42 PluginManager::register_filetype("application/x-bzpdf", 1);
43 PluginManager::register_filetype("image/bmp", 1);
44 PluginManager::register_filetype("image/cgm", 1);
45 PluginManager::register_filetype("image/dpx", 1);
46 PluginManager::register_filetype("image/fax-g3", 1);
47 PluginManager::register_filetype("image/fits", 1);
48 PluginManager::register_filetype("image/gif", 1);
49 PluginManager::register_filetype("image/ief", 1);
50 PluginManager::register_filetype("image/jp2", 1);
51 PluginManager::register_filetype("image/jpeg", 1);
52 PluginManager::register_filetype("image/png", 1);
53 PluginManager::register_filetype("image/rle", 1);
54 PluginManager::register_filetype("image/svg+xml-compressed", 1);
55 PluginManager::register_filetype("image/svg+xml", 1);
56 PluginManager::register_filetype("image/tiff", 1);
57 PluginManager::register_filetype("image/vnd.djvu", 1);
58 PluginManager::register_filetype("image/vnd.dwg", 1);
59 PluginManager::register_filetype("image/vnd.dxf", 1);
60 PluginManager::register_filetype("image/vnd.adobe.photoshop", 1);
61 PluginManager::register_filetype("image/vnd.microsoft.icon", 1);
62 PluginManager::register_filetype("image/vnd.rn-realpix", 1);
63 PluginManager::register_filetype("image/vnd.wap.wbmp", 1);
64 PluginManager::register_filetype("image/webp", 1);
65 PluginManager::register_filetype("image/x-3ds", 1);
66 PluginManager::register_filetype("image/x-adobe-dng", 1);
67 PluginManager::register_filetype("image/x-applix-graphics", 1);
68 PluginManager::register_filetype("image/x-bzeps", 1);
69 PluginManager::register_filetype("image/x-canon-cr2", 1);
70 PluginManager::register_filetype("image/x-canon-crw", 1);
71 PluginManager::register_filetype("image/x-cmu-raster", 1);
72 PluginManager::register_filetype("image/x-compressed-xcf", 1);
73 PluginManager::register_filetype("image/x-dds", 1);
74 PluginManager::register_filetype("image/x-dib", 1);
75 PluginManager::register_filetype("image/x-emf", 1);
76 PluginManager::register_filetype("image/x-eps", 1);
77 PluginManager::register_filetype("image/x-fits", 1);
78 PluginManager::register_filetype("image/x-fpx", 1);
79 PluginManager::register_filetype("image/x-fuji-raf", 1);
80 PluginManager::register_filetype("image/x-gzeps", 1);
81 PluginManager::register_filetype("image/x-icns", 1);
82 PluginManager::register_filetype("image/x-ico", 1);
83 PluginManager::register_filetype("image/x-iff", 1);
84 PluginManager::register_filetype("image/x-ilbm", 1);
85 PluginManager::register_filetype("image/x-jng", 1);
86 PluginManager::register_filetype("image/x-kodak-dcr", 1);
87 PluginManager::register_filetype("image/x-kodak-k25", 1);
88 PluginManager::register_filetype("image/x-kodak-kdc", 1);
89 PluginManager::register_filetype("image/x-lwo", 1);
90 PluginManager::register_filetype("image/x-lws", 1);
91 PluginManager::register_filetype("image/x-macpaint", 1);
92 PluginManager::register_filetype("image/x-minolta-mrw", 1);
93 PluginManager::register_filetype("video/x-mng", 1);
94 PluginManager::register_filetype("image/x-msod", 1);
95 PluginManager::register_filetype("image/x-niff", 1);
96 PluginManager::register_filetype("image/x-nikon-nef", 1);
97 PluginManager::register_filetype("image/x-olympus-orf", 1);
98 PluginManager::register_filetype("image/x-panasonic-raw", 1);
99 PluginManager::register_filetype("image/x-pcx", 1);
100 PluginManager::register_filetype("image/x-pentax-pef", 1);
101 PluginManager::register_filetype("image/x-photo-cd", 1);
102 PluginManager::register_filetype("image/x-pict", 1);
103 PluginManager::register_filetype("image/x-portable-anymap", 1);
104 PluginManager::register_filetype("image/x-portable-bitmap", 1);
105 PluginManager::register_filetype("image/x-portable-graymap", 1);
106 PluginManager::register_filetype("image/x-portable-pixmap", 1);
107 PluginManager::register_filetype("image/x-psd", 1);
108 PluginManager::register_filetype("image/x-quicktime", 1);
109 PluginManager::register_filetype("image/x-sgi", 1);
110 PluginManager::register_filetype("image/x-sigma-x3f", 1);
111 PluginManager::register_filetype("image/x-sony-arw", 1);
112 PluginManager::register_filetype("image/x-sony-sr2", 1);
113 PluginManager::register_filetype("image/x-sony-srf", 1);
114 PluginManager::register_filetype("image/x-sun-raster", 1);
115 PluginManager::register_filetype("image/x-tga", 1);
116 PluginManager::register_filetype("image/x-win-bitmap", 1);
117 PluginManager::register_filetype("image/x-wmf", 1);
118 PluginManager::register_filetype("image/x-xbitmap", 1);
119 PluginManager::register_filetype("image/x-xcf", 1);
120 PluginManager::register_filetype("image/x-xcursor", 1);
121 PluginManager::register_filetype("image/x-xfig", 1);
122 PluginManager::register_filetype("image/x-xpixmap", 1);
123 PluginManager::register_filetype("image/x-xwindowdump", 1);
124}
125
126#endif
127
128#endif
129

Subscribers

People subscribed via source and target branches