Advertisement
Guest User

Mimes

a guest
Feb 22nd, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.34 KB | None | 0 0
  1. diff --git a/plugins/filesystemplugin/filesystemplugin.cpp b/plugins/filesystemplugin/filesystemplugin.cpp
  2. index 480b03e..7e9f882 100644
  3. --- a/plugins/filesystemplugin/filesystemplugin.cpp
  4. +++ b/plugins/filesystemplugin/filesystemplugin.cpp
  5. @@ -36,26 +36,32 @@
  6.  #include <QMenu>
  7.  #endif
  8.  #include <QMediaPlaylist>
  9. +#include <QMimeDatabase>
  10.  
  11.  #include <QtPlugin>
  12.  
  13. -static const QString CUE_SUFFIX = "cue";
  14. -static const QString M3U_SUFFIX = "m3u";
  15. +static const QString CUE_TYPE = "application/x-cue";
  16. +static const QString M3U_TYPE = "audio/x-mpegurl";
  17. +static const QStringList supportedMimeTypes = QStringList() << "audio/mpeg" << "audio/vorbis"
  18. +                               << "audio/x-vorbis+ogg" << "audio/ogg"
  19. +                               << "audio/flac" << CUE_TYPE
  20. +                               << M3U_TYPE;
  21.  
  22.  static QList<Tune*> getTunesRecursive(const QString& folder)
  23.  {
  24.     QList<Tune*> list;
  25.  
  26.     QDir dir(folder);
  27. +   QMimeDatabase mimeDb;
  28.     foreach(const QString& entry, dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot)) {
  29.         QFileInfo fi(dir.absolutePath() + "/" +entry);
  30.         if(fi.isDir()) {
  31.             list.append(getTunesRecursive(fi.absoluteFilePath()));
  32.         }
  33.         else  {
  34. -           static const QRegExp songRe("\\.(mp3|ogg|flac|wav|mp4)$");
  35. +           QString mimeType = mimeDb.mimeTypeForFile(fi).name();
  36.             QString song = fi.absoluteFilePath();
  37. -           if(songRe.indexIn(song) != -1)
  38. +           if (supportedMimeTypes.contains(mimeType))
  39.                 list.append(Qomp::tuneFromFile(song));
  40.         }
  41.     }
  42. @@ -110,6 +116,7 @@ private:
  43.  
  44.  QList<Tune*> FilesystemPlugin::Private::getTunes()
  45.  {
  46. +   QMimeDatabase mimeDb;
  47.     QList<Tune*> list;
  48.  #ifdef QOMP_MOBILE
  49.     item_ = QompQmlEngine::instance()->createItem(QUrl("qrc:///qmlshared/QompFileDlg.qml"));
  50. @@ -138,10 +145,11 @@ QList<Tune*> FilesystemPlugin::Private::getTunes()
  51.             const QString str = var.toUrl().toLocalFile();
  52.             if(!str.isEmpty()) {
  53.                 QFileInfo fi(str);
  54. -               if(fi.suffix() == CUE_SUFFIX) {
  55. +               QString mimeType = mimeDb.mimeTypeForFile(fi).name();
  56. +               if(mimeType == CUE_TYPE) {
  57.                     list.append(CueParser::parseTunes(str));
  58.                 }
  59. -               else if(fi.suffix() == M3U_SUFFIX) {
  60. +               else if(mimeType == M3U_TYPE) {
  61.                     list.append(m3uToTunes(str));
  62.                 }
  63.                 else {
  64. @@ -165,14 +173,15 @@ QList<Tune*> FilesystemPlugin::Private::getTunes()
  65.         if(!files.isEmpty()) {
  66.             QFileInfo fi (files.first());
  67.             Options::instance()->setOption("filesystemplugin.lastdir", fi.dir().path());
  68. -       }
  69. +       }
  70.  
  71.         foreach(const QString& file, files) {
  72.             QFileInfo fi(file);
  73. -           if(fi.suffix() == CUE_SUFFIX) {
  74. +           QString mimeType = mimeDb.mimeTypeForFile(fi).name();
  75. +           if(mimeType == CUE_TYPE) {
  76.                 list.append(CueParser::parseTunes(file));
  77.             }
  78. -           else if(fi.suffix() == M3U_SUFFIX) {
  79. +           else if(mimeType == M3U_TYPE) {
  80.                 list.append(m3uToTunes(file));
  81.             }
  82.             else {
  83. @@ -285,6 +294,7 @@ QList<QompPluginAction *> FilesystemPlugin::getTunesActions()
  84.  
  85.  bool FilesystemPlugin::processUrl(const QString &url, QList<Tune *> *tunes)
  86.  {
  87. +   QMimeDatabase mimeDb;
  88.     QFileInfo fi(url);
  89.     if(!fi.exists()) {
  90.         QUrl u(url);
  91. @@ -294,20 +304,28 @@ bool FilesystemPlugin::processUrl(const QString &url, QList<Tune *> *tunes)
  92.     }
  93.  
  94.     if(fi.exists()) {
  95. -       const QString file = fi.canonicalFilePath();
  96. -       if(fi.suffix() == CUE_SUFFIX) {
  97. +       bool result = false;
  98. +       const QString file = fi.canonicalFilePath();
  99. +       const QString mimeType = mimeDb.mimeTypeForFile(fi).name();
  100. +       if (fi.isDir()) {
  101. +           tunes->append(getTunesRecursive(file));
  102. +           result = true;
  103. +       }
  104. +       if (mimeType == CUE_TYPE) {
  105.             tunes->append(CueParser::parseTunes(file));
  106. +           result = true;
  107.         }
  108. -       else if(fi.suffix() == M3U_SUFFIX) {
  109. +       else if(mimeType == M3U_TYPE) {
  110.             tunes->append(m3uToTunes(file));
  111. +           result = true;
  112.         }
  113. -       else {
  114. +       else if(supportedMimeTypes.contains(mimeType)) {
  115.             tunes->append(Qomp::tuneFromFile(file));
  116. +           result = true;
  117.         }
  118. -       return true;
  119. +       return result;
  120.     }
  121. -   else
  122. -       return false;
  123. +   return false;
  124.  }
  125.  
  126.  
  127. diff --git a/qomp.desktop b/qomp.desktop
  128. index 3e40719..1a7f0b3 100644
  129. --- a/qomp.desktop
  130. +++ b/qomp.desktop
  131. @@ -10,4 +10,5 @@ Exec=qomp %F
  132.  Categories=AudioVideo;Audio;Player;Qt;
  133.  Terminal=false
  134.  
  135. -MimeType=audio/mpeg;audio/ogg;audio/flac;application/x-cue
  136. \ No newline at end of file
  137. +MimeType=audio/mpeg;audio/ogg;audio/flac;audio/vorbis;audio/x-vorbis+ogg
  138. +MimeType=application/x-cue;audio/x-mpegurl
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement