From 5f1cff6d0f1a73149ddc450cc4a66d0b6f58fffb Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Mon, 22 Oct 2012 23:40:09 +0200 Subject: [PATCH] Build file extensions filter from the MIME types present on the OPK This feature is enabled only if libxdgmime is available. --- configure.in | 3 +++ src/linkapp.cpp | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/configure.in b/configure.in index c1d2b9e..27016d1 100644 --- a/configure.in +++ b/configure.in @@ -27,6 +27,9 @@ AC_CHECK_LIB(png, png_read_image,,check_png="no") # Check for libopk AC_CHECK_LIB(opk, opk_open) +# Check for libxdgmime +AC_CHECK_LIB(xdgmime, xdg_mime_get_extensions_from_mime_type) + AC_ARG_ENABLE(platform, [ --enable-platform=X specify the targeted platform], [GMENU2X_PLATFORM="$enableval"], [GMENU2X_PLATFORM="default"]) diff --git a/src/linkapp.cpp b/src/linkapp.cpp index 3eddcf8..0df5083 100644 --- a/src/linkapp.cpp +++ b/src/linkapp.cpp @@ -45,6 +45,10 @@ #include #endif +#ifdef HAVE_LIBXDGMIME +#include +#endif + using fastdelegate::MakeDelegate; using namespace std; @@ -158,6 +162,35 @@ LinkApp::LinkApp(GMenu2X *gmenu2x_, Touchscreen &ts, InputManager &inputMgr_, consoleApp = !strcmp(param, "true"); #endif +#ifdef HAVE_LIBXDGMIME + param = opk_read_param(pdata, "MimeType"); + if (param) { + string::size_type oldpos = 0; + string mimetypes = param; + + while ((pos = mimetypes.find(';')) != mimetypes.npos) { + int nb = 16; + char *extensions[nb]; + string mimetype = mimetypes.substr(oldpos, pos); + mimetypes = mimetypes.substr(pos + 1); + + nb = xdg_mime_get_extensions_from_mime_type( + mimetype.c_str(), extensions, nb); + + while (nb--) { + selectorfilter += (string) extensions[nb] + ','; + free(extensions[nb]); + } + + oldpos = pos + 1; + } + + /* Remove last comma */ + selectorfilter.erase(selectorfilter.end()); + DEBUG("Compatible extensions: %s\n", selectorfilter.c_str()); + } +#endif /* HAVE_LIBXDGMIME */ + param = opk_read_param(pdata, "X-OD-Manual"); if (param) manual = param;