kwave  18.07.70
CodecBase.cpp
Go to the documentation of this file.
1 /*************************************************************************
2  CodecBase.cpp - base class for Encoder and Decoder
3  -------------------
4  begin : Mon Mar 11 2002
5  copyright : (C) 2002 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 
20 #include <algorithm>
21 
22 #include <QFileInfo>
23 #include <QMimeDatabase>
24 #include <QMimeType>
25 #include <QString>
26 #include <QStringList>
27 #include <QtGlobal>
28 #include <QUrl>
29 
30 #include "libkwave/CodecBase.h"
31 #include "libkwave/String.h"
32 
33 /***************************************************************************/
35  :m_supported_mime_types(), m_supported_compression_types()
36 {
37 }
38 
39 /***************************************************************************/
41 {
42  m_supported_mime_types.clear();
44 }
45 
46 /***************************************************************************/
48  const QString &description,
49  const char *patterns)
50 {
51  const QString type_name = _(name);
52  if (type_name.contains(_(","))) {
53  // list of mime types -> call recursively for each of them
54  QStringList types = type_name.split(_(","), QString::SkipEmptyParts);
55  foreach (const QString &mt, types) {
56  addMimeType(mt.trimmed().toUtf8().data(), description, patterns);
57  }
58  return;
59  }
60 
62  QMimeDatabase db;
63  QMimeType t = db.mimeTypeForName(type_name);
64 
65  if (t.isDefault() || t.name().isEmpty()) {
66 // qWarning("mime type '%s' not registered, using built-in!", name);
67  type.name = type_name;
68  type.description = description;
69  type.patterns = _(patterns).split(_("; "), QString::SkipEmptyParts);
70  } else {
71  type.description = t.comment();
72  type.patterns = t.globPatterns();
73 
74  if (t.name() != type_name) {
75  // type has been translated (maybe un-alias'ed)
76  // manually add the original name
77  type.name = type_name;
78  m_supported_mime_types.append(type);
79  }
80 
81  if (!supports(t.name())) {
82  // new type or new alias
83  type.name = t.name();
84  }
85  }
86  m_supported_mime_types.append(type);
87 }
88 
89 /***************************************************************************/
91 {
92  if (m_supported_compression_types.contains(compression)) return;
93 
94  m_supported_compression_types.append(compression);
95  std::sort(m_supported_compression_types.begin(),
96  m_supported_compression_types.end(), std::greater<int>());
97 }
98 
99 /***************************************************************************/
100 bool Kwave::CodecBase::supports(const QMimeType &mimetype)
101 {
102  return supports(mimetype.name());
103 }
104 
105 /***************************************************************************/
106 bool Kwave::CodecBase::supports(const QString &mimetype_name)
107 {
108  foreach (const Kwave::CodecBase::MimeType &mime, m_supported_mime_types) {
109  if (mime.name == mimetype_name) return true;
110  }
111  return false;
112 }
113 
114 /***************************************************************************/
115 QStringList Kwave::CodecBase::extensions(const QString &mimetype_name) const
116 {
117  QStringList result;
118  foreach (const Kwave::CodecBase::MimeType &mime, m_supported_mime_types) {
119  if (mime.name == mimetype_name) {
120  foreach (const QString &ext, mime.patterns)
121  if (!result.contains(ext)) result.append(ext);
122  }
123  }
124  return result;
125 }
126 
127 /***************************************************************************/
128 const QList<Kwave::CodecBase::MimeType> Kwave::CodecBase::mimeTypes()
129 {
130  return m_supported_mime_types;
131 }
132 
133 /***************************************************************************/
134 const QList<Kwave::Compression::Type> Kwave::CodecBase::compressionTypes()
135 {
137 }
138 
139 /***************************************************************************/
140 QString Kwave::CodecBase::mimeTypeOf(const QUrl &url)
141 {
142  // get the extension of the file
143  QFileInfo file(url.fileName());
144  QString suffix = file.suffix();
145 
146  if (!suffix.length()) return QMimeType().name();
147  suffix = _("*.") + suffix;
148 
149  // try to find in the list of supported mime types
150  QListIterator<Kwave::CodecBase::MimeType> it(m_supported_mime_types);
151  while (it.hasNext()) {
152  Kwave::CodecBase::MimeType mime_type = it.next();
153  if (mime_type.patterns.contains(suffix.toLower()))
154  return mime_type.name;
155  }
156  return QMimeType().name();
157 }
158 
159 /***************************************************************************/
160 /***************************************************************************/
virtual void addCompression(Kwave::Compression::Type compression)
Definition: CodecBase.cpp:90
virtual const QList< Kwave::Compression::Type > compressionTypes()
Definition: CodecBase.cpp:134
virtual QString mimeTypeOf(const QUrl &url)
Definition: CodecBase.cpp:140
virtual bool supports(const QMimeType &mimetype)
Definition: CodecBase.cpp:100
const char name[16]
Definition: memcpy.c:510
virtual void addMimeType(const char *name, const QString &description, const char *patterns)
Definition: CodecBase.cpp:47
virtual ~CodecBase()
Definition: CodecBase.cpp:40
QList< Kwave::Compression::Type > m_supported_compression_types
Definition: CodecBase.h:104
virtual const QList< CodecBase::MimeType > mimeTypes()
Definition: CodecBase.cpp:128
#define _(m)
Definition: memcpy.c:66
QList< MimeType > m_supported_mime_types
Definition: CodecBase.h:101
virtual QStringList extensions(const QString &mimetype_name) const
Definition: CodecBase.cpp:115