[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/kviewshell
From:       Wilfried Huss <Wilfried.Huss () gmx ! at>
Date:       2006-06-18 13:32:22
Message-ID: 1150637542.204887.13408.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 552599 by whuss:

port of commit 552585:

Use standard MimeType field in the plugin desktop files, and allow
to specify a list of supported mimetypes. Previously we needed a
separate desktop file for each mimetype.

 M  +1 -1      plugins/djvu/djvumultipage.desktop  
 M  +1 -1      plugins/dvi/kdvimultipage.desktop  
 M  +1 -1      plugins/fax/CMakeLists.txt  
 M  +1 -1      plugins/fax/kfaxmultipage.desktop  
 D             plugins/fax/kfaxmultipage_tiff.desktop  
 M  +1 -1      plugins/pdf/pdfMultipage.desktop  
 M  +1 -1      plugins/ps/psMultipage.desktop  
 M  +53 -17    shell/kviewpart.cpp  


--- trunk/KDE/kdegraphics/kviewshell/plugins/djvu/djvumultipage.desktop \
#552598:552599 @@ -8,6 +8,6 @@
 Comment[fr]=Module KViewShell pour les fichiers DjVu
 Comment[x-test]=xxKViewShell plugin for DjVu filesxx
 ServiceTypes=KViewShell/MultiPage
-X-KDE-MimeTypes=image/x-djvu
+MimeType=image/x-djvu
 X-KDE-Library=djvuviewpart
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/plugins/dvi/kdvimultipage.desktop #552598:552599
@@ -6,6 +6,6 @@
 Name[fr]=Multi-page KDVI
 Name[x-test]=xxKDVIMultiPagexx
 ServiceTypes=KViewShell/MultiPage
+MimeType=application/x-dvi
 X-KDE-Library=kdvipart
-X-KDE-MimeTypes=application/x-dvi
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/plugins/fax/CMakeLists.txt #552598:552599
@@ -23,7 +23,7 @@
 
 install_files( ${DATA_INSTALL_DIR} FILES  )
 install_files( ${DATA_INSTALL_DIR}/kviewshell/plugins/fax FILES  )
-install_files( ${SERVICES_INSTALL_DIR} FILES kfaxmultipage.desktop \
kfaxmultipage_tiff.desktop ) +install_files( ${SERVICES_INSTALL_DIR} FILES \
kfaxmultipage.desktop )  
 
 
--- trunk/KDE/kdegraphics/kviewshell/plugins/fax/kfaxmultipage.desktop #552598:552599
@@ -8,6 +8,6 @@
 Comment[fr]=Module KViewShell pour les fichiers de fax
 Comment[x-test]=xxKViewShell plugin for fax filesxx
 ServiceTypes=KViewShell/MultiPage
-X-KDE-MimeTypes=image/fax-g3
+MimeType=image/fax-g3;image/tiff
 X-KDE-Library=kfaxviewpart
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/plugins/pdf/pdfMultipage.desktop #552598:552599
@@ -5,6 +5,6 @@
 Type=Service
 Comment=KViewShell plugin for Acrobat (pdf) files
 ServiceTypes=KViewShell/MultiPage
-X-KDE-MimeTypes=application/pdf
+MimeType=application/pdf
 X-KDE-Library=pdfviewpart
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/plugins/ps/psMultipage.desktop #552598:552599
@@ -5,6 +5,6 @@
 Type=Service
 Comment=KViewShell plugin for PostScript files
 ServiceTypes=KViewShell/MultiPage
-X-KDE-MimeTypes=application/postscript
+MimeType=application/postscript
 X-KDE-Library=psviewpart
 X-KDE-MultiPageVersion=3
--- trunk/KDE/kdegraphics/kviewshell/shell/kviewpart.cpp #552598:552599
@@ -489,12 +489,18 @@
   {
     KService::List::ConstIterator iterator = offers.begin();
 	KService::List::ConstIterator end = offers.end();
+    QStringList::Iterator mimeType;
 
     for (; iterator != end; ++iterator)
     {
       KService::Ptr service = *iterator;
-      QString mimeType = service->property("X-KDE-MimeTypes").toString();
-      supportedMimeTypes << mimeType;
+
+      QStringList mimeTypes = service->serviceTypes();
+      for (mimeType = mimeTypes.begin(); mimeType != mimeTypes.end(); ++mimeType)
+      {
+        if (!(*mimeType).contains("KViewShell"))
+          supportedMimeTypes << *mimeType;
+      }
     }
   }
 
@@ -534,18 +540,24 @@
   {
     KService::List::ConstIterator iterator = offers.begin();
 	KService::List::ConstIterator end = offers.end();
+    QStringList::Iterator mimeType;
 
     for (; iterator != end; ++iterator)
     {
       KService::Ptr service = *iterator;
-      QString mimeType = service->property("X-KDE-MimeTypes").toString();
-      supportedMimeTypes << mimeType;
 
-      QStringList pattern = KMimeType::mimeType(mimeType)->patterns();
-      while(!pattern.isEmpty())
+      QStringList mimeTypes = service->serviceTypes();
+      for (mimeType = mimeTypes.begin(); mimeType != mimeTypes.end(); ++mimeType)
       {
-        supportedPattern.append(pattern.front().trimmed());
-        pattern.pop_front();
+        if (!(*mimeType).contains("KViewShell"))
+        {
+          QStringList pattern = KMimeType::mimeType(*mimeType)->patterns();
+          while(!pattern.isEmpty())
+          {
+            supportedPattern.append(pattern.front().trimmed());
+            pattern.pop_front();
+          }
+        }
       }
     }
   }
@@ -775,15 +787,42 @@
 
   mimetype = KMimeType::findByURL(tmpFileURL);
 
-  // Search for service
+  // Search for a plugin that supports the needed mimetype.
   KService::List offers = KServiceTypeTrader::self()->query(
-      QString::fromLatin1("KViewShell/MultiPage" ),
-  QString("([X-KDE-MultiPageVersion] == %1) and "
-          "([X-KDE-MimeTypes] == \
'%2')").arg(MULTIPAGE_VERSION).arg(mimetype->name())); +    \
QString::fromLatin1("KViewShell/MultiPage"), +    QString("([X-KDE-MultiPageVersion] \
== %1)").arg(MULTIPAGE_VERSION) +  );
 
-  kDebug(kvs::shell) << "MimeType: " << mimetype->name() << endl;
+  KService::Ptr service;
+  bool matchingPluginFound = false;
 
-  if (offers.isEmpty()) {
+  if (!offers.isEmpty())
+  {
+    KService::List::ConstIterator iterator = offers.begin();
+    KService::List::ConstIterator end = offers.end();
+    QStringList::Iterator mimeTypeIterator;
+
+    for (; iterator != end; ++iterator)
+    {
+      QStringList mimeTypes = (*iterator)->serviceTypes();
+      for (mimeTypeIterator = mimeTypes.begin(); mimeTypeIterator != \
mimeTypes.end(); ++mimeTypeIterator) +      {
+        // If one of the supported mimetypes of the plugin equals the mimetype we \
need, +        // we remember the service and stop the search.
+        if (mimetype->name() == *mimeTypeIterator)
+        {
+          service = *iterator;
+          matchingPluginFound = true;
+          break;
+        }
+      }
+      if (matchingPluginFound)
+        break;
+    }
+  }
+
+  if (offers.isEmpty() || !matchingPluginFound)
+  {
     KMessageBox::detailedError(mainWidget, i18n("<qt>The document <b>%1</b> cannot \
                be shown because "
                                                 "its file type is not \
                supported.</qt>", m_file),
                                i18n("<qt>The file has mime type <b>%1</b> which is \
not supported by " @@ -793,9 +832,6 @@
     return false;
   }
 
-  KService::Ptr service = offers.first();
-  kDebug(kvs::shell) << service->library() << endl;
-
   // The the new multiPage is different then the currently loaded one.
   if (service->library() != multiPageLibrary)
   {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic