summaryrefslogtreecommitdiffstats
path: root/kfile-plugins/sid
diff options
context:
space:
mode:
Diffstat (limited to 'kfile-plugins/sid')
-rw-r--r--kfile-plugins/sid/Makefile.am22
-rw-r--r--kfile-plugins/sid/kfile_sid.cpp227
-rw-r--r--kfile-plugins/sid/kfile_sid.desktop60
-rw-r--r--kfile-plugins/sid/kfile_sid.h42
4 files changed, 351 insertions, 0 deletions
diff --git a/kfile-plugins/sid/Makefile.am b/kfile-plugins/sid/Makefile.am
new file mode 100644
index 00000000..5a3c33e1
--- /dev/null
+++ b/kfile-plugins/sid/Makefile.am
@@ -0,0 +1,22 @@
+## Makefile.am for sid file meta info plugin
+
+# set the include path for X, qt and KDE
+INCLUDES = $(all_includes) $(taglib_includes)
+
+# these are the headers for your project
+noinst_HEADERS = kfile_sid.h
+
+kde_module_LTLIBRARIES = kfile_sid.la
+
+kfile_sid_la_SOURCES = kfile_sid.cpp
+kfile_sid_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN)
+kfile_sid_la_LIBADD = $(LIB_KIO)
+
+# let automoc handle all of the meta source files (moc)
+METASOURCES = AUTO
+
+messages: rc.cpp
+ $(XGETTEXT) kfile_sid.cpp -o $(podir)/kfile_sid.pot
+
+services_DATA = kfile_sid.desktop
+servicesdir = $(kde_servicesdir)
diff --git a/kfile-plugins/sid/kfile_sid.cpp b/kfile-plugins/sid/kfile_sid.cpp
new file mode 100644
index 00000000..92b03c30
--- /dev/null
+++ b/kfile-plugins/sid/kfile_sid.cpp
@@ -0,0 +1,227 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2003 Rolf Magnus <ramagnus@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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "kfile_sid.h"
+
+#include <klocale.h>
+#include <kgenericfactory.h>
+#include <kstringvalidator.h>
+#include <kdebug.h>
+
+#include <qfile.h>
+#include <qvalidator.h>
+#include <qwidget.h>
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+typedef KGenericFactory<KSidPlugin> SidFactory;
+
+K_EXPORT_COMPONENT_FACTORY(kfile_sid, SidFactory("kfile_sid"))
+
+KSidPlugin::KSidPlugin(QObject *parent, const char *name,
+ const QStringList &args)
+
+ : KFilePlugin(parent, name, args)
+{
+ kdDebug(7034) << "sid plugin\n";
+
+ KFileMimeTypeInfo* info = addMimeTypeInfo("audio/prs.sid");
+
+ KFileMimeTypeInfo::GroupInfo* group = 0L;
+
+ // General group
+ group = addGroupInfo(info, "General", i18n("General"));
+
+ KFileMimeTypeInfo::ItemInfo* item;
+
+ item = addItemInfo(group, "Title", i18n("Title"), QVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Name);
+
+ item = addItemInfo(group, "Artist", i18n("Artist"), QVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Author);
+
+ item = addItemInfo(group, "Copyright", i18n("Copyright"), QVariant::String);
+ setAttributes(item, KFileMimeTypeInfo::Modifiable);
+ setHint(item, KFileMimeTypeInfo::Description);
+
+ // technical group
+ group = addGroupInfo(info, "Technical", i18n("Technical Details"));
+
+ item = addItemInfo(group, "Version", i18n("Version"), QVariant::Int);
+ setPrefix(item, i18n("PSID v"));
+
+ addItemInfo(group, "Number of Songs", i18n("Number of Songs"), QVariant::Int);
+ item = addItemInfo(group, "Start Song", i18n("Start Song"), QVariant::Int);
+}
+
+bool KSidPlugin::readInfo(KFileMetaInfo& info, uint /*what*/)
+{
+ if ( info.path().isEmpty() ) // remote file
+ return false;
+ QFile file(info.path());
+ if ( !file.open(IO_ReadOnly) )
+ return false;
+
+ int version;
+ int num_songs;
+ int start_song;
+ QString name;
+ QString artist;
+ QString copyright;
+
+ char buf[64] = { 0 };
+
+ if (4 != file.readBlock(buf, 4))
+ return false;
+ if (strncmp(buf, "PSID", 4))
+ return false;
+
+ //read version
+ int ch;
+ if (0 > (ch = file.getch()))
+ return false;
+ version = ch << 8;
+ if (0 > (ch = file.getch()))
+ return false;
+ version+= ch;
+
+ //read number of songs
+ file.at(0xE);
+ if (0 > (ch = file.getch()))
+ return false;
+ num_songs = ch << 8;
+ if (0 > (ch = file.getch()))
+ return false;
+ num_songs += ch;
+
+ //start song
+ if (0 > (ch = file.getch()))
+ return false;
+ start_song = ch << 8;
+ if (0 > (ch = file.getch()))
+ return false;
+ start_song += ch;
+
+ //name
+ file.at(0x16);
+ if (32 != file.readBlock(buf, 32))
+ return false;
+ name = buf;
+
+ //artist
+ if (32 != file.readBlock(buf, 32))
+ return false;
+ artist = buf;
+
+ //copyright
+ if (32 != file.readBlock(buf, 32))
+ return false;
+ copyright = buf;
+
+ QString TODO("TODO");
+ kdDebug(7034) << "sid plugin readInfo\n";
+
+ KFileMetaInfoGroup general = appendGroup(info, "General");
+
+ appendItem(general, "Title", name);
+ appendItem(general, "Artist", artist);
+ appendItem(general, "Copyright", copyright);
+
+ KFileMetaInfoGroup tech = appendGroup(info, "Technical");
+
+ appendItem(tech, "Version", version);
+ appendItem(tech, "Number of Songs", num_songs);
+ appendItem(tech, "Start Song", start_song);
+
+ kdDebug(7034) << "reading finished\n";
+ return true;
+}
+
+bool KSidPlugin::writeInfo(const KFileMetaInfo& info) const
+{
+ kdDebug(7034) << k_funcinfo << endl;
+
+ char name[32] = {0};
+ char artist[32] = {0};
+ char copyright[32] = {0};
+
+ int file = 0;
+ QString s;
+
+ KFileMetaInfoGroup group = info.group("General");
+ if (!group.isValid())
+ goto failure;
+
+ s = group.item("Title").value().toString();
+ if (s.isNull()) goto failure;
+ strncpy(name, s.local8Bit(), 31);
+
+ s = group.item("Artist").value().toString();
+ if (s.isNull()) goto failure;
+ strncpy(artist, s.local8Bit(), 31);
+
+ s = group.item("Copyright").value().toString();
+ if (s.isNull()) goto failure;
+ strncpy(copyright, s.local8Bit(), 31);
+
+ kdDebug(7034) << "Opening sid file " << info.path() << endl;
+ file = ::open(QFile::encodeName(info.path()), O_WRONLY);
+ //name
+ if (-1 == ::lseek(file, 0x16, SEEK_SET))
+ goto failure;
+ if (32 != ::write(file, name, 32))
+ goto failure;
+
+ //artist
+ if (32 != ::write(file, artist, 32))
+ goto failure;
+
+ //copyright
+ if (32 != write(file, copyright, 32))
+ goto failure;
+
+ close(file);
+ return true;
+
+failure:
+ if (file) close(file);
+ kdDebug(7034) << "something went wrong writing to sid file\n";
+ return false;
+}
+
+QValidator*
+KSidPlugin::createValidator(const QString& /*mimetype*/, const QString& group,
+ const QString& /*key*/, QObject* parent,
+ const char* name) const
+{
+ kdDebug(7034) << k_funcinfo << endl;
+ // all items in "General" group are strings of max lenght 31
+ if (group == "General")
+ return new QRegExpValidator(QRegExp(".{,31}"), parent, name);
+ // all others are read-only
+ return 0;
+}
+
+
+
+#include "kfile_sid.moc"
diff --git a/kfile-plugins/sid/kfile_sid.desktop b/kfile-plugins/sid/kfile_sid.desktop
new file mode 100644
index 00000000..e3f29ebc
--- /dev/null
+++ b/kfile-plugins/sid/kfile_sid.desktop
@@ -0,0 +1,60 @@
+[Desktop Entry]
+Type=Service
+Name=SID Info
+Name[bg]=Информация за SID
+Name[br]=Titouroù SID
+Name[bs]=SID informacije
+Name[ca]=Informació SID
+Name[cs]=SID info
+Name[cy]=Gwybodaeth SID
+Name[da]=SID-info
+Name[de]=SID-Info
+Name[el]=Πληροφορίες SID
+Name[eo]=SID-informo
+Name[es]=Info SID
+Name[et]=SID info
+Name[eu]=SID informazioa
+Name[fa]=اطلاعات SID
+Name[fi]=SID-tiedot
+Name[fr]=Informations SID
+Name[ga]=Eolas faoi SID
+Name[gl]=Información SID
+Name[he]=מידע SID
+Name[hu]=SID-jellemzők
+Name[is]=SID upplýsingar
+Name[it]=Informazioni SID
+Name[ja]=SID 情報
+Name[kk]=SID мәліметі
+Name[km]=ព័ត៌មាន SID
+Name[ko]=SID 정보
+Name[lt]=SID Informacija
+Name[mk]=SID информации
+Name[nb]=SID-info
+Name[nds]=SID-Info
+Name[ne]=एसआईडी सूचना
+Name[nl]=SID-informatie
+Name[nn]=SID-info
+Name[pa]=SID ਜਾਣਕਾਰੀ
+Name[pl]=Informacja CD
+Name[pt]=Informação do SID
+Name[pt_BR]=Informação sobre SID
+Name[ro]=Informaţii SID
+Name[ru]=Сведения о SID
+Name[sk]=SID info
+Name[sl]=Podatki o SID
+Name[sr]=Информације о SID-у
+Name[sr@Latn]=Informacije o SID-u
+Name[sv]=SID-information
+Name[ta]=SID தகவல்
+Name[tg]=SID Ахборот
+Name[th]=ข้อมูล SID
+Name[tr]=SID Bilgisi
+Name[uk]=Інформація по SID
+Name[zh_CN]=SID 信息
+Name[zh_HK]=SID 資訊
+Name[zh_TW]=SID 資訊
+ServiceTypes=KFilePlugin
+X-KDE-Library=kfile_sid
+MimeType=audio/prs.sid
+PreferredGroups=General,Technical
+PreferredItems=Title,Artist,Copyright,Number of Songs,Start Song,Version
diff --git a/kfile-plugins/sid/kfile_sid.h b/kfile-plugins/sid/kfile_sid.h
new file mode 100644
index 00000000..13978320
--- /dev/null
+++ b/kfile-plugins/sid/kfile_sid.h
@@ -0,0 +1,42 @@
+/* This file is part of the KDE project
+ * Copyright (C) 2003 Rolf Magnus <ramagnus@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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * $Id$
+ */
+
+#ifndef KFILE_SID_H
+#define KFILE_SID_H
+
+#include <kfilemetainfo.h>
+
+class QStringList;
+
+class KSidPlugin: public KFilePlugin
+{
+ Q_OBJECT
+
+public:
+ KSidPlugin(QObject *parent, const char *name, const QStringList& args);
+
+ virtual bool readInfo(KFileMetaInfo& info, uint what);
+ virtual bool writeInfo(const KFileMetaInfo& info) const;
+ QValidator* createValidator(const QString& mimetype, const QString& group,
+ const QString& key, QObject* parent,
+ const char* name) const;
+};
+
+#endif