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
1=== modified file 'configure.ac'
2--- configure.ac 2014-12-25 16:27:26 +0000
3+++ configure.ac 2014-12-29 13:07:34 +0000
4@@ -82,6 +82,7 @@
5 src/plugin-compressed/Makefile
6 src/plugin-djvu/Makefile
7 src/plugin-icns/Makefile
8+ src/plugin-imagemagick/Makefile
9 src/plugin-gstreamer-audio/Makefile
10 src/plugin-gstreamer-video/Makefile
11 src/plugin-pdf/Makefile
12
13=== modified file 'src/Makefile.am'
14--- src/Makefile.am 2014-12-25 16:27:26 +0000
15+++ src/Makefile.am 2014-12-29 13:07:34 +0000
16@@ -7,6 +7,7 @@
17 plugin-compressed \
18 plugin-djvu \
19 plugin-icns \
20+ plugin-imagemagick \
21 plugin-gstreamer-audio \
22 plugin-gstreamer-video \
23 plugin-pdf \
24
25=== modified file 'src/gloobus-preview-plugin-manager.cpp'
26--- src/gloobus-preview-plugin-manager.cpp 2014-12-25 16:21:13 +0000
27+++ src/gloobus-preview-plugin-manager.cpp 2014-12-29 13:07:34 +0000
28@@ -108,4 +108,5 @@
29 #include "plugin-text/plugin-text.h"
30 #include "plugin-ttf/plugin-ttf.h"
31 #include "plugin-xps/xps-plugin.h"
32+#include "plugin-imagemagick/plugin-imagemagick.h"
33 }
34
35=== added directory 'src/plugin-imagemagick'
36=== added file 'src/plugin-imagemagick/Makefile.am'
37--- src/plugin-imagemagick/Makefile.am 1970-01-01 00:00:00 +0000
38+++ src/plugin-imagemagick/Makefile.am 2014-12-29 13:07:34 +0000
39@@ -0,0 +1,10 @@
40+plugindir = $(prefix)/lib/gloobus/
41+
42+AM_CPPFLAGS += $(GTK_CFLAGS)
43+AM_LDFLAGS = $(GTK_LIBS)
44+
45+plugin_LTLIBRARIES = imagemagick.la
46+imagemagick_la_SOURCES = plugin-imagemagick.cpp
47+imagemagick_la_LDFLAGS = -module -export-dynamic $(AM_LDFLAGS)
48+
49+noinst_HEADERS = plugin-imagemagick.h
50
51=== added file 'src/plugin-imagemagick/plugin-imagemagick.cpp'
52--- src/plugin-imagemagick/plugin-imagemagick.cpp 1970-01-01 00:00:00 +0000
53+++ src/plugin-imagemagick/plugin-imagemagick.cpp 2014-12-29 13:07:34 +0000
54@@ -0,0 +1,81 @@
55+#include "plugin-imagemagick.h"
56+
57+#include <cstdlib>
58+#include <sstream>
59+#include <glib/gstdio.h>
60+#include <gio/gio.h>
61+#include <string>
62+#include <cstring>
63+
64+#include "../utils.h"
65+
66+#define IMAGE_MAX_SIZE 1048576 // 1Mb
67+
68+static const char* _ATTRIBUTES =
69+ G_FILE_ATTRIBUTE_STANDARD_SIZE
70+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
71+;
72+
73+static gchar * getTempPath( GFile *gfile );
74+
75+GdkPixbuf * iImagemagick::get_pixbuf ()
76+{
77+ GdkPixbuf * temp;
78+ gchar *path = getPngUri(m_gfile);
79+ if (NULL != path) {
80+ g_debug("PLUGIN:Filename to load: %s", path);
81+ temp = gdk_pixbuf_new_from_file (path, NULL);
82+ g_unlink(path);
83+ return temp;
84+ }
85+}
86+
87+gchar * iImagemagick::getPngUri( GFile *file ) {
88+ g_debug("Trying to convert to PNG");
89+
90+ gchar *tmp = getTempPath(file);
91+ if(g_file_test(tmp, G_FILE_TEST_EXISTS)) {
92+ return tmp;
93+ }
94+
95+ GFileInfo *info = g_file_query_info(file,
96+ _ATTRIBUTES,
97+ G_FILE_QUERY_INFO_NONE,
98+ NULL,
99+ NULL);
100+
101+
102+ if(g_file_info_get_size(info) > IMAGE_MAX_SIZE) {
103+ g_free(tmp);
104+ return NULL;
105+ }
106+
107+ if (Utils::isProgramAvailable("convert")) {
108+ const gchar *type = g_file_info_get_content_type (info);
109+ gchar *path = g_file_get_path(file);
110+ gchar *cmd = g_strdup_printf("convert \"%s\"[0] \"%s\"", path, tmp);
111+
112+ if( system(cmd) != 0) {
113+ g_warning("Unable to convert file");
114+ tmp = NULL;
115+ }
116+
117+ g_free(path);
118+ g_free(cmd);
119+ }
120+
121+ return tmp;
122+}
123+
124+static gchar * getTempPath( GFile *gfile )
125+{
126+ gchar * path = g_file_get_path(gfile);
127+ char * hash = g_compute_checksum_for_data(G_CHECKSUM_SHA256,
128+ (const guchar*)path,
129+ strlen(path));
130+
131+ gchar *result = g_strdup_printf("/tmp/gloobus.%s.png", hash);
132+ g_free(hash);
133+ g_debug("Temp path: %s", result);
134+ return result;
135+}
136
137=== added file 'src/plugin-imagemagick/plugin-imagemagick.h'
138--- src/plugin-imagemagick/plugin-imagemagick.h 1970-01-01 00:00:00 +0000
139+++ src/plugin-imagemagick/plugin-imagemagick.h 2014-12-29 13:07:34 +0000
140@@ -0,0 +1,129 @@
141+#ifndef _IIMAGEMAGICK_
142+#define _IIMAGEMAGICK_
143+
144+#ifndef PLUGIN_LOADER
145+
146+#include <gdk-pixbuf/gdk-pixbuf.h>
147+
148+//#include "../gloobus-preview-plugin-manager.h"
149+#include "../gloobus-preview-interface-image.h"
150+
151+class iImagemagick : public iImage
152+{
153+ public:
154+ virtual GdkPixbuf* get_pixbuf ();
155+ private:
156+ gchar * getPngUri (GFile *file);
157+};
158+
159+extern "C" interface * create() {
160+ return new iImagemagick;
161+}
162+
163+extern "C" void destroy(interface * p) {
164+ delete (iImagemagick*)p;
165+}
166+
167+extern "C" int getVersion() {
168+ return MANAGER_VERSION;
169+}
170+
171+#endif
172+
173+#ifdef PLUGIN_LOADER
174+
175+PluginManager::register_plugin("imagemagick");
176+
177+if(interface::is_program_available("convert")) {
178+ PluginManager::register_filetype("application/dicom", 1);
179+ PluginManager::register_filetype("application/illustrator", 1);
180+ PluginManager::register_filetype("application/pdf", 1);
181+ PluginManager::register_filetype("application/postscript", 1);
182+ PluginManager::register_filetype("application/x-bzpdf", 1);
183+ PluginManager::register_filetype("image/bmp", 1);
184+ PluginManager::register_filetype("image/cgm", 1);
185+ PluginManager::register_filetype("image/dpx", 1);
186+ PluginManager::register_filetype("image/fax-g3", 1);
187+ PluginManager::register_filetype("image/fits", 1);
188+ PluginManager::register_filetype("image/gif", 1);
189+ PluginManager::register_filetype("image/ief", 1);
190+ PluginManager::register_filetype("image/jp2", 1);
191+ PluginManager::register_filetype("image/jpeg", 1);
192+ PluginManager::register_filetype("image/png", 1);
193+ PluginManager::register_filetype("image/rle", 1);
194+ PluginManager::register_filetype("image/svg+xml-compressed", 1);
195+ PluginManager::register_filetype("image/svg+xml", 1);
196+ PluginManager::register_filetype("image/tiff", 1);
197+ PluginManager::register_filetype("image/vnd.djvu", 1);
198+ PluginManager::register_filetype("image/vnd.dwg", 1);
199+ PluginManager::register_filetype("image/vnd.dxf", 1);
200+ PluginManager::register_filetype("image/vnd.adobe.photoshop", 1);
201+ PluginManager::register_filetype("image/vnd.microsoft.icon", 1);
202+ PluginManager::register_filetype("image/vnd.rn-realpix", 1);
203+ PluginManager::register_filetype("image/vnd.wap.wbmp", 1);
204+ PluginManager::register_filetype("image/webp", 1);
205+ PluginManager::register_filetype("image/x-3ds", 1);
206+ PluginManager::register_filetype("image/x-adobe-dng", 1);
207+ PluginManager::register_filetype("image/x-applix-graphics", 1);
208+ PluginManager::register_filetype("image/x-bzeps", 1);
209+ PluginManager::register_filetype("image/x-canon-cr2", 1);
210+ PluginManager::register_filetype("image/x-canon-crw", 1);
211+ PluginManager::register_filetype("image/x-cmu-raster", 1);
212+ PluginManager::register_filetype("image/x-compressed-xcf", 1);
213+ PluginManager::register_filetype("image/x-dds", 1);
214+ PluginManager::register_filetype("image/x-dib", 1);
215+ PluginManager::register_filetype("image/x-emf", 1);
216+ PluginManager::register_filetype("image/x-eps", 1);
217+ PluginManager::register_filetype("image/x-fits", 1);
218+ PluginManager::register_filetype("image/x-fpx", 1);
219+ PluginManager::register_filetype("image/x-fuji-raf", 1);
220+ PluginManager::register_filetype("image/x-gzeps", 1);
221+ PluginManager::register_filetype("image/x-icns", 1);
222+ PluginManager::register_filetype("image/x-ico", 1);
223+ PluginManager::register_filetype("image/x-iff", 1);
224+ PluginManager::register_filetype("image/x-ilbm", 1);
225+ PluginManager::register_filetype("image/x-jng", 1);
226+ PluginManager::register_filetype("image/x-kodak-dcr", 1);
227+ PluginManager::register_filetype("image/x-kodak-k25", 1);
228+ PluginManager::register_filetype("image/x-kodak-kdc", 1);
229+ PluginManager::register_filetype("image/x-lwo", 1);
230+ PluginManager::register_filetype("image/x-lws", 1);
231+ PluginManager::register_filetype("image/x-macpaint", 1);
232+ PluginManager::register_filetype("image/x-minolta-mrw", 1);
233+ PluginManager::register_filetype("video/x-mng", 1);
234+ PluginManager::register_filetype("image/x-msod", 1);
235+ PluginManager::register_filetype("image/x-niff", 1);
236+ PluginManager::register_filetype("image/x-nikon-nef", 1);
237+ PluginManager::register_filetype("image/x-olympus-orf", 1);
238+ PluginManager::register_filetype("image/x-panasonic-raw", 1);
239+ PluginManager::register_filetype("image/x-pcx", 1);
240+ PluginManager::register_filetype("image/x-pentax-pef", 1);
241+ PluginManager::register_filetype("image/x-photo-cd", 1);
242+ PluginManager::register_filetype("image/x-pict", 1);
243+ PluginManager::register_filetype("image/x-portable-anymap", 1);
244+ PluginManager::register_filetype("image/x-portable-bitmap", 1);
245+ PluginManager::register_filetype("image/x-portable-graymap", 1);
246+ PluginManager::register_filetype("image/x-portable-pixmap", 1);
247+ PluginManager::register_filetype("image/x-psd", 1);
248+ PluginManager::register_filetype("image/x-quicktime", 1);
249+ PluginManager::register_filetype("image/x-sgi", 1);
250+ PluginManager::register_filetype("image/x-sigma-x3f", 1);
251+ PluginManager::register_filetype("image/x-sony-arw", 1);
252+ PluginManager::register_filetype("image/x-sony-sr2", 1);
253+ PluginManager::register_filetype("image/x-sony-srf", 1);
254+ PluginManager::register_filetype("image/x-sun-raster", 1);
255+ PluginManager::register_filetype("image/x-tga", 1);
256+ PluginManager::register_filetype("image/x-win-bitmap", 1);
257+ PluginManager::register_filetype("image/x-wmf", 1);
258+ PluginManager::register_filetype("image/x-xbitmap", 1);
259+ PluginManager::register_filetype("image/x-xcf", 1);
260+ PluginManager::register_filetype("image/x-xcursor", 1);
261+ PluginManager::register_filetype("image/x-xfig", 1);
262+ PluginManager::register_filetype("image/x-xpixmap", 1);
263+ PluginManager::register_filetype("image/x-xwindowdump", 1);
264+}
265+
266+#endif
267+
268+#endif
269+

Subscribers

People subscribed via source and target branches