public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Rex Dieter <rdieter@fedoraproject.org>
To: git-commits@fedoraproject.org
Subject: [rpms/amarok] epel10: - amarok-1.4.8
Date: Mon, 06 Jul 2026 18:03:44 GMT [thread overview]
Message-ID: <178336102455.1.2137512662231279556.rpms-amarok-513e32fc8c39@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : rpms/amarok
Branch : epel10
Commit : 513e32fc8c393ff77acd1584ba98d2cfee14183f
Author : Rex Dieter <rdieter@fedoraproject.org>
Date : 2007-12-21T01:21:05+00:00
Stats : +12/-3663 in 7 file(s)
URL : https://src.fedoraproject.org/rpms/amarok/c/513e32fc8c393ff77acd1584ba98d2cfee14183f?branch=epel10
Log:
- amarok-1.4.8
---
diff --git a/.cvsignore b/.cvsignore
index 7cd9527..4629924 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1 +1 @@
-amarok-1.4.7.tar.bz2
+amarok-1.4.8.tar.bz2
diff --git a/amarok-1.4.7-147126.patch b/amarok-1.4.7-147126.patch
deleted file mode 100644
index b5d7f05..0000000
--- a/amarok-1.4.7-147126.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-diff -up ./amarok/src/statusbar/statusBarBase.cpp.147126 ./amarok/src/statusbar/statusBarBase.cpp
---- ./amarok/src/statusbar/statusBarBase.cpp.147126 2007-08-07 19:48:28.000000000 +0200
-+++ ./amarok/src/statusbar/statusBarBase.cpp 2007-09-02 13:55:38.000000000 +0200
-@@ -25,6 +25,7 @@
- #include "squeezedtextlabel.h"
- #include "statusBarBase.h"
- #include "threadmanager.h"
-+#include "enginecontroller.h"
-
- #include <kio/job.h>
- #include <kiconloader.h>
-@@ -343,9 +344,13 @@ StatusBar::longMessageThreadSafe( const
- void
- StatusBar::customEvent( QCustomEvent *e )
- {
-- QString *s = static_cast<QString*>( e->data() );
-- longMessage( *s );
-- delete s;
-+ if(e->type() == 1000 ){
-+ QString *s = static_cast<QString*>( e->data() );
-+ longMessage( *s );
-+ delete s;
-+ }else if(e->type() == 2000 ){
-+ EngineController::instance()->unplayableNotification();
-+ }
- }
-
-
-diff -up ./amarok/src/enginecontroller.cpp.147126 ./amarok/src/enginecontroller.cpp
---- ./amarok/src/enginecontroller.cpp.147126 2007-08-07 19:48:28.000000000 +0200
-+++ ./amarok/src/enginecontroller.cpp 2007-09-02 13:55:38.000000000 +0200
-@@ -244,13 +244,10 @@ bool EngineController::canDecode( const
- if( engine() != EngineController::instance()->m_voidEngine )
- {
- //we special case this as otherwise users hate us
-- if ( !valid && ext.lower() == "mp3" && !installDistroCodec(AmarokConfig::soundSystem()) )
-- Amarok::StatusBar::instance()->longMessageThreadSafe(
-- i18n( "<p>The %1 claims it <b>cannot</b> play MP3 files."
-- "<p>You may want to choose a different engine from the <i>Configure Dialog</i>, or examine "
-- "the installation of the multimedia-framework that the current engine uses. "
-- "<p>You may find useful information in the <i>FAQ</i> section of the <i>Amarok HandBook</i>." )
-- .arg( AmarokConfig::soundSystem() ), KDE::StatusBar::Error );
-+ if ( !valid && ext.lower() == "mp3"){
-+ QCustomEvent * e = new QCustomEvent( 2000 );
-+ QApplication::postEvent( Amarok::StatusBar::instance(), e );
-+ }
-
- // Cache this result for the next lookup
- if ( !ext.isEmpty() )
-@@ -260,6 +257,17 @@ bool EngineController::canDecode( const
- return valid;
- }
-
-+void EngineController::unplayableNotification() {
-+
-+ if( !installDistroCodec(AmarokConfig::soundSystem()))
-+ Amarok::StatusBar::instance()->longMessageThreadSafe(
-+ i18n( "<p>The %1 claims it <b>cannot</b> play MP3 files."
-+ "<p>You may want to choose a different engine from the <i>Configure Dialog</i>, or examine "
-+ "the installation of the multimedia-framework that the current engine uses. "
-+ "<p>You may find useful information in the <i>FAQ</i> section of the <i>Amarok HandBook</i>." )
-+ .arg( AmarokConfig::soundSystem() ), KDE::StatusBar::Error );
-+}
-+
- bool EngineController::installDistroCodec( const QString& engine /*Filetype type*/)
- {
- KService::Ptr service = KTrader::self()->query( "Amarok/CodecInstall"
-diff -up ./amarok/src/enginecontroller.h.147126 ./amarok/src/enginecontroller.h
---- ./amarok/src/enginecontroller.h.147126 2007-08-07 19:48:28.000000000 +0200
-+++ ./amarok/src/enginecontroller.h 2007-09-02 13:55:38.000000000 +0200
-@@ -52,6 +52,7 @@ public:
- uint trackPosition() const;
-
- EngineBase* loadEngine();
-+ void unplayableNotification();
-
- uint trackLength() const { return m_bundle.length() * 1000; }
- const MetaBundle &bundle() const;
diff --git a/amarok-1.4.7-148317.patch b/amarok-1.4.7-148317.patch
deleted file mode 100644
index e6bf51b..0000000
--- a/amarok-1.4.7-148317.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- branches/stable/extragear/multimedia/amarok/src/playlist.cpp 2007/08/28 03:23:02 705493
-+++ branches/stable/extragear/multimedia/amarok/src/playlist.cpp 2007/08/28 03:25:34 705494
-@@ -1227,7 +1227,10 @@
- }
- else
- {
-- if ( !AmarokConfig::randomMode() || m_prevTracks.count() <= 1 )
-+ if( dynamicMode() )
-+ {
-+ }
-+ else if( !AmarokConfig::randomMode() || m_prevTracks.count() <= 1 )
- {
- if( item )
- {
diff --git a/amarok-1.4.7-utf8.patch b/amarok-1.4.7-utf8.patch
deleted file mode 100644
index d83d6f3..0000000
--- a/amarok-1.4.7-utf8.patch
+++ /dev/null
@@ -1,14 +0,0 @@
---- amarok-1.4.7.old/amarok/src/mediadevice/mtp/mtpmediadevice.cpp 2007-08-07 13:48:28.000000000 -0400
-+++ amarok-1.4.7/amarok/src/mediadevice/mtp/mtpmediadevice.cpp 2007-09-27 03:18:19.000000000 -0400
-@@ -295,9 +295,9 @@
- debug() << "Parent id : " << parent_id << endl;
-
- m_critical_mutex.lock();
-- debug() << "Sending track... " << bundle.url().path().latin1() << endl;
-+ debug() << "Sending track... " << bundle.url().path().utf8() << endl;
- int ret = LIBMTP_Send_Track_From_File(
-- m_device, bundle.url().path().latin1(), trackmeta,
-+ m_device, bundle.url().path().utf8(), trackmeta,
- progressCallback, this, parent_id
- );
- m_critical_mutex.unlock();
diff --git a/amarok-asf.patch b/amarok-asf.patch
deleted file mode 100644
index ffca2b9..0000000
--- a/amarok-asf.patch
+++ /dev/null
@@ -1,3533 +0,0 @@
-
-Property changes on: amarok/src/metadata/asf
-___________________________________________________________________
-Name: svn:ignore
- + .libs
-.deps
-Makefile
-Makefile.in
-
-
-Index: amarok/src/metadata/asf/asffile.h
-===================================================================
---- amarok/src/metadata/asf/asffile.h (revision 0)
-+++ amarok/src/metadata/asf/asffile.h (revision 743005)
-@@ -0,0 +1,114 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#ifndef TAGLIB_ASFFILE_H
-+#define TAGLIB_ASFFILE_H
-+
-+#include <tag.h>
-+#include <tfile.h>
-+#include "asfproperties.h"
-+#include "asftag.h"
-+
-+namespace TagLib {
-+
-+ //! An implementation of ASF (WMA) metadata
-+ namespace ASF {
-+
-+ /*!
-+ * This implements and provides an interface for ASF files to the
-+ * TagLib::Tag and TagLib::AudioProperties interfaces by way of implementing
-+ * the abstract TagLib::File API as well as providing some additional
-+ * information specific to ASF files.
-+ */
-+ class File : public TagLib::File
-+ {
-+ public:
-+
-+ /*!
-+ * Contructs an ASF file from \a file. If \a readProperties is true the
-+ * file's audio properties will also be read using \a propertiesStyle. If
-+ * false, \a propertiesStyle is ignored.
-+ *
-+ * \note In the current implementation, both \a readProperties and
-+ * \a propertiesStyle are ignored.
-+ */
-+ File(const char *file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average);
-+
-+ /*!
-+ * Destroys this instance of the File.
-+ */
-+ virtual ~File();
-+
-+ /*!
-+ * Returns a pointer to the ASF tag of the file.
-+ *
-+ * ASF::Tag implements the tag interface, so this serves as the
-+ * reimplementation of TagLib::File::tag().
-+ *
-+ * \note The Tag <b>is still</b> owned by the ASF::File and should not be
-+ * deleted by the user. It will be deleted when the file (object) is
-+ * destroyed.
-+ */
-+ virtual Tag *tag() const;
-+
-+ /*!
-+ * Returns the ASF audio properties for this file.
-+ */
-+ virtual Properties *audioProperties() const;
-+
-+ /*!
-+ * Save the file.
-+ *
-+ * This returns true if the save was successful.
-+ */
-+ virtual bool save();
-+
-+ private:
-+
-+ int readBYTE();
-+ int readWORD();
-+ unsigned int readDWORD();
-+ long long readQWORD();
-+ static ByteVector renderString(const String &str, bool includeLength = false);
-+ String readString(int len);
-+ void read(bool readProperties, Properties::ReadStyle propertiesStyle);
-+
-+ friend class Attribute;
-+
-+ class BaseObject;
-+ class UnknownObject;
-+ class FilePropertiesObject;
-+ class StreamPropertiesObject;
-+ class ContentDescriptionObject;
-+ class ExtendedContentDescriptionObject;
-+ class HeaderExtensionObject;
-+ class MetadataObject;
-+ class MetadataLibraryObject;
-+
-+ class FilePrivate;
-+ FilePrivate *d;
-+ };
-+
-+ }
-+
-+}
-+
-+#endif
-
-Property changes on: amarok/src/metadata/asf/asffile.h
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp
-===================================================================
---- amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp (revision 0)
-+++ amarok/src/metadata/asf/taglib_asffiletyperesolver.cpp (revision 743005)
-@@ -0,0 +1,47 @@
-+/***************************************************************************
-+ copyright : (C) 2005 by Martin Aumueller
-+ email : aumuell@reserv.at
-+ ***************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-+ * MA 02110-1301 USA *
-+ ***************************************************************************/
-+
-+// (c) 2005 Martin Aumueller <aumuell@reserv.at>
-+// See COPYING file for licensing information
-+
-+#include "taglib_asffiletyperesolver.h"
-+#include "asffile.h"
-+
-+#include <string.h>
-+
-+TagLib::File *ASFFileTypeResolver::createFile(const char *fileName,
-+ bool readProperties,
-+ TagLib::AudioProperties::ReadStyle propertiesStyle) const
-+{
-+ const char *ext = strrchr(fileName, '.');
-+ if(ext && (!strcasecmp(ext, ".wma") || !strcasecmp(ext, ".asf")))
-+ {
-+ TagLib::ASF::File *f = new TagLib::ASF::File(fileName, readProperties, propertiesStyle);
-+ if(f->isValid())
-+ return f;
-+ else
-+ {
-+ delete f;
-+ }
-+ }
-+
-+ return 0;
-+}
-Index: amarok/src/metadata/asf/asfattribute.h
-===================================================================
---- amarok/src/metadata/asf/asfattribute.h (revision 0)
-+++ amarok/src/metadata/asf/asfattribute.h (revision 743005)
-@@ -0,0 +1,176 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#ifndef TAGLIB_ASFATTRIBUTE_H
-+#define TAGLIB_ASFATTRIBUTE_H
-+
-+#include <tstring.h>
-+#include <tbytevector.h>
-+
-+namespace TagLib
-+{
-+
-+ namespace ASF
-+ {
-+
-+ class File;
-+
-+ class Attribute
-+ {
-+ public:
-+
-+ /*!
-+ * Enum of types an Attribute can have.
-+ */
-+ enum AttributeTypes {
-+ UnicodeType = 0,
-+ BytesType = 1,
-+ BoolType = 2,
-+ DWordType = 3,
-+ QWordType = 4,
-+ WordType = 5,
-+ GuidType = 6
-+ };
-+
-+ /*!
-+ * Constructs an empty attribute.
-+ */
-+ Attribute();
-+
-+ /*!
-+ * Constructs an attribute with \a key and a UnicodeType \a value.
-+ */
-+ Attribute(const String &value);
-+
-+ /*!
-+ * Constructs an attribute with \a key and a BytesType \a value.
-+ */
-+ Attribute(const ByteVector &value);
-+
-+ /*!
-+ * Constructs an attribute with \a key and a DWordType \a value.
-+ */
-+ Attribute(unsigned int value);
-+
-+ /*!
-+ * Constructs an attribute with \a key and a QWordType \a value.
-+ */
-+ Attribute(unsigned long long value);
-+
-+ /*!
-+ * Constructs an attribute with \a key and a WordType \a value.
-+ */
-+ Attribute(unsigned short value);
-+
-+ /*!
-+ * Constructs an attribute with \a key and a BoolType \a value.
-+ */
-+ Attribute(bool value);
-+
-+ /*!
-+ * Construct an attribute as a copy of \a other.
-+ */
-+ Attribute(const Attribute &item);
-+
-+ /*!
-+ * Copies the contents of \a other into this item.
-+ */
-+ ASF::Attribute &operator=(const Attribute &other);
-+
-+ /*!
-+ * Destroys the attribute.
-+ */
-+ virtual ~Attribute();
-+
-+ /*!
-+ * Returns type of the value.
-+ */
-+ AttributeTypes type() const;
-+
-+ /*!
-+ * Returns the BoolType \a value.
-+ */
-+ unsigned short toBool() const;
-+
-+ /*!
-+ * Returns the WordType \a value.
-+ */
-+ unsigned short toUShort() const;
-+
-+ /*!
-+ * Returns the DWordType \a value.
-+ */
-+ unsigned int toUInt() const;
-+
-+ /*!
-+ * Returns the QWordType \a value.
-+ */
-+ unsigned long long toULongLong() const;
-+
-+ /*!
-+ * Returns the UnicodeType \a value.
-+ */
-+ String toString() const;
-+
-+ /*!
-+ * Returns the BytesType \a value.
-+ */
-+ ByteVector toByteVector() const;
-+
-+ /*!
-+ * Returns the language number, or 0 is no stream number was set.
-+ */
-+ int language() const;
-+
-+ /*!
-+ * Sets the language number.
-+ */
-+ void setLanguage(int value);
-+
-+ /*!
-+ * Returns the stream number, or 0 is no stream number was set.
-+ */
-+ int stream() const;
-+
-+ /*!
-+ * Sets the stream number.
-+ */
-+ void setStream(int value);
-+
-+#ifndef DO_NOT_DOCUMENT
-+ /* THIS IS PRIVATE, DON'T TOUCH IT! */
-+ String parse(ASF::File &file, int kind = 0);
-+#endif
-+
-+ private:
-+ friend class File;
-+
-+ ByteVector render(const String &name, int kind = 0) const;
-+
-+ class AttributePrivate;
-+ AttributePrivate *d;
-+ };
-+
-+ }
-+
-+}
-+
-+#endif
-
-Property changes on: amarok/src/metadata/asf/asfattribute.h
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/asf/taglib_asffiletyperesolver.h
-===================================================================
---- amarok/src/metadata/asf/taglib_asffiletyperesolver.h (revision 0)
-+++ amarok/src/metadata/asf/taglib_asffiletyperesolver.h (revision 743005)
-@@ -0,0 +1,39 @@
-+/***************************************************************************
-+ copyright : (C) 2005 by Martin Aumueller
-+ email : aumuell@reserv.at
-+ ***************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-+ * MA 02110-1301 USA *
-+ ***************************************************************************/
-+
-+// (c) 2005 Martin Aumueller <aumuell@reserv.at>
-+// See COPYING file for licensing information
-+
-+#ifndef TAGLIB_ASFFILETYPERESOLVER_H
-+#define TAGLIB_ASFFILETYPERESOLVER_H
-+
-+#include <taglib/tfile.h>
-+#include <taglib/fileref.h>
-+
-+
-+class ASFFileTypeResolver : public TagLib::FileRef::FileTypeResolver
-+{
-+ TagLib::File *createFile(const char *fileName,
-+ bool readAudioProperties,
-+ TagLib::AudioProperties::ReadStyle audioPropertiesStyle) const;
-+};
-+
-+#endif
-Index: amarok/src/metadata/asf/asftag.cpp
-===================================================================
---- amarok/src/metadata/asf/asftag.cpp (revision 0)
-+++ amarok/src/metadata/asf/asftag.cpp (revision 743005)
-@@ -0,0 +1,202 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#include "asftag.h"
-+
-+using namespace TagLib;
-+
-+class ASF::Tag::TagPrivate
-+{
-+public:
-+ String title;
-+ String artist;
-+ String copyright;
-+ String comment;
-+ String rating;
-+ AttributeListMap attributeListMap;
-+};
-+
-+ASF::Tag::Tag()
-+: TagLib::Tag()
-+{
-+ d = new TagPrivate;
-+}
-+
-+ASF::Tag::~Tag()
-+{
-+ if(d)
-+ delete d;
-+}
-+
-+String
-+ASF::Tag::title() const
-+{
-+ return d->title;
-+}
-+
-+String
-+ASF::Tag::artist() const
-+{
-+ return d->artist;
-+}
-+
-+String
-+ASF::Tag::album() const
-+{
-+ if(d->attributeListMap.contains("WM/AlbumTitle"))
-+ return d->attributeListMap["WM/AlbumTitle"][0].toString();
-+ return String::null;
-+}
-+
-+String
-+ASF::Tag::copyright() const
-+{
-+ return d->copyright;
-+}
-+
-+String
-+ASF::Tag::comment() const
-+{
-+ return d->comment;
-+}
-+
-+String
-+ASF::Tag::rating() const
-+{
-+ return d->rating;
-+}
-+
-+unsigned int
-+ASF::Tag::year() const
-+{
-+ if(d->attributeListMap.contains("WM/Year"))
-+ return d->attributeListMap["WM/Year"][0].toString().toInt();
-+ return 0;
-+}
-+
-+unsigned int
-+ASF::Tag::track() const
-+{
-+ if(d->attributeListMap.contains("WM/TrackNumber"))
-+ return d->attributeListMap["WM/TrackNumber"][0].toString().toInt();
-+ if(d->attributeListMap.contains("WM/Track"))
-+ return d->attributeListMap["WM/Track"][0].toUInt();
-+ return 0;
-+}
-+
-+String
-+ASF::Tag::genre() const
-+{
-+ if(d->attributeListMap.contains("WM/Genre"))
-+ return d->attributeListMap["WM/Genre"][0].toString();
-+ return String::null;
-+}
-+
-+void
-+ASF::Tag::setTitle(const String &value)
-+{
-+ d->title = value;
-+}
-+
-+void
-+ASF::Tag::setArtist(const String &value)
-+{
-+ d->artist = value;
-+}
-+
-+void
-+ASF::Tag::setCopyright(const String &value)
-+{
-+ d->copyright = value;
-+}
-+
-+void
-+ASF::Tag::setComment(const String &value)
-+{
-+ d->comment = value;
-+}
-+
-+void
-+ASF::Tag::setRating(const String &value)
-+{
-+ d->rating = value;
-+}
-+
-+void
-+ASF::Tag::setAlbum(const String &value)
-+{
-+ setAttribute("WM/AlbumTitle", value);
-+}
-+
-+void
-+ASF::Tag::setGenre(const String &value)
-+{
-+ setAttribute("WM/Genre", value);
-+}
-+
-+void
-+ASF::Tag::setYear(uint value)
-+{
-+ setAttribute("WM/Year", String::number(value));
-+}
-+
-+void
-+ASF::Tag::setTrack(uint value)
-+{
-+ setAttribute("WM/TrackNumber", String::number(value));
-+}
-+
-+ASF::AttributeListMap&
-+ASF::Tag::attributeListMap()
-+{
-+ return d->attributeListMap;
-+}
-+
-+void ASF::Tag::removeItem(const String &key)
-+{
-+ AttributeListMap::Iterator it = d->attributeListMap.find(key);
-+ if(it != d->attributeListMap.end())
-+ d->attributeListMap.erase(it);
-+}
-+
-+void ASF::Tag::setAttribute(const String &name, const Attribute &attribute)
-+{
-+ AttributeList value;
-+ value.append(attribute);
-+ d->attributeListMap.insert(name, value);
-+}
-+
-+void ASF::Tag::addAttribute(const String &name, const Attribute &attribute)
-+{
-+ if(d->attributeListMap.contains(name)) {
-+ d->attributeListMap[name].append(attribute);
-+ }
-+ else {
-+ setAttribute(name, attribute);
-+ }
-+}
-+
-+bool ASF::Tag::isEmpty() const {
-+ return TagLib::Tag::isEmpty() &&
-+ copyright().isEmpty() &&
-+ rating().isEmpty() &&
-+ d->attributeListMap.isEmpty();
-+}
-Index: amarok/src/metadata/asf/asfproperties.cpp
-===================================================================
---- amarok/src/metadata/asf/asfproperties.cpp (revision 0)
-+++ amarok/src/metadata/asf/asfproperties.cpp (revision 743005)
-@@ -0,0 +1,95 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#include <tstring.h>
-+#include "asfproperties.h"
-+
-+using namespace TagLib;
-+
-+class ASF::Properties::PropertiesPrivate
-+{
-+public:
-+ PropertiesPrivate(): length(0), bitrate(0), sampleRate(0), channels(0) {}
-+ int length;
-+ int bitrate;
-+ int sampleRate;
-+ int channels;
-+};
-+
-+////////////////////////////////////////////////////////////////////////////////
-+// public members
-+////////////////////////////////////////////////////////////////////////////////
-+
-+ASF::Properties::Properties() : AudioProperties(AudioProperties::Average)
-+{
-+ d = new PropertiesPrivate;
-+}
-+
-+ASF::Properties::~Properties()
-+{
-+ if(d)
-+ delete d;
-+}
-+
-+int ASF::Properties::length() const
-+{
-+ return d->length;
-+}
-+
-+int ASF::Properties::bitrate() const
-+{
-+ return d->bitrate;
-+}
-+
-+int ASF::Properties::sampleRate() const
-+{
-+ return d->sampleRate;
-+}
-+
-+int ASF::Properties::channels() const
-+{
-+ return d->channels;
-+}
-+
-+////////////////////////////////////////////////////////////////////////////////
-+// private members
-+////////////////////////////////////////////////////////////////////////////////
-+
-+void ASF::Properties::setLength(int length)
-+{
-+ d->length = length;
-+}
-+
-+void ASF::Properties::setBitrate(int length)
-+{
-+ d->bitrate = length;
-+}
-+
-+void ASF::Properties::setSampleRate(int length)
-+{
-+ d->sampleRate = length;
-+}
-+
-+void ASF::Properties::setChannels(int length)
-+{
-+ d->channels = length;
-+}
-+
-
-Property changes on: amarok/src/metadata/asf/asfproperties.cpp
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/asf/Makefile.am
-===================================================================
---- amarok/src/metadata/asf/Makefile.am (revision 0)
-+++ amarok/src/metadata/asf/Makefile.am (revision 743005)
-@@ -0,0 +1,20 @@
-+SUBDIRS =
-+
-+INCLUDES = $(all_includes) $(taglib_includes)
-+METASOURCES = AUTO
-+libtagasf_la_LDFLAGS = $(all_libraries)
-+noinst_LTLIBRARIES = libtagasf.la
-+
-+libtagasf_la_SOURCES = \
-+ asfattribute.cpp \
-+ asfproperties.cpp \
-+ asftag.cpp \
-+ asffile.cpp \
-+ taglib_asffiletyperesolver.cpp
-+
-+noinst_HEADERS = \
-+ asfattribute.h \
-+ asfproperties.h \
-+ asftag.h \
-+ asffile.h \
-+ taglib_asffiletyperesolver.h
-Index: amarok/src/metadata/asf/asffile.cpp
-===================================================================
---- amarok/src/metadata/asf/asffile.cpp (revision 0)
-+++ amarok/src/metadata/asf/asffile.cpp (revision 743005)
-@@ -0,0 +1,547 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#include <tbytevectorlist.h>
-+#include <tstring.h>
-+#include "asffile.h"
-+#include "asftag.h"
-+#include "asfproperties.h"
-+
-+using namespace TagLib;
-+
-+class ASF::File::FilePrivate
-+{
-+public:
-+ FilePrivate():
-+ size(0),
-+ tag(0),
-+ properties(0),
-+ contentDescriptionObject(0),
-+ extendedContentDescriptionObject(0),
-+ headerExtensionObject(0),
-+ metadataObject(0),
-+ metadataLibraryObject(0) {}
-+ unsigned long long size;
-+ ASF::Tag *tag;
-+ ASF::Properties *properties;
-+ List<ASF::File::BaseObject *> objects;
-+ ASF::File::ContentDescriptionObject *contentDescriptionObject;
-+ ASF::File::ExtendedContentDescriptionObject *extendedContentDescriptionObject;
-+ ASF::File::HeaderExtensionObject *headerExtensionObject;
-+ ASF::File::MetadataObject *metadataObject;
-+ ASF::File::MetadataLibraryObject *metadataLibraryObject;
-+};
-+
-+static ByteVector headerGuid("\x30\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C", 16);
-+static ByteVector filePropertiesGuid("\xA1\xDC\xAB\x8C\x47\xA9\xCF\x11\x8E\xE4\x00\xC0\x0C\x20\x53\x65", 16);
-+static ByteVector streamPropertiesGuid("\x91\x07\xDC\xB7\xB7\xA9\xCF\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65", 16);
-+static ByteVector contentDescriptionGuid("\x33\x26\xB2\x75\x8E\x66\xCF\x11\xA6\xD9\x00\xAA\x00\x62\xCE\x6C", 16);
-+static ByteVector extendedContentDescriptionGuid("\x40\xA4\xD0\xD2\x07\xE3\xD2\x11\x97\xF0\x00\xA0\xC9\x5E\xA8\x50", 16);
-+static ByteVector headerExtensionGuid("\xb5\x03\xbf_.\xa9\xcf\x11\x8e\xe3\x00\xc0\x0c Se", 16);
-+static ByteVector metadataGuid("\xEA\xCB\xF8\xC5\xAF[wH\204g\xAA\214D\xFAL\xCA", 16);
-+static ByteVector metadataLibraryGuid("\224\034#D\230\224\321I\241A\x1d\x13NEpT", 16);
-+
-+class ASF::File::BaseObject
-+{
-+public:
-+ ByteVector data;
-+ virtual ~BaseObject() {}
-+ virtual ByteVector guid() = 0;
-+ virtual void parse(ASF::File *file, unsigned int size);
-+ virtual ByteVector render(ASF::File *file);
-+};
-+
-+class ASF::File::UnknownObject : public ASF::File::BaseObject
-+{
-+ ByteVector myGuid;
-+public:
-+ UnknownObject(const ByteVector &guid);
-+ ByteVector guid();
-+};
-+
-+class ASF::File::FilePropertiesObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+};
-+
-+class ASF::File::StreamPropertiesObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+};
-+
-+class ASF::File::ContentDescriptionObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+ ByteVector render(ASF::File *file);
-+};
-+
-+class ASF::File::ExtendedContentDescriptionObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVectorList attributeData;
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+ ByteVector render(ASF::File *file);
-+};
-+
-+class ASF::File::MetadataObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVectorList attributeData;
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+ ByteVector render(ASF::File *file);
-+};
-+
-+class ASF::File::MetadataLibraryObject : public ASF::File::BaseObject
-+{
-+public:
-+ ByteVectorList attributeData;
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+ ByteVector render(ASF::File *file);
-+};
-+
-+class ASF::File::HeaderExtensionObject : public ASF::File::BaseObject
-+{
-+public:
-+ List<ASF::File::BaseObject *> objects;
-+ ByteVector guid();
-+ void parse(ASF::File *file, uint size);
-+ ByteVector render(ASF::File *file);
-+};
-+
-+void
-+ASF::File::BaseObject::parse(ASF::File *file, unsigned int size)
-+{
-+ data = file->readBlock(size - 24);
-+}
-+
-+ByteVector
-+ASF::File::BaseObject::render(ASF::File * /*file*/)
-+{
-+ return guid() + ByteVector::fromLongLong(data.size() + 24, false) + data;
-+}
-+
-+ASF::File::UnknownObject::UnknownObject(const ByteVector &guid) : myGuid(guid)
-+{
-+}
-+
-+ByteVector
-+ASF::File::UnknownObject::guid()
-+{
-+ return myGuid;
-+}
-+
-+ByteVector
-+ASF::File::FilePropertiesObject::guid()
-+{
-+ return filePropertiesGuid;
-+}
-+
-+void
-+ASF::File::FilePropertiesObject::parse(ASF::File *file, uint size)
-+{
-+ BaseObject::parse(file, size);
-+ file->d->properties->setLength((int)(data.mid(40, 8).toLongLong(false) / 10000000L - data.mid(56, 8).toLongLong(false) / 1000L));
-+}
-+
-+ByteVector
-+ASF::File::StreamPropertiesObject::guid()
-+{
-+ return streamPropertiesGuid;
-+}
-+
-+void
-+ASF::File::StreamPropertiesObject::parse(ASF::File *file, uint size)
-+{
-+ BaseObject::parse(file, size);
-+ file->d->properties->setChannels(data.mid(56, 2).toShort(false));
-+ file->d->properties->setSampleRate(data.mid(58, 4).toUInt(false));
-+ file->d->properties->setBitrate(data.mid(62, 4).toUInt(false) * 8 / 1000);
-+}
-+
-+ByteVector
-+ASF::File::ContentDescriptionObject::guid()
-+{
-+ return contentDescriptionGuid;
-+}
-+
-+void
-+ASF::File::ContentDescriptionObject::parse(ASF::File *file, uint /*size*/)
-+{
-+ file->d->contentDescriptionObject = this;
-+ int titleLength = file->readWORD();
-+ int artistLength = file->readWORD();
-+ int copyrightLength = file->readWORD();
-+ int commentLength = file->readWORD();
-+ int ratingLength = file->readWORD();
-+ file->d->tag->setTitle(file->readString(titleLength));
-+ file->d->tag->setArtist(file->readString(artistLength));
-+ file->d->tag->setCopyright(file->readString(copyrightLength));
-+ file->d->tag->setComment(file->readString(commentLength));
-+ file->d->tag->setRating(file->readString(ratingLength));
-+}
-+
-+ByteVector
-+ASF::File::ContentDescriptionObject::render(ASF::File *file)
-+{
-+ ByteVector v1 = file->renderString(file->d->tag->title());
-+ ByteVector v2 = file->renderString(file->d->tag->artist());
-+ ByteVector v3 = file->renderString(file->d->tag->copyright());
-+ ByteVector v4 = file->renderString(file->d->tag->comment());
-+ ByteVector v5 = file->renderString(file->d->tag->rating());
-+ data.clear();
-+ data.append(ByteVector::fromShort(v1.size(), false));
-+ data.append(ByteVector::fromShort(v2.size(), false));
-+ data.append(ByteVector::fromShort(v3.size(), false));
-+ data.append(ByteVector::fromShort(v4.size(), false));
-+ data.append(ByteVector::fromShort(v5.size(), false));
-+ data.append(v1);
-+ data.append(v2);
-+ data.append(v3);
-+ data.append(v4);
-+ data.append(v5);
-+ return BaseObject::render(file);
-+}
-+
-+ByteVector
-+ASF::File::ExtendedContentDescriptionObject::guid()
-+{
-+ return extendedContentDescriptionGuid;
-+}
-+
-+void
-+ASF::File::ExtendedContentDescriptionObject::parse(ASF::File *file, uint /*size*/)
-+{
-+ file->d->extendedContentDescriptionObject = this;
-+ int count = file->readWORD();
-+ while(count--) {
-+ ASF::Attribute attribute;
-+ String name = attribute.parse(*file);
-+ file->d->tag->addAttribute(name, attribute);
-+ }
-+}
-+
-+ByteVector
-+ASF::File::ExtendedContentDescriptionObject::render(ASF::File *file)
-+{
-+ data.clear();
-+ data.append(ByteVector::fromShort(attributeData.size(), false));
-+ data.append(attributeData.toByteVector(ByteVector::null));
-+ return BaseObject::render(file);
-+}
-+
-+ByteVector
-+ASF::File::MetadataObject::guid()
-+{
-+ return metadataGuid;
-+}
-+
-+void
-+ASF::File::MetadataObject::parse(ASF::File *file, uint /*size*/)
-+{
-+ file->d->metadataObject = this;
-+ int count = file->readWORD();
-+ while(count--) {
-+ ASF::Attribute attribute;
-+ String name = attribute.parse(*file, 1);
-+ file->d->tag->addAttribute(name, attribute);
-+ }
-+}
-+
-+ByteVector
-+ASF::File::MetadataObject::render(ASF::File *file)
-+{
-+ data.clear();
-+ data.append(ByteVector::fromShort(attributeData.size(), false));
-+ data.append(attributeData.toByteVector(ByteVector::null));
-+ return BaseObject::render(file);
-+}
-+
-+ByteVector
-+ASF::File::MetadataLibraryObject::guid()
-+{
-+ return metadataLibraryGuid;
-+}
-+
-+void
-+ASF::File::MetadataLibraryObject::parse(ASF::File *file, uint /*size*/)
-+{
-+ file->d->metadataLibraryObject = this;
-+ int count = file->readWORD();
-+ while(count--) {
-+ ASF::Attribute attribute;
-+ String name = attribute.parse(*file, 2);
-+ file->d->tag->addAttribute(name, attribute);
-+ }
-+}
-+
-+ByteVector
-+ASF::File::MetadataLibraryObject::render(ASF::File *file)
-+{
-+ data.clear();
-+ data.append(ByteVector::fromShort(attributeData.size(), false));
-+ data.append(attributeData.toByteVector(ByteVector::null));
-+ return BaseObject::render(file);
-+}
-+
-+ByteVector
-+ASF::File::HeaderExtensionObject::guid()
-+{
-+ return headerExtensionGuid;
-+}
-+
-+void
-+ASF::File::HeaderExtensionObject::parse(ASF::File *file, uint /*size*/)
-+{
-+ file->d->headerExtensionObject = this;
-+ file->seek(18, File::Current);
-+ long long dataSize = file->readDWORD();
-+ long long dataPos = 0;
-+ while(dataPos < dataSize) {
-+ ByteVector guid = file->readBlock(16);
-+ long long size = file->readQWORD();
-+ BaseObject *obj;
-+ if(guid == metadataGuid) {
-+ obj = new MetadataObject();
-+ }
-+ else if(guid == metadataLibraryGuid) {
-+ obj = new MetadataLibraryObject();
-+ }
-+ else {
-+ obj = new UnknownObject(guid);
-+ }
-+ obj->parse(file, size);
-+ objects.append(obj);
-+ dataPos += size;
-+ }
-+}
-+
-+ByteVector
-+ASF::File::HeaderExtensionObject::render(ASF::File *file)
-+{
-+ data.clear();
-+ for(unsigned int i = 0; i < objects.size(); i++) {
-+ data.append(objects[i]->render(file));
-+ }
-+ data = ByteVector("\x11\xD2\xD3\xAB\xBA\xA9\xcf\x11\x8E\xE6\x00\xC0\x0C\x20\x53\x65\x06\x00", 18) + ByteVector::fromUInt(data.size(), false) + data;
-+ return BaseObject::render(file);
-+}
-+
-+////////////////////////////////////////////////////////////////////////////////
-+// public members
-+////////////////////////////////////////////////////////////////////////////////
-+
-+ASF::File::File(const char *file, bool readProperties, Properties::ReadStyle propertiesStyle)
-+ : TagLib::File(file)
-+{
-+ d = new FilePrivate;
-+ read(readProperties, propertiesStyle);
-+}
-+
-+ASF::File::~File()
-+{
-+ for(unsigned int i = 0; i < d->objects.size(); i++) {
-+ delete d->objects[i];
-+ }
-+ if(d->tag) {
-+ delete d->tag;
-+ }
-+ if(d->properties) {
-+ delete d->properties;
-+ }
-+ delete d;
-+}
-+
-+ASF::Tag *ASF::File::tag() const
-+{
-+ return d->tag;
-+}
-+
-+ASF::Properties *ASF::File::audioProperties() const
-+{
-+ return d->properties;
-+}
-+
-+void ASF::File::read(bool /*readProperties*/, Properties::ReadStyle /*propertiesStyle*/)
-+{
-+ if(!isValid())
-+ return;
-+
-+ ByteVector guid = readBlock(16);
-+ if(guid != headerGuid) {
-+ return;
-+ }
-+
-+ d->tag = new ASF::Tag();
-+ d->properties = new ASF::Properties();
-+
-+ d->size = readQWORD();
-+ int numObjects = readDWORD();
-+ seek(2, Current);
-+
-+ for(int i = 0; i < numObjects; i++) {
-+ ByteVector guid = readBlock(16);
-+ long size = (long)readQWORD();
-+ BaseObject *obj;
-+ if(guid == filePropertiesGuid) {
-+ obj = new FilePropertiesObject();
-+ }
-+ else if(guid == streamPropertiesGuid) {
-+ obj = new StreamPropertiesObject();
-+ }
-+ else if(guid == contentDescriptionGuid) {
-+ obj = new ContentDescriptionObject();
-+ }
-+ else if(guid == extendedContentDescriptionGuid) {
-+ obj = new ExtendedContentDescriptionObject();
-+ }
-+ else if(guid == headerExtensionGuid) {
-+ obj = new HeaderExtensionObject();
-+ }
-+ else {
-+ obj = new UnknownObject(guid);
-+ }
-+ obj->parse(this, size);
-+ d->objects.append(obj);
-+ }
-+}
-+
-+bool ASF::File::save()
-+{
-+ if(readOnly()) {
-+ return false;
-+ }
-+
-+ if(!d->contentDescriptionObject) {
-+ d->contentDescriptionObject = new ContentDescriptionObject();
-+ d->objects.append(d->contentDescriptionObject);
-+ }
-+ if(!d->extendedContentDescriptionObject) {
-+ d->extendedContentDescriptionObject = new ExtendedContentDescriptionObject();
-+ d->objects.append(d->extendedContentDescriptionObject);
-+ }
-+ if(!d->headerExtensionObject) {
-+ d->headerExtensionObject = new HeaderExtensionObject();
-+ d->objects.append(d->headerExtensionObject);
-+ }
-+ if(!d->metadataObject) {
-+ d->metadataObject = new MetadataObject();
-+ d->headerExtensionObject->objects.append(d->metadataObject);
-+ }
-+ if(!d->metadataLibraryObject) {
-+ d->metadataLibraryObject = new MetadataLibraryObject();
-+ d->headerExtensionObject->objects.append(d->metadataLibraryObject);
-+ }
-+
-+ ASF::AttributeListMap::ConstIterator it = d->tag->attributeListMap().begin();
-+ for(; it != d->tag->attributeListMap().end(); it++) {
-+ const String &name = it->first;
-+ const AttributeList &attributes = it->second;
-+ bool inExtendedContentDescriptionObject = false;
-+ bool inMetadataObject = false;
-+ for(unsigned int j = 0; j < attributes.size(); j++) {
-+ const Attribute &attribute = attributes[j];
-+ if(!inExtendedContentDescriptionObject && attribute.language() == 0 && attribute.stream() == 0) {
-+ d->extendedContentDescriptionObject->attributeData.append(attribute.render(name));
-+ inExtendedContentDescriptionObject = true;
-+ }
-+ else if(!inMetadataObject && attribute.language() == 0 && attribute.stream() != 0) {
-+ d->metadataObject->attributeData.append(attribute.render(name, 1));
-+ inMetadataObject = true;
-+ }
-+ else {
-+ d->metadataLibraryObject->attributeData.append(attribute.render(name, 2));
-+ }
-+ }
-+ }
-+
-+ ByteVector data;
-+ for(unsigned int i = 0; i < d->objects.size(); i++) {
-+ data.append(d->objects[i]->render(this));
-+ }
-+ data = headerGuid + ByteVector::fromLongLong(data.size() + 30, false) + ByteVector::fromUInt(d->objects.size(), false) + ByteVector("\x01\x02", 2) + data;
-+ insert(data, 0, d->size);
-+
-+ return true;
-+}
-+
-+////////////////////////////////////////////////////////////////////////////////
-+// protected members
-+////////////////////////////////////////////////////////////////////////////////
-+
-+int ASF::File::readBYTE()
-+{
-+ ByteVector v = readBlock(1);
-+ return v[0];
-+}
-+
-+int ASF::File::readWORD()
-+{
-+ ByteVector v = readBlock(2);
-+ return v.toShort(false);
-+}
-+
-+unsigned int ASF::File::readDWORD()
-+{
-+ ByteVector v = readBlock(4);
-+ return v.toUInt(false);
-+}
-+
-+long long ASF::File::readQWORD()
-+{
-+ ByteVector v = readBlock(8);
-+ return v.toLongLong(false);
-+}
-+
-+String
-+ASF::File::readString(int length)
-+{
-+ ByteVector data = readBlock(length);
-+ unsigned int size = data.size();
-+ while (size >= 2) {
-+ if(data[size - 1] != '\0' || data[size - 2] != '\0') {
-+ break;
-+ }
-+ size -= 2;
-+ }
-+ if(size != data.size()) {
-+ data.resize(size);
-+ }
-+ return String(data, String::UTF16LE);
-+}
-+
-+ByteVector
-+ASF::File::renderString(const String &str, bool includeLength)
-+{
-+ ByteVector data = str.data(String::UTF16LE) + ByteVector::fromShort(0, false);
-+ if(includeLength) {
-+ data = ByteVector::fromShort(data.size(), false) + data;
-+ }
-+ return data;
-+}
-
-Property changes on: amarok/src/metadata/asf/asffile.cpp
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/asf/asftag.h
-===================================================================
---- amarok/src/metadata/asf/asftag.h (revision 0)
-+++ amarok/src/metadata/asf/asftag.h (revision 743005)
-@@ -0,0 +1,181 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#ifndef TAGLIB_ASFTAG_H
-+#define TAGLIB_ASFTAG_H
-+
-+#include <tag.h>
-+#include <tlist.h>
-+#include <tmap.h>
-+#include "asfattribute.h"
-+
-+namespace TagLib {
-+
-+ namespace ASF {
-+
-+ typedef List<Attribute> AttributeList;
-+ typedef Map<String, AttributeList> AttributeListMap;
-+
-+ class Tag : public TagLib::Tag {
-+
-+ friend class File;
-+
-+ public:
-+
-+ Tag();
-+
-+ virtual ~Tag();
-+
-+ /*!
-+ * Returns the track name.
-+ */
-+ virtual String title() const;
-+
-+ /*!
-+ * Returns the artist name.
-+ */
-+ virtual String artist() const;
-+
-+ /*!
-+ * Returns the album name; if no album name is present in the tag
-+ * String::null will be returned.
-+ */
-+ virtual String album() const;
-+
-+ /*!
-+ * Returns the track comment.
-+ */
-+ virtual String comment() const;
-+
-+ /*!
-+ * Returns the genre name; if no genre is present in the tag String::null
-+ * will be returned.
-+ */
-+ virtual String genre() const;
-+
-+ /*!
-+ * Returns the rating.
-+ */
-+ virtual String rating() const;
-+
-+ /*!
-+ * Returns the genre name; if no genre is present in the tag String::null
-+ * will be returned.
-+ */
-+ virtual String copyright() const;
-+
-+ /*!
-+ * Returns the year; if there is no year set, this will return 0.
-+ */
-+ virtual uint year() const;
-+
-+ /*!
-+ * Returns the track number; if there is no track number set, this will
-+ * return 0.
-+ */
-+ virtual uint track() const;
-+
-+ /*!
-+ * Sets the title to \a s.
-+ */
-+ virtual void setTitle(const String &s);
-+
-+ /*!
-+ * Sets the artist to \a s.
-+ */
-+ virtual void setArtist(const String &s);
-+
-+ /*!
-+ * Sets the album to \a s. If \a s is String::null then this value will be
-+ * cleared.
-+ */
-+ virtual void setAlbum(const String &s);
-+
-+ /*!
-+ * Sets the comment to \a s.
-+ */
-+ virtual void setComment(const String &s);
-+
-+ /*!
-+ * Sets the rating to \a s.
-+ */
-+ virtual void setRating(const String &s);
-+
-+ /*!
-+ * Sets the copyright to \a s.
-+ */
-+ virtual void setCopyright(const String &s);
-+
-+ /*!
-+ * Sets the genre to \a s.
-+ */
-+ virtual void setGenre(const String &s);
-+
-+ /*!
-+ * Sets the year to \a i. If \a s is 0 then this value will be cleared.
-+ */
-+ virtual void setYear(uint i);
-+
-+ /*!
-+ * Sets the track to \a i. If \a s is 0 then this value will be cleared.
-+ */
-+ virtual void setTrack(uint i);
-+
-+ /*!
-+ * Returns true if the tag does not contain any data. This should be
-+ * reimplemented in subclasses that provide more than the basic tagging
-+ * abilities in this class.
-+ */
-+ virtual bool isEmpty() const;
-+
-+ /*!
-+ * Returns a reference to the item list map. This is an AttributeListMap of
-+ * all of the items in the tag.
-+ *
-+ * This is the most powerfull structure for accessing the items of the tag.
-+ */
-+ AttributeListMap &attributeListMap();
-+
-+ /*!
-+ * Removes the \a key attribute from the tag
-+ */
-+ void removeItem(const String &name);
-+
-+ /*!
-+ * Sets the \a key attribute to the value of \a attribute. If an attribute
-+ * with the \a key is already present, it will be replaced.
-+ */
-+ void setAttribute(const String &name, const Attribute &attribute);
-+
-+ /*!
-+ * Sets the \a key attribute to the value of \a attribute. If an attribute
-+ * with the \a key is already present, it will be added to the list.
-+ */
-+ void addAttribute(const String &name, const Attribute &attribute);
-+
-+ private:
-+
-+ class TagPrivate;
-+ TagPrivate *d;
-+ };
-+ }
-+}
-+#endif
-Index: amarok/src/metadata/asf/asfproperties.h
-===================================================================
---- amarok/src/metadata/asf/asfproperties.h (revision 0)
-+++ amarok/src/metadata/asf/asfproperties.h (revision 743005)
-@@ -0,0 +1,69 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#ifndef TAGLIB_ASFPROPERTIES_H
-+#define TAGLIB_ASFPROPERTIES_H
-+
-+#include <audioproperties.h>
-+#include <tstring.h>
-+
-+namespace TagLib {
-+
-+ namespace ASF {
-+
-+ //! An implementation of ASF audio properties
-+ class Properties : public AudioProperties
-+ {
-+ public:
-+
-+ /*!
-+ * Create an instance of ASF::Properties.
-+ */
-+ Properties();
-+
-+ /*!
-+ * Destroys this ASF::Properties instance.
-+ */
-+ virtual ~Properties();
-+
-+ // Reimplementations.
-+ virtual int length() const;
-+ virtual int bitrate() const;
-+ virtual int sampleRate() const;
-+ virtual int channels() const;
-+
-+#ifndef DO_NOT_DOCUMENT
-+ void setLength(int value);
-+ void setBitrate(int value);
-+ void setSampleRate(int value);
-+ void setChannels(int value);
-+#endif
-+
-+ private:
-+ class PropertiesPrivate;
-+ PropertiesPrivate *d;
-+ };
-+
-+ }
-+
-+}
-+
-+#endif
-
-Property changes on: amarok/src/metadata/asf/asfproperties.h
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/asf/asfattribute.cpp
-===================================================================
---- amarok/src/metadata/asf/asfattribute.cpp (revision 0)
-+++ amarok/src/metadata/asf/asfattribute.cpp (revision 743005)
-@@ -0,0 +1,304 @@
-+/**************************************************************************
-+ copyright : (C) 2005-2007 by Lukáš Lalinský
-+ email : lalinsky@gmail.com
-+ **************************************************************************/
-+
-+/***************************************************************************
-+ * This library is free software; you can redistribute it and/or modify *
-+ * it under the terms of the GNU Lesser General Public License version *
-+ * 2.1 as published by the Free Software Foundation. *
-+ * *
-+ * This library 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 *
-+ * Lesser General Public License for more details. *
-+ * *
-+ * You should have received a copy of the GNU Lesser General Public *
-+ * License along with this library; if not, write to the Free Software *
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
-+ * USA *
-+ ***************************************************************************/
-+
-+#include <taglib.h>
-+#include "asfattribute.h"
-+#include "asffile.h"
-+
-+using namespace TagLib;
-+
-+class ASF::Attribute::AttributePrivate : public RefCounter
-+{
-+public:
-+ AttributePrivate()
-+ : stream(0),
-+ language(0) {}
-+ AttributeTypes type;
-+ String stringValue;
-+ ByteVector byteVectorValue;
-+ union {
-+ unsigned int intValue;
-+ unsigned short shortValue;
-+ unsigned long long longLongValue;
-+ bool boolValue;
-+ };
-+ int stream;
-+ int language;
-+};
-+
-+////////////////////////////////////////////////////////////////////////////////
-+// public members
-+////////////////////////////////////////////////////////////////////////////////
-+
-+ASF::Attribute::Attribute()
-+{
-+ d = new AttributePrivate;
-+ d->type = UnicodeType;
-+}
-+
-+ASF::Attribute::Attribute(const ASF::Attribute &other)
-+ : d(other.d)
-+{
-+ d->ref();
-+}
-+
-+ASF::Attribute &
-+ASF::Attribute::operator=(const ASF::Attribute &other)
-+{
-+ if(d->deref())
-+ delete d;
-+ d = other.d;
-+ d->ref();
-+ return *this;
-+}
-+
-+ASF::Attribute::~Attribute()
-+{
-+ if(d->deref())
-+ delete d;
-+}
-+
-+ASF::Attribute::Attribute(const String &value)
-+{
-+ d = new AttributePrivate;
-+ d->type = UnicodeType;
-+ d->stringValue = value;
-+}
-+
-+ASF::Attribute::Attribute(const ByteVector &value)
-+{
-+ d = new AttributePrivate;
-+ d->type = BytesType;
-+ d->byteVectorValue = value;
-+}
-+
-+ASF::Attribute::Attribute(unsigned int value)
-+{
-+ d = new AttributePrivate;
-+ d->type = DWordType;
-+ d->intValue = value;
-+}
-+
-+ASF::Attribute::Attribute(unsigned long long value)
-+{
-+ d = new AttributePrivate;
-+ d->type = QWordType;
-+ d->longLongValue = value;
-+}
-+
-+ASF::Attribute::Attribute(unsigned short value)
-+{
-+ d = new AttributePrivate;
-+ d->type = WordType;
-+ d->shortValue = value;
-+}
-+
-+ASF::Attribute::Attribute(bool value)
-+{
-+ d = new AttributePrivate;
-+ d->type = BoolType;
-+ d->boolValue = value;
-+}
-+
-+ASF::Attribute::AttributeTypes
-+ASF::Attribute::type() const
-+{
-+ return d->type;
-+}
-+
-+String
-+ASF::Attribute::toString() const
-+{
-+ return d->stringValue;
-+}
-+
-+ByteVector
-+ASF::Attribute::toByteVector() const
-+{
-+ return d->byteVectorValue;
-+}
-+
-+unsigned short
-+ASF::Attribute::toBool() const
-+{
-+ return d->shortValue;
-+}
-+
-+unsigned short
-+ASF::Attribute::toUShort() const
-+{
-+ return d->shortValue;
-+}
-+
-+unsigned int
-+ASF::Attribute::toUInt() const
-+{
-+ return d->intValue;
-+}
-+
-+unsigned long long
-+ASF::Attribute::toULongLong() const
-+{
-+ return d->longLongValue;
-+}
-+
-+String
-+ASF::Attribute::parse(ASF::File &f, int kind)
-+{
-+ int size, nameLength;
-+ String name;
-+
-+ // extended content descriptor
-+ if(kind == 0) {
-+ nameLength = f.readWORD();
-+ name = f.readString(nameLength);
-+ d->type = ASF::Attribute::AttributeTypes(f.readWORD());
-+ size = f.readWORD();
-+ }
-+ // metadata & metadata library
-+ else {
-+ int temp = f.readWORD();
-+ // metadata library
-+ if(kind == 2) {
-+ d->language = temp;
-+ }
-+ d->stream = f.readWORD();
-+ nameLength = f.readWORD();
-+ d->type = ASF::Attribute::AttributeTypes(f.readWORD());
-+ size = f.readDWORD();
-+ name = f.readString(nameLength);
-+ }
-+
-+ switch(d->type) {
-+ case WordType:
-+ d->shortValue = f.readWORD();
-+ break;
-+
-+ case BoolType:
-+ if(kind == 0) {
-+ d->boolValue = f.readDWORD() == 1;
-+ }
-+ else {
-+ d->boolValue = f.readWORD() == 1;
-+ }
-+ break;
-+
-+ case DWordType:
-+ d->intValue = f.readDWORD();
-+ break;
-+
-+ case QWordType:
-+ d->longLongValue = f.readQWORD();
-+ break;
-+
-+ case UnicodeType:
-+ d->stringValue = f.readString(size);
-+ break;
-+
-+ case BytesType:
-+ case GuidType:
-+ d->byteVectorValue = f.readBlock(size);
-+ break;
-+ }
-+
-+ return name;
-+}
-+
-+ByteVector
-+ASF::Attribute::render(const String &name, int kind) const
-+{
-+ ByteVector data;
-+
-+ switch (d->type) {
-+ case WordType:
-+ data.append(ByteVector::fromShort(d->shortValue, false));
-+ break;
-+
-+ case BoolType:
-+ if(kind == 0) {
-+ data.append(ByteVector::fromUInt(d->boolValue ? 1 : 0, false));
-+ }
-+ else {
-+ data.append(ByteVector::fromShort(d->boolValue ? 1 : 0, false));
-+ }
-+ break;
-+
-+ case DWordType:
-+ data.append(ByteVector::fromUInt(d->intValue, false));
-+ break;
-+
-+ case QWordType:
-+ data.append(ByteVector::fromLongLong(d->longLongValue, false));
-+ break;
-+
-+ case UnicodeType:
-+ data.append(File::renderString(d->stringValue));
-+ break;
-+
-+ case BytesType:
-+ case GuidType:
-+ data.append(d->byteVectorValue);
-+ break;
-+ }
-+
-+ if(kind == 0) {
-+ data = File::renderString(name, true) +
-+ ByteVector::fromShort((int)d->type, false) +
-+ ByteVector::fromShort(data.size(), false) +
-+ data;
-+ }
-+ else {
-+ ByteVector nameData = File::renderString(name);
-+ data = ByteVector::fromShort(kind == 2 ? d->language : 0, false) +
-+ ByteVector::fromShort(d->stream, false) +
-+ ByteVector::fromShort(nameData.size(), false) +
-+ ByteVector::fromShort((int)d->type, false) +
-+ ByteVector::fromUInt(data.size(), false) +
-+ nameData +
-+ data;
-+ }
-+
-+ return data;
-+}
-+
-+int
-+ASF::Attribute::language() const
-+{
-+ return d->language;
-+}
-+
-+void
-+ASF::Attribute::setLanguage(int value)
-+{
-+ d->language = value;
-+}
-+
-+int
-+ASF::Attribute::stream() const
-+{
-+ return d->stream;
-+}
-+
-+void
-+ASF::Attribute::setStream(int value)
-+{
-+ d->stream = value;
-+}
-
-Property changes on: amarok/src/metadata/asf/asfattribute.cpp
-___________________________________________________________________
-Name: svn:eol-style
- + native
-
-Index: amarok/src/metadata/mp4/mp4file.cpp
-===================================================================
---- amarok/src/metadata/mp4/mp4file.cpp (revision 705231)
-+++ amarok/src/metadata/mp4/mp4file.cpp (working copy)
-@@ -156,10 +156,7 @@
- }
- #endif
-
-- if(!MP4Close(handle))
-- {
-- fprintf(stderr, "close failed\n");
-- }
-+ MP4Close(handle);
-
- mp4file = MP4Read(name());
- if(mp4file == MP4_INVALID_FILE_HANDLE)
-Index: amarok/src/metadata/wma/taglib_wmafiletyperesolver.h
-===================================================================
---- amarok/src/metadata/wma/taglib_wmafiletyperesolver.h (revision 705231)
-+++ amarok/src/metadata/wma/taglib_wmafiletyperesolver.h (working copy)
-@@ -1,39 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Martin Aumueller
-- email : aumuell@reserv.at
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--// (c) 2005 Martin Aumueller <aumuell@reserv.at>
--// See COPYING file for licensing information
--
--#ifndef TAGLIB_WMAFILETYPERESOLVER_H
--#define TAGLIB_WMAFILETYPERESOLVER_H
--
--#include <taglib/tfile.h>
--#include <taglib/fileref.h>
--
--
--class WMAFileTypeResolver : public TagLib::FileRef::FileTypeResolver
--{
-- TagLib::File *createFile(const char *fileName,
-- bool readAudioProperties,
-- TagLib::AudioProperties::ReadStyle audioPropertiesStyle) const;
--};
--
--#endif
-Index: amarok/src/metadata/wma/wmatag.cpp
-===================================================================
---- amarok/src/metadata/wma/wmatag.cpp (revision 705231)
-+++ amarok/src/metadata/wma/wmatag.cpp (working copy)
-@@ -1,210 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#include <wmatag.h>
--
--using namespace TagLib;
--
--class WMA::Tag::TagPrivate
--{
--public:
-- String title;
-- String artist;
-- String copyright;
-- String comment;
-- String rating;
-- AttributeMap attributeMap;
--};
--
--WMA::Tag::Tag()
--: TagLib::Tag()
--{
-- d = new TagPrivate;
--}
--
--WMA::Tag::~Tag()
--{
-- if(d)
-- delete d;
--}
--
--String
--WMA::Tag::title() const
--{
-- return d->title;
--}
--
--String
--WMA::Tag::artist() const
--{
-- return d->artist;
--}
--
--String
--WMA::Tag::album() const
--{
-- if(d->attributeMap.contains("WM/AlbumTitle"))
-- return d->attributeMap["WM/AlbumTitle"].toString();
-- return String::null;
--}
--
--String
--WMA::Tag::copyright() const
--{
-- return d->copyright;
--}
--
--String
--WMA::Tag::comment() const
--{
-- return d->comment;
--}
--
--String
--WMA::Tag::rating() const
--{
-- return d->rating;
--}
--
--unsigned int
--WMA::Tag::year() const
--{
-- if(d->attributeMap.contains("WM/Year"))
-- return d->attributeMap["WM/Year"].toInt();
-- return 0;
--}
--
--unsigned int
--WMA::Tag::track() const
--{
-- if(d->attributeMap.contains("WM/TrackNumber"))
-- return d->attributeMap["WM/TrackNumber"].toInt();
-- if(d->attributeMap.contains("WM/Track"))
-- return d->attributeMap["WM/Track"].toInt();
-- return 0;
--}
--
--String
--WMA::Tag::genre() const
--{
-- if(d->attributeMap.contains("WM/Genre"))
-- return d->attributeMap["WM/Genre"].toString();
-- return String::null;
--}
--
--void
--WMA::Tag::setTitle(const String &value)
--{
-- d->title = value;
--}
--
--void
--WMA::Tag::setArtist(const String &value)
--{
-- d->artist = value;
--}
--
--void
--WMA::Tag::setCopyright(const String &value)
--{
-- d->copyright = value;
--}
--
--void
--WMA::Tag::setComment(const String &value)
--{
-- d->comment = value;
--}
--
--void
--WMA::Tag::setRating(const String &value)
--{
-- d->rating = value;
--}
--
--void
--WMA::Tag::setAlbum(const String &value)
--{
-- setAttribute("WM/AlbumTitle", value);
--}
--
--void
--WMA::Tag::setGenre(const String &value)
--{
-- setAttribute("WM/Genre", value);
--}
--
--void
--WMA::Tag::setYear(uint value)
--{
-- setAttribute("WM/Year", String::number(value));
--}
--
--void
--WMA::Tag::setTrack(uint value)
--{
-- setAttribute("WM/TrackNumber", String::number(value));
--}
--
--const WMA::AttributeMap& WMA::Tag::attributeMap() const
--{
-- return d->attributeMap;
--}
--
--void WMA::Tag::removeItem(const ByteVector &key)
--{
-- AttributeMap::Iterator it = d->attributeMap.find(key);
-- if(it != d->attributeMap.end())
-- d->attributeMap.erase(it);
--}
--
--void WMA::Tag::setAttribute(const ByteVector &key, const String &value)
--{
-- setAttribute(key, WMA::Attribute(key, value));
--}
--
--void WMA::Tag::setAttribute(const ByteVector &key, const Attribute &attribute)
--{
-- removeItem(key);
-- d->attributeMap.insert(key, attribute);
--}
--
--bool WMA::Tag::isEmpty() const {
-- return TagLib::Tag::isEmpty() &&
-- copyright().isEmpty() &&
-- rating().isEmpty() &&
-- d->attributeMap.isEmpty();
--}
--
--void WMA::Tag::duplicate(const Tag *source, Tag *target, bool overwrite) {
-- TagLib::Tag::duplicate(source, target, overwrite);
-- if(overwrite) {
-- target->setCopyright(source->copyright());
-- target->setRating(source->rating());
-- }
-- else {
-- if (target->copyright().isEmpty())
-- target->setCopyright(source->copyright());
-- if (target->rating().isEmpty())
-- target->setRating(source->rating());
-- }
--}
--
-Index: amarok/src/metadata/wma/wmaproperties.cpp
-===================================================================
---- amarok/src/metadata/wma/wmaproperties.cpp (revision 705231)
-+++ amarok/src/metadata/wma/wmaproperties.cpp (working copy)
-@@ -1,83 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#include <tstring.h>
--#include <wmaproperties.h>
--
--using namespace TagLib;
--
--class WMA::Properties::PropertiesPrivate
--{
--public:
-- PropertiesPrivate(): length(0), bitrate(0), sampleRate(0), channels(0) {}
-- int length;
-- int bitrate;
-- int sampleRate;
-- int channels;
--};
--
--////////////////////////////////////////////////////////////////////////////////
--// public members
--////////////////////////////////////////////////////////////////////////////////
--
--WMA::Properties::Properties() : AudioProperties(AudioProperties::Average)
--{
-- d = new PropertiesPrivate;
--}
--
--WMA::Properties::~Properties()
--{
-- if(d)
-- delete d;
--}
--
--int WMA::Properties::length() const
--{
-- return d->length;
--}
--
--int WMA::Properties::bitrate() const
--{
-- return d->bitrate;
--}
--
--int WMA::Properties::sampleRate() const
--{
-- return d->sampleRate;
--}
--
--int WMA::Properties::channels() const
--{
-- return d->channels;
--}
--
--////////////////////////////////////////////////////////////////////////////////
--// private members
--////////////////////////////////////////////////////////////////////////////////
--
--void WMA::Properties::set(int length, int bitrate, int sampleRate, int channels)
--{
-- d->length = length;
-- d->bitrate = bitrate;
-- d->sampleRate = sampleRate;
-- d->channels = channels;
--}
--
-Index: amarok/src/metadata/wma/wmafile.cpp
-===================================================================
---- amarok/src/metadata/wma/wmafile.cpp (revision 705231)
-+++ amarok/src/metadata/wma/wmafile.cpp (working copy)
-@@ -1,388 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#include <tstring.h>
--#include <wmafile.h>
--#include <wmatag.h>
--#include <wmaproperties.h>
--
--#include <string.h>
--
--using namespace TagLib;
--
--class WMA::File::FilePrivate
--{
--public:
-- FilePrivate(): size(0), offset1(0), offset2(0), size1(0), size2(0),
-- numObjects(0), tag(0), properties(0) {}
-- unsigned long long size;
-- unsigned long offset1, offset2, size1, size2, numObjects;
-- WMA::Tag *tag;
-- WMA::Properties *properties;
--};
--
--// GUIDs
--
--struct WMA::GUID
--{
-- WMA::DWORD v1;
-- WMA::WORD v2;
-- WMA::WORD v3;
-- WMA::BYTE v4[8];
-- bool operator==(const GUID &g) const { return memcmp(this, &g, sizeof(WMA::GUID)) == 0; }
-- bool operator!=(const GUID &g) const { return memcmp(this, &g, sizeof(WMA::GUID)) != 0; }
-- static GUID header;
-- static GUID fileProperties;
-- static GUID streamProperties;
-- static GUID contentDescription;
-- static GUID extendedContentDescription;
-- static GUID audioMedia;
--};
--
--WMA::GUID WMA::GUID::header = {
-- 0x75B22630, 0x668E, 0x11CF, { 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C }
--};
--
--WMA::GUID WMA::GUID::fileProperties = {
-- 0x8CABDCA1, 0xA947, 0x11CF, { 0x8E, 0xE4, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 },
--};
--
--WMA::GUID WMA::GUID::streamProperties = {
-- 0xB7DC0791, 0xA9B7, 0x11CF, { 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 },
--};
--
--WMA::GUID WMA::GUID::contentDescription = {
-- 0x75b22633, 0x668e, 0x11cf, { 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c },
--};
--
--WMA::GUID WMA::GUID::extendedContentDescription = {
-- 0xD2D0A440, 0xE307, 0x11D2, { 0x97, 0xF0, 0x00, 0xA0, 0xC9, 0x5E, 0xA8, 0x50 },
--};
--
--WMA::GUID WMA::GUID::audioMedia = {
-- 0xF8699E40, 0x5B4D, 0x11CF, { 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B },
--};
--
--////////////////////////////////////////////////////////////////////////////////
--// public members
--////////////////////////////////////////////////////////////////////////////////
--
--WMA::File::File(const char *file, bool readProperties, Properties::ReadStyle propertiesStyle)
-- : TagLib::File(file)
--{
-- d = new FilePrivate;
-- read(readProperties, propertiesStyle);
--}
--
--WMA::File::~File()
--{
-- if(d) {
-- if (d->tag)
-- delete d->tag;
-- if (d->properties)
-- delete d->properties;
-- delete d;
-- }
--}
--
--TagLib::Tag *WMA::File::tag() const
--{
-- return d->tag;
--}
--
--WMA::Tag *WMA::File::WMATag() const
--{
-- return d->tag;
--}
--
--WMA::Properties *WMA::File::audioProperties() const
--{
-- return d->properties;
--}
--
--void WMA::File::read(bool readProperties, Properties::ReadStyle /* propertiesStyle */)
--{
-- WMA::GUID guid;
--
-- readGUID(guid);
-- if(guid != GUID::header) {
-- return;
-- }
--
-- int length = 0;
-- int bitrate = 0;
-- int sampleRate = 0;
-- int channels = 0;
--
-- d->tag = new WMA::Tag();
-- if(!d->tag)
-- return;
--
-- d->size = readQWORD();
-- d->numObjects = readDWORD();
-- seek(2, Current);
--
-- for(int i = 0; i < (int)d->numObjects; i++) {
--
-- readGUID(guid);
-- long objectSize = (long)readQWORD();
--
-- if(readProperties && guid == GUID::fileProperties) {
--
-- seek(16+8+8+8, Current);
-- length = (int)(readQWORD() / 10000000L);
-- seek(8+8+4+4+4+4, Current);
--
-- }
--
-- else if(readProperties && guid == GUID::streamProperties) {
--
-- long pos = tell();
--
-- readGUID(guid);
-- if(guid != GUID::audioMedia) {
-- return;
-- }
--
-- seek(16+8+4+4+2+4+2, Current);
-- channels = readWORD();
-- sampleRate = readDWORD();
-- bitrate = readDWORD() * 8 / 1000;
--
-- seek(pos + (long)objectSize - 24);
-- }
--
-- else if(guid == GUID::extendedContentDescription) {
--
-- d->offset2 = tell() - 16 - 8;
-- d->size2 = (long)objectSize;
--
-- int numDescriptors = readWORD();
--
-- for(int j = 0; j < numDescriptors; j++) {
-- WMA::Attribute attr(*this);
-- d->tag->setAttribute(attr.name().toCString(false), attr);
-- }
--
-- }
--
-- else if(guid == GUID::contentDescription) {
--
-- d->offset1 = tell() - 16 - 8;
-- d->size1 = (long)objectSize;
--
-- int titleLength = readWORD();
-- int artistLength = readWORD();
-- int copyrightLength = readWORD();
-- int commentLength = readWORD();
-- int ratingLength = readWORD();
--
-- String value;
--
-- readString(titleLength, value);
-- d->tag->setTitle(value);
--
-- readString(artistLength, value);
-- d->tag->setArtist(value);
--
-- readString(copyrightLength, value);
-- d->tag->setCopyright(value);
--
-- readString(commentLength, value);
-- d->tag->setComment(value);
--
-- readString(ratingLength, value);
-- d->tag->setRating(value);
-- }
--
-- else {
-- seek((long)objectSize - 24, Current);
-- }
--
-- }
--
-- if(readProperties) {
-- d->properties = new WMA::Properties();
-- if(d->properties)
-- d->properties->set(length, bitrate, sampleRate, channels);
-- }
--
--}
--
--bool WMA::File::save()
--{
-- if(readOnly()) {
-- return false;
-- }
--
-- if(d->offset1 == 0) {
-- d->offset1 = 16 + 8 + 4 + 2;
-- d->numObjects++;
-- }
--
-- if(d->offset2 == 0) {
-- d->offset2 = 16 + 8 + 4 + 2;
-- d->numObjects++;
-- }
--
-- ByteVector chunk1 = renderContentDescription();
-- ByteVector chunk2 = renderExtendedContentDescription();
--
-- if(d->offset1 > d->offset2) {
-- insert(chunk1, d->offset1, d->size1);
-- insert(chunk2, d->offset2, d->size2);
-- }
-- else {
-- insert(chunk2, d->offset2, d->size2);
-- insert(chunk1, d->offset1, d->size1);
-- }
--
-- insert(ByteVector::fromLongLong(d->size +
-- (int)(chunk1.size() - d->size1) +
-- (int)(chunk2.size() - d->size2), false) +
-- ByteVector::fromUInt(d->numObjects, false), 16, 8 + 4);
--
-- return true;
--}
--
--////////////////////////////////////////////////////////////////////////////////
--// protected members
--////////////////////////////////////////////////////////////////////////////////
--
--int WMA::File::readBYTE()
--{
-- ByteVector v = readBlock(1);
-- return v[0];
--}
--
--int WMA::File::readWORD()
--{
-- ByteVector v = readBlock(2);
-- return v.toShort(false);
--}
--
--unsigned int WMA::File::readDWORD()
--{
-- ByteVector v = readBlock(4);
-- return v.toUInt(false);
--}
--
--long long WMA::File::readQWORD()
--{
-- ByteVector v = readBlock(8);
-- return v.toLongLong(false);
--}
--
--void WMA::File::readGUID(GUID &g)
--{
-- g.v1 = readDWORD();
-- g.v2 = readWORD();
-- g.v3 = readWORD();
-- for(int i = 0; i < 8; i++)
-- g.v4[i] = readBYTE();
--}
--
--void WMA::File::readString(int len, String &s)
--{
-- ByteVector v = readBlock(len);
-- if(len < 2 || v[len-1] != 0 || v[len-2] != 0)
-- v.append(ByteVector::fromShort(0));
-- s = String(v, String::UTF16LE);
--}
--
--ByteVector WMA::File::renderContentDescription()
--{
-- String s;
--
-- s = d->tag->title();
-- ByteVector v1 = s.data(String::UTF16LE);
-- if(s.size()) {
-- v1.append((char)0);
-- v1.append((char)0);
-- }
--
-- s = d->tag->artist();
-- ByteVector v2 = s.data(String::UTF16LE);
-- if(s.size()) {
-- v2.append((char)0);
-- v2.append((char)0);
-- }
--
-- s = d->tag->copyright();
-- ByteVector v3 = s.data(String::UTF16LE);
-- if(s.size()) {
-- v3.append((char)0);
-- v3.append((char)0);
-- }
--
-- s = d->tag->comment();
-- ByteVector v4 = s.data(String::UTF16LE);
-- if(s.size()) {
-- v4.append((char)0);
-- v4.append((char)0);
-- }
--
-- s = d->tag->rating();
-- ByteVector v5 = s.data(String::UTF16LE);
-- if(s.size()) {
-- v5.append((char)0);
-- v5.append((char)0);
-- }
--
-- ByteVector data;
--
-- data.append(ByteVector::fromShort(v1.size(), false));
-- data.append(ByteVector::fromShort(v2.size(), false));
-- data.append(ByteVector::fromShort(v3.size(), false));
-- data.append(ByteVector::fromShort(v4.size(), false));
-- data.append(ByteVector::fromShort(v5.size(), false));
--
-- data.append(v1);
-- data.append(v2);
-- data.append(v3);
-- data.append(v4);
-- data.append(v5);
--
-- data = ByteVector(reinterpret_cast<const char *>(&GUID::contentDescription), sizeof(GUID))
-- + ByteVector::fromLongLong(data.size() + 16 + 8, false)
-- + data;
--
-- return data;
--}
--
--ByteVector WMA::File::renderExtendedContentDescription()
--{
-- ByteVector data;
--
-- data.append(ByteVector::fromShort(d->tag->attributeMap().size(), false));
--
-- WMA::AttributeMap::ConstIterator it = d->tag->attributeMap().begin();
-- for(; it != d->tag->attributeMap().end(); it++)
-- data.append(it->second.render());
--
-- data = ByteVector(reinterpret_cast<const char *>(&GUID::extendedContentDescription), sizeof(GUID))
-- + ByteVector::fromLongLong(data.size() + 16 + 8, false)
-- + data;
--
-- return data;
--}
--
--
-Index: amarok/src/metadata/wma/wmatag.h
-===================================================================
---- amarok/src/metadata/wma/wmatag.h (revision 705231)
-+++ amarok/src/metadata/wma/wmatag.h (working copy)
-@@ -1,188 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#ifndef TAGLIB_WMATAG_H
--#define TAGLIB_WMATAG_H
--
--#include <tmap.h>
--#include <tag.h>
--#include "wmafile.h"
--#include "wmaattribute.h"
--
--namespace TagLib {
--
-- namespace WMA {
--
-- typedef Map<const ByteVector, Attribute> AttributeMap;
--
-- class Tag : public TagLib::Tag {
--
-- friend class File;
--
-- public:
--
-- Tag();
--
-- virtual ~Tag();
--
-- /*!
-- * Returns the track name.
-- */
-- virtual String title() const;
--
-- /*!
-- * Returns the artist name.
-- */
-- virtual String artist() const;
--
-- /*!
-- * Returns the album name; if no album name is present in the tag
-- * String::null will be returned.
-- */
-- virtual String album() const;
--
-- /*!
-- * Returns the track comment.
-- */
-- virtual String comment() const;
--
-- /*!
-- * Returns the genre name; if no genre is present in the tag String::null
-- * will be returned.
-- */
-- virtual String genre() const;
--
-- /*!
-- * Returns the rating.
-- */
-- virtual String rating() const;
--
-- /*!
-- * Returns the genre name; if no genre is present in the tag String::null
-- * will be returned.
-- */
-- virtual String copyright() const;
--
-- /*!
-- * Returns the year; if there is no year set, this will return 0.
-- */
-- virtual uint year() const;
--
-- /*!
-- * Returns the track number; if there is no track number set, this will
-- * return 0.
-- */
-- virtual uint track() const;
--
-- /*!
-- * Sets the title to \a s.
-- */
-- virtual void setTitle(const String &s);
--
-- /*!
-- * Sets the artist to \a s.
-- */
-- virtual void setArtist(const String &s);
--
-- /*!
-- * Sets the album to \a s. If \a s is String::null then this value will be
-- * cleared.
-- */
-- virtual void setAlbum(const String &s);
--
-- /*!
-- * Sets the comment to \a s.
-- */
-- virtual void setComment(const String &s);
--
-- /*!
-- * Sets the rating to \a s.
-- */
-- virtual void setRating(const String &s);
--
-- /*!
-- * Sets the copyright to \a s.
-- */
-- virtual void setCopyright(const String &s);
--
-- /*!
-- * Sets the genre to \a s.
-- */
-- virtual void setGenre(const String &s);
--
-- /*!
-- * Sets the year to \a i. If \a s is 0 then this value will be cleared.
-- */
-- virtual void setYear(uint i);
--
-- /*!
-- * Sets the track to \a i. If \a s is 0 then this value will be cleared.
-- */
-- virtual void setTrack(uint i);
--
-- /*!
-- * Returns true if the tag does not contain any data. This should be
-- * reimplemented in subclasses that provide more than the basic tagging
-- * abilities in this class.
-- */
-- virtual bool isEmpty() const;
--
-- /*!
-- * Copies the generic data from one tag to another.
-- *
-- * If \a overwrite is true then the values will be unconditionally copied.
-- * If false only empty values will be overwritten.
-- */
-- static void duplicate(const Tag *source, Tag *target, bool overwrite = true);
--
-- /*!
-- * Returns a reference to the item list map. This is an ItemListMap of
-- * all of the items in the tag.
-- *
-- * This is the most powerfull structure for accessing the items of the tag.
-- *
-- * \warning You should not modify this data structure directly, instead
-- * use setItem() and removeItem().
-- */
-- const AttributeMap &attributeMap() const;
--
-- /*!
-- * Removes the \a key attribute from the tag
-- */
-- void removeItem(const ByteVector &key);
--
-- void setAttribute(const ByteVector &key, const String &value);
--
-- /*!
-- * Sets the \a key attribute to the value of \a attribute. If an attribute
-- * with the \a key is already present, it will be replaced.
-- */
-- void setAttribute(const ByteVector &key, const Attribute &attribute);
--
-- private:
--
-- class TagPrivate;
-- TagPrivate *d;
--
-- };
-- }
--}
--#endif
-Index: amarok/src/metadata/wma/wmaproperties.h
-===================================================================
---- amarok/src/metadata/wma/wmaproperties.h (revision 705231)
-+++ amarok/src/metadata/wma/wmaproperties.h (working copy)
-@@ -1,71 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#ifndef TAGLIB_WMAPROPERTIES_H
--#define TAGLIB_WMAPROPERTIES_H
--
--#include <audioproperties.h>
--#include <tstring.h>
--
--namespace TagLib {
--
-- namespace WMA {
--
-- class File;
--
-- class Properties : public AudioProperties
-- {
--
-- friend class WMA::File;
--
-- public:
--
-- /*!
-- * Create an instance of WMA::Properties.
-- */
-- Properties();
--
-- /*!
-- * Destroys this WMA::Properties instance.
-- */
-- virtual ~Properties();
--
-- // Reimplementations.
--
-- virtual int length() const;
-- virtual int bitrate() const;
-- virtual int sampleRate() const;
-- virtual int channels() const;
--
-- private:
--
-- class PropertiesPrivate;
-- PropertiesPrivate *d;
--
-- void set(int length, int bitrate, int sampleRate, int channels);
--
-- };
--
-- }
--
--}
--
--#endif
-Index: amarok/src/metadata/wma/Makefile.am
-===================================================================
---- amarok/src/metadata/wma/Makefile.am (revision 705231)
-+++ amarok/src/metadata/wma/Makefile.am (working copy)
-@@ -1,20 +0,0 @@
--SUBDIRS =
--
--INCLUDES = $(all_includes) $(taglib_includes)
--METASOURCES = AUTO
--libtagwma_la_LDFLAGS = $(all_libraries)
--noinst_LTLIBRARIES = libtagwma.la
--
--libtagwma_la_SOURCES = \
-- wmaattribute.cpp \
-- wmaproperties.cpp \
-- wmatag.cpp \
-- wmafile.cpp \
-- taglib_wmafiletyperesolver.cpp
--
--noinst_HEADERS = \
-- wmaattribute.h \
-- wmaproperties.h \
-- wmatag.h \
-- wmafile.h \
-- taglib_wmafiletyperesolver.h
-Index: amarok/src/metadata/wma/wmaattribute.cpp
-===================================================================
---- amarok/src/metadata/wma/wmaattribute.cpp (revision 705231)
-+++ amarok/src/metadata/wma/wmaattribute.cpp (working copy)
-@@ -1,231 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#include <wmaattribute.h>
--#include <wmafile.h>
--
--using namespace TagLib;
--
--class WMA::Attribute::AttributePrivate
--{
--public:
-- AttributeTypes type;
-- String name;
-- String value_string;
-- ByteVector value_bytes;
-- union {
-- int value_int;
-- long long value_longlong;
-- };
--};
--
--////////////////////////////////////////////////////////////////////////////////
--// public members
--////////////////////////////////////////////////////////////////////////////////
--
--WMA::Attribute::Attribute()
--{
-- d = new AttributePrivate;
-- d->name = String::null;
-- d->type = UnicodeType;
--}
--
--WMA::Attribute::Attribute(WMA::File &file)
--{
-- d = new AttributePrivate;
-- parse(file);
--}
--
--WMA::Attribute::Attribute(const String &name, const String &value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = UnicodeType;
-- d->value_string = value;
--}
--
--WMA::Attribute::Attribute(const String &name, const ByteVector &value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = BytesType;
-- d->value_bytes = value;
--}
--
--WMA::Attribute::Attribute(const String &name, unsigned int value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = DWordType;
-- d->value_int = value;
--}
--
--WMA::Attribute::Attribute(const String &name, unsigned long long value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = QWordType;
-- d->value_longlong = value;
--}
--
--WMA::Attribute::Attribute(const String &name, unsigned short value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = WordType;
-- d->value_int = value;
--}
--
--WMA::Attribute::Attribute(const String &name, bool value)
--{
-- d = new AttributePrivate;
-- d->name = name;
-- d->type = BoolType;
-- d->value_int = value;
--}
--
--WMA::Attribute::Attribute(const Attribute &attr)
--{
-- d = new AttributePrivate(*attr.d);
--}
--
--WMA::Attribute::~Attribute()
--{
-- if(d)
-- delete d;
--}
--
--String WMA::Attribute::name() const
--{
-- return d->name;
--}
--
--WMA::Attribute::AttributeTypes WMA::Attribute::type() const
--{
-- return d->type;
--}
--
--String WMA::Attribute::toString() const
--{
-- return d->value_string;
--}
--
--ByteVector WMA::Attribute::toByteVector() const
--{
-- return d->value_bytes;
--}
--
--int WMA::Attribute::toInt() const
--{
-- if (d->type == UnicodeType)
-- return d->value_string.toInt();
-- else
-- return d->value_int;
--}
--
--long long WMA::Attribute::toLongLong() const
--{
-- return d->value_longlong;
--}
--
--bool WMA::Attribute::parse(WMA::File &f)
--{
-- int size = f.readWORD();
-- f.readString(size, d->name);
--
-- d->type = (WMA::Attribute::AttributeTypes)f.readWORD();
-- size = f.readWORD();
--
-- switch(d->type) {
-- case WordType:
-- d->value_int = f.readWORD();
-- break;
--
-- case BoolType:
-- case DWordType:
-- d->value_int = f.readDWORD();
-- break;
--
-- case QWordType:
-- d->value_longlong = f.readQWORD();
-- break;
--
-- case UnicodeType:
-- f.readString(size, d->value_string);
-- break;
--
-- case BytesType:
-- d->value_bytes = f.readBlock(size);
-- break;
--
-- default:
-- return false;
-- }
--
-- return true;
--}
--
--ByteVector WMA::Attribute::render() const
--{
-- ByteVector data;
--
-- ByteVector v = d->name.data(String::UTF16LE);
-- data.append(ByteVector::fromShort(v.size() + 2, false));
-- data.append(v + ByteVector::fromShort(0, false));
--
-- data.append(ByteVector::fromShort((int)d->type, false));
--
-- switch (d->type) {
-- case WordType:
-- data.append(ByteVector::fromShort(2, false));
-- data.append(ByteVector::fromShort(d->value_int, false));
-- break;
--
-- case BoolType:
-- case DWordType:
-- data.append(ByteVector::fromShort(4, false));
-- data.append(ByteVector::fromUInt(d->value_int, false));
-- break;
--
-- case QWordType:
-- data.append(ByteVector::fromShort(8, false));
-- data.append(ByteVector::fromLongLong(d->value_longlong, false));
-- break;
--
-- case UnicodeType:
-- v = d->value_string.data(String::UTF16LE);
-- data.append(ByteVector::fromShort(v.size() + 2, false));
-- data.append(v + ByteVector::fromShort(0, false));
-- break;
--
-- case BytesType:
-- data.append(ByteVector::fromShort(d->value_bytes.size(), false));
-- data.append(d->value_bytes);
-- break;
--
-- default:
-- return ByteVector::null;
-- }
--
-- return data;
--}
--
--
-Index: amarok/src/metadata/wma/wmafile.h
-===================================================================
---- amarok/src/metadata/wma/wmafile.h (revision 705231)
-+++ amarok/src/metadata/wma/wmafile.h (working copy)
-@@ -1,100 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#ifndef TAGLIB_WMAFILE_H
--#define TAGLIB_WMAFILE_H
--
--#include <tfile.h>
--#include <tag.h>
--#include "wmaproperties.h"
--#include "wmatag.h"
--
--namespace TagLib {
--
-- namespace WMA {
--
-- struct GUID;
--
-- typedef unsigned char BYTE;
-- typedef unsigned short WORD;
-- typedef unsigned int DWORD;
-- typedef unsigned long long QWORD;
--
-- class File : public TagLib::File
-- {
--
-- friend class Attribute;
--
-- public:
--
-- File(const char *file, bool readProperties = true, Properties::ReadStyle propertiesStyle = Properties::Average);
--
-- virtual ~File();
--
-- /*!
-- * Returns the TagLib::Tag for this file.
-- */
-- virtual TagLib::Tag *tag() const;
--
-- /*!
-- * Returns the WMA::Tag for this file.
-- */
-- virtual Tag *WMATag() const;
--
-- /*!
-- * Returns the WMA::Properties for this file.
-- */
-- virtual Properties *audioProperties() const;
--
--
-- /*!
-- * Save the file.
-- *
-- * This returns true if the save was successful.
-- */
-- virtual bool save();
--
-- protected:
--
-- int readBYTE();
-- int readWORD();
-- unsigned int readDWORD();
-- long long readQWORD();
-- void readGUID(GUID &g);
-- void readString(int len, String &s);
--
-- ByteVector renderContentDescription();
-- ByteVector renderExtendedContentDescription();
--
-- void read(bool readProperties, Properties::ReadStyle propertiesStyle);
--
-- private:
--
-- class FilePrivate;
-- FilePrivate *d;
--
-- };
--
-- }
--
--}
--
--#endif
-Index: amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp
-===================================================================
---- amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp (revision 705231)
-+++ amarok/src/metadata/wma/taglib_wmafiletyperesolver.cpp (working copy)
-@@ -1,47 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Martin Aumueller
-- email : aumuell@reserv.at
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--// (c) 2005 Martin Aumueller <aumuell@reserv.at>
--// See COPYING file for licensing information
--
--#include "taglib_wmafiletyperesolver.h"
--#include "wmafile.h"
--
--#include <string.h>
--
--TagLib::File *WMAFileTypeResolver::createFile(const char *fileName,
-- bool readProperties,
-- TagLib::AudioProperties::ReadStyle propertiesStyle) const
--{
-- const char *ext = strrchr(fileName, '.');
-- if(ext && (!strcasecmp(ext, ".wma") || !strcasecmp(ext, ".asf")))
-- {
-- TagLib::WMA::File *f = new TagLib::WMA::File(fileName, readProperties, propertiesStyle);
-- if(f->isValid())
-- return f;
-- else
-- {
-- delete f;
-- }
-- }
--
-- return 0;
--}
-Index: amarok/src/metadata/wma/wmaattribute.h
-===================================================================
---- amarok/src/metadata/wma/wmaattribute.h (revision 705231)
-+++ amarok/src/metadata/wma/wmaattribute.h (working copy)
-@@ -1,125 +0,0 @@
--/***************************************************************************
-- copyright : (C) 2005 by Lukas Lalinsky
-- email : lalinsky@gmail.com
-- ***************************************************************************/
--
--/***************************************************************************
-- * This library is free software; you can redistribute it and/or modify *
-- * it under the terms of the GNU Lesser General Public License version *
-- * 2.1 as published by the Free Software Foundation. *
-- * *
-- * This library 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 *
-- * Lesser General Public License for more details. *
-- * *
-- * You should have received a copy of the GNU Lesser General Public *
-- * License along with this library; if not, write to the Free Software *
-- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
-- * MA 02110-1301 USA *
-- ***************************************************************************/
--
--#ifndef TAGLIB_WMAATTRIBUTE_H
--#define TAGLIB_WMAATTRIBUTE_H
--
--#include <tstring.h>
--#include <tbytevector.h>
--
--namespace TagLib {
--
-- namespace WMA {
--
-- class File;
--
-- class Attribute {
--
-- friend class File;
--
-- public:
--
-- /*!
-- * Enum of types an Attribute can have.
-- */
-- enum AttributeTypes {
-- UnicodeType = 0,
-- BytesType = 1,
-- BoolType = 2,
-- DWordType = 3,
-- QWordType = 4,
-- WordType = 5
-- };
--
-- /*!
-- * Constructs an empty attribute.
-- */
-- Attribute();
--
-- /*!
-- * Constructs an attribute with \a key and \a value.
-- */
-- Attribute(const String &key, const String &value);
-- Attribute(const String &key, const ByteVector &value);
-- Attribute(const String &key, unsigned int value);
-- Attribute(const String &key, unsigned long long value);
-- Attribute(const String &key, unsigned short value);
-- Attribute(const String &key, bool value);
--
-- /*!
-- * Construct an attribute as a copy of \a item.
-- */
-- Attribute(const Attribute &item);
--
-- /*!
-- * Destroys the attribute.
-- */
-- virtual ~Attribute();
--
-- /*!
-- * Returns the name.
-- */
-- String name() const;
--
-- /*!
-- * Returns type of the value.
-- */
-- AttributeTypes type() const;
--
-- /*!
-- * Returns the value as a String.
-- */
-- String toString() const;
--
-- /*!
-- * Returns the value as a ByteVector.
-- */
-- ByteVector toByteVector() const;
--
-- /*!
-- * Returns the value as an integer.
-- */
-- int toInt() const;
--
-- /*!
-- * Returns the value as a long long.
-- */
-- long long toLongLong() const;
--
-- ByteVector render() const;
--
-- protected:
--
-- Attribute(WMA::File &file);
-- bool parse(WMA::File &file);
--
-- private:
--
-- class AttributePrivate;
-- AttributePrivate *d;
--
-- };
--
-- }
--
--}
--
--#endif
-
-Property changes on: amarok/src/metadata/wma
-___________________________________________________________________
-Name: svn:ignore
- - .libs
-.deps
-Makefile
-Makefile.in
-
-
-Index: amarok/src/metadata/tplugins.cpp
-===================================================================
---- amarok/src/metadata/tplugins.cpp (revision 705231)
-+++ amarok/src/metadata/tplugins.cpp (working copy)
-@@ -42,8 +42,8 @@
- #include "wavpack/wvfile.h"
- #include "speex/taglib_speexfiletyperesolver.h"
- #include "speex/speexfile.h"
--#include "wma/taglib_wmafiletyperesolver.h"
--#include "wma/wmafile.h"
-+#include "asf/taglib_asffiletyperesolver.h"
-+#include "asf/asffile.h"
- #include "rmff/taglib_realmediafiletyperesolver.h"
- #include "rmff/taglib_realmediafile.h"
- #include "audible/taglib_audiblefiletyperesolver.h"
-@@ -95,7 +95,7 @@
- || mimetype->is( "video/x-msvideo" )
- || mimetype->is( "video/x-ms-wmv" ) )
- {
-- return new TagLib::WMA::File(fileName, readProperties, propertiesStyle);
-+ return new TagLib::ASF::File(fileName, readProperties, propertiesStyle);
- }
- else if( mimetype->is( "audio/vnd.rn-realaudio" )
- || mimetype->is( "audio/x-pn-realaudio" )
-@@ -130,7 +130,7 @@
- {
- //TagLib::FileRef::addFileTypeResolver(new MimeTypeFileTypeResolver);
- TagLib::FileRef::addFileTypeResolver(new MP4FileTypeResolver);
-- TagLib::FileRef::addFileTypeResolver(new WMAFileTypeResolver);
-+ TagLib::FileRef::addFileTypeResolver(new ASFFileTypeResolver);
- TagLib::FileRef::addFileTypeResolver(new RealMediaFileTypeResolver);
- TagLib::FileRef::addFileTypeResolver(new AudibleFileTypeResolver);
- TagLib::FileRef::addFileTypeResolver(new AACFileTypeResolver);
-Index: amarok/src/metadata/Makefile.am
-===================================================================
---- amarok/src/metadata/Makefile.am (revision 705231)
-+++ amarok/src/metadata/Makefile.am (working copy)
-@@ -6,7 +6,7 @@
- MP4_LDADD = m4a/libtagm4a.la
- endif
-
--SUBDIRS = speex wavpack trueaudio wma audible rmff $(MP4_SUBDIR) aac wav
-+SUBDIRS = speex wavpack trueaudio asf audible rmff $(MP4_SUBDIR) aac wav
-
-
- INCLUDES = -I$(top_srcdir)/amarok/src $(all_includes) $(taglib_includes)
-@@ -24,7 +24,7 @@
- speex/libtagspeex.la \
- trueaudio/libtagtrueaudio.la \
- wavpack/libtagwavpack.la \
-- wma/libtagwma.la \
-+ asf/libtagasf.la \
- wav/libtagwav.la \
- rmff/libtagrealmedia.la \
- $(MP4_LDADD) \
diff --git a/amarok.spec b/amarok.spec
index 28e1151..63f6575 100644
--- a/amarok.spec
+++ b/amarok.spec
@@ -5,8 +5,8 @@
Name: amarok
Summary: Media player
-Version: 1.4.7
-Release: 14%{?dist}
+Version: 1.4.8
+Release: 1%{?dist}
Group: Applications/Multimedia
License: GPLv2+
@@ -14,21 +14,12 @@ Url: http://amarok.kde.org
# http://download.kde.org/download.php?url=stable/amarok/1.4.3/src
#Source0: http://mirrors.isc.org/pub/kde/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2
Source0: ftp://ftp.kde.org/pub/kde/stable/amarok/%{version}/src/amarok-%{version}.tar.bz2
-# KDE bug 147126: amarok freezes when trying to play mp3 files without mp3 support
-Patch0: amarok-1.4.7-147126.patch
-# Fedora bug 242862: Amarok doesn't support transfer of Unicode filenames to MTP devices
-Patch1: amarok-1.4.7-utf8.patch
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
# Use xdg-open to start the selected browser
Patch2: amarok-1.4.7-xdg.patch
-# http://bugs.kde.org/148317 - dynamic mode floods playlist ...
-# http://websvn.kde.org/branches/stable/extragear/multimedia/amarok/src/playlist.cpp?r1=705494&r2=705493&pathrev=705494&view=patch
-Patch3: amarok-1.4.7-148317.patch
-# fix asf/wma support (with recent taglib)
-# svn diff amarok/src/metadata --revision 705231
-Patch4: amarok-asf.patch
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
-BuildRequires: automake libtool
+#BuildRequires: automake libtool
BuildRequires: alsa-lib-devel
BuildRequires: desktop-file-utils
BuildRequires: esound-devel
@@ -108,20 +99,14 @@ use any of xmms' visualisation plugins with Amarok.
%prep
%setup -q
-%patch0 -p0 -b .147126
-%patch1 -p1 -b .utf8
%patch2 -p1 -b .xdg
-%patch3 -p4 -b .148317
-%patch4 -p0 -b .asf
-
-# for patch4
-make -f admin/Makefile.common
%build
unset QTDIR && . %{_sysconfdir}/profile.d/qt.sh
+
%configure \
- --disable-debug \
+ --disable-debug --disable-warnings \
--disable-rpath \
--enable-mysql \
--enable-postgresql \
@@ -267,6 +252,9 @@ rm -fr $RPM_BUILD_ROOT
%changelog
+* Thu Dec 20 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 1.4.8-1
+- amarok-1.4.8
+
* Fri Dec 07 2007 Alex Lancaster <alexlan[AT]fedoraproject.org> 1.4.7-14
- Rebuild for new openssl
diff --git a/sources b/sources
index 423b559..ab3ee02 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-f1299e142da8a69bc3cff5d585e38d43 amarok-1.4.7.tar.bz2
+7f65c4a8f3f0ff9042a5b5dd21b36cc8 amarok-1.4.8.tar.bz2
reply other threads:[~2026-07-06 18:03 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178336102455.1.2137512662231279556.rpms-amarok-513e32fc8c39@fedoraproject.org \
--to=rdieter@fedoraproject.org \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox