diff options
author | Tilman Keskinoz <arved@FreeBSD.org> | 2006-11-19 16:13:33 +0000 |
---|---|---|
committer | Tilman Keskinoz <arved@FreeBSD.org> | 2006-11-19 16:13:33 +0000 |
commit | a665e766842ae542ab5bc6abb539e3576670704a (patch) | |
tree | 0d74e0a8c7895d0415be79b082970633750213f0 /audio/kid3 | |
parent | ba3bbf5bdc240b058185fe5d61185a2db5f7d279 (diff) | |
download | ports-a665e766842ae542ab5bc6abb539e3576670704a.tar.gz ports-a665e766842ae542ab5bc6abb539e3576670704a.zip |
Notes
Diffstat (limited to 'audio/kid3')
-rw-r--r-- | audio/kid3/Makefile | 12 | ||||
-rw-r--r-- | audio/kid3/files/patch-configure | 232 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__freedbclient.cpp | 101 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__freedbclient.h | 44 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__freedbdialog.cpp | 96 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__freedbdialog.h | 15 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__genres.cpp | 11 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__genres.h | 11 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__id3form.cpp | 11 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__mp3file.cpp | 14 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__musicbrainzclient.cpp | 356 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__musicbrainzclient.h | 146 | ||||
-rw-r--r-- | audio/kid3/files/patch-kid3__oggfile.cpp (renamed from audio/kid3/files/patch-kid3-oggfile.cpp) | 4 |
13 files changed, 1041 insertions, 12 deletions
diff --git a/audio/kid3/Makefile b/audio/kid3/Makefile index 04c9e9d69e2d..88536c3cf803 100644 --- a/audio/kid3/Makefile +++ b/audio/kid3/Makefile @@ -7,6 +7,7 @@ PORTNAME= kid3 PORTVERSION= 0.7 +PORTREVISION= 1 CATEGORIES= audio kde MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} @@ -18,7 +19,7 @@ LIB_DEPENDS= id3-3.8.3:${PORTSDIR}/audio/id3lib \ FLAC.7:${PORTSDIR}/audio/flac \ ogg.5:${PORTSDIR}/audio/libogg \ vorbis.3:${PORTSDIR}/audio/libvorbis \ - tunepimp-0.4.3:${PORTSDIR}/audio/libtunepimp-old + tunepimp.5:${PORTSDIR}/audio/libtunepimp USE_KDELIBS_VER=3 USE_GMAKE= yes @@ -26,14 +27,6 @@ USE_AUTOTOOLS= libtool:15 USE_GETTEXT= yes GNU_CONFIGURE= yes INSTALLS_ICONS= yes -CONFIGURE_ARGS+=CFLAGS=-I${LOCALBASE}/include/tunepimp-0.4 \ - LDFLAGS=-L${LOCALBASE}/lib/tunepimp-0.4 - -post-patch: - @${REINPLACE_CMD} -e 's|-ltunepimp|-ltunepimp-0.4|g' \ - -e 's|<tunepimp/tp_c.h>|<tunepimp-0.4/tunepimp/tp_c.h>|g' \ - ${WRKSRC}/configure ${WRKSRC}/kid3/musicbrainzclient.h \ - ${WRKSRC}/admin/Makefile .include <bsd.port.pre.mk> @@ -42,4 +35,3 @@ IGNORE= does not compile on FreeBSD 4.x .endif .include <bsd.port.post.mk> - diff --git a/audio/kid3/files/patch-configure b/audio/kid3/files/patch-configure new file mode 100644 index 000000000000..6351d8299644 --- /dev/null +++ b/audio/kid3/files/patch-configure @@ -0,0 +1,232 @@ +--- ./configure.orig Tue Jun 27 22:55:03 2006 ++++ ./configure Sat Sep 23 01:27:55 2006 +@@ -31630,22 +31630,146 @@ + + fi; + if test "$with_musicbrainz" != "no"; then ++ if test "${ac_cv_header_tunepimp_0_5_tp_c_h+set}" = set; then ++ echo "$as_me:$LINENO: checking for tunepimp-0.5/tp_c.h" >&5 ++echo $ECHO_N "checking for tunepimp-0.5/tp_c.h... $ECHO_C" >&6 ++if test "${ac_cv_header_tunepimp_0_5_tp_c_h+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++fi ++echo "$as_me:$LINENO: result: $ac_cv_header_tunepimp_0_5_tp_c_h" >&5 ++echo "${ECHO_T}$ac_cv_header_tunepimp_0_5_tp_c_h" >&6 ++else ++ # Is the header compilable? ++echo "$as_me:$LINENO: checking tunepimp-0.5/tp_c.h usability" >&5 ++echo $ECHO_N "checking tunepimp-0.5/tp_c.h usability... $ECHO_C" >&6 ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++$ac_includes_default ++#include <tunepimp-0.5/tp_c.h> ++_ACEOF ++rm -f conftest.$ac_objext ++if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ++ (eval $ac_compile) 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } && ++ { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; } && ++ { ac_try='test -s conftest.$ac_objext' ++ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 ++ (eval $ac_try) 2>&5 ++ ac_status=$? ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); }; }; then ++ ac_header_compiler=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 + ++ac_header_compiler=no ++fi ++rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ++echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 ++echo "${ECHO_T}$ac_header_compiler" >&6 + ++# Is the header present? ++echo "$as_me:$LINENO: checking tunepimp-0.5/tp_c.h presence" >&5 ++echo $ECHO_N "checking tunepimp-0.5/tp_c.h presence... $ECHO_C" >&6 ++cat >conftest.$ac_ext <<_ACEOF ++/* confdefs.h. */ ++_ACEOF ++cat confdefs.h >>conftest.$ac_ext ++cat >>conftest.$ac_ext <<_ACEOF ++/* end confdefs.h. */ ++#include <tunepimp-0.5/tp_c.h> ++_ACEOF ++if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 ++ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ++ ac_status=$? ++ grep -v '^ *+' conftest.er1 >conftest.err ++ rm -f conftest.er1 ++ cat conftest.err >&5 ++ echo "$as_me:$LINENO: \$? = $ac_status" >&5 ++ (exit $ac_status); } >/dev/null; then ++ if test -s conftest.err; then ++ ac_cpp_err=$ac_c_preproc_warn_flag ++ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag ++ else ++ ac_cpp_err= ++ fi ++else ++ ac_cpp_err=yes ++fi ++if test -z "$ac_cpp_err"; then ++ ac_header_preproc=yes ++else ++ echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 + ++ ac_header_preproc=no ++fi ++rm -f conftest.err conftest.$ac_ext ++echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 ++echo "${ECHO_T}$ac_header_preproc" >&6 + +- kde_safe_cppflags=$CPPFLAGS +- CPPFLAGS="$CPPFLAGS $all_includes" +- ac_ext=cc +-ac_cpp='$CXXCPP $CPPFLAGS' +-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +- +-ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +- ++# So? What about this header? ++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in ++ yes:no: ) ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: accepted by the compiler, rejected by the preprocessor!" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: accepted by the compiler, rejected by the preprocessor!" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: proceeding with the compiler's result" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: proceeding with the compiler's result" >&2;} ++ ac_header_preproc=yes ++ ;; ++ no:yes:* ) ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: present but cannot be compiled" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: present but cannot be compiled" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: check for missing prerequisite headers?" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: check for missing prerequisite headers?" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: see the Autoconf documentation" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: see the Autoconf documentation" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: section \"Present But Cannot Be Compiled\"" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: section \"Present But Cannot Be Compiled\"" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: proceeding with the preprocessor's result" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: proceeding with the preprocessor's result" >&2;} ++ { echo "$as_me:$LINENO: WARNING: tunepimp-0.5/tp_c.h: in the future, the compiler will take precedence" >&5 ++echo "$as_me: WARNING: tunepimp-0.5/tp_c.h: in the future, the compiler will take precedence" >&2;} ++ ( ++ cat <<\_ASBOX ++## ------------------------------------------ ## ++## Report this to the AC_PACKAGE_NAME lists. ## ++## ------------------------------------------ ## ++_ASBOX ++ ) | ++ sed "s/^/$as_me: WARNING: /" >&2 ++ ;; ++esac ++echo "$as_me:$LINENO: checking for tunepimp-0.5/tp_c.h" >&5 ++echo $ECHO_N "checking for tunepimp-0.5/tp_c.h... $ECHO_C" >&6 ++if test "${ac_cv_header_tunepimp_0_5_tp_c_h+set}" = set; then ++ echo $ECHO_N "(cached) $ECHO_C" >&6 ++else ++ ac_cv_header_tunepimp_0_5_tp_c_h=$ac_header_preproc ++fi ++echo "$as_me:$LINENO: result: $ac_cv_header_tunepimp_0_5_tp_c_h" >&5 ++echo "${ECHO_T}$ac_cv_header_tunepimp_0_5_tp_c_h" >&6 + +- if test "${ac_cv_header_tunepimp_tp_c_h+set}" = set; then ++fi ++if test $ac_cv_header_tunepimp_0_5_tp_c_h = yes; then ++ build_musicbrainz="yes" ++else ++ if test "${ac_cv_header_tunepimp_tp_c_h+set}" = set; then + echo "$as_me:$LINENO: checking for tunepimp/tp_c.h" >&5 + echo $ECHO_N "checking for tunepimp/tp_c.h... $ECHO_C" >&6 + if test "${ac_cv_header_tunepimp_tp_c_h+set}" = set; then +@@ -31788,19 +31912,14 @@ + fi + + +- CPPFLAGS=$kde_safe_cppflags +- ac_ext=c +-ac_cpp='$CPP $CPPFLAGS' +-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +-ac_compiler_gnu=$ac_cv_c_compiler_gnu ++fi + + + fi + if test "$build_musicbrainz" = "yes"; then +- echo "$as_me:$LINENO: checking for tp_SetPUIDCollisionThreshold in -ltunepimp" >&5 +-echo $ECHO_N "checking for tp_SetPUIDCollisionThreshold in -ltunepimp... $ECHO_C" >&6 +-if test "${ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold+set}" = set; then ++ echo "$as_me:$LINENO: checking for tr_GetPUID in -ltunepimp" >&5 ++echo $ECHO_N "checking for tr_GetPUID in -ltunepimp... $ECHO_C" >&6 ++if test "${ac_cv_lib_tunepimp_tr_GetPUID+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_check_lib_save_LIBS=$LIBS +@@ -31818,11 +31937,11 @@ + #endif + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +-char tp_SetPUIDCollisionThreshold (); ++char tr_GetPUID (); + int + main () + { +-tp_SetPUIDCollisionThreshold (); ++tr_GetPUID (); + ; + return 0; + } +@@ -31848,20 +31967,20 @@ + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then +- ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold=yes ++ ac_cv_lib_tunepimp_tr_GetPUID=yes + else + echo "$as_me: failed program was:" >&5 + sed 's/^/| /' conftest.$ac_ext >&5 + +-ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold=no ++ac_cv_lib_tunepimp_tr_GetPUID=no + fi + rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$ac_check_lib_save_LIBS + fi +-echo "$as_me:$LINENO: result: $ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold" >&5 +-echo "${ECHO_T}$ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold" >&6 +-if test $ac_cv_lib_tunepimp_tp_SetPUIDCollisionThreshold = yes; then ++echo "$as_me:$LINENO: result: $ac_cv_lib_tunepimp_tr_GetPUID" >&5 ++echo "${ECHO_T}$ac_cv_lib_tunepimp_tr_GetPUID" >&6 ++if test $ac_cv_lib_tunepimp_tr_GetPUID = yes; then + + cat >>confdefs.h <<\_ACEOF + #define HAVE_TUNEPIMP 5 +@@ -31977,6 +32096,7 @@ + + fi; + if test "$with_vorbis" != "no"; then ++ + + + diff --git a/audio/kid3/files/patch-kid3__freedbclient.cpp b/audio/kid3/files/patch-kid3__freedbclient.cpp new file mode 100644 index 000000000000..f7fb28d9db32 --- /dev/null +++ b/audio/kid3/files/patch-kid3__freedbclient.cpp @@ -0,0 +1,101 @@ ++++ ./kid3/freedbclient.cpp 2006-05-28 15:05:28.000000000 +0200 ++++ ./kid3/freedbclient.cpp 2006-10-07 21:32:21.000000000 +0200 +@@ -21,6 +21,7 @@ + #include <qregexp.h> + #include <qsocket.h> + #include <qstatusbar.h> ++#include <qurl.h> + #include "freedbconfig.h" + #include "freedbclient.h" + +@@ -34,7 +35,8 @@ + * + * @param sb status bar to display progress information. + */ +-FreedbClient::FreedbClient(QStatusBar *sb) : statusBar(sb) ++FreedbClient::FreedbClient(QStatusBar *sb) : ++ statusBar(sb), m_requestType(RT_None) + { + sock = new QSocket(); + connect(sock, SIGNAL(hostFound()), +@@ -158,7 +160,39 @@ + } + #endif + sock->connectToHost(dest, destPort); +- isAlbumRequest = false; ++ m_requestType = RT_FindFreedbSearch; ++ ++ statusBar->message(i18n("Connecting...")); ++} ++ ++/** ++ * Find keyword in freedb with "cddb album" command of freedb2.org. ++ * ++ * @param cfg freedb configuration ++ * @param what string with words to search ++ */ ++void FreedbClient::findCddbAlbum(const FreedbConfig *cfg, QString what) ++{ ++ QString destNamePort(getProxyOrDest(cfg, cfg->server)); ++ QString dest; ++ int destPort; ++ splitNamePort(destNamePort, dest, destPort); ++ what.replace(QRegExp(" +"), " "); // collapse spaces ++ QUrl::encode(what); ++ what.replace("%20", "+"); // replace spaces by '+' ++ request = "GET http://" + cfg->server + cfg->cgiPath + ++ "?cmd=cddb+album+" + what + "&hello=noname+localhost+" + ++ "Kid3+" VERSION "&proto=1 HTTP/1.1\r\nHost: " + cfg->server + ++ "\r\nConnection: close\r\n\r\n"; ++#if defined WIN32 && QT_VERSION < 300 ++ int err = hostnameToAddress(dest); ++ if (err) { ++ statusBar->message(QString("WinSock error %1").arg(err)); ++ return; ++ } ++#endif ++ sock->connectToHost(dest, destPort); ++ m_requestType = RT_FindCddbAlbum; + + statusBar->message(i18n("Connecting...")); + } +@@ -186,14 +220,23 @@ + */ + void FreedbClient::slotConnectionClosed() + { +- rcvStr = ""; +- while (sock->canReadLine()) { +- rcvStr += sock->readLine(); +- } +- if (isAlbumRequest) { +- emit albumFinished(rcvStr); +- } else { +- emit findFinished(rcvStr); ++ Q_ULONG len = sock->bytesAvailable(); ++ QCString s; ++ s.resize(len + 1); ++ sock->readBlock(s.data(), len); ++ rcvStr = QString::fromUtf8(s.data()); ++ switch (m_requestType) { ++ case RT_Album: ++ emit albumFinished(rcvStr); ++ break; ++ case RT_FindFreedbSearch: ++ emit findFinished(rcvStr); ++ break; ++ case RT_FindCddbAlbum: ++ emit findCddbAlbumFinished(rcvStr); ++ break; ++ default: ++ qWarning("Unknown freedb request type"); + } + sock->close(); + statusBar->message(i18n("Ready.")); +@@ -256,6 +299,6 @@ + } + #endif + sock->connectToHost(dest, destPort); +- isAlbumRequest = true; ++ m_requestType = RT_Album; + statusBar->message(i18n("Connecting...")); + } diff --git a/audio/kid3/files/patch-kid3__freedbclient.h b/audio/kid3/files/patch-kid3__freedbclient.h new file mode 100644 index 000000000000..4de490529761 --- /dev/null +++ b/audio/kid3/files/patch-kid3__freedbclient.h @@ -0,0 +1,44 @@ ++++ ./kid3/freedbclient.h 2006-01-05 19:15:21.000000000 +0100 ++++ ./kid3/freedbclient.h 2006-10-07 16:06:53.000000000 +0200 +@@ -44,6 +44,13 @@ + */ + void find(const FreedbConfig *cfg, QString what); + /** ++ * Find keyword in freedb with "cddb album" command of freedb2.org. ++ * ++ * @param cfg freedb configuration ++ * @param what string with words to search ++ */ ++ void findCddbAlbum(const FreedbConfig *cfg, QString what); ++ /** + * Request track list from freedb server. + * + * @param cfg freedb configuration +@@ -92,6 +99,11 @@ + */ + void findFinished(QString); + /** ++ * Emitted when findCddbAlbum request finished. ++ * Parameter: text containing result of findCddbAlbum request ++ */ ++ void findCddbAlbumFinished(QString); ++ /** + * Emitted when album track data request finished. + * Parameter: text containing result of album request + */ +@@ -105,8 +117,13 @@ + QString request; + /** buffer for received data */ + QString rcvStr; +- /** true if last request was album track data request */ +- bool isAlbumRequest; ++ /** type of current request */ ++ enum RequestType { ++ RT_None, ++ RT_FindFreedbSearch, ++ RT_FindCddbAlbum, ++ RT_Album ++ } m_requestType; + }; + + #endif diff --git a/audio/kid3/files/patch-kid3__freedbdialog.cpp b/audio/kid3/files/patch-kid3__freedbdialog.cpp new file mode 100644 index 000000000000..206716a60688 --- /dev/null +++ b/audio/kid3/files/patch-kid3__freedbdialog.cpp @@ -0,0 +1,96 @@ ++++ ./kid3/freedbdialog.cpp 2006-02-23 22:48:14.000000000 +0100 ++++ ./kid3/freedbdialog.cpp 2006-10-07 21:31:43.000000000 +0200 +@@ -24,6 +24,7 @@ + #include <qlistbox.h> + #include <qlabel.h> + #include <qstatusbar.h> ++#include <qregexp.h> + #include "freedbconfig.h" + #include "freedbclient.h" + #include "freedbdialog.h" +@@ -109,6 +110,7 @@ + if (serverLayout && serverLabel && serverComboBox && + cgiLabel && cgiLineEdit) { + static const char *serverList[] = { ++ "freedb2.org:80", + "freedb.freedb.org:80", + "at.freedb.org:80", + "au.freedb.org:80", +@@ -155,6 +157,8 @@ + client = new FreedbClient(statusBar); + connect(client, SIGNAL(findFinished(QString)), + this, SLOT(slotFindFinished(QString))); ++ connect(client, SIGNAL(findCddbAlbumFinished(QString)), ++ this, SLOT(slotFindCddbAlbumFinished(QString))); + connect(client, SIGNAL(albumFinished(QString)), + this, SLOT(slotAlbumFinished(QString))); + } +@@ -315,7 +319,8 @@ + { + FreedbConfig cfg; + getFreedbConfig(&cfg); +- client->find(&cfg, findLineEdit->currentText()); ++// client->find(&cfg, findLineEdit->currentText()); ++ client->findCddbAlbum(&cfg, findLineEdit->currentText()); + } + + /** +@@ -364,6 +369,58 @@ + } + + /** ++ * Process finished findCddbAlbum request. ++ * ++ * @param searchStr search data received ++ */ ++void FreedbDialog::slotFindCddbAlbumFinished(QString searchStr) ++{ ++/* ++210 exact matches found ++categ discid dtitle ++(more matches...) ++. ++or ++211 close matches found ++rock 920b810c Catharsis / Imago ++. ++theoretically, but never seen ++200 categ discid dtitle ++*/ ++ QRegExp catIdTitleRe("([a-z]+)\\s+([0-9a-f]+)\\s+([^/]+ / .+)"); ++ QStringList lines = QStringList::split(QRegExp("[\\r\\n]+"), searchStr); ++ bool inEntries = false; ++ albumListBox->clear(); ++ for (QStringList::const_iterator it = lines.begin(); it != lines.end(); ++it) { ++ if (*it == ".") { ++ break; ++ } ++ if (inEntries) { ++ if (catIdTitleRe.exactMatch(*it)) { ++ new AlbumListItem( ++ albumListBox, ++ catIdTitleRe.cap(3), ++ catIdTitleRe.cap(1), ++ catIdTitleRe.cap(2)); ++ } ++ } else { ++ if ((*it).startsWith("21") && (*it).find(" match") != -1) { ++ inEntries = true; ++ } else if ((*it).startsWith("200 ")) { ++ if (catIdTitleRe.exactMatch((*it).mid(4))) { ++ new AlbumListItem( ++ albumListBox, ++ catIdTitleRe.cap(3), ++ catIdTitleRe.cap(1), ++ catIdTitleRe.cap(2)); ++ } ++ } ++ } ++ } ++ albumListBox->setFocus(); ++} ++ ++/** + * Process finished album data. + * + * @param albumStr album track data received diff --git a/audio/kid3/files/patch-kid3__freedbdialog.h b/audio/kid3/files/patch-kid3__freedbdialog.h new file mode 100644 index 000000000000..340b4dba7a48 --- /dev/null +++ b/audio/kid3/files/patch-kid3__freedbdialog.h @@ -0,0 +1,15 @@ ++++ ./kid3/freedbdialog.h 2006-02-23 22:39:28.000000000 +0100 ++++ ./kid3/freedbdialog.h 2006-10-07 17:19:08.000000000 +0200 +@@ -117,6 +117,12 @@ + */ + void slotFindFinished(QString searchStr); + /** ++ * Process finished findCddbAlbum request. ++ * ++ * @param searchStr search data received ++ */ ++ void slotFindCddbAlbumFinished(QString searchStr); ++ /** + * Process finished album data. + * + * @param albumStr album track data received diff --git a/audio/kid3/files/patch-kid3__genres.cpp b/audio/kid3/files/patch-kid3__genres.cpp new file mode 100644 index 000000000000..ccc5a046a33d --- /dev/null +++ b/audio/kid3/files/patch-kid3__genres.cpp @@ -0,0 +1,11 @@ +--- ./kid3/genres.cpp.orig Thu May 25 19:58:19 2006 ++++ ./kid3/genres.cpp Sat Sep 23 01:28:25 2006 +@@ -385,7 +385,7 @@ + * @return genre number, 255 for unknown index. + */ + +-int Genres::getNumber(QString &str) ++int Genres::getNumber(const QString &str) + { + for (int i = 0; i < Genres::count + 1; i++) { + if (QString(genre[i]) == str) { diff --git a/audio/kid3/files/patch-kid3__genres.h b/audio/kid3/files/patch-kid3__genres.h new file mode 100644 index 000000000000..93446626707a --- /dev/null +++ b/audio/kid3/files/patch-kid3__genres.h @@ -0,0 +1,11 @@ +--- ./kid3/genres.h.orig Thu Jan 5 21:15:20 2006 ++++ ./kid3/genres.h Sat Sep 23 01:28:25 2006 +@@ -46,7 +46,7 @@ + * + * @return genre number, 255 for unknown index. + */ +- static int getNumber(QString &str); ++ static int getNumber(const QString &str); + /** Number of genres */ + #if defined _WIN32 || defined WIN32 + enum { count = 148 }; diff --git a/audio/kid3/files/patch-kid3__id3form.cpp b/audio/kid3/files/patch-kid3__id3form.cpp new file mode 100644 index 000000000000..4bab935784c6 --- /dev/null +++ b/audio/kid3/files/patch-kid3__id3form.cpp @@ -0,0 +1,11 @@ +--- ./kid3/id3form.cpp.orig Sat Jun 17 14:46:00 2006 ++++ ./kid3/id3form.cpp Sat Sep 23 01:28:25 2006 +@@ -588,7 +588,7 @@ + st->track = trackV2CheckBox->isChecked() ? trackV2SpinBox->value() + : -1; + st->genre = genreV2CheckBox->isChecked() ? +- Genres::getNumber(genreV2ComboBox->currentItem()) : -1; ++ Genres::getNumber(genreV2ComboBox->currentText()) : -1; + st->genreStr = st->genre == 0xff ? genreV2ComboBox->currentText() + : QString::null; + } diff --git a/audio/kid3/files/patch-kid3__mp3file.cpp b/audio/kid3/files/patch-kid3__mp3file.cpp new file mode 100644 index 000000000000..1b06c190f559 --- /dev/null +++ b/audio/kid3/files/patch-kid3__mp3file.cpp @@ -0,0 +1,14 @@ +--- ./kid3/mp3file.cpp.orig Thu Jan 5 21:15:21 2006 ++++ ./kid3/mp3file.cpp Sat Sep 23 01:28:25 2006 +@@ -365,6 +365,11 @@ + if (!ok || n > 0xff) { + n = 0xff; + } ++ } else { ++ // ID3v2 genres can be stored as "(9)", "(9)Metal" or "Metal". ++ // If the string does not start with '(', try to get the genre number ++ // from a string containing a genre text. ++ n = Genres::getNumber(str); + } + return n; + } diff --git a/audio/kid3/files/patch-kid3__musicbrainzclient.cpp b/audio/kid3/files/patch-kid3__musicbrainzclient.cpp new file mode 100644 index 000000000000..43cdd49b3a3d --- /dev/null +++ b/audio/kid3/files/patch-kid3__musicbrainzclient.cpp @@ -0,0 +1,356 @@ +--- ./kid3/musicbrainzclient.cpp.orig Tue Jun 6 00:18:36 2006 ++++ ./kid3/musicbrainzclient.cpp Sat Sep 23 01:27:55 2006 +@@ -17,10 +17,161 @@ + #define I18N_NOOP(s) QT_TR_NOOP(s) + #endif + #include <qfile.h> ++#if HAVE_TUNEPIMP >= 5 ++#include <qsocket.h> ++#include <qdom.h> ++#endif + #include "musicbrainzconfig.h" + #include "freedbclient.h" + #include "importtrackdata.h" + ++#if HAVE_TUNEPIMP >= 5 ++/** ++ * Constructor. ++ * ++ * @param numFiles number of files to be queried ++ * @param serverName server name ++ * @param serverPort server port ++ * @param proxyName proxy name, empty if no proxy ++ * @param proxyPort proxy port ++ */ ++LookupQuery::LookupQuery(int numFiles, ++ const QString& serverName, Q_UINT16 serverPort, ++ const QString& proxyName, Q_UINT16 proxyPort) : ++ m_numFiles(numFiles), m_serverName(serverName), m_serverPort(serverPort), ++ m_proxyName(proxyName), m_proxyPort(proxyPort), ++ m_currentFile(-1), m_fileQueries(new FileQuery[numFiles]), ++ m_sock(new QSocket) ++{ ++ for (int i = 0; i < m_numFiles; ++i) { ++ m_fileQueries[i].requested = false; ++ m_fileQueries[i].puid = ""; ++ } ++ connect(m_sock, SIGNAL(connected()), ++ this, SLOT(socketConnected())); ++ connect(m_sock, SIGNAL(error(int)), ++ this, SLOT(socketError())); ++ connect(m_sock, SIGNAL(connectionClosed()), ++ this, SLOT(socketConnectionClosed())); ++} ++ ++/** ++ * Destructor. ++ */ ++LookupQuery::~LookupQuery() ++{ ++ m_sock->close(); ++ m_sock->disconnect(); ++ delete m_sock; ++ delete [] m_fileQueries; ++} ++ ++/** ++ * Connect to server to query information about the current file. ++ */ ++void LookupQuery::socketQuery() ++{ ++ if (m_currentFile >= 0 && m_currentFile < m_numFiles) { ++ QString destName = m_proxyName.isEmpty() ? m_serverName : m_proxyName; ++ Q_UINT16 destPort = m_proxyName.isEmpty() ? m_serverPort : m_proxyPort; ++ m_request = "GET http://"; ++ m_request += m_serverName; ++ if (m_serverPort != 80) { ++ m_request += ':'; ++ m_request += QString::number(m_serverPort); ++ } ++ m_request += "/ws/1/track/?type=xml&puid="; ++ m_request += m_fileQueries[m_currentFile].puid; ++ m_request += " HTTP/1.0\r\nHost: "; ++ m_request += m_serverName; ++ m_request += "\r\nUser-agent: Kid3/" VERSION "\r\n\r\n"; ++ m_sock->connectToHost(destName, destPort); ++ m_fileQueries[m_currentFile].requested = true; ++ } ++} ++ ++/** ++ * Query the next file. ++ */ ++void LookupQuery::queryNext() ++{ ++ // handle the first pending query ++ for (int i = 0; i < m_numFiles; ++i) { ++ if (!m_fileQueries[i].requested && ++ !m_fileQueries[i].puid.isEmpty()) { ++ m_currentFile = i; ++ socketQuery(); ++ return; ++ } ++ } ++ // no pending query => socketQuery() will be done in next query() ++ m_currentFile = -1; ++} ++ ++/** ++ * Query a PUID from the server. ++ * ++ * @param puid PUID ++ * @param index index of file ++ */ ++void LookupQuery::query(const char* puid, int index) ++{ ++ m_fileQueries[index].puid = QString(puid); ++ // if no request is being executed, start the current request ++ if (m_currentFile < 0 || m_currentFile >= m_numFiles || ++ !m_fileQueries[m_currentFile].requested) { ++ m_currentFile = index; ++ socketQuery(); ++ } ++} ++ ++/** ++ * Send query when the socket is connected. ++ */ ++void LookupQuery::socketConnected() ++{ ++ m_sock->writeBlock(m_request.latin1(), m_request.length()); ++} ++ ++/** ++ * Error on socket connection. ++ */ ++void LookupQuery::socketError() ++{ ++ queryNext(); ++} ++ ++/** ++ * Read received data when the server has closed the connection. ++ */ ++void LookupQuery::socketConnectionClosed() ++{ ++ Q_ULONG len = m_sock->bytesAvailable(); ++ QCString buf; ++ buf.resize(len + 1 ); ++ m_sock->readBlock(buf.data(), len); ++ m_sock->close(); ++ ++ int xmlStart = buf.find("<?xml"); ++ if (xmlStart >= 0 && ++ m_currentFile >= 0 && m_currentFile < m_numFiles && ++ m_fileQueries[m_currentFile].requested) { ++ emit queryResponseReceived(m_currentFile, buf.mid(xmlStart, len - xmlStart)); ++ } ++ queryNext(); ++} ++ ++#else ++ ++LookupQuery::LookupQuery(int, const QString&, Q_UINT16, const QString&, Q_UINT16) {} ++LookupQuery::~LookupQuery() {} ++void LookupQuery::socketConnected() {} ++void LookupQuery::socketError() {} ++void LookupQuery::socketConnectionClosed() {} ++ ++#endif ++ ++ + /** + * Constructor. + * +@@ -29,6 +180,9 @@ + */ + MusicBrainzClient::MusicBrainzClient(ImportTrackDataVector& trackDataList) : + m_trackDataVector(trackDataList), m_tp(0), m_ids(0), m_numFiles(0) ++#if HAVE_TUNEPIMP >= 5 ++ , m_lookupQuery(0) ++#endif + { + m_tp = tp_New("kid3", VERSION); + #ifdef WIN32 +@@ -39,7 +193,11 @@ + #else + tp_SetUseUTF8(m_tp, 1); + #endif ++#if HAVE_TUNEPIMP >= 5 ++ tp_SetMusicDNSClientId(m_tp, "a95f5c7cd37fd4bce12dc86d196fb4fe"); ++#else + tp_SetAutoFileLookup(m_tp, 1); ++#endif + tp_SetRenameFiles(m_tp, 0); + tp_SetMoveFiles(m_tp, 0); + tp_SetWriteID3v1(m_tp, 0); +@@ -110,8 +268,13 @@ + { eUnrecognized, I18N_NOOP("Unrecognized") }, + { eRecognized, I18N_NOOP("Recognized") }, + { ePending, I18N_NOOP("Pending") }, ++#if HAVE_TUNEPIMP >= 5 ++ { ePUIDLookup, I18N_NOOP("PUID Lookup") }, ++ { ePUIDCollision, I18N_NOOP("PUID Collision") }, ++#else + { eTRMLookup, I18N_NOOP("TRM Lookup") }, + { eTRMCollision, I18N_NOOP("TRM Collision") }, ++#endif + { eFileLookup, I18N_NOOP("File Lookup") }, + { eUserSelection, I18N_NOOP("User Selection") }, + { eVerified, I18N_NOOP("Verified") }, +@@ -163,7 +326,11 @@ + track_t track = tp_GetTrack(m_tp, id); + if (track) { + tr_Lock(track); ++#if HAVE_TUNEPIMP >= 5 ++ tr_GetPUID(track, trm, sizeof(trm)); ++#else + tr_GetTRM(track, trm, sizeof(trm)); ++#endif + if (trm[0] == '\0') { + tr_SetStatus(track, ePending); + tp_Wake(m_tp, track); +@@ -189,13 +356,33 @@ + ImportTrackData trackData; + getMetaData(id, trackData); + emit metaDataReceived(index, trackData); +- } else if (statusCode == eTRMCollision || +- statusCode == eUserSelection) { ++ } ++#if HAVE_TUNEPIMP >= 5 ++ else if (statusCode == ePUIDLookup || ++ statusCode == ePUIDCollision || ++ statusCode == eFileLookup) { ++ char puid[255]; ++ puid[0] = '\0'; ++ track_t track = tp_GetTrack(m_tp, id); ++ if (track) { ++ tr_Lock(track); ++ tr_GetPUID(track, puid, sizeof(puid)); ++ tr_Unlock(track); ++ tp_ReleaseTrack(m_tp, track); ++ } ++ if (m_lookupQuery) { ++ m_lookupQuery->query(puid, index); ++ } ++ } ++#else ++ else if (statusCode == eTRMCollision || ++ statusCode == eUserSelection) { + ImportTrackDataVector trackDataList; + if (getResults(id, trackDataList)) { + emit resultsReceived(index, trackDataList); + } + } ++#endif + } + break; + } +@@ -242,6 +429,16 @@ + m_numFiles = m_trackDataVector.count(); + #endif + m_ids = new int[m_numFiles]; ++#if HAVE_TUNEPIMP >= 5 ++ char serverName[80], proxyName[80]; ++ short serverPort, proxyPort; ++ tp_GetServer(m_tp, serverName, sizeof(serverName) - 1, &serverPort); ++ tp_GetProxy(m_tp, proxyName, sizeof(proxyName) - 1, &proxyPort); ++ m_lookupQuery = new LookupQuery(m_numFiles, serverName, serverPort, ++ proxyName, proxyPort); ++ connect(m_lookupQuery, SIGNAL(queryResponseReceived(int, const QCString&)), ++ this, SLOT(parseLookupResponse(int, const QCString&))); ++#endif + int i = 0; + for ( + #if QT_VERSION >= 300 +@@ -271,6 +468,10 @@ + } + delete [] m_ids; + m_ids = 0; ++#if HAVE_TUNEPIMP >= 5 ++ delete m_lookupQuery; ++ m_lookupQuery = 0; ++#endif + m_numFiles = 0; + } + } +@@ -308,6 +509,68 @@ + } + } + ++#if HAVE_TUNEPIMP >= 5 ++ ++bool MusicBrainzClient::getResults(int, ImportTrackDataVector&) { ++ return false; ++} ++ ++/** ++ * Process server response with lookup data. ++ * ++ * @param index index of file ++ * @param response response from server ++ */ ++void MusicBrainzClient::parseLookupResponse(int index, const QCString& response) ++{ ++ ImportTrackDataVector trackDataList; ++ QDomDocument doc; ++ if (doc.setContent(response)) { ++ QDomElement trackList = ++ doc.namedItem("metadata").toElement().namedItem("track-list").toElement(); ++ ++ for (QDomNode trackNode = trackList.namedItem("track"); ++ !trackNode.isNull(); ++ trackNode = trackNode.nextSibling()) { ++ QDomElement track = trackNode.toElement(); ++ ++ ImportTrackData trackData; ++ trackData.artist = ++ track.namedItem("artist").toElement().namedItem("name").toElement().text(); ++ trackData.title = track.namedItem("title").toElement().text(); ++ ++ for (QDomNode releaseNode = ++ track.namedItem("release-list").toElement().namedItem("release"); ++ !releaseNode.isNull(); ++ releaseNode = releaseNode.nextSibling() ) { ++ QDomElement release = releaseNode.toElement(); ++ ++ trackData.album = release.namedItem("title").toElement().text(); ++ trackData.track = -1; ++ QDomNode releaseTrackNode = release.namedItem("track-list"); ++ if (!releaseTrackNode.isNull()) { ++ QDomElement releaseTrack = releaseTrackNode.toElement(); ++ if (!releaseTrack.attribute("offset").isEmpty()) ++ trackData.track = releaseTrack.attribute("offset").toInt() + 1; ++ } ++ } ++ trackDataList.append(trackData); ++ } ++ } ++ ++ if (trackDataList.size() > 1) { ++ emit resultsReceived(index, trackDataList); ++ emit statusChanged(index, i18n("User Selection")); ++ } else if (trackDataList.size() == 1) { ++ emit metaDataReceived(index, *trackDataList.begin()); ++ emit statusChanged(index, i18n("Recognized")); ++ } else { ++ emit statusChanged(index, i18n("Unrecognized")); ++ } ++} ++ ++#else ++ + /** + * Get results for an ambiguous file. + * +@@ -387,6 +650,10 @@ + } + return resultsAvailable; + } ++ ++void MusicBrainzClient::parseLookupResponse(int, const QCString&) {} ++ ++#endif + + #else // HAVE_TUNEPIMP + diff --git a/audio/kid3/files/patch-kid3__musicbrainzclient.h b/audio/kid3/files/patch-kid3__musicbrainzclient.h new file mode 100644 index 000000000000..4b1c3b34f1da --- /dev/null +++ b/audio/kid3/files/patch-kid3__musicbrainzclient.h @@ -0,0 +1,146 @@ +--- ./kid3/musicbrainzclient.h.orig Thu Feb 23 22:48:34 2006 ++++ ./kid3/musicbrainzclient.h Sat Sep 23 01:27:55 2006 +@@ -15,7 +15,13 @@ + #include <qobject.h> + + #ifdef HAVE_TUNEPIMP ++#if HAVE_TUNEPIMP >= 5 ++#include <qbuffer.h> ++#include <tunepimp-0.5/tp_c.h> ++class QSocket; ++#else + #include <tunepimp/tp_c.h> ++#endif + #endif // HAVE_TUNEPIMP + + class MusicBrainzConfig; +@@ -23,6 +29,103 @@ + class ImportTrackDataVector; + + /** ++ * A HTTP query to a musicbrainz server for HAVE_TUNEPIMP >= 5. ++ */ ++class LookupQuery : public QObject { ++Q_OBJECT ++ ++public: ++ /** ++ * Constructor. ++ * ++ * @param numFiles number of files to be queried ++ * @param serverName server name ++ * @param serverPort server port ++ * @param proxyName proxy name, empty if no proxy ++ * @param proxyPort proxy port ++ */ ++ LookupQuery(int numFiles, ++ const QString& serverName, Q_UINT16 serverPort = 80, ++ const QString& proxyName = "", Q_UINT16 proxyPort = 80); ++ ++ /** ++ * Destructor. ++ */ ++ virtual ~LookupQuery(); ++ ++#if HAVE_TUNEPIMP >= 5 ++ /** ++ * Query a PUID from the server. ++ * ++ * @param puid PUID ++ * @param index index of file ++ */ ++ void query(const char* puid, int index); ++#endif ++ ++signals: ++ /** ++ * Emitted when the query response is received ++ */ ++ void queryResponseReceived(int, const QCString&); ++ ++private slots: ++ /** ++ * Send query when the socket is connected. ++ */ ++ void socketConnected(); ++ ++ /** ++ * Error on socket connection. ++ */ ++ void socketError(); ++ ++ /** ++ * Read received data when the server has closed the connection. ++ */ ++ void socketConnectionClosed(); ++ ++#if HAVE_TUNEPIMP >= 5 ++private: ++ /** ++ * Connect to server to query information about the current file. ++ */ ++ void socketQuery(); ++ ++ /** ++ * Query the next file. ++ */ ++ void queryNext(); ++ ++ struct FileQuery { ++ bool requested; ++ QString puid; ++ }; ++ ++ /** Number of files to be queried. */ ++ int m_numFiles; ++ /** MusicBrainz server */ ++ QString m_serverName; ++ /** Port of MusicBrainz server */ ++ Q_UINT16 m_serverPort; ++ /** Proxy */ ++ QString m_proxyName; ++ /** Port of proxy */ ++ Q_UINT16 m_proxyPort; ++ /** ++ * -1 if not yet started, ++ * 0..m_numFiles-1 if a file is currently processed, ++ * >=m_numFiles if all files processed. ++ */ ++ int m_currentFile; ++ FileQuery* m_fileQueries; ++ QSocket* m_sock; ++ QString m_request; ++#endif ++}; ++ ++ ++/** + * MusicBrainz client. + */ + class MusicBrainzClient : public QObject +@@ -85,6 +188,15 @@ + */ + void resultsReceived(int, ImportTrackDataVector&); + ++private slots: ++ /** ++ * Process server response with lookup data. ++ * ++ * @param index index of file ++ * @param response response from server ++ */ ++ void parseLookupResponse(int index, const QCString& response); ++ + #ifdef HAVE_TUNEPIMP + private: + /** +@@ -126,6 +238,9 @@ + tunepimp_t m_tp; + int* m_ids; + int m_numFiles; ++#if HAVE_TUNEPIMP >= 5 ++ LookupQuery* m_lookupQuery; ++#endif + #endif // HAVE_TUNEPIMP + }; + diff --git a/audio/kid3/files/patch-kid3-oggfile.cpp b/audio/kid3/files/patch-kid3__oggfile.cpp index 673eb6d42176..b215c9e42873 100644 --- a/audio/kid3/files/patch-kid3-oggfile.cpp +++ b/audio/kid3/files/patch-kid3__oggfile.cpp @@ -1,5 +1,5 @@ ---- kid3/oggfile.cpp.orig Sat Jan 28 02:15:27 2006 -+++ kid3/oggfile.cpp Mon Aug 7 16:13:25 2006 +--- ./kid3/oggfile.cpp.orig Fri Jan 27 21:15:27 2006 ++++ ./kid3/oggfile.cpp Sat Sep 23 01:27:49 2006 @@ -143,7 +143,7 @@ bool setUtime = false; struct utimbuf times; |