summaryrefslogtreecommitdiff
path: root/extra/easytag
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-11-18 02:17:27 -0800
committerroot <root@rshg054.dnsready.net>2012-11-18 02:17:27 -0800
commitab63d8d49f68847a68c2ba0014bf0d3338cb3df6 (patch)
tree7f0d9cf1b60a9b65a36c3f58ab2164c62cb378f1 /extra/easytag
parent071ecd58a9b69020ec170e7f89009a603e885371 (diff)
Sun Nov 18 02:15:18 PST 2012
Diffstat (limited to 'extra/easytag')
-rw-r--r--extra/easytag/PKGBUILD18
-rw-r--r--extra/easytag/easytag-2.1.7-new_libmp4v2.patch535
-rw-r--r--extra/easytag/easytag.install2
3 files changed, 546 insertions, 9 deletions
diff --git a/extra/easytag/PKGBUILD b/extra/easytag/PKGBUILD
index b997bbbe2..19be26911 100644
--- a/extra/easytag/PKGBUILD
+++ b/extra/easytag/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 159952 2012-05-27 10:21:37Z tomegun $
+# $Id: PKGBUILD 171355 2012-11-17 09:20:41Z eric $
# Maintainer:
# Contributor: Kevin Piche <kevin@archlinux.org>
# Contributor: Aaron Griffin <aaron@archlinux.org>
@@ -6,23 +6,25 @@
pkgname=easytag
pkgver=2.1.7
-pkgrel=2
+pkgrel=3
pkgdesc="Utility for viewing, editing and writing ID3 tags of your MP3 files"
arch=('i686' 'x86_64')
license=('GPL')
url='http://easytag.sourceforge.net/'
-depends=('id3lib' 'libid3tag' 'gtk2' 'libvorbis' 'flac' 'speex' 'wavpack' 'desktop-file-utils')
+depends=('id3lib' 'libid3tag' 'gtk2' 'libvorbis' 'flac' 'speex' 'wavpack' 'libmp4v2' 'desktop-file-utils')
install=${pkgname}.install
-source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
-md5sums=('9df3e800d80e754670642f2ba5e03539')
+source=("http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.bz2" easytag-2.1.7-new_libmp4v2.patch)
+md5sums=('9df3e800d80e754670642f2ba5e03539'
+ '0d01887de463585d944777b638a28c85')
build() {
- cd ${srcdir}/${pkgname}-${pkgver}
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ patch -p0 -i "${srcdir}/easytag-2.1.7-new_libmp4v2.patch"
./configure --prefix=/usr
make
}
package() {
- cd ${srcdir}/${pkgname}-${pkgver}
- make DESTDIR=${pkgdir} install
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
}
diff --git a/extra/easytag/easytag-2.1.7-new_libmp4v2.patch b/extra/easytag/easytag-2.1.7-new_libmp4v2.patch
new file mode 100644
index 000000000..4a6c315c2
--- /dev/null
+++ b/extra/easytag/easytag-2.1.7-new_libmp4v2.patch
@@ -0,0 +1,535 @@
+Compability with libmp4v2.so.2 (upstream revision r479)
+
+http://bugs.gentoo.org/409281
+
+--- src/mp4_header.c
++++ src/mp4_header.c
+@@ -204,7 +204,7 @@
+ /* Get size of file */
+ ETFileInfo->size = Get_File_Size(filename);
+
+- if ((file = MP4Read(filename, 0)) == MP4_INVALID_FILE_HANDLE )
++ if ((file = MP4Read(filename)) == MP4_INVALID_FILE_HANDLE )
+ {
+ gchar *filename_utf8 = filename_to_display(filename);
+ //g_print(_("ERROR while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno));
+@@ -218,7 +218,7 @@
+ {
+ gchar *filename_utf8 = filename_to_display(filename);
+ Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,("Contains no audio track"));
+- MP4Close(file);
++ MP4Close(file, 0);
+ g_free(filename_utf8);
+ return FALSE;
+ }
+@@ -243,7 +243,7 @@
+ ETFileInfo->mode = MP4GetTrackAudioChannels(file, trackId);
+ ETFileInfo->duration = MP4ConvertFromTrackDuration(file, trackId, MP4GetTrackDuration(file, trackId), MP4_SECS_TIME_SCALE);
+
+- MP4Close(file);
++ MP4Close(file, 0);
+ return TRUE;
+ }
+
+--- src/mp4_tag.c
++++ src/mp4_tag.c
+@@ -80,15 +80,9 @@
+ {
+ FILE *file;
+ MP4FileHandle mp4file = NULL;
+- uint16_t track, track_total;
+- uint16_t disk, disktotal;
+- u_int8_t *coverArt;
+- u_int32_t coverSize;
+ Picture *prev_pic = NULL;
+-#ifdef NEWMP4
+ gint pic_num;
+-#endif
+-
++
+ if (!filename || !FileTag)
+ return FALSE;
+
+@@ -102,7 +96,7 @@
+ fclose(file); // We close it cause mp4 opens/closes file itself
+
+ /* Get data from tag */
+- mp4file = MP4Read(filename, 0);
++ mp4file = MP4Read(filename);
+ if (mp4file == MP4_INVALID_FILE_HANDLE)
+ {
+ gchar *filename_utf8 = filename_to_display(filename);
+@@ -111,109 +105,134 @@
+ return FALSE;
+ }
+
++ const MP4Tags* tags = MP4TagsAlloc();
++ MP4TagsFetch(tags, mp4file);
++
+ /* TODO Add error detection */
+
+ /*********
+ * Title *
+ *********/
+- MP4GetMetadataName(mp4file, &FileTag->title);
++ if (tags->name)
++ {
++ FileTag->title = Try_To_Validate_Utf8_String(tags->name);
++ }
+
+ /**********
+ * Artist *
+ **********/
+- MP4GetMetadataArtist(mp4file, &FileTag->artist);
++ if (tags->artist)
++ {
++ FileTag->artist = Try_To_Validate_Utf8_String(tags->artist);
++ }
++
++ /****************
++ * Album Artist *
++ ****************/
++ if (tags->albumArtist)
++ {
++ FileTag->album_artist = Try_To_Validate_Utf8_String(tags->albumArtist);
++ }
+
+ /*********
+ * Album *
+ *********/
+- MP4GetMetadataAlbum(mp4file, &FileTag->album);
++ if (tags->album)
++ {
++ FileTag->album = Try_To_Validate_Utf8_String(tags->album);
++ }
+
+ /**********************
+ * Disk / Total Disks *
+ **********************/
+- if (MP4GetMetadataDisk(mp4file, &disk, &disktotal))
++ if (tags->disk)
+ {
+- if (disk != 0 && disktotal != 0)
+- FileTag->disc_number = g_strdup_printf("%d/%d",(gint)disk,(gint)disktotal);
+- else if (disk != 0)
+- FileTag->disc_number = g_strdup_printf("%d",(gint)disk);
+- else if (disktotal != 0)
+- FileTag->disc_number = g_strdup_printf("/%d",(gint)disktotal);
+- //if (disktotal != 0)
+- // FileTag->disk_number_total = g_strdup_printf("%d",(gint)disktotal);
++ if (tags->disk->index != 0 && tags->disk->total != 0)
++ FileTag->disc_number = g_strdup_printf("%d/%d",(gint)tags->disk->index,(gint)tags->disk->total);
++ else if (tags->disk->index != 0)
++ FileTag->disc_number = g_strdup_printf("%d",(gint)tags->disk->index);
++ else if (tags->disk->total != 0)
++ FileTag->disc_number = g_strdup_printf("/%d",(gint)tags->disk->total);
+ }
+
+ /********
+ * Year *
+ ********/
+- MP4GetMetadataYear(mp4file, &FileTag->year);
++ if (tags->releaseDate)
++ {
++ FileTag->year = Try_To_Validate_Utf8_String(tags->releaseDate);
++ }
+
+ /*************************
+ * Track and Total Track *
+ *************************/
+- if (MP4GetMetadataTrack(mp4file, &track, &track_total))
++ if (tags->track)
+ {
+- if (track != 0)
+- FileTag->track = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track); // Just to have numbers like this : '01', '05', '12', ...
+- if (track_total != 0)
+- FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track_total); // Just to have numbers like this : '01', '05', '12', ...
++ if (tags->track->index != 0)
++ FileTag->track = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)tags->track->index); // Just to have numbers like this : '01', '05', '12', ...
++ if (tags->track->total != 0)
++ FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)tags->track->total); // Just to have numbers like this : '01', '05', '12', ...
+ }
+
+ /*********
+ * Genre *
+ *********/
+- MP4GetMetadataGenre(mp4file, &FileTag->genre);
++ if (tags->genre)
++ {
++ FileTag->genre = Try_To_Validate_Utf8_String(tags->genre);
++ }
+
+ /***********
+ * Comment *
+ ***********/
+- MP4GetMetadataComment(mp4file, &FileTag->comment);
++ if (tags->comments)
++ {
++ FileTag->comment = Try_To_Validate_Utf8_String(tags->comments);
++ }
+
+ /**********************
+ * Composer or Writer *
+ **********************/
+- MP4GetMetadataWriter(mp4file, &FileTag->composer);
++ if (tags->composer)
++ {
++ FileTag->composer = Try_To_Validate_Utf8_String(tags->composer);
++ }
+
+ /*****************
+ * Encoding Tool *
+ *****************/
+- MP4GetMetadataTool(mp4file, &FileTag->encoded_by);
+-
+- /* Unimplemented
+- Tempo / BPM
+- MP4GetMetadataTempo(file, &string)
+- */
++ if (tags->encodedBy)
++ {
++ FileTag->encoded_by = Try_To_Validate_Utf8_String(tags->encodedBy);
++ }
+
+ /***********
+ * Picture *
+ ***********/
+-#ifdef NEWMP4
+- // There version can handle multiple pictures!
+- // Version 1.6 of libmp4v2 introduces an index argument for MP4GetMetadataCoverart
+- for (pic_num = 0; (MP4GetMetadataCoverArt( mp4file, &coverArt, &coverSize,pic_num )); pic_num++)
+-#else
+- // There version handle only one picture!
+- if ( MP4GetMetadataCoverArt( mp4file, &coverArt, &coverSize ) )
+-#endif
+- {
+- Picture *pic;
+-
+- pic = Picture_Allocate();
+- if (!prev_pic)
+- FileTag->picture = pic;
+- else
+- prev_pic->next = pic;
+- prev_pic = pic;
+-
+- pic->size = coverSize;
+- pic->data = coverArt;
+- pic->type = PICTURE_TYPE_FRONT_COVER;
+- pic->description = NULL;
++ if (tags->artworkCount) {
++ const MP4TagArtwork* art = tags->artwork; /* artwork != NULL when artworkCount > 0 */
++ for (pic_num = 0; pic_num < tags->artworkCount; pic_num++, art++)
++ {
++ Picture *pic;
++
++ pic = Picture_Allocate();
++ if (!prev_pic)
++ FileTag->picture = pic;
++ else
++ prev_pic->next = pic;
++ prev_pic = pic;
++
++ pic->size = art->size;
++ pic->data = g_memdup(art->data, pic->size);
++ pic->type = PICTURE_TYPE_FRONT_COVER;
++ pic->description = NULL;
++ }
+ }
+
+
+ /* Free allocated data */
+- MP4Close(mp4file);
++ MP4TagsFree(tags);
++ MP4Close(mp4file, 0);
+
+ return TRUE;
+ }
+@@ -235,6 +254,7 @@
+ FILE *file;
+ MP4FileHandle mp4file = NULL;
+ gint error = 0;
++ gint pic_num;
+
+ if (!ETFile || !ETFile->FileTag)
+ return FALSE;
+@@ -252,23 +272,25 @@
+ fclose(file);
+
+ /* Open file for writing */
+- mp4file = MP4Modify(filename,0,0);
++ mp4file = MP4Modify(filename, 0);
+ if (mp4file == MP4_INVALID_FILE_HANDLE)
+ {
+ Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,_("MP4 format invalid"));
+ return FALSE;
+ }
+
++ const MP4Tags* tags = MP4TagsAlloc();
++ MP4TagsFetch(tags, mp4file);
++
+ /*********
+ * Title *
+ *********/
+ if (FileTag->title && g_utf8_strlen(FileTag->title, -1) > 0)
+ {
+- MP4SetMetadataName(mp4file, FileTag->title);
++ MP4TagsSetName(tags, FileTag->title);
+ }else
+ {
+- //MP4DeleteMetadataName(mp4file); // Not available on mpeg4ip-1.2 (only in 1.3)
+- MP4SetMetadataName(mp4file, "");
++ MP4TagsSetName(tags, "");
+ }
+
+ /**********
+@@ -276,11 +298,21 @@
+ **********/
+ if (FileTag->artist && g_utf8_strlen(FileTag->artist, -1) > 0)
+ {
+- MP4SetMetadataArtist(mp4file, FileTag->artist);
++ MP4TagsSetArtist(tags, FileTag->artist);
++ }else
++ {
++ MP4TagsSetArtist(tags, "");
++ }
++
++ /****************
++ * Album Artist *
++ ****************/
++ if (FileTag->artist && g_utf8_strlen(FileTag->artist, -1) > 0)
++ {
++ MP4TagsSetAlbumArtist(tags, FileTag->album_artist);
+ }else
+ {
+- //MP4DeleteMetadataArtist(mp4file);
+- MP4SetMetadataArtist(mp4file, "");
++ MP4TagsSetAlbumArtist(tags, "");
+ }
+
+ /*********
+@@ -288,22 +320,19 @@
+ *********/
+ if (FileTag->album && g_utf8_strlen(FileTag->album, -1) > 0)
+ {
+- MP4SetMetadataAlbum(mp4file, FileTag->album);
++ MP4TagsSetAlbum(tags, FileTag->album);
+ }else
+ {
+- //MP4DeleteMetadataAlbum(mp4file);
+- MP4SetMetadataAlbum(mp4file, "");
++ MP4TagsSetAlbum(tags, "");
+ }
+
+ /**********************
+ * Disk / Total Disks *
+ **********************/
++ MP4TagDisk td;
+ if (FileTag->disc_number && g_utf8_strlen(FileTag->disc_number, -1) > 0)
+ //|| FileTag->disc_number_total && g_utf8_strlen(FileTag->disc_number_total, -1) > 0)
+ {
+- uint16_t disk = 0;
+- uint16_t disktotal = 0;
+-
+ /* At the present time, we manage only disk number like '1' or '1/2', we
+ * don't use disk number total... so here we try to decompose */
+ if (FileTag->disc_number)
+@@ -314,27 +343,24 @@
+ {
+ // A disc_number_total was entered
+ if ( (tmp+1) && atoi(tmp+1) )
+- disktotal = atoi(tmp+1);
++ td.total = atoi(tmp+1);
+
+ // Fill disc_number
+ *tmp = '\0';
+- disk = atoi(dn_tmp);
++ td.index = atoi(dn_tmp);
+ }else
+ {
+- disk = atoi(FileTag->disc_number);
++ td.index = atoi(FileTag->disc_number);
++ td.total = NULL;
+ }
+ g_free(dn_tmp);
+ }
+- /*if (FileTag->disc_number)
+- disk = atoi(FileTag->disc_number);
+- if (FileTag->disc_number_total)
+- disktotal = atoi(FileTag->disc_number_total);
+- */
+- MP4SetMetadataDisk(mp4file, disk, disktotal);
++ MP4TagsSetDisk(tags, &td);
+ }else
+ {
+- //MP4DeleteMetadataDisk(mp4file);
+- MP4SetMetadataDisk(mp4file, 0, 0);
++ td.index = NULL;
++ td.total = NULL;
++ MP4TagsSetDisk(tags, &td);
+ }
+
+ /********
+@@ -342,30 +368,29 @@
+ ********/
+ if (FileTag->year && g_utf8_strlen(FileTag->year, -1) > 0)
+ {
+- MP4SetMetadataYear(mp4file, FileTag->year);
++ MP4TagsSetReleaseDate(tags, FileTag->year);
+ }else
+ {
+- //MP4DeleteMetadataYear(mp4file);
+- MP4SetMetadataYear(mp4file, "");
++ MP4TagsSetReleaseDate(tags, "");
+ }
+
+ /*************************
+ * Track and Total Track *
+ *************************/
++ MP4TagTrack tt;
+ if ( (FileTag->track && g_utf8_strlen(FileTag->track, -1) > 0)
+ || (FileTag->track_total && g_utf8_strlen(FileTag->track_total, -1) > 0) )
+ {
+- uint16_t track = 0;
+- uint16_t track_total = 0;
+ if (FileTag->track)
+- track = atoi(FileTag->track);
++ tt.index = atoi(FileTag->track);
+ if (FileTag->track_total)
+- track_total = atoi(FileTag->track_total);
+- MP4SetMetadataTrack(mp4file, track, track_total);
++ tt.total = atoi(FileTag->track_total);
++ MP4TagsSetTrack(tags, &tt);
+ }else
+ {
+- //MP4DeleteMetadataTrack(mp4file);
+- MP4SetMetadataTrack(mp4file, 0, 0);
++ tt.index = NULL;
++ tt.total = NULL;
++ MP4TagsSetTrack(tags, &tt);
+ }
+
+ /*********
+@@ -373,11 +398,10 @@
+ *********/
+ if (FileTag->genre && g_utf8_strlen(FileTag->genre, -1) > 0 )
+ {
+- MP4SetMetadataGenre(mp4file, FileTag->genre);
++ MP4TagsSetGenre(tags, FileTag->genre);
+ }else
+ {
+- //MP4DeleteMetadataGenre(mp4file);
+- MP4SetMetadataGenre(mp4file, "");
++ MP4TagsSetGenre(tags, "");
+ }
+
+ /***********
+@@ -385,11 +409,10 @@
+ ***********/
+ if (FileTag->comment && g_utf8_strlen(FileTag->comment, -1) > 0)
+ {
+- MP4SetMetadataComment(mp4file, FileTag->comment);
++ MP4TagsSetComments(tags, FileTag->comment);
+ }else
+ {
+- //MP4DeleteMetadataComment(mp4file);
+- MP4SetMetadataComment(mp4file, "");
++ MP4TagsSetComments(tags, "");
+ }
+
+ /**********************
+@@ -397,11 +420,10 @@
+ **********************/
+ if (FileTag->composer && g_utf8_strlen(FileTag->composer, -1) > 0)
+ {
+- MP4SetMetadataWriter(mp4file, FileTag->composer);
++ MP4TagsSetComposer(tags, FileTag->composer);
+ }else
+ {
+- //MP4DeleteMetadataWriter(mp4file);
+- MP4SetMetadataWriter(mp4file, "");
++ MP4TagsSetComposer(tags, "");
+ }
+
+ /*****************
+@@ -409,33 +431,39 @@
+ *****************/
+ if (FileTag->encoded_by && g_utf8_strlen(FileTag->encoded_by, -1) > 0)
+ {
+- MP4SetMetadataTool(mp4file, FileTag->encoded_by);
++ MP4TagsSetEncodedBy(tags, FileTag->encoded_by);
+ }else
+ {
+- //MP4DeleteMetadataTool(mp4file);
+- MP4SetMetadataTool(mp4file, "");
++ MP4TagsSetEncodedBy(tags, "");
+ }
+
+ /***********
+ * Picture *
+ ***********/
++ Picture *pic = FileTag->picture;
++ const gint artworkCount = tags->artworkCount;
++
++ for (pic_num = 0; pic_num < artworkCount; pic_num++)
+ {
+- // Can handle only one picture...
+- Picture *pic;
++ MP4TagsRemoveArtwork(tags, 0);
++ }
+
+- //MP4DeleteMetadataCoverArt(mp4file);
+- MP4SetMetadataCoverArt(mp4file, NULL, 0);
+- for( pic = FileTag->picture; pic; pic = pic->next )
++ while (pic)
++ {
++ if (pic->data)
+ {
+- if( pic->type == PICTURE_TYPE_FRONT_COVER )
+- {
+- MP4SetMetadataCoverArt(mp4file, pic->data, pic->size);
+- }
++ MP4TagArtwork art;
++ art.data = pic->data;
++ art.size = pic->size;
++ art.type = MP4_ART_UNDEFINED; // delegate typing to libmp4v2
++ MP4TagsAddArtwork(tags, &art);
+ }
++ pic = pic->next;
+ }
+
+-
+- MP4Close(mp4file);
++ MP4TagsStore(tags, mp4file);
++ MP4TagsFree(tags);
++ MP4Close(mp4file, 0);
+
+ if (error) return FALSE;
+ else return TRUE;
+--- src/picture.c
++++ src/picture.c
+@@ -326,24 +326,7 @@
+ else if (MESSAGE_BOX_POSITION_MOUSE)
+ gtk_window_set_position(GTK_WINDOW(FileSelectionWindow),GTK_WIN_POS_MOUSE);
+
+- // Behaviour following the tag type...
+- switch (ETCore->ETFileDisplayed->ETFileDescription->TagType)
+- {
+- case MP4_TAG:
+- {
+- // Only one file can be selected
+- gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), FALSE);
+- break;
+- }
+-
+- // Other tag types
+- default:
+- {
+- gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), TRUE);
+- break;
+- }
+- }
+-
++ gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(FileSelectionWindow), TRUE);
+ gtk_dialog_set_default_response(GTK_DIALOG(FileSelectionWindow), GTK_RESPONSE_OK);
+
+ // Starting directory (the same of the current file)
diff --git a/extra/easytag/easytag.install b/extra/easytag/easytag.install
index 93908edac..660593cf5 100644
--- a/extra/easytag/easytag.install
+++ b/extra/easytag/easytag.install
@@ -1,5 +1,5 @@
post_install() {
- [[ -x usr/bin/update-desktop-database ]] && update-desktop-database -q || true
+ update-desktop-database -q
}
post_upgrade() {