summaryrefslogtreecommitdiffstats
path: root/kfile-plugins/flac/kfile_flac.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kfile-plugins/flac/kfile_flac.cpp')
-rw-r--r--kfile-plugins/flac/kfile_flac.cpp282
1 files changed, 0 insertions, 282 deletions
diff --git a/kfile-plugins/flac/kfile_flac.cpp b/kfile-plugins/flac/kfile_flac.cpp
deleted file mode 100644
index c621f74c..00000000
--- a/kfile-plugins/flac/kfile_flac.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/* This file is part of the KDE project
- * Copyright (C) 2003-2004 Allan Sandfeld Jensen <kde@carewolf.com>
- *
- * Originally based upon the kfile_ogg plugin:
- * Copyright (C) 2001, 2002 Rolf Magnus <ramagnus@kde.org>
- * Interfacing to TagLib is copied from kfile_mp3 plugin:
- * 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 "kfile_flac.h"
-
-#include <tqcstring.h>
-#include <tqfile.h>
-#include <tqdatetime.h>
-#include <tqdict.h>
-#include <tqvalidator.h>
-#include <tqfileinfo.h>
-
-#include <kdebug.h>
-#include <kurl.h>
-#include <kprocess.h>
-#include <klocale.h>
-#include <kgenericfactory.h>
-#include <ksavefile.h>
-
-#include <tag.h>
-#if (TAGLIB_MAJOR_VERSION>1) || \
- ((TAGLIB_MAJOR_VERSION==1) && (TAGLIB_MINOR_VERSION>=2))
-#define TAGLIB_1_2
-#endif
-
-#include <tstring.h>
-#include <tfile.h>
-#include <flacfile.h>
-#ifdef TAGLIB_1_2
-#include <oggflacfile.h>
-#endif
-
-#include <sys/stat.h>
-#include <unistd.h>
-#include <ctype.h>
-
-K_EXPORT_COMPONENT_FACTORY(kfile_flac, KGenericFactory<KFlacPlugin>("kfile_flac"))
-
-KFlacPlugin::KFlacPlugin( TQObject *parent, const char *name,
- const TQStringList &args )
- : KFilePlugin( parent, name, args )
-{
- kdDebug(7034) << "flac plugin\n";
-
- makeMimeTypeInfo( "audio/x-flac" );
-#ifdef TAGLIB_1_2
- makeMimeTypeInfo( "audio/x-oggflac" );
-#endif
-
-}
-
-void KFlacPlugin::makeMimeTypeInfo(const TQString& mimeType)
-{
- KFileMimeTypeInfo* info = addMimeTypeInfo( mimeType );
-
- KFileMimeTypeInfo::GroupInfo* group = 0;
-
- // comment group
- group = addGroupInfo(info, "Comment", i18n("Comment"));
- setAttributes(group, KFileMimeTypeInfo::Addable |
- KFileMimeTypeInfo::Removable);
-
- KFileMimeTypeInfo::ItemInfo* item = 0;
-
- item = addItemInfo(group, "Artist", i18n("Artist"), TQVariant::String);
- setHint(item, KFileMimeTypeInfo::Author);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Title", i18n("Title"), TQVariant::String);
- setHint(item, KFileMimeTypeInfo::Name);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Album", i18n("Album"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Genre", i18n("Genre"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Tracknumber", i18n("Track Number"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Date", i18n("Date"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Description", i18n("Description"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Organization", i18n("Organization"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Location", i18n("Location"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
- item = addItemInfo(group, "Copyright", i18n("Copyright"), TQVariant::String);
- setAttributes(item, KFileMimeTypeInfo::Modifiable);
-
-
- addVariableInfo(group, TQVariant::String, KFileMimeTypeInfo::Addable |
- KFileMimeTypeInfo::Removable |
- KFileMimeTypeInfo::Modifiable);
-
- // technical group
- group = addGroupInfo(info, "Technical", i18n("Technical Details"));
- setAttributes(group, 0);
-
- addItemInfo(group, "Channels", i18n("Channels"), TQVariant::Int);
-
- item = addItemInfo(group, "Sample Rate", i18n("Sample Rate"), TQVariant::Int);
- setSuffix(item, i18n(" Hz"));
-
- item = addItemInfo(group, "Sample Width", i18n("Sample Width"), TQVariant::Int);
- setSuffix(item, i18n(" bits"));
-
- item = addItemInfo(group, "Bitrate", i18n("Average Bitrate"),
- TQVariant::Int);
- setAttributes(item, KFileMimeTypeInfo::Averaged);
- setHint(item, KFileMimeTypeInfo::Bitrate);
- setSuffix(item, i18n( " kbps"));
-
- item = addItemInfo(group, "Length", i18n("Length"), TQVariant::Int);
- setAttributes(item, KFileMimeTypeInfo::Cummulative);
- setHint(item, KFileMimeTypeInfo::Length);
- setUnit(item, KFileMimeTypeInfo::Seconds);
-}
-
-bool KFlacPlugin::readInfo( KFileMetaInfo& info, uint what )
-{
- if ( info.path().isEmpty() ) // remote file
- return false;
-
- bool readComment = false;
- bool readTech = false;
- if (what & (KFileMetaInfo::Fastest |
- KFileMetaInfo::DontCare |
- KFileMetaInfo::ContentInfo)) readComment = true;
-
- if (what & (KFileMetaInfo::Fastest |
- KFileMetaInfo::DontCare |
- KFileMetaInfo::TechnicalInfo)) readTech = true;
-
- TagLib::File *file = 0;
-
- if (info.mimeType() == "audio/x-flac")
- file = new TagLib::FLAC::File(TQFile::encodeName(info.path()).data(), readTech);
-#ifdef TAGLIB_1_2
- else
- file = new TagLib::Ogg::FLAC::File(TQFile::encodeName(info.path()).data(), readTech);
-#endif
-
- if (!file || !file->isValid())
- {
- kdDebug(7034) << "Couldn't open " << file->name() << endl;
- delete file;
- return false;
- }
-
- if(readComment && file->tag())
- {
- KFileMetaInfoGroup commentgroup = appendGroup(info, "Comment");
-
- 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, "Date", date);
- appendItem(commentgroup, "Comment", TQString(TStringToQString(file->tag()->comment())).stripWhiteSpace());
- appendItem(commentgroup, "Tracknumber", track);
- appendItem(commentgroup, "Genre", TQString(TStringToQString(file->tag()->genre())).stripWhiteSpace());
- }
-
- if (readTech && file->audioProperties())
- {
- KFileMetaInfoGroup techgroup = appendGroup(info, "Technical");
- TagLib::FLAC::Properties *properties =
- (TagLib::FLAC::Properties*)(file->audioProperties());
-
- appendItem(techgroup, "Bitrate", properties->bitrate());
- appendItem(techgroup, "Sample Rate", properties->sampleRate());
- appendItem(techgroup, "Sample Width", properties->sampleWidth());
- appendItem(techgroup, "Channels", properties->channels());
- appendItem(techgroup, "Length", properties->length());
- }
-
- delete file;
- return true;
-
-}
-
-/**
- * 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["Comment"][key].value().toString());
- }
- int toInt(const char *key) const
- {
- return m_info["Comment"][key].value().toInt();
- }
-private:
- const KFileMetaInfo &m_info;
-};
-
-bool KFlacPlugin::writeInfo(const KFileMetaInfo& info) const
-{
- TagLib::File *file;
-
- if (!TagLib::File::isWritable(TQFile::encodeName(info.path()).data())) {
- kdDebug(7034) << "can't write to " << info.path() << endl;
- return false;
- }
-
- if (info.mimeType() == "audio/x-flac")
- file = new TagLib::FLAC::File(TQFile::encodeName(info.path()).data(), false);
-#ifdef TAGLIB_1_2
- else
- file = new TagLib::Ogg::FLAC::File(TQFile::encodeName(info.path()).data(), false);
-#endif
-
- if(!file->isOpen())
- {
- kdDebug(7034) << "couldn't open " << info.path() << endl;
- delete file;
- 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();
-
- delete file;
- return true;
-}
-
-TQValidator* KFlacPlugin::createValidator( const TQString&,
- const TQString &group, const TQString &key,
- TQObject* parent, const char* name) const
-{
- if(key == "Tracknumber" || key == "Date")
- {
- return new TQIntValidator(0, 9999, parent, name);
- }
- else
- return new TQRegExpValidator(TQRegExp(".*"), parent, name);
-}
-
-#include "kfile_flac.moc"