summaryrefslogtreecommitdiffstats
path: root/tdefile-plugins
diff options
context:
space:
mode:
Diffstat (limited to 'tdefile-plugins')
-rw-r--r--tdefile-plugins/CMakeLists.txt1
-rw-r--r--tdefile-plugins/au/tdefile_au.cpp7
-rw-r--r--tdefile-plugins/au/tdefile_au.h2
-rw-r--r--tdefile-plugins/avi/tdefile_avi.cpp8
-rw-r--r--tdefile-plugins/avi/tdefile_avi.h8
-rw-r--r--tdefile-plugins/flac/tdefile_flac.cpp19
-rw-r--r--tdefile-plugins/flac/tdefile_flac.h2
-rw-r--r--tdefile-plugins/m3u/tdefile_m3u.cpp2
-rw-r--r--tdefile-plugins/m3u/tdefile_m3u.h2
-rw-r--r--tdefile-plugins/mp3/tdefile_mp3.cpp22
-rw-r--r--tdefile-plugins/mp3/tdefile_mp3.desktop2
-rw-r--r--tdefile-plugins/mp3/tdefile_mp3.h2
-rw-r--r--tdefile-plugins/mp4/CMakeL10n.txt3
-rw-r--r--tdefile-plugins/mp4/CMakeLists.txt42
-rw-r--r--tdefile-plugins/mp4/tdefile_mp4.cpp276
-rw-r--r--tdefile-plugins/mp4/tdefile_mp4.desktop8
-rw-r--r--tdefile-plugins/mp4/tdefile_mp4.h39
-rw-r--r--tdefile-plugins/mpc/tdefile_mpc.cpp16
-rw-r--r--tdefile-plugins/mpc/tdefile_mpc.h2
-rw-r--r--tdefile-plugins/mpeg/tdefile_mpeg.cpp2
-rw-r--r--tdefile-plugins/mpeg/tdefile_mpeg.h2
-rw-r--r--tdefile-plugins/ogg/tdefile_ogg.cpp2
-rw-r--r--tdefile-plugins/ogg/tdefile_ogg.h2
-rw-r--r--tdefile-plugins/sid/tdefile_sid.h2
-rw-r--r--tdefile-plugins/theora/tdefile_theora.h2
-rw-r--r--tdefile-plugins/wav/tdefile_wav.cpp7
-rw-r--r--tdefile-plugins/wav/tdefile_wav.h2
27 files changed, 419 insertions, 65 deletions
diff --git a/tdefile-plugins/CMakeLists.txt b/tdefile-plugins/CMakeLists.txt
index 526e203e..09856785 100644
--- a/tdefile-plugins/CMakeLists.txt
+++ b/tdefile-plugins/CMakeLists.txt
@@ -14,6 +14,7 @@ add_subdirectory( avi )
tde_conditional_add_subdirectory( WITH_TAGLIB flac )
add_subdirectory( m3u )
tde_conditional_add_subdirectory( WITH_TAGLIB mp3 )
+tde_conditional_add_subdirectory( WITH_TAGLIB mp4 )
tde_conditional_add_subdirectory( HAVE_TAGLIB_MPC_H mpc )
add_subdirectory( mpeg )
tde_conditional_add_subdirectory( WITH_VORBIS ogg )
diff --git a/tdefile-plugins/au/tdefile_au.cpp b/tdefile-plugins/au/tdefile_au.cpp
index 296a91d7..5b474ee4 100644
--- a/tdefile-plugins/au/tdefile_au.cpp
+++ b/tdefile-plugins/au/tdefile_au.cpp
@@ -20,7 +20,7 @@
#include <config.h>
#include "tdefile_au.h"
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
@@ -32,12 +32,7 @@
#include <tqfile.h>
#include <tqdatetime.h>
-#if !defined(__osf__)
#include <inttypes.h>
-#else
-typedef unsigned long uint32_t;
-typedef unsigned short uint16_t;
-#endif
typedef KGenericFactory<KAuPlugin> AuFactory;
diff --git a/tdefile-plugins/au/tdefile_au.h b/tdefile-plugins/au/tdefile_au.h
index 9d5104ef..14b141fc 100644
--- a/tdefile-plugins/au/tdefile_au.h
+++ b/tdefile-plugins/au/tdefile_au.h
@@ -26,7 +26,7 @@ class TQStringList;
class KAuPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/avi/tdefile_avi.cpp b/tdefile-plugins/avi/tdefile_avi.cpp
index 03866369..38a8e23b 100644
--- a/tdefile-plugins/avi/tdefile_avi.cpp
+++ b/tdefile-plugins/avi/tdefile_avi.cpp
@@ -21,7 +21,7 @@
#include <config.h>
#include "tdefile_avi.h"
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
@@ -33,13 +33,7 @@
#include <tqfile.h>
#include <tqdatetime.h>
-#if !defined(__osf__)
#include <inttypes.h>
-#else
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long uint64_t;
-#endif
typedef KGenericFactory<KAviPlugin> AviFactory;
diff --git a/tdefile-plugins/avi/tdefile_avi.h b/tdefile-plugins/avi/tdefile_avi.h
index a533723b..e0d98bdf 100644
--- a/tdefile-plugins/avi/tdefile_avi.h
+++ b/tdefile-plugins/avi/tdefile_avi.h
@@ -23,20 +23,14 @@
#include <tdefilemetainfo.h>
#include <tqfile.h>
-#if !defined(__osf__)
#include <inttypes.h>
-#else
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-#endif
-
class TQStringList;
class KAviPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/flac/tdefile_flac.cpp b/tdefile-plugins/flac/tdefile_flac.cpp
index 85d52068..207e3928 100644
--- a/tdefile-plugins/flac/tdefile_flac.cpp
+++ b/tdefile-plugins/flac/tdefile_flac.cpp
@@ -32,17 +32,20 @@
#include <kdebug.h>
#include <kurl.h>
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <ksavefile.h>
#include <tag.h>
+#include <taglib.h>
#if (TAGLIB_MAJOR_VERSION>1) || \
((TAGLIB_MAJOR_VERSION==1) && (TAGLIB_MINOR_VERSION>=2))
#define TAGLIB_1_2
#endif
+#define TStringToTQString(s) TQString::fromUtf8((s).toCString(true))
+
#include <tstring.h>
#include <tfile.h>
#include <flacfile.h>
@@ -181,13 +184,13 @@ bool KFlacPlugin::readInfo( KFileMetaInfo& info, uint what )
TQString date = file->tag()->year() > 0 ? TQString::number(file->tag()->year()) : TQString();
TQString track = file->tag()->track() > 0 ? TQString::number(file->tag()->track()) : TQString();
- appendItem(commentgroup, "Title", TQString(TStringToQString(file->tag()->title())).stripWhiteSpace());
- appendItem(commentgroup, "Artist", TQString(TStringToQString(file->tag()->artist())).stripWhiteSpace());
- appendItem(commentgroup, "Album", TQString(TStringToQString(file->tag()->album())).stripWhiteSpace());
+ appendItem(commentgroup, "Title", TStringToTQString(file->tag()->title()).stripWhiteSpace());
+ appendItem(commentgroup, "Artist", TStringToTQString(file->tag()->artist()).stripWhiteSpace());
+ appendItem(commentgroup, "Album", TStringToTQString(file->tag()->album()).stripWhiteSpace());
appendItem(commentgroup, "Date", date);
- appendItem(commentgroup, "Comment", TQString(TStringToQString(file->tag()->comment())).stripWhiteSpace());
+ appendItem(commentgroup, "Comment", TStringToTQString(file->tag()->comment()).stripWhiteSpace());
appendItem(commentgroup, "Tracknumber", track);
- appendItem(commentgroup, "Genre", TQString(TStringToQString(file->tag()->genre())).stripWhiteSpace());
+ appendItem(commentgroup, "Genre", TStringToTQString(file->tag()->genre()).stripWhiteSpace());
}
if (readTech && file->audioProperties())
@@ -198,7 +201,7 @@ bool KFlacPlugin::readInfo( KFileMetaInfo& info, uint what )
appendItem(techgroup, "Bitrate", properties->bitrate());
appendItem(techgroup, "Sample Rate", properties->sampleRate());
- appendItem(techgroup, "Sample Width", properties->sampleWidth());
+ appendItem(techgroup, "Sample Width", properties->bitsPerSample());
appendItem(techgroup, "Channels", properties->channels());
appendItem(techgroup, "Length", properties->length());
}
@@ -232,7 +235,7 @@ bool KFlacPlugin::writeInfo(const KFileMetaInfo& info) const
{
TagLib::File *file;
- if (!TagLib::File::isWritable(TQFile::encodeName(info.path()).data())) {
+ if (access(info.path().local8Bit().data(), R_OK|W_OK)) {
kdDebug(7034) << "can't write to " << info.path() << endl;
return false;
}
diff --git a/tdefile-plugins/flac/tdefile_flac.h b/tdefile-plugins/flac/tdefile_flac.h
index 982a8a51..72c1f8c6 100644
--- a/tdefile-plugins/flac/tdefile_flac.h
+++ b/tdefile-plugins/flac/tdefile_flac.h
@@ -31,7 +31,7 @@ class TQStringList;
class KFlacPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/m3u/tdefile_m3u.cpp b/tdefile-plugins/m3u/tdefile_m3u.cpp
index 7e0aad18..c5772b79 100644
--- a/tdefile-plugins/m3u/tdefile_m3u.cpp
+++ b/tdefile-plugins/m3u/tdefile_m3u.cpp
@@ -22,7 +22,7 @@
#include <kdebug.h>
#include <kurl.h>
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
diff --git a/tdefile-plugins/m3u/tdefile_m3u.h b/tdefile-plugins/m3u/tdefile_m3u.h
index 08a6c506..da2142a9 100644
--- a/tdefile-plugins/m3u/tdefile_m3u.h
+++ b/tdefile-plugins/m3u/tdefile_m3u.h
@@ -28,7 +28,7 @@ class TQStringList;
class KM3uPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/mp3/tdefile_mp3.cpp b/tdefile-plugins/mp3/tdefile_mp3.cpp
index 041e0313..460492b2 100644
--- a/tdefile-plugins/mp3/tdefile_mp3.cpp
+++ b/tdefile-plugins/mp3/tdefile_mp3.cpp
@@ -22,7 +22,7 @@
#include "tdefile_mp3.h"
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
@@ -40,6 +40,8 @@
#include <id3v1genres.h>
#include <id3v2framefactory.h>
+#define TStringToTQString(s) TQString::fromUtf8((s).toCString(true))
+
typedef KGenericFactory<KMp3Plugin> Mp3Factory;
K_EXPORT_COMPONENT_FACTORY(tdefile_mp3, Mp3Factory( "tdefile_mp3" ))
@@ -47,9 +49,9 @@ K_EXPORT_COMPONENT_FACTORY(tdefile_mp3, Mp3Factory( "tdefile_mp3" ))
KMp3Plugin::KMp3Plugin(TQObject *parent, const char *name, const TQStringList &args)
: KFilePlugin(parent, name, args)
{
- kdDebug(7034) << "mp3 plugin\n";
+ kdDebug(7034) << "mp3 plugin for mimetype " << name << endl;
- KFileMimeTypeInfo *info = addMimeTypeInfo("audio/x-mp3");
+ KFileMimeTypeInfo *info = addMimeTypeInfo(name);
// id3 group
@@ -154,21 +156,21 @@ bool KMp3Plugin::readInfo(KFileMetaInfo &info, uint what)
TQString date = file.tag()->year() > 0 ? TQString::number(file.tag()->year()) : TQString();
TQString track = file.tag()->track() > 0 ? TQString::number(file.tag()->track()) : TQString();
- TQString title = TQString(TStringToQString(file.tag()->title())).stripWhiteSpace();
+ TQString title = TStringToTQString(file.tag()->title()).stripWhiteSpace();
if (!title.isEmpty())
appendItem(id3group, "Title", title);
- TQString artist = TQString(TStringToQString(file.tag()->artist())).stripWhiteSpace();
+ TQString artist = TStringToTQString(file.tag()->artist()).stripWhiteSpace();
if (!artist.isEmpty())
appendItem(id3group, "Artist", artist);
- TQString album = TQString(TStringToQString(file.tag()->album())).stripWhiteSpace();
+ TQString album = TStringToTQString(file.tag()->album()).stripWhiteSpace();
if (!album.isEmpty())
appendItem(id3group, "Album", album);
appendItem(id3group, "Date", date);
- TQString comment = TQString(TStringToQString(file.tag()->comment())).stripWhiteSpace();
+ TQString comment = TStringToTQString(file.tag()->comment()).stripWhiteSpace();
if (!comment.isEmpty())
appendItem(id3group, "Comment", comment);
appendItem(id3group, "Tracknumber", track);
- TQString genre = TQString(TStringToQString(file.tag()->genre())).stripWhiteSpace();
+ TQString genre = TStringToTQString(file.tag()->genre()).stripWhiteSpace();
if (!genre.isEmpty())
appendItem(id3group, "Genre", genre);
}
@@ -235,7 +237,7 @@ bool KMp3Plugin::writeInfo(const KFileMetaInfo &info) const
TagLib::ID3v2::FrameFactory::instance()->setDefaultTextEncoding(TagLib::String::UTF8);
TagLib::MPEG::File file(TQFile::encodeName(info.path()).data(), false);
- if(!file.isOpen() || !TagLib::File::isWritable(file.name()))
+ if(!file.isOpen() || access(info.path().local8Bit().data(), R_OK|W_OK))
{
kdDebug(7034) << "couldn't open " << info.path() << endl;
return false;
@@ -294,7 +296,7 @@ TQValidator *KMp3Plugin::createValidator(const TQString & /* mimetype */,
TagLib::StringList genres = TagLib::ID3v1::genreList();
for(TagLib::StringList::ConstIterator it = genres.begin(); it != genres.end(); ++it)
{
- l.append(TStringToQString((*it)));
+ l.append(TStringToTQString((*it)));
}
return new ComboValidator(l, false, true, parent, name);
}
diff --git a/tdefile-plugins/mp3/tdefile_mp3.desktop b/tdefile-plugins/mp3/tdefile_mp3.desktop
index 617ecc02..9eaeb81d 100644
--- a/tdefile-plugins/mp3/tdefile_mp3.desktop
+++ b/tdefile-plugins/mp3/tdefile_mp3.desktop
@@ -3,6 +3,6 @@ Type=Service
Name=MP3 Info
X-TDE-ServiceTypes=KFilePlugin
X-TDE-Library=tdefile_mp3
-MimeType=audio/x-mp3
+MimeType=audio/mpeg;audio/x-mp3
PreferredGroups=id3,Technical
PreferredItems=Title,Artist,Album,Tracknumber,Genre,Bitrate,Length,Date,Comment,Sample Rate,Channels,Version,Layer,Copyright,Original,CRC
diff --git a/tdefile-plugins/mp3/tdefile_mp3.h b/tdefile-plugins/mp3/tdefile_mp3.h
index cc01aa3e..d6e13cb8 100644
--- a/tdefile-plugins/mp3/tdefile_mp3.h
+++ b/tdefile-plugins/mp3/tdefile_mp3.h
@@ -25,7 +25,7 @@ class TQStringList;
class KMp3Plugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/mp4/CMakeL10n.txt b/tdefile-plugins/mp4/CMakeL10n.txt
new file mode 100644
index 00000000..aa8be462
--- /dev/null
+++ b/tdefile-plugins/mp4/CMakeL10n.txt
@@ -0,0 +1,3 @@
+##### create translation templates ##############
+
+tde_l10n_create_template( "tdefile_mp4" )
diff --git a/tdefile-plugins/mp4/CMakeLists.txt b/tdefile-plugins/mp4/CMakeLists.txt
new file mode 100644
index 00000000..17e388ac
--- /dev/null
+++ b/tdefile-plugins/mp4/CMakeLists.txt
@@ -0,0 +1,42 @@
+#################################################
+#
+# (C) 2025 mio <stigma@disroot.org>
+#
+# Improvements and feedback are welcome
+#
+# This file is released under GPL >= 2
+#
+#################################################
+
+include_directories(
+ ${CMAKE_BINARY_DIR}
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${TAGLIB_INCLUDE_DIRS}
+ ${TQT_INCLUDE_DIRS}
+ ${TDE_INCLUDE_DIR}
+)
+
+link_directories(
+ ${TQT_LIBRARY_DIRS}
+)
+
+
+##### tdefile_mp4 (module) ######################
+
+tde_add_kpart( tdefile_mp4 AUTOMOC
+ SOURCES
+ tdefile_mp4.cpp
+ LINK
+ DCOP-shared tdecore-shared tdeui-shared tdefx-shared tdeio-shared
+ tdetexteditor-shared ${TAGLIB_LIBRARIES}
+ DESTINATION ${PLUGIN_INSTALL_DIR}
+)
+
+
+##### other data ################################
+
+tde_create_translated_desktop(
+ SOURCE tdefile_mp4.desktop
+ DESTINATION ${SERVICES_INSTALL_DIR}
+ PO_DIR tdefile-desktops
+)
diff --git a/tdefile-plugins/mp4/tdefile_mp4.cpp b/tdefile-plugins/mp4/tdefile_mp4.cpp
new file mode 100644
index 00000000..04291b2d
--- /dev/null
+++ b/tdefile-plugins/mp4/tdefile_mp4.cpp
@@ -0,0 +1,276 @@
+/* This file is part of the TDE project
+ * Copyright (C) 2025 mio <stigma@disroot.org>
+ *
+ * Portions of code based off tdefile_mp3.cpp
+ * Copyright (C) 2001, 2002 Rolf Magnus <ramagnus@kde.org>
+ * Copyright (C) 2002 Ryan Cumming <bodnar42@phalynx.dhs.org>
+ * Copyright (C) 2003 Scott Wheeler <wheeler@kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include "config.h"
+#include "tdefile_mp4.h"
+
+// TQt
+#include <tqfile.h>
+
+// TDE
+#include <kgenericfactory.h>
+#include <kstringvalidator.h>
+
+// TagLib
+#include <id3v1genres.h>
+#include <id3v2tag.h>
+#include <mp4file.h>
+#include <tfilestream.h>
+#include <tpropertymap.h>
+#include <tstring.h>
+
+#define TStringToTQString(s) TQString::fromUtf8(s.toCString(true))
+
+using Mp4Factory = KGenericFactory<TDEMp4Plugin>;
+
+K_EXPORT_COMPONENT_FACTORY(tdefile_mp4, Mp4Factory("tdefile_mp4"))
+
+/**
+ * Do translation between KFileMetaInfo items and TagLib::String in a tidy way.
+ */
+class Translator
+{
+public:
+ Translator(const KFileMetaInfo &info) : m_info(info) {}
+
+ TagLib::String operator[](const char *key) const
+ {
+ return QStringToTString(m_info["id3"][key].value().toString());
+ }
+
+ int toInt(const char *key) const
+ {
+ return m_info["id3"][key].value().toInt();
+ }
+
+private:
+ const KFileMetaInfo &m_info;
+};
+
+class Validator : public KStringListValidator
+{
+public:
+ Validator(const TQStringList& list, bool rejecting, bool fixupEnabled,
+ TQObject *parent, const char *name)
+ : KStringListValidator(list, rejecting, fixupEnabled, parent, name)
+ {
+
+ }
+
+ TQValidator::State validate(TQString&, int&) const override
+ {
+ return TQValidator::Acceptable;
+ }
+};
+
+TDEMp4Plugin::TDEMp4Plugin(TQObject *parent, const char *name, const TQStringList& args)
+ : KFilePlugin(parent, name, args)
+{
+ KFileMimeTypeInfo *info = addMimeTypeInfo(name);
+
+ // ID3 group
+ KFileMimeTypeInfo::GroupInfo *group = addGroupInfo(info, "id3", i18n("ID3 Tag"));
+ setAttributes(group, KFileMimeTypeInfo::Addable | KFileMimeTypeInfo::Removable);
+
+ KFileMimeTypeInfo::ItemInfo *item;
+
+ item = addItemInfo(group, "Title", i18n("Title"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Name);
+
+ item = addItemInfo(group, "Artist", i18n("Artist"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Author);
+
+ item = addItemInfo(group, "Album", i18n("Album"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+
+ item = addItemInfo(group, "Date", i18n("Year"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+
+ item = addItemInfo(group, "Comment", i18n("Comment"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Description);
+
+ item = addItemInfo(group, "Tracknumber", i18n("Track"), TQVariant::Int);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+
+ item = addItemInfo(group, "Genre", i18n("Genre"), TQVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+
+ // Technical group.
+ group = addGroupInfo(info, "Technical", i18n("Technical Details"));
+
+ item = addItemInfo(group, "Length", i18n("Length"), TQVariant::Int);
+ setAttributes(item, KFileMimeTypeInfo::Cummulative);
+ setUnit(item, KFileMimeTypeInfo::Seconds);
+
+ item = addItemInfo(group, "Bitrate", i18n("Average Bitrate"), TQVariant::Int);
+ setAttributes(item, KFileMimeTypeInfo::Averaged);
+ setHint(item, KFileMimeTypeInfo::Bitrate);
+ setSuffix(item, i18n(" kbps"));
+
+ item = addItemInfo(group, "Sample Rate", i18n("Sample Rate"), TQVariant::Int);
+ setSuffix(item, i18n("Hz"));
+
+ item = addItemInfo(group, "Channels", i18n("Channels"), TQVariant::Int);
+}
+
+TQValidator* TDEMp4Plugin::createValidator(const TQString& mimeType, const TQString& group,
+ const TQString& key, TQObject *parent, const char* name) const
+{
+ if (key == "Tracknumber" || key == "Date")
+ {
+ return new TQIntValidator(0, 9999, parent, name);
+ }
+
+ if (key == "Genre")
+ {
+ TQStringList genres;
+ for (const auto& genre : TagLib::ID3v1::genreList())
+ {
+ genres.append(TStringToTQString(genre));
+ }
+
+ return new Validator(genres, false, true, parent, name);
+ }
+
+ return nullptr;
+}
+
+bool TDEMp4Plugin::readInfo(KFileMetaInfo& info, unsigned what)
+{
+ using What = KFileMetaInfo::What;
+
+ bool readID3 = false;
+ bool readTech = false;
+
+ if (what & (What::Fastest | What::DontCare | What::ContentInfo))
+ {
+ readID3 = true;
+ }
+
+ if (what & (What::Fastest | What::DontCare | What::TechnicalInfo))
+ {
+ readTech = true;
+ }
+
+ if (!readID3 && !readTech)
+ {
+ return true;
+ }
+
+ if (info.path().isNull())
+ {
+ // Remote file.
+ return false;
+ }
+
+ TagLib::MP4::File file(TQFile::encodeName(info.path()), readTech);
+
+ if (!file.isOpen())
+ {
+ kdWarning(7034) << "Could not open " << file.name() << endl;
+ return false;
+ }
+
+ if (readID3)
+ {
+ KFileMetaInfoGroup id3group = appendGroup(info, "id3");
+ const TagLib::MP4::Tag* tag = file.tag();
+
+ if (!tag->title().isEmpty())
+ {
+ appendItem(id3group, "Title", TStringToTQString(tag->title()).stripWhiteSpace());
+ }
+ if (!tag->artist().isEmpty())
+ {
+ appendItem(id3group, "Artist", TStringToTQString(tag->artist()).stripWhiteSpace());
+ }
+ if (!tag->album().isEmpty())
+ {
+ appendItem(id3group, "Album", TStringToTQString(tag->album()).stripWhiteSpace());
+ }
+ if (!tag->comment().isEmpty())
+ {
+ appendItem(id3group, "Comment", TStringToTQString(tag->comment()).stripWhiteSpace());
+ }
+ if (!tag->genre().isEmpty())
+ {
+ appendItem(id3group, "Genre", TStringToTQString(tag->genre()).stripWhiteSpace());
+ }
+
+ TQString date = (tag->year() > 0) ? TQString::number(tag->year()) : TQString::null;
+ TQString track = (tag->track() > 0) ? TQString::number(tag->track()) : TQString::null;
+
+ appendItem(id3group, "Date", date);
+ appendItem(id3group, "Tracknumber", track);
+ }
+
+ if (readTech)
+ {
+ KFileMetaInfoGroup techGroup = appendGroup(info, "Technical");
+ const TagLib::AudioProperties* audioProperties = file.audioProperties();
+
+ appendItem(techGroup, "Length", audioProperties->lengthInSeconds());
+ appendItem(techGroup, "Bitrate", audioProperties->bitrate());
+ appendItem(techGroup, "Sample Rate", audioProperties->sampleRate());
+ appendItem(techGroup, "Channels", audioProperties->channels());
+ }
+
+ return true;
+}
+
+bool TDEMp4Plugin::writeInfo(const KFileMetaInfo& info) const
+{
+ TagLib::ID3v2::FrameFactory::instance()->setDefaultTextEncoding(TagLib::String::UTF8);
+ TagLib::FileStream stream(TQFile::encodeName(info.path()), false);
+
+ if (!stream.isOpen() || stream.readOnly())
+ {
+ kdDebug(7034) << "couldn't open " << info.path() << " for writing" << endl;
+ return false;
+ }
+
+ TagLib::MP4::File file(&stream, false);
+
+ if (!file.isValid())
+ {
+ return false;
+ }
+
+ Translator t(info);
+
+ file.tag()->setTitle(t["Title"]);
+ file.tag()->setArtist(t["Artist"]);
+ file.tag()->setAlbum(t["Album"]);
+ file.tag()->setYear(t.toInt("Date"));
+ file.tag()->setComment(t["Comment"]);
+ file.tag()->setTrack(t.toInt("Tracknumber"));
+ file.tag()->setGenre(t["Genre"]);
+
+ file.save();
+
+ return true;
+}
+
+#include "tdefile_mp4.moc"
diff --git a/tdefile-plugins/mp4/tdefile_mp4.desktop b/tdefile-plugins/mp4/tdefile_mp4.desktop
new file mode 100644
index 00000000..7730b871
--- /dev/null
+++ b/tdefile-plugins/mp4/tdefile_mp4.desktop
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Service
+Name=MP4 Info
+X-TDE-ServiceTypes=KFilePlugin
+X-TDE-Library=tdefile_mp4
+MimeType=audio/mp4
+PreferredGroups=id3,Technical
+PreferredItems=Title,Artist,Album,Genre,Date,Tracknumber,Length,Comment,Bitrate,Sample Rate,Channels
diff --git a/tdefile-plugins/mp4/tdefile_mp4.h b/tdefile-plugins/mp4/tdefile_mp4.h
new file mode 100644
index 00000000..16e9b65a
--- /dev/null
+++ b/tdefile-plugins/mp4/tdefile_mp4.h
@@ -0,0 +1,39 @@
+/* This file is part of the TDE project
+ * Copyright (C) 2025 mio <stigma@disroot.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation version 2.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef __TDEFILE_MP4_H__
+#define __TDEFILE_MP4_H__
+
+#include <tdefilemetainfo.h>
+
+class TQStringList;
+
+class TDEMp4Plugin : public KFilePlugin
+{
+ TQ_OBJECT
+
+public:
+ TDEMp4Plugin(TQObject *parent, const char *name, const TQStringList& meta);
+
+ TQValidator* createValidator(const TQString& mimeType, const TQString& group,
+ const TQString& key, TQObject *parent, const char* name) const override;
+
+ bool readInfo(KFileMetaInfo& info, unsigned what) override;
+ bool writeInfo(const KFileMetaInfo& info) const override;
+};
+
+#endif /* __TDEFILE_MP4_H__ */
diff --git a/tdefile-plugins/mpc/tdefile_mpc.cpp b/tdefile-plugins/mpc/tdefile_mpc.cpp
index 9a6a3d42..b239ad69 100644
--- a/tdefile-plugins/mpc/tdefile_mpc.cpp
+++ b/tdefile-plugins/mpc/tdefile_mpc.cpp
@@ -32,7 +32,7 @@
#include <kdebug.h>
#include <kurl.h>
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <ksavefile.h>
@@ -46,6 +46,8 @@
#include <unistd.h>
#include <ctype.h>
+#define TStringToTQString(s) TQString::fromUtf8((s).toCString(true))
+
K_EXPORT_COMPONENT_FACTORY(tdefile_mpc, KGenericFactory<KMpcPlugin>("tdefile_mpc"))
KMpcPlugin::KMpcPlugin( TQObject *parent, const char *name,
@@ -157,13 +159,13 @@ bool KMpcPlugin::readInfo( KFileMetaInfo& info, uint what )
TQString date = file->tag()->year() > 0 ? TQString::number(file->tag()->year()) : TQString();
TQString track = file->tag()->track() > 0 ? TQString::number(file->tag()->track()) : TQString();
- appendItem(commentgroup, "Title", TQString(TStringToQString(file->tag()->title())).stripWhiteSpace());
- appendItem(commentgroup, "Artist", TQString(TStringToQString(file->tag()->artist())).stripWhiteSpace());
- appendItem(commentgroup, "Album", TQString(TStringToQString(file->tag()->album())).stripWhiteSpace());
+ appendItem(commentgroup, "Title", TStringToTQString(file->tag()->title()).stripWhiteSpace());
+ appendItem(commentgroup, "Artist", TStringToTQString(file->tag()->artist()).stripWhiteSpace());
+ appendItem(commentgroup, "Album", TStringToTQString(file->tag()->album()).stripWhiteSpace());
appendItem(commentgroup, "Date", date);
- appendItem(commentgroup, "Comment", TQString(TStringToQString(file->tag()->comment())).stripWhiteSpace());
+ appendItem(commentgroup, "Comment", TStringToTQString(file->tag()->comment()).stripWhiteSpace());
appendItem(commentgroup, "Tracknumber", track);
- appendItem(commentgroup, "Genre", TQString(TStringToQString(file->tag()->genre())).stripWhiteSpace());
+ appendItem(commentgroup, "Genre", TStringToTQString(file->tag()->genre()).stripWhiteSpace());
}
if (readTech)
@@ -208,7 +210,7 @@ bool KMpcPlugin::writeInfo(const KFileMetaInfo& info) const
{
TagLib::File *file;
- if (!TagLib::File::isWritable(TQFile::encodeName(info.path()).data())) {
+ if (access(info.path().local8Bit().data(), R_OK|W_OK)) {
kdDebug(7034) << "can't write to " << info.path() << endl;
return false;
}
diff --git a/tdefile-plugins/mpc/tdefile_mpc.h b/tdefile-plugins/mpc/tdefile_mpc.h
index 4bb3a387..b3a223e4 100644
--- a/tdefile-plugins/mpc/tdefile_mpc.h
+++ b/tdefile-plugins/mpc/tdefile_mpc.h
@@ -31,7 +31,7 @@ class TQStringList;
class KMpcPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/mpeg/tdefile_mpeg.cpp b/tdefile-plugins/mpeg/tdefile_mpeg.cpp
index f32c1576..8ab2a5cf 100644
--- a/tdefile-plugins/mpeg/tdefile_mpeg.cpp
+++ b/tdefile-plugins/mpeg/tdefile_mpeg.cpp
@@ -24,7 +24,7 @@
#include <config.h>
#include "tdefile_mpeg.h"
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
diff --git a/tdefile-plugins/mpeg/tdefile_mpeg.h b/tdefile-plugins/mpeg/tdefile_mpeg.h
index 113bd8ee..0bfc2093 100644
--- a/tdefile-plugins/mpeg/tdefile_mpeg.h
+++ b/tdefile-plugins/mpeg/tdefile_mpeg.h
@@ -27,7 +27,7 @@ class TQStringList;
class KMpegPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/ogg/tdefile_ogg.cpp b/tdefile-plugins/ogg/tdefile_ogg.cpp
index bf1cbf94..fc73cff4 100644
--- a/tdefile-plugins/ogg/tdefile_ogg.cpp
+++ b/tdefile-plugins/ogg/tdefile_ogg.cpp
@@ -30,7 +30,7 @@
#include <kdebug.h>
#include <kurl.h>
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <ksavefile.h>
diff --git a/tdefile-plugins/ogg/tdefile_ogg.h b/tdefile-plugins/ogg/tdefile_ogg.h
index f03e4283..38e65047 100644
--- a/tdefile-plugins/ogg/tdefile_ogg.h
+++ b/tdefile-plugins/ogg/tdefile_ogg.h
@@ -28,7 +28,7 @@ class TQStringList;
class KOggPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/sid/tdefile_sid.h b/tdefile-plugins/sid/tdefile_sid.h
index fadf13f5..cec8465c 100644
--- a/tdefile-plugins/sid/tdefile_sid.h
+++ b/tdefile-plugins/sid/tdefile_sid.h
@@ -27,7 +27,7 @@ class TQStringList;
class KSidPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/theora/tdefile_theora.h b/tdefile-plugins/theora/tdefile_theora.h
index a1aa0c09..69b3dcd8 100644
--- a/tdefile-plugins/theora/tdefile_theora.h
+++ b/tdefile-plugins/theora/tdefile_theora.h
@@ -30,7 +30,7 @@ class TQStringList;
class theoraPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public:
diff --git a/tdefile-plugins/wav/tdefile_wav.cpp b/tdefile-plugins/wav/tdefile_wav.cpp
index d0057b42..31b72f1f 100644
--- a/tdefile-plugins/wav/tdefile_wav.cpp
+++ b/tdefile-plugins/wav/tdefile_wav.cpp
@@ -20,7 +20,7 @@
#include <config.h>
#include "tdefile_wav.h"
-#include <kprocess.h>
+#include <tdeprocess.h>
#include <tdelocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
@@ -32,12 +32,7 @@
#include <tqfile.h>
#include <tqdatetime.h>
-#if !defined(__osf__)
#include <inttypes.h>
-#else
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-#endif
typedef KGenericFactory<KWavPlugin> WavFactory;
diff --git a/tdefile-plugins/wav/tdefile_wav.h b/tdefile-plugins/wav/tdefile_wav.h
index 53eb6ccd..07c581a9 100644
--- a/tdefile-plugins/wav/tdefile_wav.h
+++ b/tdefile-plugins/wav/tdefile_wav.h
@@ -26,7 +26,7 @@ class TQStringList;
class KWavPlugin: public KFilePlugin
{
- Q_OBJECT
+ TQ_OBJECT
public: