diff -Nru libgpod-0.7.93/aclocal.m4 libgpod-0.7.94/aclocal.m4 --- libgpod-0.7.93/aclocal.m4 2010-04-06 21:54:17.000000000 +0100 +++ libgpod-0.7.94/aclocal.m4 2010-08-31 22:10:45.000000000 +0100 @@ -1914,4 +1914,5 @@ m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) +m4_include([m4/mono.m4]) m4_include([m4/python.m4]) diff -Nru libgpod-0.7.93/bindings/Makefile.am libgpod-0.7.94/bindings/Makefile.am --- libgpod-0.7.93/bindings/Makefile.am 2010-03-28 21:29:56.000000000 +0100 +++ libgpod-0.7.94/bindings/Makefile.am 2010-08-30 22:40:32.000000000 +0100 @@ -1,3 +1 @@ -if HAVE_PYTHON -SUBDIRS=python -endif +SUBDIRS=mono python diff -Nru libgpod-0.7.93/bindings/Makefile.in libgpod-0.7.94/bindings/Makefile.in --- libgpod-0.7.93/bindings/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/bindings/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -40,8 +40,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -70,7 +70,7 @@ distdir ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = python +DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ @@ -133,7 +133,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -181,8 +185,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -253,6 +261,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -287,7 +296,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ udevdir = @udevdir@ -@HAVE_PYTHON_TRUE@SUBDIRS = python +SUBDIRS = mono python all: all-recursive .SUFFIXES: diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Artwork.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Artwork.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Artwork.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Artwork.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using GLib; + using Gdk; + using native; + + namespace native { + [StructLayout (LayoutKind.Sequential)] + internal struct Itdb_Artwork { + public IntPtr thumbnail; + public uint id; + public ulong dbid; + public int unk028; + public uint rating; + public int unk036; + public IntPtr creation_date; + public IntPtr digitized_date; + public uint artwork_size; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_artwork_new(); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_artwork_duplicate(HandleRef device); + + [DllImport ("gpod")] + internal static extern void itdb_artwork_free(HandleRef artwork); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_artwork_get_pixbuf(HandleRef device, HandleRef artwork, int width, int height); + + [DllImport ("gpod")] + internal static extern bool itdb_artwork_set_thumbnail(HandleRef artwork, string filename, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern bool itdb_artwork_set_thumbnail_from_data(HandleRef artwork, IntPtr image_data, int image_data_len, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern bool itdb_artwork_set_thumbnail_from_pixbuf(HandleRef artwork, IntPtr pixbuf, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern void itdb_artwork_remove_thumbnails(HandleRef artwork); + } + } + + public unsafe class Artwork : GPodBase { + public Thumbnail Thumbnail { get { return new Thumbnail(((Itdb_Artwork *) Native)->thumbnail); } + set { ((Itdb_Artwork *) Native)->thumbnail = HandleRef.ToIntPtr(value.Handle); } } + public uint Rating { get { return ((Itdb_Artwork *) Native)->rating / 20; } + set { ((Itdb_Artwork *) Native)->rating = (value > 5 ? 5 : value) * 20; } } + public DateTime TimeCreated { get { return Artwork.time_tToDateTime (((Itdb_Artwork *) Native)->creation_date); } + set { ((Itdb_Artwork *) Native)->creation_date = Artwork.DateTimeTotime_t(value); } } + public DateTime TimeDigitized { get { return Artwork.time_tToDateTime (((Itdb_Artwork *) Native)->digitized_date); } + set { ((Itdb_Artwork *) Native)->digitized_date = Artwork.DateTimeTotime_t(value); } } + public uint Size { get { return ((Itdb_Artwork *) Native)->artwork_size; } + set { ((Itdb_Artwork *) Native)->artwork_size = value; } } + + public Artwork(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Artwork(IntPtr handle) : base(handle) {} + public Artwork() : base(Itdb_Artwork.itdb_artwork_new (), false) {} + public Artwork(Artwork other) : base(Itdb_Artwork.itdb_artwork_duplicate(other.Handle), false) {} + protected override void Destroy() { Itdb_Artwork.itdb_artwork_free(Handle); } + + public Pixbuf GetPixbuf(Device device, int width, int height) { + return new Pixbuf(Itdb_Artwork.itdb_artwork_get_pixbuf(device.Handle, Handle, width, height)); + } + + public bool ThumbnailSet(string filename, int rotation) { + IntPtr gerror; + bool res = Itdb_Artwork.itdb_artwork_set_thumbnail(Handle, filename, rotation, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + public bool ThumbnailSet(IntPtr image_data, int image_data_len, int rotation) { + IntPtr gerror; + bool res = Itdb_Artwork.itdb_artwork_set_thumbnail_from_data(Handle, image_data, image_data_len, rotation, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + public bool ThumbnailSet(Pixbuf pixbuf, int rotation) { + IntPtr gerror; + bool res = Itdb_Artwork.itdb_artwork_set_thumbnail_from_pixbuf(Handle, pixbuf.Handle, rotation, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + public void ThumbnailsRemoveAll() { + Itdb_Artwork.itdb_artwork_remove_thumbnails(Handle); + } + } +} + diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/AssemblyInfo.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/AssemblyInfo.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/AssemblyInfo.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/AssemblyInfo.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,26 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("libgpod-sharp")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Chapter.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Chapter.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Chapter.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Chapter.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using native; + + namespace native { + [StructLayout (LayoutKind.Sequential)] + internal struct Itdb_Chapter { + public uint startpos; + public IntPtr chaptertitle; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_chapter_new(); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_chapter_duplicate(HandleRef chapter); + + [DllImport ("gpod")] + internal static extern void itdb_chapter_free(HandleRef chapter); + } + } + + public unsafe class Chapter : GPodBase { + public Chapter(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Chapter(IntPtr handle) : base(handle) {} + public Chapter() : this(Itdb_Chapter.itdb_chapter_new(), false) {} + public Chapter(Chapter other) : this(Itdb_Chapter.itdb_chapter_duplicate(other.Handle), false) {} + public Chapter(uint startpos, string title) : this() { + StartPosition = startpos; + Title = title; + } + protected override void Destroy() { Itdb_Chapter.itdb_chapter_free(Handle); } + + public uint StartPosition { + get { return ((Itdb_Chapter *) Native)->startpos; } + set { ((Itdb_Chapter *) Native)->startpos = value; } + } + + public string Title { + get { return PtrToStringUTF8 (((Itdb_Chapter *) Native)->chaptertitle); } + set { var x = (Itdb_Chapter *) Native; ReplaceStringUTF8 (ref x->chaptertitle, value); } + } + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/ChapterData.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/ChapterData.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/ChapterData.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/ChapterData.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using GLib; + using native; + + namespace native { + internal struct Itdb_ChapterData { + public IntPtr chapters; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_chapterdata_new(); + + [DllImport ("gpod")] + internal static extern bool itdb_chapterdata_add_chapter(HandleRef chapterdata, uint startpos, string chaptertitle); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_chapterdata_duplicate(HandleRef chapterdata); + + [DllImport ("gpod")] + internal static extern void itdb_chapterdata_unlink_chapter(HandleRef chapterdata, HandleRef chapter); + + [DllImport ("gpod")] + internal static extern void itdb_chapterdata_remove_chapters(HandleRef chapterdata); + + [DllImport ("gpod")] + internal static extern void itdb_chapterdata_free(HandleRef chapterdata); + } + } + + internal class ChapterList : GPodList { + public ChapterList(bool owner, HandleRef handle, IntPtr list) : base(owner, handle, list) {} + + protected override void DoUnlink(int index) { + Itdb_ChapterData.itdb_chapterdata_unlink_chapter(handle, this[index].Handle); + } + + protected override void DoAdd(int index, Chapter item) { + this[index].SetBorrowed(false); // We're creating a new object here, so just deallocate the old one + Itdb_ChapterData.itdb_chapterdata_add_chapter(handle, item.StartPosition, item.Title); + } + } + + public unsafe class ChapterData : GPodBase { + public ChapterData(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public ChapterData(IntPtr handle) : base(handle) {} + public ChapterData() : this(Itdb_ChapterData.itdb_chapterdata_new(), false) {} + public ChapterData(ChapterData other) : this(Itdb_ChapterData.itdb_chapterdata_duplicate(other.Handle), false) {} + protected override void Destroy() { Itdb_ChapterData.itdb_chapterdata_free(Handle); } + + public IList Chapters { get { return new ChapterList(true, Handle, ((Itdb_ChapterData *) Native)->chapters); } } + } +} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Device.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Device.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Device.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Device.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using GLib; + using native; + + namespace native { + internal struct Itdb_Device { + public IntPtr mountpoint; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_device_new(); + + [DllImport ("gpod")] + internal static extern void itdb_device_free(HandleRef device); + + [DllImport ("gpod")] + internal static extern void itdb_device_set_mountpoint(HandleRef device, string mountpoint); + + [DllImport ("gpod")] + internal static extern bool itdb_device_supports_artwork(HandleRef device); + + [DllImport ("gpod")] + internal static extern bool itdb_device_supports_chapter_image(HandleRef device); + + [DllImport ("gpod")] + internal static extern bool itdb_device_supports_photo(HandleRef device); + + [DllImport ("gpod")] + internal static extern bool itdb_device_supports_podcast(HandleRef device); + + [DllImport ("gpod")] + internal static extern bool itdb_device_supports_video(HandleRef device); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_device_get_ipod_info(HandleRef device); + + [DllImport ("gpod")] + internal static extern bool itdb_device_read_sysinfo(HandleRef device); + + [DllImport ("gpod")] + internal static extern string itdb_device_get_sysinfo(HandleRef device, string field); + + [DllImport ("gpod")] + internal static extern void itdb_device_set_sysinfo(HandleRef device, string field, string value); + + [DllImport ("gpod")] + internal static extern bool itdb_device_write_sysinfo(HandleRef device, out IntPtr gerror); + } + } + + /* According to teuf, SysInfo is crusty and probably not needed + * public class SysInfo { + HandleRef Handle; + public SysInfo(HandleRef handle) { Handle = handle; } + public bool Read() { return Itdb_Device.itdb_device_read_sysinfo(Handle); } + public string Get(string field) { return Itdb_Device.itdb_device_get_sysinfo(Handle, field); } + public void Set(string field, string val) { Itdb_Device.itdb_device_set_sysinfo(Handle, field, val); } + public bool Write() { + IntPtr gerror; + bool res = Itdb_Device.itdb_device_write_sysinfo(Handle, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + }*/ + + public unsafe class Device : GPodBase { + public bool SupportsArtwork { get { return Itdb_Device.itdb_device_supports_artwork(Handle); } } + public bool SupportsChapterImage { get { return Itdb_Device.itdb_device_supports_chapter_image(Handle); } } + public bool SupportsPhoto { get { return Itdb_Device.itdb_device_supports_photo(Handle); } } + public bool SupportsPodcast { get { return Itdb_Device.itdb_device_supports_podcast(Handle); } } + public bool SupportsVideo { get { return Itdb_Device.itdb_device_supports_video(Handle); } } + //public SysInfo SysInfo { get { return new SysInfo(Handle); } } + public IpodInfo IpodInfo { get { return IpodInfo.Find (Itdb_Device.itdb_device_get_ipod_info(Handle)); } } + public string Mountpoint { get { return PtrToStringUTF8 (((Itdb_Device *)Native)->mountpoint); } + set { Itdb_Device.itdb_device_set_mountpoint(Handle, value); } } + + public Device(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Device(IntPtr handle) : base(handle) {} + public Device() : base(Itdb_Device.itdb_device_new(), false) {} + public Device(string mountpoint) : this() { Mountpoint = mountpoint; } + protected override void Destroy() { Itdb_Device.itdb_device_free(Handle); } + } +} + + diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/GPodBase.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/GPodBase.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/GPodBase.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/GPodBase.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + + interface IGPodBase { + IntPtr Native { get; } + void SetBorrowed(bool borrowed); + } + + public abstract class GPodBase : IGPodBase, IDisposable { + + protected static string PtrToStringUTF8 (IntPtr ptr) + { + return GLib.Marshaller.Utf8PtrToString (ptr); + } + + protected static void ReplaceStringUTF8 (ref IntPtr ptr, string str) + { + GLib.Marshaller.Free (ptr); + ptr = GLib.Marshaller.StringToPtrGStrdup (str); + } + + protected static IntPtr DateTimeTotime_t (DateTime time) { + return GLib.Marshaller.DateTimeTotime_t (time); + } + + protected static DateTime time_tToDateTime (IntPtr time_t) { + return GLib.Marshaller.time_tToDateTime (time_t); + } + + internal IntPtr Native { + get { return HandleRef.ToIntPtr (Handle); } + } + + IntPtr IGPodBase.Native { + get { return Native; } + } + + public HandleRef Handle; + protected bool Borrowed; + + public GPodBase(IntPtr handle) : this(handle, true) {} + public GPodBase(IntPtr handle, bool borrowed) { + Borrowed = borrowed; + Handle = new HandleRef (this, handle); + } + ~GPodBase() { if (!Borrowed) Destroy(); } + + public void SetBorrowed(bool borrowed) { Borrowed = borrowed; } + protected abstract void Destroy(); + public void Dispose () + { + if (!Borrowed) + Destroy (); + } + } +} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/GPodList.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/GPodList.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/GPodList.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/GPodList.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using GLib; + + internal abstract class GPodList : IList where T : IGPodBase { + private class GPodListEnumerator : IEnumerator { + private System.Collections.IEnumerator enumerator; + public GPodListEnumerator(System.Collections.IEnumerator enumerator) { this.enumerator = enumerator; } + public T Current { get { return (T) enumerator.Current; } } + object IEnumerator.Current { get { return enumerator.Current; } } + public bool MoveNext() { return enumerator.MoveNext(); } + public void Reset() { enumerator.Reset(); } + public void Dispose() { } + } + + protected HandleRef handle; + protected List list; + protected bool owner; + + public GPodList(bool owner, HandleRef handle, List list) { this.handle = handle; this.list = list; this.owner = owner; } + public GPodList(HandleRef handle, List list) : this(false, handle, list) {} + public GPodList(bool owner, HandleRef handle, IntPtr listp) : this(owner, handle, new List(listp, typeof(T))) {} + public GPodList(HandleRef handle, IntPtr listp) : this(false, handle, listp) {} + + public int Count { get { return list.Count; } } + public bool IsReadOnly { get { return false; } } + public T this[int index] { get { return (T) list[index]; } + set { RemoveAt(index); Insert(index, value); } } + + public void Add(T item) { DoAdd (-1, item); if (owner) item.SetBorrowed(true); } + public void Clear() { list.Empty(); } + public void CopyTo(T[] array, int arrayIndex) { list.CopyTo(array, arrayIndex); } + public IEnumerator GetEnumerator() { return new GPodListEnumerator(list.GetEnumerator()); } + IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } + + public bool Contains(T item) { + return IndexOf (item) != -1; + } + + public int IndexOf(T item) { + int i = 0; + foreach (T t in this) { + if (object.ReferenceEquals (t, item) || t.Native == item.Native) + return i; + i++; + } + return -1; + } + + public bool Remove(T item) { + int index = IndexOf(item); + if (index < 0) return false; + RemoveAt(index); + return true; + } + + public void Insert(int index, T item) { + if (owner) item.SetBorrowed(true); + DoAdd(index, item); + } + + public void RemoveAt(int index) { + if (owner) this[index].SetBorrowed(false); + DoUnlink(index); + } + + protected abstract void DoAdd(int index, T item); + protected abstract void DoUnlink(int index); + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/IpodInfo.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/IpodInfo.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/IpodInfo.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/IpodInfo.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using native; + using System.Collections.Generic; + + namespace native { + internal struct Itdb_IpodInfo { + public IntPtr model_number; + public double capacity; + public IpodModel ipod_model; + public IpodGeneration ipod_generation; + + /* We don't use these 5 fields but this struct must mirror the native one exactly */ + uint musicdirs; + int reserved_int1; + int reserved_int2; + IntPtr reserved1; + IntPtr reserved2; + + [DllImport ("gpod")] + internal static extern IntPtr itdb_info_get_ipod_info_table(); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_info_get_ipod_generation_string(IpodGeneration generation); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_info_get_ipod_model_name_string(IpodModel model); + } + } + + public enum IpodGeneration { + Unknown, + First, + Second, + Third, + Fourth, + Photo, + Mobile, + Mini1, + Mini2, + Shuffle1, + Shuffle2, + Shuffle3, + Nano1, + Nano2, + Nano3, + Nano4, + Video1, + Video2, + Classic1, + Classic2, + Touch1, + Iphone1, + Shuffle4, + Touch2, + Iphone2, + Iphone3, + Classic3, + Nano5, + Touch3 + } + + public enum IpodModel { + Invalid, + Unknown, + Color, + ColorU2, + Regular, + RegularU2, + Mini, + MiniBlue, + MiniPink, + MiniGreen, + MiniGold, + Shuffle, + NanoWhite, + NanoBlack, + VideoWhite, + VideoBlack, + Mobile1, + VideoU2, + NanoSilver, + NanoBlue, + NanoGreen, + NanoPink, + NanoRed, + NanoYellow, + NanoPurple, + NanoOrange, + Iphone1, + ShuffleSilver, + ShufflePink, + ShuffleBlue, + ShuffleGreen, + ShuffleOrange, + ShufflePurple, + ShuffleRed, + ClassicSilver, + ClassicBlack, + TouchSilver, + ShuffleBlack, + IphoneWhite, + IphoneBlack, + } + + public sealed unsafe class IpodInfo : GPodBase { + public static IpodInfo[] Table = GetTable (); + + static unsafe IpodInfo[] GetTable() { + Itdb_IpodInfo *table = (Itdb_IpodInfo *) Itdb_IpodInfo.itdb_info_get_ipod_info_table(); + + List retval = new List (); + while (true) { + Itdb_IpodInfo *item = &table [retval.Count]; + if (item->model_number == IntPtr.Zero) + break; + retval.Add (new IpodInfo ((IntPtr)item, true)); + } + return retval.ToArray (); + } + + internal static IpodInfo Find (IntPtr native) + { + for (int i = 0; i < Table.Length; i++) + if (Table [i].Native == native) + return Table [i]; + return null; + } + + // Capacity is in gigabytes + public double Capacity { + get { return ((Itdb_IpodInfo *) Native)->capacity; } + } + + public IpodGeneration Generation { + get { return ((Itdb_IpodInfo *) Native)->ipod_generation; } + } + + public string GenerationString { + get { return PtrToStringUTF8 (Itdb_IpodInfo.itdb_info_get_ipod_generation_string(this.Generation)); } + } + + public IpodModel Model { + get { return ((Itdb_IpodInfo *) Native)->ipod_model; } + } + + public string ModelNumber { + get { return PtrToStringUTF8 (((Itdb_IpodInfo *) Native)->model_number); } + } + + public string ModelString { + get { return PtrToStringUTF8 (Itdb_IpodInfo.itdb_info_get_ipod_model_name_string(this.Model)); } + } + + IpodInfo (IntPtr handle, bool borrowed) + : base (handle, borrowed) + { + + } + + IpodInfo (IntPtr handle) + : base (handle) + { + + } + + protected override void Destroy() + { + // No need to free anything as it's a static array in native code. + } + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/ITDB.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/ITDB.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/ITDB.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/ITDB.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using GLib; + using native; + + namespace native { + internal struct Itdb_iTunesDB { + public IntPtr tracks; + public IntPtr playlists; + public IntPtr filename; + public IntPtr device; + // Ignore everything else + + [DllImport ("gpod")] + internal static extern IntPtr itdb_new(); + + [DllImport ("gpod")] + internal static extern string itdb_cp_get_dest_filename (IntPtr track, string mountpoint, string filename, ref IntPtr error); + + [DllImport ("gpod")] + internal static extern bool itdb_cp_track_to_ipod (HandleRef track, string filename, ref IntPtr error); + + [DllImport ("gpod")] + internal static extern void itdb_free(HandleRef itdb); + + [DllImport ("gpod")] + internal static extern string itdb_get_control_dir (string mountpoint); + + [DllImport ("gpod")] + internal static extern string itdb_get_music_dir (string mountpoint); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_parse(string mountpoint, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern bool itdb_write(HandleRef itdb, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern void itdb_set_mountpoint(HandleRef itdb, string mountpoint); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_get_mountpoint(HandleRef itdb); + + [DllImport ("gpod")] + internal static extern bool itdb_init_ipod(string mountpoint, string model_number, string ipod_name, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern uint itdb_tracks_number_nontransferred(HandleRef itdb); + + [DllImport ("gpod")] + internal static extern void itdb_track_add(HandleRef itdb, HandleRef track, int pos); + + [DllImport ("gpod")] + internal static extern void itdb_track_unlink(HandleRef track); + + [DllImport ("gpod")] + internal static extern void itdb_playlist_add(HandleRef itdb, HandleRef pl, int pos); + + [DllImport ("gpod")] + internal static extern void itdb_playlist_unlink(HandleRef pl); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_playlist_mpl(HandleRef itdb); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_playlist_podcasts(HandleRef itdb); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_playlist_by_name(HandleRef itdb, string name); + + [DllImport ("gpod")] + internal static extern bool itdb_start_sync (IntPtr itdb); + + [DllImport ("gpod")] + internal static extern bool itdb_stop_sync (IntPtr itdb); + } + } + + internal class ITDBTrackList : GPodList { + public ITDBTrackList(bool owner, HandleRef handle, IntPtr list) : base(owner, handle, list) {} + protected override void DoAdd(int index, Track item) { Itdb_iTunesDB.itdb_track_add(this.handle, item.Handle, index); } + protected override void DoUnlink(int index) { Itdb_iTunesDB.itdb_track_unlink(this[index].Handle); } + } + + internal class ITDBPlaylistList : GPodList { + public ITDBPlaylistList(bool owner, HandleRef handle, IntPtr list) : base(owner, handle, list) {} + protected override void DoAdd(int index, Playlist item) { Itdb_iTunesDB.itdb_playlist_add(this.handle, item.Handle, index); } + protected override void DoUnlink(int index) { Itdb_iTunesDB.itdb_playlist_unlink(this[index].Handle); } + } + + public unsafe class ITDB : GPodBase { + public static bool InitIpod(string mountpoint, string model_number, string ipod_name) { + IntPtr gerror; + bool res = Itdb_iTunesDB.itdb_init_ipod(mountpoint, model_number, ipod_name, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + public static string GetLocalPath (Device device, Track track) + { + string ipodPath = track.IpodPath.Replace (":", "/").Substring (1); + return System.IO.Path.Combine (device.Mountpoint, ipodPath); + } + + public static string GetDestFileName (Device device, string localFile) + { + // itdb_cp_get_dest_filename (HandleRef track, string mountpoint, string filename, ref IntPtr error); + IntPtr error = IntPtr.Zero; + string result = Itdb_iTunesDB.itdb_cp_get_dest_filename (IntPtr.Zero, device.Mountpoint, localFile, ref error); + if (error != IntPtr.Zero) + throw new GException (error); + return result; + } + + public static string GetControlPath (Device device) + { + return Itdb_iTunesDB.itdb_get_control_dir (device.Mountpoint); + } + + public static string GetMusicPath (Device device) + { + return Itdb_iTunesDB.itdb_get_music_dir (device.Mountpoint); + } + + public IList Tracks { get { return new ITDBTrackList(true, Handle, ((Itdb_iTunesDB *) Native)->tracks); } } + public IList Playlists { get { return new ITDBPlaylistList(true, Handle, ((Itdb_iTunesDB *) Native)->playlists); } } + public Playlist MasterPlaylist { get { return new Playlist(Itdb_iTunesDB.itdb_playlist_mpl(Handle)); } } + public Playlist PodcastsPlaylist { get { return new Playlist(Itdb_iTunesDB.itdb_playlist_podcasts(Handle)); } } + public Device Device { get { return new Device(((Itdb_iTunesDB *) Native)->device, true); } } + public uint NonTransferredTrackCount { get { return Itdb_iTunesDB.itdb_tracks_number_nontransferred(Handle); } } + public string Mountpoint { get { return PtrToStringUTF8 (Itdb_iTunesDB.itdb_get_mountpoint(Handle)); } + set { Itdb_iTunesDB.itdb_set_mountpoint(Handle, value); } } + + public ITDB(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public ITDB(IntPtr handle) : base(handle) {} + public ITDB() : base(Itdb_iTunesDB.itdb_new(), false) {} + public ITDB(string mountpoint) : base(itdb_parse_wrapped(mountpoint), false) {} + protected override void Destroy() { if (!Borrowed) Itdb_iTunesDB.itdb_free(Handle); } + public bool CopyTrackToIPod (Track track, string localPath) + { + IntPtr gerror = IntPtr.Zero; + bool result = Itdb_iTunesDB.itdb_cp_track_to_ipod (track.Handle, localPath, ref gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return result; + } + + public bool StartSync () + { + return Itdb_iTunesDB.itdb_start_sync (Native); + } + + public bool StopSync () + { + return Itdb_iTunesDB.itdb_stop_sync (Native); + } + + public bool Write() { + IntPtr gerror; + bool res = Itdb_iTunesDB.itdb_write(Handle, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + private static IntPtr itdb_parse_wrapped(string mountpoint) { + IntPtr gerror; + IntPtr retval = Itdb_iTunesDB.itdb_parse(mountpoint, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return retval; + } + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in libgpod-0.7.94/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in --- libgpod-0.7.93/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,4 @@ + + + + diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/libgpod-sharp.pc.in libgpod-0.7.94/bindings/mono/libgpod-sharp/libgpod-sharp.pc.in --- libgpod-0.7.93/bindings/mono/libgpod-sharp/libgpod-sharp.pc.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/libgpod-sharp.pc.in 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,8 @@ +Libraries=@expanded_libdir@/@PACKAGE@/libgpod-sharp.dll + +Name: libgpod-sharp +Description: libgpod-sharp +Version: 0.1 + +Requires: glib-sharp-2.0 gtk-sharp-2.0 +Libs: -r:${Libraries} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Makefile.am libgpod-0.7.94/bindings/mono/libgpod-sharp/Makefile.am --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Makefile.am 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,38 @@ +ASSEMBLY = libgpod-sharp +TARGET = library +LINK = $(GLIBSHARP_LIBS) $(GDKSHARP_LIBS) + +SOURCES = \ + Artwork.cs \ + AssemblyInfo.cs \ + Chapter.cs \ + ChapterData.cs \ + Device.cs \ + GPodBase.cs \ + GPodList.cs \ + IpodInfo.cs \ + ITDB.cs \ + PhotoAlbum.cs \ + PhotoDB.cs \ + Playlist.cs \ + Thumbnail.cs \ + Track.cs + +dlname := $(shell grep "^dlname=" $(top_builddir)/src/libgpod.la | sed "s/^dlname=\(.*\)/\1/g") +libgpod-sharp.dll.config: $(top_srcdir)/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in + sed "s/@DLNAME@/$(dlname)/g" $< >$@ + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libgpod-sharp.pc +EXTRAS = \ + libgpod-sharp.pc.in + +if HAVE_MONO +include $(srcdir)/../Makefile.include +module_SCRIPTS += libgpod-sharp.dll.config +EXTRA_DIST += libgpod-sharp.dll.config.in +DISTCLEANFILES += libgpod-sharp.dll.config +else +EXTRA_DIST = $(SOURCES) libgpod-sharp.dll.config.in +DISTCLEANFILES = libgpod-sharp.dll.config +endif diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Makefile.in libgpod-0.7.94/bindings/mono/libgpod-sharp/Makefile.in --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -0,0 +1,589 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/../Makefile.include $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/libgpod-sharp.pc.in +subdir = bindings/mono/libgpod-sharp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = libgpod-sharp.pc +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(pkgconfigdir)" +SCRIPTS = $(module_SCRIPTS) +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +DIST_SOURCES = +DATA = $(pkgconfig_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ +GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ +GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HALCALLOUTSDIR = @HALCALLOUTSDIR@ +HALFDIDIR = @HALFDIDIR@ +HAL_CFLAGS = @HAL_CFLAGS@ +HAL_LIBS = @HAL_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGPOD_CFLAGS = @LIBGPOD_CFLAGS@ +LIBGPOD_LIBS = @LIBGPOD_LIBS@ +LIBGPOD_MAJOR_VERSION = @LIBGPOD_MAJOR_VERSION@ +LIBGPOD_MICRO_VERSION = @LIBGPOD_MICRO_VERSION@ +LIBGPOD_MINOR_VERSION = @LIBGPOD_MINOR_VERSION@ +LIBGPOD_SO_VERSION = @LIBGPOD_SO_VERSION@ +LIBGPOD_VERSION = @LIBGPOD_VERSION@ +LIBIMOBILEDEVICE_CFLAGS = @LIBIMOBILEDEVICE_CFLAGS@ +LIBIMOBILEDEVICE_LIBS = @LIBIMOBILEDEVICE_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIBXML_CFLAGS = @LIBXML_CFLAGS@ +LIBXML_LIBS = @LIBXML_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MCS = @MCS@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGUTILS_LIBS = @SGUTILS_LIBS@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SWIG = @SWIG@ +SWIG_LIB = @SWIG_LIB@ +TAGLIB_CFLAGS = @TAGLIB_CFLAGS@ +TAGLIB_LIBS = @TAGLIB_LIBS@ +TMPMOUNTDIR = @TMPMOUNTDIR@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +Z_LIBS = @Z_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +ASSEMBLY = libgpod-sharp +TARGET = library +LINK = $(GLIBSHARP_LIBS) $(GDKSHARP_LIBS) +SOURCES = \ + Artwork.cs \ + AssemblyInfo.cs \ + Chapter.cs \ + ChapterData.cs \ + Device.cs \ + GPodBase.cs \ + GPodList.cs \ + IpodInfo.cs \ + ITDB.cs \ + PhotoAlbum.cs \ + PhotoDB.cs \ + Playlist.cs \ + Thumbnail.cs \ + Track.cs + +dlname := $(shell grep "^dlname=" $(top_builddir)/src/libgpod.la | sed "s/^dlname=\(.*\)/\1/g") +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libgpod-sharp.pc +EXTRAS = \ + libgpod-sharp.pc.in + +@HAVE_MONO_TRUE@SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) +@HAVE_MONO_TRUE@ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET))) +@HAVE_MONO_TRUE@ASSEMBLY_FILE = $(ASSEMBLY).$(ASSEMBLY_EXTENSION) +@HAVE_MONO_TRUE@DEFAULT_INSTALL_DIR = $(pkglibdir) +@HAVE_MONO_TRUE@INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR))) +@HAVE_MONO_TRUE@OUTPUT_FILES = \ +@HAVE_MONO_TRUE@ $(ASSEMBLY_FILE) \ +@HAVE_MONO_TRUE@ $(ASSEMBLY_FILE).mdb + +@HAVE_MONO_TRUE@moduledir = $(INSTALL_DIR_RESOLVED) +@HAVE_MONO_TRUE@module_SCRIPTS = $(OUTPUT_FILES) \ +@HAVE_MONO_TRUE@ libgpod-sharp.dll.config +@HAVE_MONO_FALSE@EXTRA_DIST = $(SOURCES) libgpod-sharp.dll.config.in +@HAVE_MONO_TRUE@EXTRA_DIST = $(SOURCES_BUILD) \ +@HAVE_MONO_TRUE@ libgpod-sharp.dll.config.in +@HAVE_MONO_TRUE@CLEANFILES = $(OUTPUT_FILES) +@HAVE_MONO_FALSE@DISTCLEANFILES = libgpod-sharp.dll.config +@HAVE_MONO_TRUE@DISTCLEANFILES = *.pidb libgpod-sharp.dll.config +@HAVE_MONO_TRUE@MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../Makefile.include $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/mono/libgpod-sharp/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/mono/libgpod-sharp/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libgpod-sharp.pc: $(top_builddir)/config.status $(srcdir)/libgpod-sharp.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-moduleSCRIPTS: $(module_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)" + @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-moduleSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(moduledir)" && rm -f $$files + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(moduledir)" "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-moduleSCRIPTS install-pkgconfigDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-moduleSCRIPTS uninstall-pkgconfigDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-moduleSCRIPTS \ + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-moduleSCRIPTS \ + uninstall-pkgconfigDATA + +libgpod-sharp.dll.config: $(top_srcdir)/bindings/mono/libgpod-sharp/libgpod-sharp.dll.config.in + sed "s/@DLNAME@/$(dlname)/g" $< >$@ + +@HAVE_MONO_TRUE@all: $(ASSEMBLY_FILE) + +@HAVE_MONO_TRUE@$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE) + +@HAVE_MONO_TRUE@$(ASSEMBLY_FILE): $(SOURCES_BUILD) +@HAVE_MONO_TRUE@ $(MCS) -debug -unsafe -target:$(TARGET) -out:$@ $(LINK) $(SOURCES_BUILD) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/PhotoAlbum.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/PhotoAlbum.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/PhotoAlbum.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/PhotoAlbum.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using GLib; + using native; + + namespace native { + internal struct Itdb_PhotoAlbum { + public IntPtr photodb; + public IntPtr name; + public IntPtr members; + public byte album_type; + public byte playmusic; + public byte repeat; + public byte random; + public byte show_titles; + public byte transition_direction; + public int slide_duration; + public int transition_duration; + public long song_id; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_photoalbum_new(string albumname); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_photoalbum_free(HandleRef album); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_photoalbum_add_photo(IntPtr photodb, HandleRef album, HandleRef photo, int position); + } + } + + public enum TransitionDirection { + None = 0, + LeftToRight = 1, + RightToLeft = 2, + TopToBottom = 3, + BottomToTop = 4 + } + + internal class PhotoAlbumArtworkList : GPodList { + public PhotoAlbumArtworkList(HandleRef handle, IntPtr list) : base(handle, list) {} + protected override void DoAdd(int index, Artwork item) { + IntPtr photodb = ((Itdb_PhotoAlbum) Marshal.PtrToStructure(HandleRef.ToIntPtr(this.handle), typeof(Itdb_PhotoAlbum))).photodb; + Itdb_PhotoAlbum.itdb_photodb_photoalbum_add_photo(photodb, this.handle, item.Handle, index); + } + protected override void DoUnlink(int index) { Itdb_PhotoDB.itdb_photodb_photoalbum_unlink(this[index].Handle); } + } + + public unsafe class PhotoAlbum : GPodBase { + public PhotoAlbum(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public PhotoAlbum(IntPtr handle) : base(handle) {} + public PhotoAlbum(string albumname) : base(Itdb_PhotoAlbum.itdb_photodb_photoalbum_new(albumname), false) {} + protected override void Destroy() { Itdb_PhotoAlbum.itdb_photodb_photoalbum_free(Handle); } + + public IList Photos { get { return new PhotoAlbumArtworkList(Handle, ((Itdb_PhotoAlbum *) Native)->members); } } + public string Name { get { return PtrToStringUTF8 (((Itdb_PhotoAlbum *) Native)->name); } + set { var x = (Itdb_PhotoAlbum *) Native; ReplaceStringUTF8 (ref x->name, value); } } + public bool PlayMusic { get { return ((Itdb_PhotoAlbum *) Native)->playmusic == 1; } + set { ((Itdb_PhotoAlbum *) Native)->playmusic = (byte) (value ? 1 : 0); } } + public bool Repeat { get { return ((Itdb_PhotoAlbum *) Native)->repeat == 1; } + set { ((Itdb_PhotoAlbum *) Native)->repeat = (byte) (value ? 1 : 0); } } + public bool Random { get { return ((Itdb_PhotoAlbum *) Native)->random == 1; } + set { ((Itdb_PhotoAlbum *) Native)->random = (byte) (value ? 1 : 0); } } + public bool ShowTitles { get { return ((Itdb_PhotoAlbum *) Native)->show_titles == 1; } + set { ((Itdb_PhotoAlbum *) Native)->show_titles = (byte) (value ? 1 : 0); } } + public TransitionDirection TransitionDirection { get { return (TransitionDirection) ((Itdb_PhotoAlbum *) Native)->transition_direction; } + set { ((Itdb_PhotoAlbum *) Native)->transition_direction = (byte) value; } } + public int SlideDuration { get { return ((Itdb_PhotoAlbum *) Native)->slide_duration; } + set { ((Itdb_PhotoAlbum *) Native)->slide_duration = value; } } + public int TransitionDuration { get { return ((Itdb_PhotoAlbum *) Native)->transition_duration; } + set { ((Itdb_PhotoAlbum *) Native)->transition_duration = value; } } + // TODO: Do I need to do this? + //public Track Song { get { return ((Itdb_PhotoAlbum *) Native)->transition_duration; } + // set { ((Itdb_PhotoAlbum *) Native)->transition_duration = value; } } + } +} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/PhotoDB.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/PhotoDB.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/PhotoDB.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/PhotoDB.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using GLib; + using native; + + namespace native { + internal struct Itdb_PhotoDB { + public IntPtr photos; + public IntPtr photoalbums; + public IntPtr device; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_create(string mountpoint); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_free(HandleRef photodb); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_parse(string mountpoint, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern bool itdb_photodb_write(HandleRef photodb, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_add_photo(HandleRef photodb, string filename, int position, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_add_photo_from_data(HandleRef photodb, IntPtr image_data, int image_data_len, int position, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_add_photo_from_pixbuf(HandleRef photodb, IntPtr pixbuf, int position, int rotation, out IntPtr gerror); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_remove_photo(HandleRef photodb, HandleRef album, HandleRef photo); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_photoalbum_create(HandleRef photodb, string albumname, int pos); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_photodb_photoalbum_by_name(HandleRef photodb, string albumname); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_photoalbum_remove(HandleRef photodb, HandleRef album, bool remove_pics); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_photoalbum_add(HandleRef photodb, HandleRef album, int pos); + + [DllImport ("gpod")] + internal static extern void itdb_photodb_photoalbum_unlink(HandleRef album); + } + } + + internal class PhotoDBArtworkList : GPodList { + public PhotoDBArtworkList(bool owner, HandleRef handle, IntPtr list) : base(owner, handle, list) {} + protected override void DoAdd(int index, Artwork item) { } // TODO: How do I make itdb_photodb_add_photo() fit this convention? + protected override void DoUnlink(int index) { } // TODO: How do I make itdb_photodb_remove_photo() fit this convention? + } + + internal class PhotoDBPhotoAlbumList : GPodList { + public PhotoDBPhotoAlbumList(bool owner, HandleRef handle, IntPtr list) : base(owner, handle, list) {} + protected override void DoAdd(int index, PhotoAlbum item) { Itdb_PhotoDB.itdb_photodb_photoalbum_add(this.handle, item.Handle, index); } + protected override void DoUnlink(int index) { Itdb_PhotoDB.itdb_photodb_photoalbum_unlink(this[index].Handle); } + } + + public unsafe class PhotoDB : GPodBase { + public static PhotoDB Create(string mountpoint) { + return new PhotoDB(Itdb_PhotoDB.itdb_photodb_create(mountpoint), false); + } + + public IList Photos { get { return new PhotoDBArtworkList(true, Handle, ((Itdb_PhotoDB *) Native)->photos); } } + public IList PhotoAlbums { get { return new PhotoDBPhotoAlbumList(true, Handle, ((Itdb_PhotoDB *) Native)->photoalbums); } } + public Device Device { get { return new Device(((Itdb_PhotoDB *) Native)->device, true); } } + + public PhotoDB(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public PhotoDB(string mountpoint) : base(itdb_photodb_parse_wrapped(mountpoint), false) {} + protected override void Destroy() { Itdb_PhotoDB.itdb_photodb_free(Handle); } + + public bool Write() { + IntPtr gerror; + bool res = Itdb_PhotoDB.itdb_photodb_write(Handle, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return res; + } + + private static IntPtr itdb_photodb_parse_wrapped(string mountpoint) { + IntPtr gerror; + IntPtr retval = Itdb_PhotoDB.itdb_photodb_parse(mountpoint, out gerror); + if (gerror != IntPtr.Zero) + throw new GException(gerror); + return retval; + } + } +} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Playlist.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Playlist.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Playlist.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Playlist.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Collections.Generic; + using System.Runtime.InteropServices; + using Gdk; + using native; + + namespace native { + internal struct Itdb_Playlist { + public IntPtr itdb; + public IntPtr name; + public byte type; + public byte flag1; + public byte flag2; + public byte flag3; + public int num; + public IntPtr members; + public int is_spl; + public IntPtr timestamp; + public ulong id; + public PlaylistSortOrder sortorder; + public uint podcastflag; + //Itdb_SPLPref splpref; + //Itdb_SPLRules splrules; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_playlist_new(string title, bool spl); + + [DllImport ("gpod")] + internal static extern void itdb_playlist_free(HandleRef pl); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_playlist_duplicate(HandleRef pl); + + [DllImport ("gpod")] + internal static extern void itdb_playlist_add_track(HandleRef pl, HandleRef track, int pos); + + [DllImport ("gpod")] + internal static extern void itdb_playlist_remove_track(HandleRef pl, HandleRef track); + } + } + + public enum PlaylistSortOrder { + Manual = 1, + //Unknown = 2, + Title = 3, + Album = 4, + Artist = 5, + Bitrate = 6, + Genre = 7, + Filetype = 8, + TimeModified = 9, + TrackNumber = 10, + Size = 11, + Time = 12, + Year = 13, + Samplerate = 14, + Comment = 15, + TimeAdded = 16, + Equalizer = 17, + Composer = 18, + //Unknown = 19, + PlayCount = 20, + TimePlayed = 21, + CDNumber = 22, + Rating = 23, + ReleaseDate = 24, + BPM = 25, + Grouping = 26, + Category = 27, + Description = 28 + } + + internal class PlaylistTrackList : GPodList { + public PlaylistTrackList(HandleRef handle, IntPtr list) : base(handle, list) {} + protected override void DoAdd(int index, Track item) { Itdb_Playlist.itdb_playlist_add_track(this.handle, item.Handle, index); } + protected override void DoUnlink(int index) { Itdb_Playlist.itdb_playlist_remove_track(this.handle, this[index].Handle); } + } + + public unsafe class Playlist : GPodBase { + public ITDB ITDB { + get { return new ITDB(((Itdb_Playlist *) Native)->itdb, true); } + } + + public IList Tracks { + get { return new PlaylistTrackList(Handle, ((Itdb_Playlist *) Native)->members); } + } + + public string Name { + get { return PtrToStringUTF8 (((Itdb_Playlist *) Native)->name); } + set { var x = (Itdb_Playlist *) Native; ReplaceStringUTF8 (ref x->name, value); } + } + + public bool IsSmartPlaylist { get { return ((Itdb_Playlist *) Native)->is_spl != 0; } + set { ((Itdb_Playlist *) Native)->is_spl = value ? 1 : 0; } } + public DateTime TimeCreated { get { return Artwork.time_tToDateTime(((Itdb_Playlist *) Native)->timestamp); } + set { ((Itdb_Playlist *) Native)->timestamp = Artwork.DateTimeTotime_t(value); } } + public ulong ID { get { return ((Itdb_Playlist *) Native)->id; } + set { ((Itdb_Playlist *) Native)->id = value; } } + public PlaylistSortOrder SortOrder { get { return ((Itdb_Playlist *) Native)->sortorder; } + set { ((Itdb_Playlist *) Native)->sortorder = value; } } + public bool IsPodcast { get { return ((Itdb_Playlist *) Native)->podcastflag == 1; } + set { ((Itdb_Playlist *) Native)->podcastflag = (uint) (value ? 1 : 0); } } + public bool IsMaster { get { return (((Itdb_Playlist *) Native)->type & 0xff) == 1; } + set { ((Itdb_Playlist *) Native)->type = (byte) (value ? 1 : 0); } } + + public Playlist(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Playlist(IntPtr handle) : base(handle) {} + public Playlist(Playlist other) : base(Itdb_Playlist.itdb_playlist_duplicate(other.Handle), false) {} + protected override void Destroy() { Itdb_Playlist.itdb_playlist_free(Handle); } + } +} + + diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Thumbnail.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Thumbnail.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Thumbnail.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Thumbnail.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using GLib; + using Gdk; + using native; + + namespace native { + internal struct Itdb_Thumb { + // Ignore all fields (they are opaque) + + [DllImport ("gpod")] + internal static extern IntPtr itdb_thumb_duplicate(HandleRef thumb); + + [DllImport ("gpod")] + internal static extern void itdb_thumb_free(HandleRef thumb); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_thumb_to_pixbuf_at_size(HandleRef device, HandleRef thumb, int width, int height); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_thumb_to_pixbufs(HandleRef device, HandleRef thumb); + } + } + + public class Thumbnail : GPodBase { + public Thumbnail(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Thumbnail(IntPtr handle) : base(handle) {} + public Thumbnail(Thumbnail other) : this(Itdb_Thumb.itdb_thumb_duplicate(other.Handle), false) {} + protected override void Destroy() { Itdb_Thumb.itdb_thumb_free(Handle); } + + public Pixbuf ToPixbufAtSize(Device device, int width, int height) { + return new Pixbuf(Itdb_Thumb.itdb_thumb_to_pixbuf_at_size(device.Handle, Handle, width, height)); + } + + public Pixbuf[] ToPixbufs(Device device) { + List list = new List(Itdb_Thumb.itdb_thumb_to_pixbufs(device.Handle, Handle)); + Pixbuf[] pixbufs = new Pixbuf[list.Count]; + list.CopyTo(pixbufs, 0); + return pixbufs; + } + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp/Track.cs libgpod-0.7.94/bindings/mono/libgpod-sharp/Track.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp/Track.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp/Track.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +namespace GPod { + using System; + using System.Runtime.InteropServices; + using Gdk; + using native; + + + namespace native { + [StructLayout (LayoutKind.Sequential)] + internal struct Itdb_Track { + public IntPtr itdb; + public IntPtr title; + public IntPtr ipod_path; + public IntPtr album; + public IntPtr artist; + public IntPtr genre; + public IntPtr filetype; + public IntPtr comment; + public IntPtr category; + public IntPtr composer; + public IntPtr grouping; + public IntPtr description; + public IntPtr podcasturl; + public IntPtr podcastrss; + public IntPtr chapterdata; + public IntPtr subtitle; + public IntPtr tvshow; + public IntPtr tvepisode; + public IntPtr tvnetwork; + public IntPtr albumartist; + public IntPtr keywords; + public IntPtr sort_artist; + public IntPtr sort_title; + public IntPtr sort_album; + public IntPtr sort_albumartist; + public IntPtr sort_composer; + public IntPtr sort_tvshow; + public uint id; + public int size; + public int tracklen; + public int cd_nr; + public int cds; + public int track_nr; + public int tracks; + public int bitrate; + public ushort samplerate; + public ushort samplerate_low; + public int year; + public int volume; + public uint soundcheck; + public IntPtr time_added; + public IntPtr time_modified; + public IntPtr time_played; + public uint bookmark_time; + public uint rating; + public uint playcount; + public uint playcount2; + public uint recent_playcount; + public int transferred; + public short BPM; + public byte app_rating; + public byte type1; + public byte type2; + public byte compilation; + public uint starttime; + public uint stoptime; + public byte ischecked; + public ulong dbid; + public uint drm_userid; + public uint visible; + public uint filetype_marker; + public ushort artwork_count; + public uint artwork_size; + public float samplerate2; + public ushort unk126; + public uint unk132; + public IntPtr time_released; + public ushort unk144; + public ushort explicit_flag; + public uint unk148; + public uint unk152; + public uint skipcount; + public uint recent_skipcount; + public uint last_skipped; + public byte has_artwork; + public byte skip_when_shuffling; + public byte remember_playback_position; + public byte flag4; + public ulong dbid2; + public byte lyrics_flag; + public byte movie_flag; + public byte mark_unplayed; + public byte unk179; + public uint unk180; + public uint pregap; + public ulong samplecount; + public uint unk196; + public uint postgap; + public uint unk204; + public MediaType mediatype; + public uint season_nr; + public uint episode_nr; + public uint unk220; + public uint unk224; + public uint unk228, unk232, unk236, unk240, unk244; + public uint gapless_data; + public uint unk252; + public ushort gapless_track_flag; + public ushort gapless_album_flag; + public ushort album_id; + public IntPtr artwork; + // Ignore the rest + + [DllImport ("gpod")] + internal static extern IntPtr itdb_track_new(); + + [DllImport ("gpod")] + internal static extern void itdb_track_free(HandleRef track); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_track_duplicate(HandleRef track); + + [DllImport ("gpod")] + internal static extern IntPtr itdb_track_get_thumbnail(HandleRef track, int width, int height); + + [DllImport ("gpod")] + internal static extern bool itdb_track_has_thumbnails(HandleRef track); + + [DllImport ("gpod")] + internal static extern bool itdb_track_set_thumbnails(HandleRef track, string filename); + + [DllImport ("gpod")] + internal static extern bool itdb_track_set_thumbnails_from_data(HandleRef track, IntPtr image_data, int image_data_len); + + [DllImport ("gpod")] + internal static extern bool itdb_track_set_thumbnails_from_pixbuf(HandleRef track, IntPtr pixbuf); + + [DllImport ("gpod")] + internal static extern void itdb_track_remove_thumbnails(HandleRef track); + } + } + + public enum MediaType { + AudioVideo = 0x0000, + Audio = 0x0001, + Movie = 0x0002, + Podcast = 0x0004, + Audiobook = 0x0008, + MusicVideo = 0x0020, + TVShow = 0x0040, + MusicTVShow = 0x0060, + } + + public unsafe class Track : GPodBase { + public bool HasThumbnails { + get { return Itdb_Track.itdb_track_has_thumbnails (Handle); } + } + + public ITDB ITDB { + get { return new ITDB (((Itdb_Track *) Native)->itdb, true); } + } + + public string Title { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->title); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->title, value); } + } + + public string IpodPath { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->ipod_path); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->ipod_path, value); } + } + + public string Album { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->album); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->album, value); } + } + + public string Artist { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->artist); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->artist, value); } + } + + public string Genre { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->genre); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->genre, value); } + } + + public string Filetype { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->filetype); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->filetype, value); } + } + + public string Comment { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->comment); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->comment, value); } + } + + public string Category { + + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->category); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->category, value); } + } + + public string Composer { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->composer); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->composer, value); } + } + + public string Grouping { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->grouping); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->grouping, value); } + } + + public string Description { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->description); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->description, value); } + } + + public string PodcastURL { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->podcasturl); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->podcasturl, value); } + } + + public string PodcastRSS { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->podcastrss); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->podcastrss, value); } + } + + public ChapterData ChapterData { + get { return new ChapterData (((Itdb_Track *) Native)->chapterdata); } + set { ((Itdb_Track *) Native)->chapterdata = HandleRef.ToIntPtr(value.Handle); } + } + public string Subtitle { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->subtitle); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->subtitle, value); } + } + + public string TVShow { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->tvshow); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->tvshow, value); } + } + + public string TVEpisode { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->tvepisode); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->tvepisode, value); } + } + + public string TVNetwork { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->tvnetwork); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->tvnetwork, value); } + } + + public string AlbumArtist { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->albumartist); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->albumartist, value); } + } + + public string Keywords { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->keywords); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->keywords, value); } + } + + public string SortArtist { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_artist); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_artist, value); } + } + + public string SortTitle { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_title); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_title, value); } + } + + public string SortAlbum { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_album); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_album, value); } + } + + public string SortAlbumArtist { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_albumartist); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_albumartist, value); } + } + + public string SortComposer { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_composer); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_composer, value); } + } + + public string SortTVShow { + get { return PtrToStringUTF8 (((Itdb_Track *) Native)->sort_tvshow); } + set { var x = (Itdb_Track *) Native; ReplaceStringUTF8 (ref x->sort_tvshow, value); } + } + + public int Size { get { return ((Itdb_Track *) Native)->size; } + set { ((Itdb_Track *) Native)->size = value; } } + public int TrackLength { get { return ((Itdb_Track *) Native)->tracklen; } + set { ((Itdb_Track *) Native)->tracklen = value; } } + public int CDNumber { get { return ((Itdb_Track *) Native)->cd_nr; } + set { ((Itdb_Track *) Native)->cd_nr = value; } } + public int CDs { get { return ((Itdb_Track *) Native)->cds; } + set { ((Itdb_Track *) Native)->cds = value; } } + public int TrackNumber { get { return ((Itdb_Track *) Native)->track_nr; } + set { ((Itdb_Track *) Native)->track_nr = value; } } + public int Tracks { get { return ((Itdb_Track *) Native)->tracks; } + set { ((Itdb_Track *) Native)->tracks = value; } } + public int Bitrate { get { return ((Itdb_Track *) Native)->bitrate; } + set { ((Itdb_Track *) Native)->bitrate = value; } } + public ushort Samplerate { get { return ((Itdb_Track *) Native)->samplerate; } + set { ((Itdb_Track *) Native)->samplerate = value; } } + public ushort SamplerateLow { get { return ((Itdb_Track *) Native)->samplerate_low; } + set { ((Itdb_Track *) Native)->samplerate_low = value; } } + public int Year { get { return ((Itdb_Track *) Native)->year; } + set { ((Itdb_Track *) Native)->year = value; } } + public int Volume { get { return ((Itdb_Track *) Native)->volume; } + set { ((Itdb_Track *) Native)->volume = value; } } + public uint Soundcheck { get { return ((Itdb_Track *) Native)->soundcheck; } + set { ((Itdb_Track *) Native)->soundcheck = value; } } + public DateTime TimeAdded { get { return Track.time_tToDateTime (((Itdb_Track *) Native)->time_added); } + set { ((Itdb_Track *) Native)->time_added = Track.DateTimeTotime_t (value); } } + public DateTime TimeModified { get { return Track.time_tToDateTime (((Itdb_Track *) Native)->time_modified); } + set { ((Itdb_Track *) Native)->time_modified = Track.DateTimeTotime_t (value); } } + public DateTime TimePlayed { get { return Track.time_tToDateTime (((Itdb_Track *) Native)->time_played); } + set { ((Itdb_Track *) Native)->time_played = Track.DateTimeTotime_t(value); } } + public uint BookmarkTime { get { return ((Itdb_Track *) Native)->bookmark_time; } + set { ((Itdb_Track *) Native)->bookmark_time = value; } } + public uint Rating { get { return ((Itdb_Track *) Native)->rating; } + set { ((Itdb_Track *) Native)->rating = value; } } + public uint PlayCount { get { return ((Itdb_Track *) Native)->playcount; } + set { ((Itdb_Track *) Native)->playcount = value; } } + public uint PlayCount2 { get { return ((Itdb_Track *) Native)->playcount2; } + set { ((Itdb_Track *) Native)->playcount2 = value; } } + public uint RecentPlayCount { get { return ((Itdb_Track *) Native)->recent_playcount; } + set { ((Itdb_Track *) Native)->recent_playcount = value; } } + public bool Transferred { get { return ((Itdb_Track *) Native)->transferred != 0; } + set { ((Itdb_Track *) Native)->transferred = value ? 1 : 0; } } + public short BPM { get { return ((Itdb_Track *) Native)->BPM; } + set { ((Itdb_Track *) Native)->BPM = value; } } + public byte AppRating { get { return ((Itdb_Track *) Native)->app_rating; } + set { ((Itdb_Track *) Native)->app_rating = value; } } + public bool Compilation { get { return ((Itdb_Track *) Native)->compilation == 1; } + set { ((Itdb_Track *) Native)->compilation = (byte) (value ? 1 : 0); } } + public uint StartTime { get { return ((Itdb_Track *) Native)->starttime; } + set { ((Itdb_Track *) Native)->starttime = value; } } + public uint StopTime { get { return ((Itdb_Track *) Native)->stoptime; } + set { ((Itdb_Track *) Native)->stoptime = value; } } + public bool Checked { get { return ((Itdb_Track *) Native)->ischecked == 0; } + set { ((Itdb_Track *) Native)->ischecked = (byte) (value ? 0x0 : 0x1); } } + public ulong DBID { get { return ((Itdb_Track *) Native)->dbid; } + set { ((Itdb_Track *) Native)->dbid = value; } } + public uint DRMUserID { get { return ((Itdb_Track *) Native)->drm_userid; } + set { ((Itdb_Track *) Native)->drm_userid = value; } } + public uint Visible { get { return ((Itdb_Track *) Native)->visible; } + set { ((Itdb_Track *) Native)->visible = value; } } + public uint FiletypeMarker { get { return ((Itdb_Track *) Native)->filetype_marker; } + set { ((Itdb_Track *) Native)->filetype_marker = value; } } + public DateTime TimeReleased { get { return Track.time_tToDateTime (((Itdb_Track *) Native)->time_released); } + set { ((Itdb_Track *) Native)->time_released = Track.DateTimeTotime_t(value); } } + public bool ExplicitFlag { get { return ((Itdb_Track *) Native)->explicit_flag == 1; } + set { ((Itdb_Track *) Native)->explicit_flag = (byte) (value ? 1 : 0); } } + public uint SkipCount { get { return ((Itdb_Track *) Native)->skipcount; } + set { ((Itdb_Track *) Native)->skipcount = value; } } + public uint RecentSkipCount { get { return ((Itdb_Track *) Native)->recent_skipcount; } + set { ((Itdb_Track *) Native)->recent_skipcount = value; } } + public uint LastSkipped { get { return ((Itdb_Track *) Native)->last_skipped; } + set { ((Itdb_Track *) Native)->last_skipped = value; } } + public bool SkipWhenShuffling { get { return ((Itdb_Track *) Native)->skip_when_shuffling == 1; } + set { ((Itdb_Track *) Native)->skip_when_shuffling = (byte) (value ? 1 : 0); } } + public bool RememberPlaybackPosition { get { return ((Itdb_Track *) Native)->remember_playback_position == 1; } + set { ((Itdb_Track *) Native)->remember_playback_position = (byte) (value ? 1 : 0); } } + public byte Flag4 { get { return ((Itdb_Track *) Native)->flag4; } + set { ((Itdb_Track *) Native)->flag4 = value; } } + public ulong DBID2 { get { return ((Itdb_Track *) Native)->dbid2; } + set { ((Itdb_Track *) Native)->dbid2 = value; } } + public bool LyricsFlag { get { return ((Itdb_Track *) Native)->lyrics_flag == 1; } + set { ((Itdb_Track *) Native)->lyrics_flag = (byte) (value ? 1 : 0); } } + public bool MovieFlag { get { return ((Itdb_Track *) Native)->movie_flag == 1; } + set { ((Itdb_Track *) Native)->movie_flag = (byte) (value ? 1 : 0); } } + public bool MarkUnplayed { get { return ((Itdb_Track *) Native)->mark_unplayed == 2; } + set { ((Itdb_Track *) Native)->mark_unplayed = (byte) (value ? 2 : 1); } } + public uint PreGap { get { return ((Itdb_Track *) Native)->pregap; } + set { ((Itdb_Track *) Native)->pregap = value; } } + public ulong SampleCount { get { return ((Itdb_Track *) Native)->samplecount; } + set { ((Itdb_Track *) Native)->samplecount = value; } } + public uint PostGap { get { return ((Itdb_Track *) Native)->postgap; } + set { ((Itdb_Track *) Native)->postgap = value; } } + public MediaType MediaType { get { return ((Itdb_Track *) Native)->mediatype; } + set { ((Itdb_Track *) Native)->mediatype = value; } } + public uint SeasonNumber { get { return ((Itdb_Track *) Native)->season_nr; } + set { ((Itdb_Track *) Native)->season_nr = value; } } + public uint EpisodeNumber { get { return ((Itdb_Track *) Native)->episode_nr; } + set { ((Itdb_Track *) Native)->episode_nr = value; } } + public uint GaplessData { get { return ((Itdb_Track *) Native)->gapless_data; } + set { ((Itdb_Track *) Native)->gapless_data = value; } } + public bool GaplessTrackFlag { get { return ((Itdb_Track *) Native)->gapless_track_flag == 1; } + set { ((Itdb_Track *) Native)->gapless_track_flag = (byte) (value ? 1 : 0); } } + public bool GaplessAlbumFlag { get { return ((Itdb_Track *) Native)->gapless_album_flag == 1; } + set { ((Itdb_Track *) Native)->gapless_album_flag = (byte) (value ? 1 : 0); } } + public Artwork Artwork { get { return new Artwork(((Itdb_Track *) Native)->artwork); } + set { ((Itdb_Track *) Native)->artwork = HandleRef.ToIntPtr(value.Handle); } } + + public Track() : this(Itdb_Track.itdb_track_new(), false) {} + public Track(Track other) : this(Itdb_Track.itdb_track_duplicate(other.Handle), false) {} + public Track(IntPtr handle, bool borrowed) : base(handle, borrowed) {} + public Track(IntPtr handle) : base(handle) {} + protected override void Destroy() { Itdb_Track.itdb_track_free(Handle); } + + public Pixbuf ThumbnailGet(int width, int height) { + return new Pixbuf(Itdb_Track.itdb_track_get_thumbnail(Handle, width, height)); + } + + public bool ThumbnailsSet(string filename) { + return Itdb_Track.itdb_track_set_thumbnails(Handle, filename); + } + + public bool ThumbnailsSet(IntPtr image_data, int image_data_len) { + return Itdb_Track.itdb_track_set_thumbnails_from_data(Handle, image_data, image_data_len); + } + + public bool ThumbnailsSet(Pixbuf pixbuf) { + return Itdb_Track.itdb_track_set_thumbnails_from_pixbuf(Handle, pixbuf.Handle); + } + + public void ThumbnailsRemoveAll() { + Itdb_Track.itdb_track_remove_thumbnails(Handle); + } + } +} \ No newline at end of file diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp-test/AssemblyInfo.cs libgpod-0.7.94/bindings/mono/libgpod-sharp-test/AssemblyInfo.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp-test/AssemblyInfo.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp-test/AssemblyInfo.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,26 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("libgpod-sharp-test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp-test/libgpod-sharp-test.in libgpod-0.7.94/bindings/mono/libgpod-sharp-test/libgpod-sharp-test.in --- libgpod-0.7.93/bindings/mono/libgpod-sharp-test/libgpod-sharp-test.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp-test/libgpod-sharp-test.in 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,3 @@ +#!/bin/sh + +exec mono "@expanded_libdir@/@PACKAGE@/libgpod-sharp-test.exe" "$@" diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Main.cs libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Main.cs --- libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Main.cs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Main.cs 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2010 Nathaniel McCallum + * + * The code contained in this file is free software; you can redistribute + * it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either version + * 2.1 of the License, or (at your option) any later version. + * + * This file 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 code; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +using System; +using GPod; + +class MainClass { + public static int Main (string[] args) + { + if (args.Length == 0) { + System.Console.Error.WriteLine ("Usage: cmd "); + return 1; + } + + ITDB itdb = new ITDB (args[0]); + Console.WriteLine("Found Device: " + itdb.Device.Mountpoint); + Console.WriteLine("\t{0} ({1}GB) - {2} - {3}", + itdb.Device.IpodInfo.GenerationString, + itdb.Device.IpodInfo.Capacity, + itdb.Device.IpodInfo.ModelString, + itdb.Device.IpodInfo.ModelNumber); + Console.WriteLine("\tACPhPV: {0}, {1}, {2}, {3}, {4}", + itdb.Device.SupportsArtwork, + itdb.Device.SupportsChapterImage, + itdb.Device.SupportsPhoto, + itdb.Device.SupportsPodcast, + itdb.Device.SupportsVideo); + Console.WriteLine("\tTrack Count: {0}", itdb.Tracks.Count); + foreach (Track t in itdb.Tracks) + Console.WriteLine("\t\t{0}/{1}/{2}/{3}/{4}", t.Artist, t.Album, t.Title, t.RememberPlaybackPosition, t.TimeAdded); + Console.WriteLine("\tPlaylist Count: {0}", itdb.Playlists.Count); + foreach (Playlist p in itdb.Playlists) { + Console.Write("\t\t{0}", p.Name); + if (p.IsMaster) + Console.WriteLine(" (Master)"); + else + Console.WriteLine(""); + } + + PhotoDB pdb = new PhotoDB(args[0]); + Console.WriteLine("\tPhotos Count: {0}", pdb.Photos.Count); + foreach (Artwork a in pdb.Photos) + Console.WriteLine("\t\t{0}", a.TimeCreated); + Console.WriteLine("\tPhotoAlbum Count: {0}", pdb.PhotoAlbums.Count); + foreach (PhotoAlbum p in pdb.PhotoAlbums) { + Console.WriteLine("\t\t{0}: {1}", p.Name, p.Photos.Count); + foreach (Artwork a in p.Photos) + Console.WriteLine("\t\t\t{0}", a.TimeCreated); + } + return 0; + } +} diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Makefile.am libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Makefile.am --- libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Makefile.am 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,16 @@ +ASSEMBLY = libgpod-sharp-test +TARGET = exe +LINK = -r:../libgpod-sharp/libgpod-sharp.dll + +SOURCES = \ + AssemblyInfo.cs \ + Main.cs + +EXTRAS = \ + libgpod-sharp-test.in + +if HAVE_MONO +include $(srcdir)/../Makefile.include +else +EXTRA_DIST = $(SOURCES) +endif diff -Nru libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Makefile.in libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Makefile.in --- libgpod-0.7.93/bindings/mono/libgpod-sharp-test/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/libgpod-sharp-test/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -0,0 +1,546 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/../Makefile.include $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/libgpod-sharp-test.in +subdir = bindings/mono/libgpod-sharp-test +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = libgpod-sharp-test +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(moduledir)" +SCRIPTS = $(module_SCRIPTS) +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ +GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ +GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HALCALLOUTSDIR = @HALCALLOUTSDIR@ +HALFDIDIR = @HALFDIDIR@ +HAL_CFLAGS = @HAL_CFLAGS@ +HAL_LIBS = @HAL_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGPOD_CFLAGS = @LIBGPOD_CFLAGS@ +LIBGPOD_LIBS = @LIBGPOD_LIBS@ +LIBGPOD_MAJOR_VERSION = @LIBGPOD_MAJOR_VERSION@ +LIBGPOD_MICRO_VERSION = @LIBGPOD_MICRO_VERSION@ +LIBGPOD_MINOR_VERSION = @LIBGPOD_MINOR_VERSION@ +LIBGPOD_SO_VERSION = @LIBGPOD_SO_VERSION@ +LIBGPOD_VERSION = @LIBGPOD_VERSION@ +LIBIMOBILEDEVICE_CFLAGS = @LIBIMOBILEDEVICE_CFLAGS@ +LIBIMOBILEDEVICE_LIBS = @LIBIMOBILEDEVICE_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIBXML_CFLAGS = @LIBXML_CFLAGS@ +LIBXML_LIBS = @LIBXML_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MCS = @MCS@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGUTILS_LIBS = @SGUTILS_LIBS@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SWIG = @SWIG@ +SWIG_LIB = @SWIG_LIB@ +TAGLIB_CFLAGS = @TAGLIB_CFLAGS@ +TAGLIB_LIBS = @TAGLIB_LIBS@ +TMPMOUNTDIR = @TMPMOUNTDIR@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +Z_LIBS = @Z_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +ASSEMBLY = libgpod-sharp-test +TARGET = exe +LINK = -r:../libgpod-sharp/libgpod-sharp.dll +SOURCES = \ + AssemblyInfo.cs \ + Main.cs + +EXTRAS = \ + libgpod-sharp-test.in + +@HAVE_MONO_TRUE@SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) +@HAVE_MONO_TRUE@ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET))) +@HAVE_MONO_TRUE@ASSEMBLY_FILE = $(ASSEMBLY).$(ASSEMBLY_EXTENSION) +@HAVE_MONO_TRUE@DEFAULT_INSTALL_DIR = $(pkglibdir) +@HAVE_MONO_TRUE@INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR))) +@HAVE_MONO_TRUE@OUTPUT_FILES = \ +@HAVE_MONO_TRUE@ $(ASSEMBLY_FILE) \ +@HAVE_MONO_TRUE@ $(ASSEMBLY_FILE).mdb + +@HAVE_MONO_TRUE@moduledir = $(INSTALL_DIR_RESOLVED) +@HAVE_MONO_TRUE@module_SCRIPTS = $(OUTPUT_FILES) +@HAVE_MONO_FALSE@EXTRA_DIST = $(SOURCES) +@HAVE_MONO_TRUE@EXTRA_DIST = $(SOURCES_BUILD) +@HAVE_MONO_TRUE@CLEANFILES = $(OUTPUT_FILES) +@HAVE_MONO_TRUE@DISTCLEANFILES = *.pidb +@HAVE_MONO_TRUE@MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/../Makefile.include $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/mono/libgpod-sharp-test/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/mono/libgpod-sharp-test/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libgpod-sharp-test: $(top_builddir)/config.status $(srcdir)/libgpod-sharp-test.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-moduleSCRIPTS: $(module_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(moduledir)" || $(MKDIR_P) "$(DESTDIR)$(moduledir)" + @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(moduledir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(moduledir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-moduleSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(module_SCRIPTS)'; test -n "$(moduledir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(moduledir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(moduledir)" && rm -f $$files + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(moduledir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-moduleSCRIPTS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-moduleSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-moduleSCRIPTS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-moduleSCRIPTS + + +@HAVE_MONO_TRUE@all: $(ASSEMBLY_FILE) + +@HAVE_MONO_TRUE@$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE) + +@HAVE_MONO_TRUE@$(ASSEMBLY_FILE): $(SOURCES_BUILD) +@HAVE_MONO_TRUE@ $(MCS) -debug -unsafe -target:$(TARGET) -out:$@ $(LINK) $(SOURCES_BUILD) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru libgpod-0.7.93/bindings/mono/Makefile.am libgpod-0.7.94/bindings/mono/Makefile.am --- libgpod-0.7.93/bindings/mono/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/Makefile.am 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1 @@ +SUBDIRS=libgpod-sharp libgpod-sharp-test diff -Nru libgpod-0.7.93/bindings/mono/Makefile.in libgpod-0.7.94/bindings/mono/Makefile.in --- libgpod-0.7.93/bindings/mono/Makefile.in 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -0,0 +1,649 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bindings/mono +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ + $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ +GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ +GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +HALCALLOUTSDIR = @HALCALLOUTSDIR@ +HALFDIDIR = @HALFDIDIR@ +HAL_CFLAGS = @HAL_CFLAGS@ +HAL_LIBS = @HAL_LIBS@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBGPOD_CFLAGS = @LIBGPOD_CFLAGS@ +LIBGPOD_LIBS = @LIBGPOD_LIBS@ +LIBGPOD_MAJOR_VERSION = @LIBGPOD_MAJOR_VERSION@ +LIBGPOD_MICRO_VERSION = @LIBGPOD_MICRO_VERSION@ +LIBGPOD_MINOR_VERSION = @LIBGPOD_MINOR_VERSION@ +LIBGPOD_SO_VERSION = @LIBGPOD_SO_VERSION@ +LIBGPOD_VERSION = @LIBGPOD_VERSION@ +LIBIMOBILEDEVICE_CFLAGS = @LIBIMOBILEDEVICE_CFLAGS@ +LIBIMOBILEDEVICE_LIBS = @LIBIMOBILEDEVICE_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIBXML_CFLAGS = @LIBXML_CFLAGS@ +LIBXML_LIBS = @LIBXML_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MCS = @MCS@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGOBJECT_CFLAGS = @PYGOBJECT_CFLAGS@ +PYGOBJECT_LIBS = @PYGOBJECT_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SGUTILS_LIBS = @SGUTILS_LIBS@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SWIG = @SWIG@ +SWIG_LIB = @SWIG_LIB@ +TAGLIB_CFLAGS = @TAGLIB_CFLAGS@ +TAGLIB_LIBS = @TAGLIB_LIBS@ +TMPMOUNTDIR = @TMPMOUNTDIR@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +Z_LIBS = @Z_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udevdir = @udevdir@ +SUBDIRS = libgpod-sharp libgpod-sharp-test +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/mono/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/mono/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru libgpod-0.7.93/bindings/mono/Makefile.include libgpod-0.7.94/bindings/mono/Makefile.include --- libgpod-0.7.93/bindings/mono/Makefile.include 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/bindings/mono/Makefile.include 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,27 @@ +SOURCES_BUILD = $(addprefix $(srcdir)/, $(SOURCES)) + +ASSEMBLY_EXTENSION = $(strip $(patsubst library, dll, $(TARGET))) +ASSEMBLY_FILE = $(ASSEMBLY).$(ASSEMBLY_EXTENSION) + +DEFAULT_INSTALL_DIR = $(pkglibdir) +INSTALL_DIR_RESOLVED = $(firstword $(subst , $(DEFAULT_INSTALL_DIR), $(INSTALL_DIR))) + +OUTPUT_FILES = \ + $(ASSEMBLY_FILE) \ + $(ASSEMBLY_FILE).mdb + +moduledir = $(INSTALL_DIR_RESOLVED) +module_SCRIPTS = $(OUTPUT_FILES) + +all: $(ASSEMBLY_FILE) + +$(ASSEMBLY_FILE).mdb: $(ASSEMBLY_FILE) + +$(ASSEMBLY_FILE): $(SOURCES_BUILD) + $(MCS) -debug -unsafe -target:$(TARGET) -out:$@ $(LINK) $(SOURCES_BUILD) + +EXTRA_DIST = $(SOURCES_BUILD) + +CLEANFILES = $(OUTPUT_FILES) +DISTCLEANFILES = *.pidb +MAINTAINERCLEANFILES = Makefile.in diff -Nru libgpod-0.7.93/bindings/python/examples/Makefile.in libgpod-0.7.94/bindings/python/examples/Makefile.in --- libgpod-0.7.93/bindings/python/examples/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/bindings/python/examples/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -40,8 +40,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -93,7 +93,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -141,8 +145,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -213,6 +221,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/bindings/python/Makefile.am libgpod-0.7.94/bindings/python/Makefile.am --- libgpod-0.7.93/bindings/python/Makefile.am 2009-11-09 15:41:51.000000000 +0000 +++ libgpod-0.7.94/bindings/python/Makefile.am 2010-06-15 22:09:46.000000000 +0100 @@ -41,7 +41,7 @@ gpod_LTLIBRARIES = _gpod.la nodist__gpod_la_SOURCES = gpod_wrap.c _gpod_la_CPPFLAGS = $(PYTHON_INCLUDES) $(LIBGPOD_CFLAGS) $(PYGOBJECT_CFLAGS) $(INCLUDES) -_gpod_la_LDFLAGS = -module -avoid-version +_gpod_la_LDFLAGS = -module -avoid-version -shared _gpod_la_LIBADD = $(LIBGPOD_LIBS) $(PYGOBJECT_LIBS) $(top_builddir)/src/libgpod.la gpod_doc.i: $(srcdir)/gpod_doc.i.in $(srcdir)/gtkdoc-to-swig.xsl diff -Nru libgpod-0.7.93/bindings/python/Makefile.in libgpod-0.7.94/bindings/python/Makefile.in --- libgpod-0.7.93/bindings/python/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/bindings/python/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -43,8 +43,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -195,7 +195,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -243,8 +247,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -315,6 +323,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ @@ -380,7 +389,7 @@ @HAVE_PYTHON_TRUE@gpod_LTLIBRARIES = _gpod.la @HAVE_PYTHON_TRUE@nodist__gpod_la_SOURCES = gpod_wrap.c @HAVE_PYTHON_TRUE@_gpod_la_CPPFLAGS = $(PYTHON_INCLUDES) $(LIBGPOD_CFLAGS) $(PYGOBJECT_CFLAGS) $(INCLUDES) -@HAVE_PYTHON_TRUE@_gpod_la_LDFLAGS = -module -avoid-version +@HAVE_PYTHON_TRUE@_gpod_la_LDFLAGS = -module -avoid-version -shared @HAVE_PYTHON_TRUE@_gpod_la_LIBADD = $(LIBGPOD_LIBS) $(PYGOBJECT_LIBS) $(top_builddir)/src/libgpod.la all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive diff -Nru libgpod-0.7.93/bindings/python/tests/Makefile.in libgpod-0.7.94/bindings/python/tests/Makefile.in --- libgpod-0.7.93/bindings/python/tests/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/bindings/python/tests/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -40,8 +40,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -93,7 +93,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -141,8 +145,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -213,6 +221,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/configure libgpod-0.7.94/configure --- libgpod-0.7.93/configure 2010-04-06 21:54:18.000000000 +0100 +++ libgpod-0.7.94/configure 2010-08-31 22:10:46.000000000 +0100 @@ -747,6 +747,17 @@ LIBOBJS AM_BACKSLASH AM_DEFAULT_VERBOSITY +HAVE_MONO_FALSE +HAVE_MONO_TRUE +GLIBSHARP_LIBS +GLIBSHARP_CFLAGS +GDKSHARP_LIBS +GDKSHARP_CFLAGS +MONO +MCS +MONO_MODULE_LIBS +MONO_MODULE_CFLAGS +expanded_libdir HAVE_PYTHON_FALSE HAVE_PYTHON_TRUE SWIG_LIB @@ -1012,6 +1023,7 @@ enable_gtk_doc_html enable_gtk_doc_pdf with_python +with_mono enable_more_warnings enable_silent_rules ' @@ -1046,7 +1058,13 @@ GDKPIXBUF_CFLAGS GDKPIXBUF_LIBS PYGOBJECT_CFLAGS -PYGOBJECT_LIBS' +PYGOBJECT_LIBS +MONO_MODULE_CFLAGS +MONO_MODULE_LIBS +GDKSHARP_CFLAGS +GDKSHARP_LIBS +GLIBSHARP_CFLAGS +GLIBSHARP_LIBS' # Initialize some variables set by options. @@ -1702,10 +1720,12 @@ located --without-libimobiledevice Disable iPhone/iPod Touch support - --with-mount-dir=DIR Directory where HAL/udev will create a sub-directory + --with-temp-mount-dir=DIR + Directory where HAL/udev will create a sub-directory to mount iPods --with-html-dir=PATH path to installed docs --with-python=PATH build python bindings [[default=yes]] + --with-mono build mono bindings [[default=auto]] Some influential environment variables: CC C compiler command @@ -1749,6 +1769,18 @@ C compiler flags for PYGOBJECT, overriding pkg-config PYGOBJECT_LIBS linker flags for PYGOBJECT, overriding pkg-config + MONO_MODULE_CFLAGS + C compiler flags for MONO_MODULE, overriding pkg-config + MONO_MODULE_LIBS + linker flags for MONO_MODULE, overriding pkg-config + GDKSHARP_CFLAGS + C compiler flags for GDKSHARP, overriding pkg-config + GDKSHARP_LIBS + linker flags for GDKSHARP, overriding pkg-config + GLIBSHARP_CFLAGS + C compiler flags for GLIBSHARP, overriding pkg-config + GLIBSHARP_LIBS + linker flags for GLIBSHARP, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -2719,7 +2751,7 @@ # LIBGPOD_MAJOR_VERSION=0 LIBGPOD_MINOR_VERSION=7 -LIBGPOD_MICRO_VERSION=93 +LIBGPOD_MICRO_VERSION=94 # If you need a modifier for the version number. # Normally empty, but can be used to make "fixup" releases. LIBGPOD_EXTRAVERSION= @@ -2731,7 +2763,7 @@ # changes to the signature and the semantic) # ? :+1 : ? == just internal changes # CURRENT : REVISION : AGE -LIBGPOD_SO_VERSION=6:0:2 +LIBGPOD_SO_VERSION=6:1:2 @@ -6554,13 +6586,13 @@ else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:6557: $ac_compile\"" >&5) + (eval echo "\"\$as_me:6589: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:6560: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:6592: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:6563: output\"" >&5) + (eval echo "\"\$as_me:6595: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -7765,7 +7797,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 7768 "configure"' > conftest.$ac_ext + echo '#line 7800 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -9554,11 +9586,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9557: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9589: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9561: \$? = $ac_status" >&5 + echo "$as_me:9593: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9893,11 +9925,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9896: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9928: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9900: \$? = $ac_status" >&5 + echo "$as_me:9932: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9998,11 +10030,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10001: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10033: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:10005: \$? = $ac_status" >&5 + echo "$as_me:10037: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -10053,11 +10085,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10056: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10088: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:10060: \$? = $ac_status" >&5 + echo "$as_me:10092: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -11790,7 +11822,7 @@ libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) - echo '#line 11793 "configure"' > conftest.$ac_ext + echo '#line 11825 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -12443,7 +12475,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12446 "configure" +#line 12478 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12539,7 +12571,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12542 "configure" +#line 12574 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14495,11 +14527,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14498: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14530: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14502: \$? = $ac_status" >&5 + echo "$as_me:14534: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14594,11 +14626,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14597: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14629: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14601: \$? = $ac_status" >&5 + echo "$as_me:14633: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14646,11 +14678,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14649: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14681: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14653: \$? = $ac_status" >&5 + echo "$as_me:14685: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -15268,7 +15300,7 @@ libsuff= case "$host_cpu" in x86_64*|s390x*|powerpc64*) - echo '#line 15271 "configure"' > conftest.$ac_ext + echo '#line 15303 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -18891,9 +18923,15 @@ if test -z "$available_patch" ; then available_patch=0 fi - if test $available_major -ne $required_major \ - -o $available_minor -ne $required_minor \ - -o $available_patch -lt $required_patch ; then + # Convert the version tuple into a single number for easier comparison. + # Using base 100 should be safe since SWIG internally uses BCD values + # to encode its version number. + required_swig_vernum=`expr $required_major \* 10000 \ + \+ $required_minor \* 100 \+ $required_patch` + available_swig_vernum=`expr $available_major \* 10000 \ + \+ $available_minor \* 100 \+ $available_patch` + + if test $available_swig_vernum -lt $required_swig_vernum; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SWIG version >= $SWIG_MIN_VERSION is required. You have $swig_version." >&5 $as_echo "$as_me: WARNING: SWIG version >= $SWIG_MIN_VERSION is required. You have $swig_version." >&2;} SWIG='' @@ -18935,6 +18973,388 @@ +MONO_MIN_VERSION=1.9.1 +GTK_SHARP_MIN_VERSION=2.12 + + +# Check whether --with-mono was given. +if test "${with_mono+set}" = set; then : + withval=$with_mono; with_mono=$withval +else + with_mono=auto +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build mono bindings" >&5 +$as_echo_n "checking whether to build mono bindings... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_mono" >&5 +$as_echo "$with_mono" >&6; } + + if test "X$with_mono" != Xno; then + mono_detected="yes" + + expanded_libdir=`( + case $prefix in + NONE) prefix=$ac_default_prefix ;; + *) ;; + esac + case $exec_prefix in + NONE) exec_prefix=$prefix ;; + *) ;; + esac + eval echo $libdir + )` + + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MONO_MODULE" >&5 +$as_echo_n "checking for MONO_MODULE... " >&6; } + +if test -n "$MONO_MODULE_CFLAGS"; then + pkg_cv_MONO_MODULE_CFLAGS="$MONO_MODULE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= \$MONO_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "mono >= $MONO_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_MONO_MODULE_CFLAGS=`$PKG_CONFIG --cflags "mono >= $MONO_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$MONO_MODULE_LIBS"; then + pkg_cv_MONO_MODULE_LIBS="$MONO_MODULE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mono >= \$MONO_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "mono >= $MONO_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_MONO_MODULE_LIBS=`$PKG_CONFIG --libs "mono >= $MONO_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "mono >= $MONO_MIN_VERSION" 2>&1` + else + MONO_MODULE_PKG_ERRORS=`$PKG_CONFIG --print-errors "mono >= $MONO_MIN_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$MONO_MODULE_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + found_mono="no" +elif test $pkg_failed = untried; then + found_mono="no" +else + MONO_MODULE_CFLAGS=$pkg_cv_MONO_MODULE_CFLAGS + MONO_MODULE_LIBS=$pkg_cv_MONO_MODULE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + found_mono="yes" +fi + if test "x$found_mono" = "xno"; then + if test "X$with_mono" = "Xyes"; then + as_fn_error "You need to install mono" "$LINENO" 5 + else + mono_detected=no + fi + fi + + + + + # Extract the first word of "gmcs", so it can be a program name with args. +set dummy gmcs; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MCS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MCS in + [\\/]* | ?:[\\/]*) + ac_cv_path_MCS="$MCS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_MCS" && ac_cv_path_MCS="no" + ;; +esac +fi +MCS=$ac_cv_path_MCS +if test -n "$MCS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5 +$as_echo "$MCS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + if test "x$MCS" = "xno"; then + if test "X$with_mono" = "Xyes"; then + as_fn_error "You need to install 'gmcs'" "$LINENO" 5 + else + mono_detected=no + fi + fi + + + + + + # Extract the first word of "mono", so it can be a program name with args. +set dummy mono; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MONO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MONO in + [\\/]* | ?:[\\/]*) + ac_cv_path_MONO="$MONO" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MONO="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_MONO" && ac_cv_path_MONO="no" + ;; +esac +fi +MONO=$ac_cv_path_MONO +if test -n "$MONO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MONO" >&5 +$as_echo "$MONO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + if test "x$MONO" = "xno"; then + if test "X$with_mono" = "Xyes"; then + as_fn_error "You need to install 'mono'" "$LINENO" 5 + else + mono_detected=no + fi + fi + + + + found_gtksharp="yes" + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDKSHARP" >&5 +$as_echo_n "checking for GDKSHARP... " >&6; } + +if test -n "$GDKSHARP_CFLAGS"; then + pkg_cv_GDKSHARP_CFLAGS="$GDKSHARP_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTK_SHARP_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GDKSHARP_CFLAGS=`$PKG_CONFIG --cflags "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GDKSHARP_LIBS"; then + pkg_cv_GDKSHARP_LIBS="$GDKSHARP_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-sharp-2.0 >= \$GTK_SHARP_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GDKSHARP_LIBS=`$PKG_CONFIG --libs "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GDKSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>&1` + else + GDKSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GDKSHARP_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + found_gtksharp="no" +elif test $pkg_failed = untried; then + found_gtksharp="no" +else + GDKSHARP_CFLAGS=$pkg_cv_GDKSHARP_CFLAGS + GDKSHARP_LIBS=$pkg_cv_GDKSHARP_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIBSHARP" >&5 +$as_echo_n "checking for GLIBSHARP... " >&6; } + +if test -n "$GLIBSHARP_CFLAGS"; then + pkg_cv_GLIBSHARP_CFLAGS="$GLIBSHARP_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTK_SHARP_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIBSHARP_CFLAGS=`$PKG_CONFIG --cflags "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GLIBSHARP_LIBS"; then + pkg_cv_GLIBSHARP_LIBS="$GLIBSHARP_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-sharp-2.0 >= \$GTK_SHARP_MIN_VERSION\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIBSHARP_LIBS=`$PKG_CONFIG --libs "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>&1` + else + GLIBSHARP_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GLIBSHARP_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + found_gtksharp="no" +elif test $pkg_failed = untried; then + found_gtksharp="no" +else + GLIBSHARP_CFLAGS=$pkg_cv_GLIBSHARP_CFLAGS + GLIBSHARP_LIBS=$pkg_cv_GLIBSHARP_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + + if test "X$found_gtksharp" != "Xyes"; then + if test "X$with_mono" = "Xyes"; then + as_fn_error "You need to install gtk-sharp" "$LINENO" 5 + else + mono_detected=no + fi + fi + + if test "X$mono_detected" = "Xno"; then + with_mono="no" + else + with_mono="yes" + fi + fi + if test x$with_mono = xyes; then + HAVE_MONO_TRUE= + HAVE_MONO_FALSE='#' +else + HAVE_MONO_TRUE='#' + HAVE_MONO_FALSE= +fi + + + # Check whether --enable-more-warnings was given. if test "${enable_more_warnings+set}" = set; then : @@ -19017,7 +19437,7 @@ AM_BACKSLASH='\' -ac_config_files="$ac_config_files Makefile bindings/Makefile bindings/python/gpod.i bindings/python/Makefile bindings/python/examples/Makefile bindings/python/tests/Makefile docs/Makefile docs/reference/Makefile docs/reference/version.xml m4/Makefile po/Makefile.in src/Makefile tools/Makefile tests/Makefile libgpod-1.0.pc tools/90-libgpod.rules" +ac_config_files="$ac_config_files Makefile bindings/Makefile bindings/mono/Makefile bindings/mono/libgpod-sharp/libgpod-sharp.pc bindings/mono/libgpod-sharp/Makefile bindings/mono/libgpod-sharp-test/Makefile bindings/mono/libgpod-sharp-test/libgpod-sharp-test bindings/python/gpod.i bindings/python/Makefile bindings/python/examples/Makefile bindings/python/tests/Makefile docs/Makefile docs/reference/Makefile docs/reference/version.xml m4/Makefile po/Makefile.in src/Makefile tools/Makefile tests/Makefile libgpod-1.0.pc tools/90-libgpod.rules" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -19216,6 +19636,10 @@ as_fn_error "conditional \"HAVE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_MONO_TRUE}" && test -z "${HAVE_MONO_FALSE}"; then + as_fn_error "conditional \"HAVE_MONO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 @@ -20171,6 +20595,11 @@ "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "bindings/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/Makefile" ;; + "bindings/mono/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/mono/Makefile" ;; + "bindings/mono/libgpod-sharp/libgpod-sharp.pc") CONFIG_FILES="$CONFIG_FILES bindings/mono/libgpod-sharp/libgpod-sharp.pc" ;; + "bindings/mono/libgpod-sharp/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/mono/libgpod-sharp/Makefile" ;; + "bindings/mono/libgpod-sharp-test/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/mono/libgpod-sharp-test/Makefile" ;; + "bindings/mono/libgpod-sharp-test/libgpod-sharp-test") CONFIG_FILES="$CONFIG_FILES bindings/mono/libgpod-sharp-test/libgpod-sharp-test" ;; "bindings/python/gpod.i") CONFIG_FILES="$CONFIG_FILES bindings/python/gpod.i" ;; "bindings/python/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/Makefile" ;; "bindings/python/examples/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/examples/Makefile" ;; @@ -21739,6 +22168,7 @@ Compiler .................: $CC $CFLAGS $LIBGPOD_CFLAGS Linker ...................: $CC $LDFLAGS $LIBS $LIBGPOD_LIBS Artwork support ..........: $have_gdkpixbuf + Mono bindings ............: $with_mono Python bindings ..........: $with_python PyGObject support ........: $have_pygobject iPhone/iPod Touch support.: $enable_libimobiledevice diff -Nru libgpod-0.7.93/configure.ac libgpod-0.7.94/configure.ac --- libgpod-0.7.93/configure.ac 2010-04-06 21:47:01.000000000 +0100 +++ libgpod-0.7.94/configure.ac 2010-08-31 22:10:09.000000000 +0100 @@ -12,7 +12,7 @@ # LIBGPOD_MAJOR_VERSION=0 LIBGPOD_MINOR_VERSION=7 -LIBGPOD_MICRO_VERSION=93 +LIBGPOD_MICRO_VERSION=94 # If you need a modifier for the version number. # Normally empty, but can be used to make "fixup" releases. LIBGPOD_EXTRAVERSION= @@ -25,7 +25,7 @@ # changes to the signature and the semantic) # ? :+1 : ? == just internal changes # CURRENT : REVISION : AGE -LIBGPOD_SO_VERSION=6:0:2 +LIBGPOD_SO_VERSION=6:1:2 AC_SUBST(LIBGPOD_SO_VERSION) AC_SUBST(LIBGPOD_MAJOR_VERSION) @@ -209,7 +209,7 @@ dnl *********************************************************************** temp_mount_dir="/tmp/" -AC_ARG_WITH(temp_mount_dir, AC_HELP_STRING([--with-mount-dir=DIR], +AC_ARG_WITH(temp_mount_dir, AC_HELP_STRING([--with-temp-mount-dir=DIR], [Directory where HAL/udev will create a sub-directory to mount iPods]),, with_temp_mount_dir="$temp_mount_dir") TMPMOUNTDIR="$with_temp_mount_dir" @@ -323,6 +323,13 @@ SWIG_MIN_VERSION=1.3.24 LIBGPOD_CHECK_PYTHON($PYTHON_MIN_VERSION) +dnl ************************************************** +dnl * optional mono bindings +dnl ************************************************** + +MONO_MIN_VERSION=1.9.1 +GTK_SHARP_MIN_VERSION=2.12 +LIBGPOD_CHECK_MONO dnl warnings bits, copied from gnome-keyring configure.in dnl Turn on the additional warnings last, so -Werror doesn't affect other tests. @@ -377,6 +384,11 @@ AC_CONFIG_FILES([ Makefile bindings/Makefile +bindings/mono/Makefile +bindings/mono/libgpod-sharp/libgpod-sharp.pc +bindings/mono/libgpod-sharp/Makefile +bindings/mono/libgpod-sharp-test/Makefile +bindings/mono/libgpod-sharp-test/libgpod-sharp-test bindings/python/gpod.i bindings/python/Makefile bindings/python/examples/Makefile @@ -404,6 +416,7 @@ Compiler .................: $CC $CFLAGS $LIBGPOD_CFLAGS Linker ...................: $CC $LDFLAGS $LIBS $LIBGPOD_LIBS Artwork support ..........: $have_gdkpixbuf + Mono bindings ............: $with_mono Python bindings ..........: $with_python PyGObject support ........: $have_pygobject iPhone/iPod Touch support.: $enable_libimobiledevice diff -Nru libgpod-0.7.93/debian/changelog libgpod-0.7.94/debian/changelog --- libgpod-0.7.93/debian/changelog 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/changelog 2010-09-05 00:48:27.000000000 +0100 @@ -1,8 +1,63 @@ -libgpod (0.7.93-0ubuntu2) maverick; urgency=low +libgpod (0.7.94-0ubuntu1~ppa1) maverick; urgency=low - * No-change rebuild against libimobiledevice1. + * New upstream release (LP: #630085) + - Shuffle 3g and 4g support (Adam Broschinski) + - CLI bindings (Nathaniel McCallum, Alan McGovern, Bertrand Lorentz) + - artwork fixes (Nikias Bassen) + - various bug fixes (Todd Zullinger, Olivier Crête, Cédric Bellegarde, Alex + Mauer, Christophe Fergeau) + * debian/control: + - Add new binary for CLI bindings. + - Build-depends on mono-devel (>= 1.9.1), libgtk2.0-cil-dev (>= 2.12) and + cli-common-dev for CLI bindings. + * debian/libgpod4-cil + - Install CLI bindings. + * debian/rules: + - Use CLI commands to install CLI bindings. + * debian/copyright: + - Update Copyright holders. + + -- Julien Lavergne Sun, 05 Sep 2010 01:29:13 +0200 + +libgpod (0.7.93-0.3) unstable; urgency=low + + * NMU + * debian/rules + - fix FTBFS, really (Closes: #591254) + + -- Hideki Yamane Fri, 13 Aug 2010 10:54:24 +0900 + +libgpod (0.7.93-0.2) unstable; urgency=high + + * NMU, again. + * debian/rules + - deal with kfreebsd FTBFS + Thanks to Petr Salinger + + -- Hideki Yamane Wed, 11 Aug 2010 07:46:28 +0900 + +libgpod (0.7.93-0.1) unstable; urgency=low + + * Non-maintainer upload, also new upstream release, merged from Ubuntu + (Closes: #458128, #509672, #571172, #573017, #582583, #589354) + * "Memory leak in python-gpod" was fixed (Closes: #425583) + see http://sourceforge.net/tracker/index.php?func=detail&aid=1723660&group_id=67873&atid=519273 + * Confirm it fixes artwork support on ipod touch (Closes: #460593, #549490) + * debian/control + - Update Homepage field (Closes: #563143) + - Bump up to "Standards-Version: 3.9.1" + - add "Build-Depends: chrpath" to avoid rpath issue. + * debian/python-gpod.docs + - include bindings/python README file (Closes: #563148) + * debian/copyright + - remove mentions to tests/test-checksum.c and src/itdb_sha1.c, those are + already removed from source. + - update license information to tests/test-write-covers.c and + tests/test-covers.c. Thanks for lintian. + * debian/rules + - eliminate rpath lintian errors by using chrpath. - -- Martin Pitt Wed, 04 Aug 2010 22:10:57 +0200 + -- Hideki Yamane Sun, 01 Aug 2010 05:40:29 +0900 libgpod (0.7.93-0ubuntu1) lucid; urgency=low diff -Nru libgpod-0.7.93/debian/control libgpod-0.7.94/debian/control --- libgpod-0.7.93/debian/control 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/control 2010-09-05 00:48:27.000000000 +0100 @@ -4,13 +4,15 @@ Maintainer: Ubuntu Desktop Team XSBC-Original-Maintainer: gtkpod Maintainers Uploaders: Frank Lichtenheld -Build-Depends: debhelper (>= 6.07), autotools-dev, dpatch, intltool, pkg-config, - libglib2.0-dev (>= 2.16), libgtk2.0-dev, libxml2-dev, - libsgutils2-dev, libsqlite3-dev, libplist-dev, libusb-1.0-0-dev, libimobiledevice-dev, zlib1g-dev, - swig, python (>= 2.3.5-7), python-all-dev, python-central (>= 0.5), python-mutagen, python-gobject-dev, - xsltproc, docbook-xml, gtk-doc-tools, -Homepage: http://www.gtkpod.org/libgpod.html -Standards-Version: 3.8.3 +Build-Depends: debhelper (>= 7.0.50~), autotools-dev, dpatch, intltool, + pkg-config, libglib2.0-dev (>= 2.16), libgtk2.0-dev, libxml2-dev, + libsgutils2-dev, libsqlite3-dev, libplist-dev, libusb-1.0-0-dev, + libimobiledevice-dev, zlib1g-dev, swig, python (>= 2.3.5-7), python-all-dev, + python-central (>= 0.5), python-mutagen, python-gobject-dev, xsltproc, + docbook-xml, gtk-doc-tools, chrpath, + mono-devel (>= 1.9.1), libgtk2.0-cil-dev (>= 2.12), cli-common-dev +Homepage: http://www.gtkpod.org/libgpod/ +Standards-Version: 3.9.1 XS-Python-Version: all Vcs-Svn: svn://svn.debian.org/svn/pkg-gtkpod/libgpod/trunk/ Vcs-Browser: http://svn.debian.org/wsvn/pkg-gtkpod/libgpod/trunk/ @@ -19,7 +21,7 @@ Section: libdevel Priority: extra Architecture: any -Depends: libgpod4-nogtk (= ${binary:Version}), libglib2.0-dev +Depends: libgpod4-nogtk (= ${binary:Version}), libglib2.0-dev, ${misc:Depends} Suggests: libgpod-doc Conflicts: libgpod-dev Description: development files for libgpod (version without artwork support) @@ -49,7 +51,7 @@ Package: libgpod-dev Section: libdevel Architecture: any -Depends: libgpod4 (= ${binary:Version}), libgtk2.0-dev, libglib2.0-dev +Depends: libgpod4 (= ${binary:Version}), libgtk2.0-dev, libglib2.0-dev, ${misc:Depends} Suggests: libgpod-doc Conflicts: libgpod-nogtk-dev Description: development files for libgpod @@ -110,3 +112,13 @@ stored on an iPod, to modify them and to save them back to the iPod. . This package contains the Python bindings for the library. + +Package: libgpod4-cil +Architecture: any +Depends: libgpod4 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, ${cli:Depends} +Description: CLI bindings for libgpod + libgpod is a library meant to abstract access to an iPod's content. It + provides an easy to use API to retrieve the list of files and playlist + stored on an iPod, to modify them and to save them back to the iPod + . + This package contains the CLI bindings for the library. diff -Nru libgpod-0.7.93/debian/copyright libgpod-0.7.94/debian/copyright --- libgpod-0.7.93/debian/copyright 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/copyright 2010-09-05 00:48:27.000000000 +0100 @@ -33,6 +33,8 @@ Copyright (C) 2007-2008 Daniele Forsi (po/it.po) Copyright (C) 2004-2008 Stefan Asserhäll +Copyright (c) 2010 Nathaniel McCallum + (bindings/mono/) License: @@ -51,13 +53,37 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU Lesser General -Public License can be found in `/usr/share/common-licenses/LGPL'. +Public License can be found in `/usr/share/common-licenses/LGPL-2.1'. -tests/test-checksum.c, tests/test-covers.c, tests/test-write-covers.c, -src/itdb_sha1.c: - 3-clause BSD license, see /usr/share/common-licenses/BSD +/* Copyright (c) 2005, Christophe Fergeau + * All rights reserved. + + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ tests/test-rebuild-db.cc: * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -95,7 +121,7 @@ | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA On Debian systems, the complete text of the GNU General -Public License can be found in `/usr/share/common-licenses/GPL'. +Public License can be found in `/usr/share/common-licenses/GPL-2'. src/gchecksum.c (Parts): /* This MD5 digest computation is based on the equivalent code diff -Nru libgpod-0.7.93/debian/libgpod4-cli.install libgpod-0.7.94/debian/libgpod4-cli.install --- libgpod-0.7.93/debian/libgpod4-cli.install 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/debian/libgpod4-cli.install 2010-09-05 00:48:27.000000000 +0100 @@ -0,0 +1 @@ +debian/tmp/usr/lib/libgpod/* /usr/lib/cli/libgpod-sharp/ diff -Nru libgpod-0.7.93/debian/libgpod-common.install libgpod-0.7.94/debian/libgpod-common.install --- libgpod-0.7.93/debian/libgpod-common.install 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/libgpod-common.install 2010-09-05 00:48:27.000000000 +0100 @@ -1,3 +1,2 @@ debian/tmp/usr/share/locale -debian/tmp/lib/udev debian/tmp/usr/bin diff -Nru libgpod-0.7.93/debian/non-udev.rules libgpod-0.7.94/debian/non-udev.rules --- libgpod-0.7.93/debian/non-udev.rules 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/debian/non-udev.rules 2010-09-05 00:48:27.000000000 +0100 @@ -0,0 +1,128 @@ +#!/usr/bin/make -f + + +SONAME=4 +VERSION= + +include /usr/share/dpatch/dpatch.make + +DEB_CONFIGURE_SCRIPT_ENV += LDFLAGS="-Wl,-O1 -Wl,--as-needed" + +export DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) +export DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +export DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +# FOR AUTOCONF 2.52 AND NEWER ONLY +ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE)) + confflags += --build $(DEB_HOST_GNU_TYPE) +else + confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) +endif + +DEB_CONFIGURE_INVOKE=$(CURDIR)/configure $(confflags) --prefix=/usr --includedir="\$${prefix}/include" --mandir="\$${prefix}/share/man" --infodir="\$${prefix}/share/info" --sysconfdir=/etc --localstatedir=/var --libexecdir="\$${prefix}/lib/libgpod" --disable-maintainer-mode --disable-dependency-tracking --srcdir=$(CURDIR) --enable-udev --without-hal + +build/libgpod$(SONAME)/config.status: + cp -f /usr/share/misc/config.sub config.sub + cp -f /usr/share/misc/config.guess config.guess + mkdir -p $(dir $@) + cd $(dir $@) && $(DEB_CONFIGURE_SCRIPT_ENV) $(DEB_CONFIGURE_INVOKE) --with-python=no --enable-gtk-doc $(DEB_CONFIGURE_EXTRA_FLAGS) + +build/libgpod$(SONAME)-nogtk/config.status: + cp -f /usr/share/misc/config.sub config.sub + cp -f /usr/share/misc/config.guess config.guess + mkdir -p $(dir $@) + cd $(dir $@) && $(DEB_CONFIGURE_SCRIPT_ENV) $(DEB_CONFIGURE_INVOKE) --with-python=no --disable-gdk-pixbuf $(DEB_CONFIGURE_EXTRA_FLAGS) + +configure-stamp: patch-stamp build/libgpod$(SONAME)/config.status build/libgpod$(SONAME)-nogtk/config.status + touch $@ + + +build/libgpod$(SONAME)/build-stamp build/libgpod$(SONAME)-nogtk/build-stamp: configure-stamp + cd $(dir $@) && $(MAKE) + +build-stamp: build/libgpod$(SONAME)/build-stamp build/libgpod$(SONAME)-nogtk/build-stamp + touch $@ + +build: build-stamp + + +build/libgpod$(SONAME)/install-stamp build/libgpod$(SONAME)-nogtk/install-stamp: + cd $(dir $@) && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp$(subst build/libgpod$(SONAME),,$(dir $@)) \ + && chrpath -d $(CURDIR)/debian/tmp$(subst build/libgpod$(SONAME),,$(dir $@))/usr/lib/libgpod.so.* + + +build/python-gpod: + PYVERS=$$(pyversions -v -r ./debian/control) ; \ + cd build/libgpod$(SONAME) && for PYVER in $$PYVERS; do \ + export PYTHON=python$$PYVER ; $(DEB_CONFIGURE_SCRIPT_ENV) $(DEB_CONFIGURE_INVOKE) --with-python=yes $(DEB_CONFIGURE_EXTRA_FLAGS) && \ + cd bindings/python && \ + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp && \ + cd ../.. ; \ + done + chrpath -d $(CURDIR)/debian/tmp/usr/lib/python2.5/site-packages/gpod/_gpod.so + chrpath -d $(CURDIR)/debian/tmp/usr/lib/python2.6/dist-packages/gpod/_gpod.so + touch $@ + +install-stamp: build/libgpod$(SONAME)/install-stamp build/libgpod$(SONAME)-nogtk/install-stamp build/python-gpod + chrpath -d debian/tmp/usr/bin/ipod-read-sysinfo-extended + chrpath -d debian/tmp/lib/udev/*-info + touch $@ + +clean: unpatch + rm -f configure-stamp build-stamp install-stamp + rm -rf build + dh_clean + rm -rf debian/tmp-nogtk + rm -f debian/libgpod-nogtk-dev.install debian/libgpod$(SONAME)-nogtk.install + +binary-arch: build-stamp install-stamp + dh_testdir + dh_testroot + dh_installchangelogs -a -Nlibgpod-dev -Nlibgpod-nogtk-dev ChangeLog + dh_installdocs -a -Nlibgpod-dev -Nlibgpod-nogtk-dev + dh_installexamples -a + sed 's#debian/tmp/##' debian/libgpod$(SONAME).install > debian/libgpod$(SONAME)-nogtk.install + sed 's#debian/tmp/##' debian/libgpod-dev.install > debian/libgpod-nogtk-dev.install + dh_install -a -Nlibgpod-common -Nlibgpod$(SONAME)-nogtk -Nlibgpod-nogtk-dev + chrpath -d build/libgpod$(SONAME)/tools/ipod-time-sync && \ + install build/libgpod$(SONAME)/tools/ipod-time-sync debian/tmp/usr/bin/ipod-time-sync + dh_install -plibgpod-common --autodest debian/tmp/lib/udev + dh_install -plibgpod$(SONAME)-nogtk -plibgpod-nogtk-dev --sourcedir=debian/tmp-nogtk + dh_lintian -a + dh_pycentral -ppython-gpod + dh_link -a + dh_strip -a + dh_compress -a + dh_fixperms -a + dpkg-gensymbols -c4 -Pdebian/libgpod$(SONAME)-nogtk -plibgpod$(SONAME)-nogtk + dpkg-gensymbols -c4 -Pdebian/libgpod$(SONAME) -plibgpod$(SONAME) + dh_makeshlibs -plibgpod$(SONAME) -V 'libgpod$(SONAME)$(VERSION)' + dh_makeshlibs -plibgpod$(SONAME)-nogtk -V 'libgpod$(SONAME)-nogtk$(VERSION) | libgpod$(SONAME)$(VERSION)' + dh_shlibdeps -a -Llibgpod$(SONAME)-nogtk + dh_installdeb -a + dh_gencontrol -a + dh_md5sums -a + dh_builddeb -a + +binary-indep: build-stamp install-stamp + dh_testdir + dh_testroot + dh_installchangelogs -i ChangeLog + dh_installdocs -i + dh_installexamples -i + dh_install -i + dh_lintian -i + dh_link -i + dh_compress -i + dh_fixperms -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + + +binary: binary-arch binary-indep + + +.PHONY: build binary-arch binary-indep binary + diff -Nru libgpod-0.7.93/debian/patches/00list libgpod-0.7.94/debian/patches/00list --- libgpod-0.7.93/debian/patches/00list 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/patches/00list 2010-09-05 00:48:27.000000000 +0100 @@ -1,3 +1,4 @@ +10_kfreebsd.dpatch 25_xsltproc-nonet 90_speed_itdb_resolve.dpatch diff -Nru libgpod-0.7.93/debian/patches/10_kfreebsd.dpatch libgpod-0.7.94/debian/patches/10_kfreebsd.dpatch --- libgpod-0.7.93/debian/patches/10_kfreebsd.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/debian/patches/10_kfreebsd.dpatch 2010-09-05 00:48:27.000000000 +0100 @@ -0,0 +1,29 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 10_kfreebsd.dpatch by Hideki Yamane +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: fix FTBSD on kfreeBSD, see Bug#591254 + +@DPATCH@ +ddiff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' libgpod-0.7.93~/tools/generic-callout.c libgpod-0.7.93/tools/generic-callout.c +--- libgpod-0.7.93~/tools/generic-callout.c 2010-04-07 03:41:45.000000000 +0900 ++++ libgpod-0.7.93/tools/generic-callout.c 2010-08-11 07:29:32.000000000 +0900 +@@ -569,6 +569,7 @@ + + static char *mount_ipod (const char *dev_path, const char *fstype) + { ++#ifdef __linux__ + char *filename; + char *tmpname; + int result; +@@ -591,6 +592,10 @@ + } + + return tmpname; ++#else ++#warning mount wrapper for your OS is missing ++ return NULL; ++#endif + } + + static gboolean write_sysinfo_extended (const char *mountpoint, diff -Nru libgpod-0.7.93/debian/python-gpod.docs libgpod-0.7.94/debian/python-gpod.docs --- libgpod-0.7.93/debian/python-gpod.docs 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/debian/python-gpod.docs 2010-09-05 00:48:27.000000000 +0100 @@ -0,0 +1 @@ +bindings/python/README diff -Nru libgpod-0.7.93/debian/rules libgpod-0.7.94/debian/rules --- libgpod-0.7.93/debian/rules 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/rules 2010-09-05 00:48:27.000000000 +0100 @@ -19,7 +19,20 @@ confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) endif -DEB_CONFIGURE_INVOKE=$(CURDIR)/configure $(confflags) --prefix=/usr --includedir="\$${prefix}/include" --mandir="\$${prefix}/share/man" --infodir="\$${prefix}/share/info" --sysconfdir=/etc --localstatedir=/var --libexecdir="\$${prefix}/lib/libgpod" --disable-maintainer-mode --disable-dependency-tracking --srcdir=$(CURDIR) --enable-udev --without-hal + with_hal = no + confflags += --without-hal --enable-udev + + +DEB_CONFIGURE_INVOKE=$(CURDIR)/configure $(confflags) \ + --prefix=/usr \ + --includedir="\$${prefix}/include" \ + --mandir="\$${prefix}/share/man" \ + --infodir="\$${prefix}/share/info" \ + --sysconfdir=/etc --localstatedir=/var \ + --libexecdir="\$${prefix}/lib/libgpod" \ + --disable-maintainer-mode \ + --disable-dependency-tracking \ + --srcdir=$(CURDIR) build/libgpod$(SONAME)/config.status: cp -f /usr/share/misc/config.sub config.sub @@ -47,7 +60,8 @@ build/libgpod$(SONAME)/install-stamp build/libgpod$(SONAME)-nogtk/install-stamp: - cd $(dir $@) && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp$(subst build/libgpod$(SONAME),,$(dir $@)) + cd $(dir $@) && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp$(subst build/libgpod$(SONAME),,$(dir $@)) + build/python-gpod: PYVERS=$$(pyversions -v -r ./debian/control) ; \ @@ -60,6 +74,8 @@ touch $@ install-stamp: build/libgpod$(SONAME)/install-stamp build/libgpod$(SONAME)-nogtk/install-stamp build/python-gpod + chrpath -d debian/tmp/usr/bin/ipod-read-sysinfo-extended + chrpath -d debian/tmp/lib/udev/*-info touch $@ clean: unpatch @@ -79,8 +95,14 @@ sed 's#debian/tmp/##' debian/libgpod-dev.install > debian/libgpod-nogtk-dev.install dh_install -a -Nlibgpod-common -Nlibgpod$(SONAME)-nogtk -Nlibgpod-nogtk-dev install build/libgpod$(SONAME)/tools/ipod-time-sync debian/tmp/usr/bin/ipod-time-sync - dh_install -plibgpod-common --autodest debian/tmp/lib/udev + dh_install -plibgpod-common --autodest debian/tmp/lib/udev dh_install -plibgpod$(SONAME)-nogtk -plibgpod-nogtk-dev --sourcedir=debian/tmp-nogtk + #CLI specific commands + dh_install -plibgpod$(SONAME)-cli + dh_clistrip -plibgpod$(SONAME)-cli + dh_clifixperms -plibgpod$(SONAME)-cli + dh_makeclilibs -V -plibgpod$(SONAME)-cli + dh_installcligac -plibgpod$(SONAME)-cli dh_lintian -a dh_pycentral -ppython-gpod dh_link -a diff -Nru libgpod-0.7.93/debian/symbols.common libgpod-0.7.94/debian/symbols.common --- libgpod-0.7.93/debian/symbols.common 2010-09-05 00:48:26.000000000 +0100 +++ libgpod-0.7.94/debian/symbols.common 2010-09-05 00:48:27.000000000 +0100 @@ -15,6 +15,7 @@ itdb_chapterdata_new@Base 0.7.0 itdb_chapterdata_remove_chapter@Base 0.7.0 itdb_chapterdata_remove_chapters@Base 0.7.0 + itdb_chapterdata_unlink_chapter@Base 0.7.94 itdb_cp@Base 0.6.0 itdb_cp_finalize@Base 0.6.0 itdb_cp_get_dest_filename@Base 0.6.0 @@ -69,10 +70,14 @@ itdb_photodb_create@Base 0.6.0 itdb_photodb_free@Base 0.6.0 itdb_photodb_parse@Base 0.6.0 + itdb_photodb_photoalbum_add@Base 0.7.94 itdb_photodb_photoalbum_add_photo@Base 0.6.0 itdb_photodb_photoalbum_by_name@Base 0.6.0 itdb_photodb_photoalbum_create@Base 0.6.0 + itdb_photodb_photoalbum_free@Base 0.7.94 + itdb_photodb_photoalbum_new@Base 0.7.94 itdb_photodb_photoalbum_remove@Base 0.6.0 + itdb_photodb_photoalbum_unlink@Base 0.7.94 itdb_photodb_remove_photo@Base 0.6.0 itdb_photodb_write@Base 0.6.0 itdb_playlist_add@Base 0.6.0 @@ -85,6 +90,7 @@ itdb_playlist_duplicate@Base 0.6.0 itdb_playlist_exists@Base 0.6.0 itdb_playlist_free@Base 0.6.0 + itdb_playlist_is_audiobooks@Base 0.7.94 itdb_playlist_is_mpl@Base 0.6.0 itdb_playlist_is_podcasts@Base 0.6.0 itdb_playlist_move@Base 0.6.0 diff -Nru libgpod-0.7.93/docs/Makefile.in libgpod-0.7.94/docs/Makefile.in --- libgpod-0.7.93/docs/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/docs/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -40,8 +40,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -133,7 +133,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -181,8 +185,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -253,6 +261,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/docs/reference/html/ch01.html libgpod-0.7.94/docs/reference/html/ch01.html --- libgpod-0.7.93/docs/reference/html/ch01.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/ch01.html 2010-08-31 22:10:59.000000000 +0100 @@ -21,7 +21,7 @@

-iPod database components

+iPod database components
Tracks — Data structure to store metadata about an iPod track diff -Nru libgpod-0.7.93/docs/reference/html/index.html libgpod-0.7.94/docs/reference/html/index.html --- libgpod-0.7.93/docs/reference/html/index.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/index.html 2010-08-31 22:10:59.000000000 +0100 @@ -33,10 +33,10 @@   

-

for libgpod 0.7.92

+

for libgpod 0.7.93

-

Permission is granted to copy, distribute and/or modify +

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no diff -Nru libgpod-0.7.93/docs/reference/html/index.sgml libgpod-0.7.94/docs/reference/html/index.sgml --- libgpod-0.7.93/docs/reference/html/index.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/index.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -3,6 +3,7 @@ + @@ -31,6 +32,8 @@ + + @@ -50,6 +53,7 @@ + @@ -68,6 +72,7 @@ + @@ -80,6 +85,7 @@ + @@ -102,6 +108,7 @@ + @@ -317,6 +324,7 @@ + @@ -365,6 +373,7 @@ + @@ -430,6 +439,10 @@ + + + + diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Artwork.html libgpod-0.7.94/docs/reference/html/libgpod-Artwork.html --- libgpod-0.7.93/docs/reference/html/libgpod-Artwork.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Artwork.html 2010-08-31 22:10:59.000000000 +0100 @@ -41,34 +41,34 @@ Itdb_Artwork * itdb_artwork_new (void); Itdb_Artwork * itdb_artwork_duplicate (Itdb_Artwork *artwork); void itdb_artwork_free (Itdb_Artwork *artwork); -gpointer itdb_artwork_get_pixbuf (Itdb_Device *device, +gpointer itdb_artwork_get_pixbuf (Itdb_Device *device, Itdb_Artwork *artwork, - gint width, - gint height); -gboolean itdb_artwork_set_thumbnail (Itdb_Artwork *artwork, - const gchar *filename, - gint rotation, - GError **error); -gboolean itdb_artwork_set_thumbnail_from_data + gint width, + gint height); +gboolean itdb_artwork_set_thumbnail (Itdb_Artwork *artwork, + const gchar *filename, + gint rotation, + GError **error); +gboolean itdb_artwork_set_thumbnail_from_data (Itdb_Artwork *artwork, - const guchar *image_data, - gsize image_data_len, - gint rotation, - GError **error); -gboolean itdb_artwork_set_thumbnail_from_pixbuf + const guchar *image_data, + gsize image_data_len, + gint rotation, + GError **error); +gboolean itdb_artwork_set_thumbnail_from_pixbuf (Itdb_Artwork *artwork, - gpointer pixbuf, - gint rotation, - GError **error); + gpointer pixbuf, + gint rotation, + GError **error); void itdb_artwork_remove_thumbnails (Itdb_Artwork *artwork); Itdb_Thumb; Itdb_Thumb * itdb_thumb_duplicate (Itdb_Thumb *thumb); void itdb_thumb_free (Itdb_Thumb *thumb); -gpointer itdb_thumb_to_pixbuf_at_size (Itdb_Device *device, +gpointer itdb_thumb_to_pixbuf_at_size (Itdb_Device *device, Itdb_Thumb *thumb, - gint width, - gint height); -GList * itdb_thumb_to_pixbufs (Itdb_Device *device, + gint width, + gint height); +GList * itdb_thumb_to_pixbufs (Itdb_Device *device, Itdb_Thumb *thumb);

@@ -119,30 +119,30 @@ -

guint32 id;

+

guint32 id;

Artwork id used by photoalbums. This starts at 0x40 and is set automatically when the ArtworkDB or PhotoDB is written -

guint64 dbid;

+

guint64 dbid;

The dbid of associated track. Used internally by libgpod. -

gint32 unk028;

+

gint32 unk028;

Unknown -

guint32 rating;

+

guint32 rating;

Rating from iPhoto * 20 (PhotoDB only) -

gint32 unk036;

+

gint32 unk036;

Unknown @@ -158,38 +158,38 @@ -

guint32 artwork_size;

+

guint32 artwork_size;

Size in bytes of the original source image (PhotoDB only -- don't touch in case of ArtworkDB!) -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

gpointer reserved1;

+

gpointer reserved1;

Reserved for future use -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use -

guint64 usertype;

+

guint64 usertype;

For use by application -

gpointer userdata;

+

gpointer userdata;

For use by application @@ -271,12 +271,12 @@

itdb_artwork_get_pixbuf ()

-
gpointer            itdb_artwork_get_pixbuf             (Itdb_Device *device,
+
gpointer            itdb_artwork_get_pixbuf             (Itdb_Device *device,
                                                          Itdb_Artwork *artwork,
-                                                         gint width,
-                                                         gint height);
+ gint width, + gint height);

-Returns a GdkPixbuf representing the thumbnail stored in artwork +Returns a GdkPixbuf representing the thumbnail stored in artwork scaling it if appropriate. If either height or width is -1, then the biggest unscaled thumbnail available will be returned

@@ -308,7 +308,7 @@

Returns :

- a GdkPixbuf that must be unreffed when no longer used, NULL + a GdkPixbuf that must be unreffed when no longer used, NULL if no artwork could be found or if libgpod is compiled without GdkPixbuf support @@ -321,10 +321,10 @@

itdb_artwork_set_thumbnail ()

-
gboolean            itdb_artwork_set_thumbnail          (Itdb_Artwork *artwork,
-                                                         const gchar *filename,
-                                                         gint rotation,
-                                                         GError **error);
+
gboolean            itdb_artwork_set_thumbnail          (Itdb_Artwork *artwork,
+                                                         const gchar *filename,
+                                                         gint rotation,
+                                                         GError **error);

Appends a thumbnail of type type to existing thumbnails in artwork. No data is read from filename yet, the file will be when artwork is saved to @@ -332,8 +332,8 @@

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

@@ -356,7 +356,7 @@ - @@ -373,20 +373,20 @@

itdb_artwork_set_thumbnail_from_data ()

-
gboolean            itdb_artwork_set_thumbnail_from_data
+
gboolean            itdb_artwork_set_thumbnail_from_data
                                                         (Itdb_Artwork *artwork,
-                                                         const guchar *image_data,
-                                                         gsize image_data_len,
-                                                         gint rotation,
-                                                         GError **error);
+ const guchar *image_data, + gsize image_data_len, + gint rotation, + GError **error);

Set a thumbnail in artwork. No data is processed yet. This will be done when artwork is saved to disk.

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

error :

return location for a GError or NULL +return location for a GError or NULL
@@ -415,7 +415,7 @@ - @@ -432,11 +432,11 @@

itdb_artwork_set_thumbnail_from_pixbuf ()

-
gboolean            itdb_artwork_set_thumbnail_from_pixbuf
+
gboolean            itdb_artwork_set_thumbnail_from_pixbuf
                                                         (Itdb_Artwork *artwork,
-                                                         gpointer pixbuf,
-                                                         gint rotation,
-                                                         GError **error);
+ gpointer pixbuf, + gint rotation, + GError **error);

Set a thumbnail in artwork. No data is generated from pixbuf yet, it will be done when artwork is saved to disk. pixbuf is ref'ed by this function, @@ -444,8 +444,8 @@

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

error :

return location for a GError or NULL +return location for a GError or NULL
@@ -458,7 +458,7 @@ @@ -469,7 +469,7 @@ - @@ -521,7 +521,7 @@ - + @@ -575,19 +575,19 @@

itdb_thumb_to_pixbuf_at_size ()

-
gpointer            itdb_thumb_to_pixbuf_at_size        (Itdb_Device *device,
+
gpointer            itdb_thumb_to_pixbuf_at_size        (Itdb_Device *device,
                                                          Itdb_Thumb *thumb,
-                                                         gint width,
-                                                         gint height);
+ gint width, + gint height);

-Converts thumb to a GdkPixbuf. +Converts thumb to a GdkPixbuf.

Note

Since we want to have gdk-pixbuf dependency optional, a generic -gpointer is returned which you have to cast to a GdkPixbuf using +gpointer is returned which you have to cast to a GdkPixbuf using GDK_PIXBUF() yourself.

@@ -619,7 +619,7 @@

- - + - + - + - + @@ -122,13 +122,13 @@ - + - + @@ -183,7 +183,7 @@

itdb_device_set_mountpoint ()

void                itdb_device_set_mountpoint          (Itdb_Device *device,
-                                                         const gchar *mp);
+ const gchar *mp);

Sets the mountpoint of device to mp and update the cached device information (in particular, re-read the SysInfo file) @@ -220,7 +220,7 @@


itdb_device_supports_artwork ()

-
gboolean            itdb_device_supports_artwork        (const Itdb_Device *device);
+
gboolean            itdb_device_supports_artwork        (const Itdb_Device *device);

Indicates whether device can display artwork or not. When dealing with a non-art capable iPod, no artwork data will be written to the @@ -247,7 +247,7 @@


itdb_device_supports_chapter_image ()

-
gboolean            itdb_device_supports_chapter_image  (const Itdb_Device *device);
+
gboolean            itdb_device_supports_chapter_image  (const Itdb_Device *device);

Indicates whether device can display chapter images or not.

@@ -272,7 +272,7 @@

itdb_device_supports_photo ()

-
gboolean            itdb_device_supports_photo          (const Itdb_Device *device);
+
gboolean            itdb_device_supports_photo          (const Itdb_Device *device);

Indicates whether device can display photos or not.

@@ -297,7 +297,7 @@

itdb_device_supports_podcast ()

-
gboolean            itdb_device_supports_podcast        (const Itdb_Device *device);
+
gboolean            itdb_device_supports_podcast        (const Itdb_Device *device);

Indicates whether device can play podcasts or not.

@@ -322,7 +322,7 @@

itdb_device_supports_video ()

-
gboolean            itdb_device_supports_video          (const Itdb_Device *device);
+
gboolean            itdb_device_supports_video          (const Itdb_Device *device);

Indicates whether device can play videos or not.

@@ -367,7 +367,7 @@
- + - + - + - + - + - + @@ -500,7 +500,8 @@ ITDB_IPOD_GENERATION_CLASSIC_3, ITDB_IPOD_GENERATION_NANO_5, ITDB_IPOD_GENERATION_TOUCH_3, - ITDB_IPOD_GENERATION_IPAD_1 + ITDB_IPOD_GENERATION_IPAD_1, + ITDB_IPOD_GENERATION_IPHONE_4 } Itdb_IpodGeneration;

@@ -660,8 +661,11 @@

- + + + + +

pixbuf :

-GdkPixbuf to use to create the thumbnail +GdkPixbuf to use to create the thumbnail

error :

return location for a GError or NULL +return location for a GError or NULL

guint rotation;

guint rotation;

Angle by which the image is rotated counterclockwise

Returns :

a GdkPixbuf that must be unreffed with gdk_pixbuf_unref() + a GdkPixbuf that must be unreffed with gdk_pixbuf_unref() after use, or NULL if the creation of the gdk-pixbuf failed or if libgpod was compiled without gdk-pixbuf support. @@ -632,14 +632,14 @@

itdb_thumb_to_pixbufs ()

-
GList *             itdb_thumb_to_pixbufs               (Itdb_Device *device,
+
GList *             itdb_thumb_to_pixbufs               (Itdb_Device *device,
                                                          Itdb_Thumb *thumb);

-Converts thumb to a GList of GdkPixbuf. The returned GList will +Converts thumb to a GList of GdkPixbuf. The returned GList will generally contain only 1 element, the full-size pixbuf associated with thumb, but when the artwork has been read from the ipod and hasn't been -modified from the library, then the returned GList will contain several -GdkPixbuf corresponding to the various thumbnail sizes that were +modified from the library, then the returned GList will contain several +GdkPixbuf corresponding to the various thumbnail sizes that were written to the iPod database.

@@ -657,10 +657,10 @@ - diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Chapter-Data.html libgpod-0.7.94/docs/reference/html/libgpod-Chapter-Data.html --- libgpod-0.7.93/docs/reference/html/libgpod-Chapter-Data.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Chapter-Data.html 2010-08-31 22:10:59.000000000 +0100 @@ -43,13 +43,15 @@ Itdb_Chapter * itdb_chapter_duplicate (Itdb_Chapter *chapter); voiditdb_chapter_free (Itdb_Chapter *chapter); Itdb_Chapterdata * itdb_chapterdata_new (void); -gbooleanitdb_chapterdata_add_chapter (Itdb_Chapterdata *chapterdata, - guint32 startpos, - gchar *chaptertitle); +gbooleanitdb_chapterdata_add_chapter (Itdb_Chapterdata *chapterdata, + guint32 startpos, + gchar *chaptertitle); Itdb_Chapterdata * itdb_chapterdata_duplicate (Itdb_Chapterdata *chapterdata); voiditdb_chapterdata_remove_chapter (Itdb_Chapterdata *chapterdata, Itdb_Chapter *chapter); voiditdb_chapterdata_remove_chapters (Itdb_Chapterdata *chapterdata); +voiditdb_chapterdata_unlink_chapter (Itdb_Chapterdata *chapterdata, + Itdb_Chapter *chapter); voiditdb_chapterdata_free (Itdb_Chapterdata *chapterdata); @@ -81,33 +83,33 @@ - + - + - + - + - + - + @@ -137,42 +139,42 @@ - + - + - + - + - + - + - + - + @@ -264,9 +266,9 @@

itdb_chapterdata_add_chapter ()

-
gboolean            itdb_chapterdata_add_chapter        (Itdb_Chapterdata *chapterdata,
-                                                         guint32 startpos,
-                                                         gchar *chaptertitle);
+
gboolean            itdb_chapterdata_add_chapter        (Itdb_Chapterdata *chapterdata,
+                                                         guint32 startpos,
+                                                         gchar *chaptertitle);

Appends a chapter to existing chapters in chapterdata.

@@ -367,6 +369,29 @@

Since 0.7.0


+
+

itdb_chapterdata_unlink_chapter ()

+
void                itdb_chapterdata_unlink_chapter     (Itdb_Chapterdata *chapterdata,
+                                                         Itdb_Chapter *chapter);
+

+

+

Returns :

a GList of GdkPixbuf which are associated with thumb, NULL + a GList of GdkPixbuf which are associated with thumb, NULL if the pixbuf was invalid or if libgpod is compiled without gdk-pixbuf -support. The GdkPixbuf must be unreffed with gdk_pixbuf_unref() after use -and the GList must be freed with g_list_free(). +support. The GdkPixbuf must be unreffed with gdk_pixbuf_unref() after use +and the GList must be freed with g_list_free().

guint32 startpos;

guint32 startpos;

The start position of the chapter in ms. The first chapter begins at 1.

gchar *chaptertitle;

gchar *chaptertitle;

The chapter title in UTF8

gint32 reserved_int1;

gint32 reserved_int1;

Reserved for future use

gint32 reserved_int2;

gint32 reserved_int2;

Reserved for future use

gpointer reserved1;

gpointer reserved1;

Reserved for future use

gpointer reserved2;

gpointer reserved2;

Reserved for future use

GList *chapters;

GList *chapters;

A list of chapters (Itdb_Chapter)

guint32 unk024;

guint32 unk024;

Unknown

guint32 unk028;

guint32 unk028;

Unknown

guint32 unk032;

guint32 unk032;

Unknown

gint32 reserved_int1;

gint32 reserved_int1;

Reserved for future use

gint32 reserved_int2;

gint32 reserved_int2;

Reserved for future use

gpointer reserved1;

gpointer reserved1;

Reserved for future use

gpointer reserved2;

gpointer reserved2;

Reserved for future use
++ + + + + + + + + + +

chapterdata :

+

chapter :

+
+
+

itdb_chapterdata_free ()

void                itdb_chapterdata_free               (Itdb_Chapterdata *chapterdata);
diff -Nru libgpod-0.7.93/docs/reference/html/libgpod.devhelp libgpod-0.7.94/docs/reference/html/libgpod.devhelp --- libgpod-0.7.93/docs/reference/html/libgpod.devhelp 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod.devhelp 2010-08-31 22:10:59.000000000 +0100 @@ -22,6 +22,7 @@ + @@ -41,6 +42,8 @@ + + @@ -52,6 +55,7 @@ + @@ -66,6 +70,7 @@ + @@ -85,6 +90,7 @@ + @@ -158,6 +164,7 @@ + @@ -190,6 +197,10 @@ + + + + diff -Nru libgpod-0.7.93/docs/reference/html/libgpod.devhelp2 libgpod-0.7.94/docs/reference/html/libgpod.devhelp2 --- libgpod-0.7.93/docs/reference/html/libgpod.devhelp2 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod.devhelp2 2010-08-31 22:10:59.000000000 +0100 @@ -22,6 +22,7 @@ + @@ -41,6 +42,8 @@ + + @@ -52,6 +55,7 @@ + @@ -66,6 +70,7 @@ + @@ -85,6 +90,7 @@ + @@ -158,6 +164,7 @@ + @@ -190,6 +197,10 @@ + + + + @@ -210,6 +221,7 @@ + @@ -368,6 +380,7 @@ + diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Device.html libgpod-0.7.94/docs/reference/html/libgpod-Device.html --- libgpod-0.7.93/docs/reference/html/libgpod-Device.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Device.html 2010-08-31 22:10:59.000000000 +0100 @@ -41,30 +41,30 @@ Itdb_Device * itdb_device_new (void); void itdb_device_free (Itdb_Device *device); void itdb_device_set_mountpoint (Itdb_Device *device, - const gchar *mp); -gboolean itdb_device_supports_artwork (const Itdb_Device *device); -gboolean itdb_device_supports_chapter_image (const Itdb_Device *device); -gboolean itdb_device_supports_photo (const Itdb_Device *device); -gboolean itdb_device_supports_podcast (const Itdb_Device *device); -gboolean itdb_device_supports_video (const Itdb_Device *device); + const gchar *mp); +gboolean itdb_device_supports_artwork (const Itdb_Device *device); +gboolean itdb_device_supports_chapter_image (const Itdb_Device *device); +gboolean itdb_device_supports_photo (const Itdb_Device *device); +gboolean itdb_device_supports_podcast (const Itdb_Device *device); +gboolean itdb_device_supports_video (const Itdb_Device *device); Itdb_IpodInfo; const Itdb_IpodInfo * itdb_device_get_ipod_info (const Itdb_Device *device); const Itdb_IpodInfo * itdb_info_get_ipod_info_table (void); enum Itdb_IpodGeneration; -const gchar * itdb_info_get_ipod_generation_string +const gchar * itdb_info_get_ipod_generation_string (Itdb_IpodGeneration generation); enum Itdb_IpodModel; -const gchar * itdb_info_get_ipod_model_name_string +const gchar * itdb_info_get_ipod_model_name_string (Itdb_IpodModel model); Itdb_ArtworkFormat; -gboolean itdb_device_read_sysinfo (Itdb_Device *device); -gchar * itdb_device_get_sysinfo (const Itdb_Device *device, - const gchar *field); +gboolean itdb_device_read_sysinfo (Itdb_Device *device); +gchar * itdb_device_get_sysinfo (const Itdb_Device *device, + const gchar *field); void itdb_device_set_sysinfo (Itdb_Device *device, - const gchar *field, - const gchar *value); -gboolean itdb_device_write_sysinfo (Itdb_Device *device, - GError **error); + const gchar *field, + const gchar *value); +gboolean itdb_device_write_sysinfo (Itdb_Device *device, + GError **error);
@@ -95,23 +95,23 @@

gchar *mountpoint;

gchar *mountpoint;

The mountpoint of the iPod

gint musicdirs;

gint musicdirs;

The number of /iPod_Control/Music/F.. dirs

guint byte_order;

guint byte_order;

G_LITTLE_ENDIAN "regular" endianness G_BIG_ENDIAN "reversed" endianness (e.g. mobile phone iTunesDBs)

GHashTable *sysinfo;

GHashTable *sysinfo;

A hash with key/value pairs of all entries in Device/SysInfo

gboolean sysinfo_changed;

gboolean sysinfo_changed;

True if the sysinfo hash been changed by the user, false otherwise. (see itdb_set_sysinfo())

gint timezone_shift;

gint timezone_shift;

The difference in seconds between the current timezone and UTC

const gchar *model_number;

const gchar *model_number;

The model number. This is abbreviated. If the first character is not numeric, it is ommited. e.g. "MA350 -> A350", "M9829 -> 9829" @@ -389,7 +389,7 @@

const guint musicdirs;

const guint musicdirs;

The number of music (Fnn) dirs created by iTunes. The exact number seems to be version dependent. Therefore, the numbers here represent a mixture of reported values and @@ -399,22 +399,22 @@

const gint32 reserved_int1;

const gint32 reserved_int1;

Reserved for future use

const gint32 reserved_int2;

const gint32 reserved_int2;

Reserved for future use

gconstpointer reserved1;

gconstpointer reserved1;

Reserved for future use

gconstpointer reserved2;

gconstpointer reserved2;

Reserved for future use

ITDB_IPOD_GENERATION_IPAD_1

-

ITDB_IPOD_GENERATION_IPHONE_4

@@ -670,7 +674,7 @@

itdb_info_get_ipod_generation_string ()

-
const gchar *       itdb_info_get_ipod_generation_string
+
const gchar *       itdb_info_get_ipod_generation_string
                                                         (Itdb_IpodGeneration generation);

Return the iPod's generic generation name, like "First Generation", @@ -687,7 +691,7 @@

Returns :

a pointer to the generation name. This is a static -string and must not be g_free()d. +string and must not be g_free()d. @@ -952,18 +956,15 @@

ITDB_IPOD_MODEL_SHUFFLE_GOLD

- - +

ITDB_IPOD_MODEL_SHUFFLE_STAINLESS

- - +

ITDB_IPOD_MODEL_IPAD

- - +
@@ -972,7 +973,7 @@

itdb_info_get_ipod_model_name_string ()

-
const gchar *       itdb_info_get_ipod_model_name_string
+
const gchar *       itdb_info_get_ipod_model_name_string
                                                         (Itdb_IpodModel model);

Return the iPod's generic model name, like "Color", "Nano"... @@ -988,7 +989,7 @@

Returns :

a pointer to the model name. This is a static string -and must not be g_free()d. +and must not be g_free()d. @@ -1011,10 +1012,10 @@ gint display_width; gboolean interlaced; - gboolean align_row_bytes; gint color_adjustment; gdouble gamma; gint associated_format; + gint row_bytes_alignment; } Itdb_ArtworkFormat;

@@ -1026,17 +1027,17 @@ -

gint format_id;

+

gint format_id;

Unique ID for the format (generally a 4 digit int) -

gint width;

+

gint width;

Width of the thumbnail -

gint height;

+

gint height;

Height of the thumbnail @@ -1046,68 +1047,67 @@ -

gint32 padding;

+

gint32 padding;

Number of bytes of padding to add after the thumbnail (not found in SysInfoExtended -- added for compatibility with hardcoded artwork formats) -

gboolean crop;

+

gboolean crop;

Indicates if the thumbnail is to be cropped -

gint rotation;

+

gint rotation;

Degrees to rotate the thumbnail -

guchar back_color[4];

+

guchar back_color[4];

Background color for the thumbnail -

gint display_width;

+

gint display_width;

Width at which the thumbnail will be displayed (not currently used) -

gboolean interlaced;

+

gboolean interlaced;

If TRUE, the thumbnails are interlaced (not currently used) -

gboolean align_row_bytes;

-If TRUE, each pixel row must be aligned a 2-byte boundary - - - -

gint color_adjustment;

+

gint color_adjustment;

Color adjustment for the thumbnails (not currently used) -

gdouble gamma;

+

gdouble gamma;

Gamma value for the thumbails (not currently used) -

gint associated_format;

+

gint associated_format;

Unknown (not currently used) + +

gint row_bytes_alignment;

+ +

itdb_device_read_sysinfo ()

-
gboolean            itdb_device_read_sysinfo            (Itdb_Device *device);
+
gboolean            itdb_device_read_sysinfo            (Itdb_Device *device);

Reads the SysInfo file and stores information in device->sysinfo for later use. @@ -1145,8 +1145,8 @@


itdb_device_get_sysinfo ()

-
gchar *             itdb_device_get_sysinfo             (const Itdb_Device *device,
-                                                         const gchar *field);
+
gchar *             itdb_device_get_sysinfo             (const Itdb_Device *device,
+                                                         const gchar *field);

Retrieve specified field from the SysInfo file.

@@ -1166,7 +1166,7 @@

Returns :

the information associated with field, or NULL if field -couldn't be found. g_free() after use +couldn't be found. g_free() after use @@ -1178,8 +1178,8 @@

itdb_device_set_sysinfo ()

void                itdb_device_set_sysinfo             (Itdb_Device *device,
-                                                         const gchar *field,
-                                                         const gchar *value);
+ const gchar *field, + const gchar *value);

Set specified field. It can later be written to the iPod using itdb_device_write_sysinfo() @@ -1209,8 +1209,8 @@


itdb_device_write_sysinfo ()

-
gboolean            itdb_device_write_sysinfo           (Itdb_Device *device,
-                                                         GError **error);
+
gboolean            itdb_device_write_sysinfo           (Itdb_Device *device,
+                                                         GError **error);

Fills the SysInfo file with information in device->sysinfo. Note: no directories are created if not already existent. @@ -1225,7 +1225,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-File-handling-functions.html libgpod-0.7.94/docs/reference/html/libgpod-File-handling-functions.html --- libgpod-0.7.93/docs/reference/html/libgpod-File-handling-functions.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-File-handling-functions.html 2010-08-31 22:10:59.000000000 +0100 @@ -37,15 +37,17 @@

Synopsis

-
gboolean            itdb_cp_track_to_ipod               (Itdb_Track *track,
-                                                         const gchar *filename,
-                                                         GError **error);
-void                itdb_filename_fs2ipod               (gchar *filename);
-void                itdb_filename_ipod2fs               (gchar *ipod_file);
-gchar *             itdb_filename_on_ipod               (Itdb_Track *track);
-gint                itdb_musicdirs_number               (Itdb_iTunesDB *itdb);
-gboolean            itdb_rename_files                   (const gchar *mp,
-                                                         GError **error);
+
gboolean            itdb_cp_track_to_ipod               (Itdb_Track *track,
+                                                         const gchar *filename,
+                                                         GError **error);
+void                itdb_filename_fs2ipod               (gchar *filename);
+void                itdb_filename_ipod2fs               (gchar *ipod_file);
+gchar *             itdb_filename_on_ipod               (Itdb_Track *track);
+gint                itdb_musicdirs_number               (Itdb_iTunesDB *itdb);
+gboolean            itdb_rename_files                   (const gchar *mp,
+                                                         GError **error);
+gboolean            itdb_start_sync                     (Itdb_iTunesDB *itdb);
+gboolean            itdb_stop_sync                      (Itdb_iTunesDB *itdb);
 
@@ -59,9 +61,9 @@

Details

itdb_cp_track_to_ipod ()

-
gboolean            itdb_cp_track_to_ipod               (Itdb_Track *track,
-                                                         const gchar *filename,
-                                                         GError **error);
+
gboolean            itdb_cp_track_to_ipod               (Itdb_Track *track,
+                                                         const gchar *filename,
+                                                         GError **error);

Copy one track to the iPod. The PC filename is filename and is taken literally. @@ -106,7 +108,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL @@ -121,7 +123,7 @@

itdb_filename_fs2ipod ()

-
void                itdb_filename_fs2ipod               (gchar *filename);
+
void                itdb_filename_fs2ipod               (gchar *filename);

Convert string from casual PC file name to iPod iTunesDB format using ':' instead of G_DIR_SEPARATOR_S (i.e. slashes on Unix-like @@ -139,7 +141,7 @@


itdb_filename_ipod2fs ()

-
void                itdb_filename_ipod2fs               (gchar *ipod_file);
+
void                itdb_filename_ipod2fs               (gchar *ipod_file);

Convert string from from iPod iTunesDB format to casual PC file name using G_DIR_SEPARATOR (ie slashes on Unix-like systems) @@ -157,7 +159,7 @@


itdb_filename_on_ipod ()

-
gchar *             itdb_filename_on_ipod               (Itdb_Track *track);
+
gchar *             itdb_filename_on_ipod               (Itdb_Track *track);

Get the full iPod filename as stored in track.

@@ -191,7 +193,7 @@

Returns :

full filename to track on the iPod or NULL if no -filename is set in track. Must be freed with g_free() after use. +filename is set in track. Must be freed with g_free() after use. @@ -200,7 +202,7 @@

itdb_musicdirs_number ()

-
gint                itdb_musicdirs_number               (Itdb_iTunesDB *itdb);
+
gint                itdb_musicdirs_number               (Itdb_iTunesDB *itdb);

Determine the number of F.. directories in iPod_Control/Music.

@@ -230,8 +232,8 @@

itdb_rename_files ()

-
gboolean            itdb_rename_files                   (const gchar *mp,
-                                                         GError **error);
+
gboolean            itdb_rename_files                   (const gchar *mp,
+                                                         GError **error);

Renames/removes some files on the iPod (Playcounts, OTG semaphore). May have to be called if you write the iTunesDB not @@ -248,7 +250,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL @@ -259,6 +261,58 @@
+
+
+

itdb_start_sync ()

+
gboolean            itdb_start_sync                     (Itdb_iTunesDB *itdb);
+

+Hints libgpod that a series of file copies/database saves/... is about +to start. On regular iPods, this does nothing (but is safe to be used), +but on iPhones and iPod Touch this makes sure the "Sync in progress" screen +is shown for the whole duration of the writing process. +

+
++ + + + + + + + + + +

itdb :

the Itdb_iTunesDB that is being sync'ed +

Returns :

TRUE on success, FALSE on error +
+
+
+
+

itdb_stop_sync ()

+
gboolean            itdb_stop_sync                      (Itdb_iTunesDB *itdb);
+

+Hints libgpod that the series of file copies/database saves/... started +with itdb_start_sync is finished. On regular iPods, this does nothing +(but is safe to be used). On iPhones and iPod Touch this will hide the +"Sync in progress" screen. +

+
++ + + + + + + + + + +

itdb :

the Itdb_iTunesDB that is being sync'ed +

Returns :

TRUE on success, FALSE on error +
+

Synopsis

-
gchar *             itdb_get_control_dir                (const gchar *mountpoint);
-gchar *             itdb_get_itunes_dir                 (const gchar *mountpoint);
-gchar *             itdb_get_music_dir                  (const gchar *mountpoint);
-gchar *             itdb_get_artwork_dir                (const gchar *mountpoint);
-gchar *             itdb_get_device_dir                 (const gchar *mountpoint);
-gchar *             itdb_get_photos_dir                 (const gchar *mountpoint);
-gchar *             itdb_get_itunesdb_path              (const gchar *mountpoint);
-gchar *             itdb_get_itunessd_path              (const gchar *mountpoint);
-gchar *             itdb_get_artworkdb_path             (const gchar *mountpoint);
-gchar *             itdb_get_photodb_path               (const gchar *mountpoint);
-gchar *             itdb_get_photos_thumb_dir           (const gchar *mountpoint);
-gchar *             itdb_get_path                       (const gchar *dir,
-                                                         const gchar *file);
-gchar *             itdb_resolve_path                   (const gchar *root,
-                                                         const gchar * const *components);
-gboolean            itdb_cp                             (const gchar *from_file,
-                                                         const gchar *to_file,
-                                                         GError **error);
-gchar *             itdb_cp_get_dest_filename           (Itdb_Track *track,
-                                                         const gchar *mountpoint,
-                                                         const gchar *filename,
-                                                         GError **error);
+
gchar *             itdb_get_control_dir                (const gchar *mountpoint);
+gchar *             itdb_get_itunes_dir                 (const gchar *mountpoint);
+gchar *             itdb_get_music_dir                  (const gchar *mountpoint);
+gchar *             itdb_get_artwork_dir                (const gchar *mountpoint);
+gchar *             itdb_get_device_dir                 (const gchar *mountpoint);
+gchar *             itdb_get_photos_dir                 (const gchar *mountpoint);
+gchar *             itdb_get_itunesdb_path              (const gchar *mountpoint);
+gchar *             itdb_get_itunessd_path              (const gchar *mountpoint);
+gchar *             itdb_get_itunescdb_path             (const gchar *mountpoint);
+gchar *             itdb_get_artworkdb_path             (const gchar *mountpoint);
+gchar *             itdb_get_photodb_path               (const gchar *mountpoint);
+gchar *             itdb_get_photos_thumb_dir           (const gchar *mountpoint);
+gchar *             itdb_get_path                       (const gchar *dir,
+                                                         const gchar *file);
+gchar *             itdb_resolve_path                   (const gchar *root,
+                                                         const gchar * const *components);
+gboolean            itdb_cp                             (const gchar *from_file,
+                                                         const gchar *to_file,
+                                                         GError **error);
+gchar *             itdb_cp_get_dest_filename           (Itdb_Track *track,
+                                                         const gchar *mountpoint,
+                                                         const gchar *filename,
+                                                         GError **error);
 Itdb_Track *        itdb_cp_finalize                    (Itdb_Track *track,
-                                                         const gchar *mountpoint,
-                                                         const gchar *dest_filename,
-                                                         GError **error);
-Itdb_iTunesDB *     itdb_parse_file                     (const gchar *filename,
-                                                         GError **error);
-gboolean            itdb_write_file                     (Itdb_iTunesDB *itdb,
-                                                         const gchar *filename,
-                                                         GError **error);
-gboolean            itdb_shuffle_write                  (Itdb_iTunesDB *itdb,
-                                                         GError **error);
-gboolean            itdb_shuffle_write_file             (Itdb_iTunesDB *itdb,
-                                                         const gchar *filename,
-                                                         GError **error);
+                                                         const gchar *mountpoint,
+                                                         const gchar *dest_filename,
+                                                         GError **error);
+Itdb_iTunesDB *     itdb_parse_file                     (const gchar *filename,
+                                                         GError **error);
+gboolean            itdb_write_file                     (Itdb_iTunesDB *itdb,
+                                                         const gchar *filename,
+                                                         GError **error);
+gboolean            itdb_shuffle_write                  (Itdb_iTunesDB *itdb,
+                                                         GError **error);
+gboolean            itdb_shuffle_write_file             (Itdb_iTunesDB *itdb,
+                                                         const gchar *filename,
+                                                         GError **error);
 Itdb_iTunesDB *     itdb_duplicate                      (Itdb_iTunesDB *itdb);
 
@@ -87,7 +88,7 @@

Details

itdb_get_control_dir ()

-
gchar *             itdb_get_control_dir                (const gchar *mountpoint);
+
gchar *             itdb_get_control_dir                (const gchar *mountpoint);

Get the i*_Control directory. Observed values are 'iPod_Control' for standard iPods and 'iTunes/iTunes_Control' for mobile @@ -104,7 +105,7 @@

Returns :

path to the control dir or NULL if non-existent. Must -g_free() after use. +g_free() after use. @@ -115,7 +116,7 @@

itdb_get_itunes_dir ()

-
gchar *             itdb_get_itunes_dir                 (const gchar *mountpoint);
+
gchar *             itdb_get_itunes_dir                 (const gchar *mountpoint);

Retrieve the iTunes directory (containing the iTunesDB) by first calling itdb_get_control_dir() and then adding 'iTunes' @@ -131,7 +132,7 @@

Returns :

path to the iTunes directory or NULL if non-existent. -Must g_free() after use. +Must g_free() after use. @@ -142,7 +143,7 @@

itdb_get_music_dir ()

-
gchar *             itdb_get_music_dir                  (const gchar *mountpoint);
+
gchar *             itdb_get_music_dir                  (const gchar *mountpoint);

Retrieve the Music directory (containing the Fnn dirs) by first calling itdb_get_control_dir() and then adding 'Music' @@ -158,7 +159,7 @@

Returns :

path to the Music directory or NULL if -non-existent. Must g_free() after use. +non-existent. Must g_free() after use. @@ -167,7 +168,7 @@

itdb_get_artwork_dir ()

-
gchar *             itdb_get_artwork_dir                (const gchar *mountpoint);
+
gchar *             itdb_get_artwork_dir                (const gchar *mountpoint);

Retrieve the Artwork directory (containing the ArtworDB) by first calling itdb_get_control_dir() and then adding 'Artwork' @@ -183,7 +184,7 @@

Returns :

path to the Artwork directory or NULL if -non-existent. Must g_free() after use. +non-existent. Must g_free() after use. @@ -194,7 +195,7 @@

itdb_get_device_dir ()

-
gchar *             itdb_get_device_dir                 (const gchar *mountpoint);
+
gchar *             itdb_get_device_dir                 (const gchar *mountpoint);

Retrieve the Device directory (containing the SysInfo file) by first calling itdb_get_control_dir() and then adding 'Device' @@ -210,7 +211,7 @@

Returns :

path to the Device directory or NULL if -non-existent. Must g_free() after use. +non-existent. Must g_free() after use. @@ -221,7 +222,7 @@

itdb_get_photos_dir ()

-
gchar *             itdb_get_photos_dir                 (const gchar *mountpoint);
+
gchar *             itdb_get_photos_dir                 (const gchar *mountpoint);

Retrieve the Photo directory by first calling itdb_get_control_dir() and then adding 'Photos' @@ -237,7 +238,7 @@

Returns :

path to the Artwork directory or NULL if -non-existent. Must g_free() after use. +non-existent. Must g_free() after use. @@ -248,7 +249,7 @@

itdb_get_itunesdb_path ()

-
gchar *             itdb_get_itunesdb_path              (const gchar *mountpoint);
+
gchar *             itdb_get_itunesdb_path              (const gchar *mountpoint);

Retrieve a path to the iTunesDB

@@ -262,7 +263,7 @@

Returns :

- path to the iTunesDB or NULL if non-existent. Must g_free() + path to the iTunesDB or NULL if non-existent. Must g_free() after use. @@ -274,7 +275,7 @@

itdb_get_itunessd_path ()

-
gchar *             itdb_get_itunessd_path              (const gchar *mountpoint);
+
gchar *             itdb_get_itunessd_path              (const gchar *mountpoint);

Retrieve a path to the iTunesSD

@@ -288,7 +289,34 @@

Returns :

- path to the iTunesSD or NULL if non-existent. Must g_free() + path to the iTunesSD or NULL if non-existent. Must g_free() +after use. + + + + +
+

Since 0.4.0

+
+
+
+

itdb_get_itunescdb_path ()

+
gchar *             itdb_get_itunescdb_path             (const gchar *mountpoint);
+

+Retrieve a path to the iTunesCDB. The iTunesCDB is a compressed version +of the iTunesDB which can be found on iPhones/iPod Touch with firmware 3.0 +

+
++ + + + + + + + @@ -300,7 +328,7 @@

itdb_get_artworkdb_path ()

-
gchar *             itdb_get_artworkdb_path             (const gchar *mountpoint);
+
gchar *             itdb_get_artworkdb_path             (const gchar *mountpoint);

Retrieve a path to the ArtworkDB

@@ -314,7 +342,7 @@
- @@ -326,7 +354,7 @@

itdb_get_photodb_path ()

-
gchar *             itdb_get_photodb_path               (const gchar *mountpoint);
+
gchar *             itdb_get_photodb_path               (const gchar *mountpoint);

Retrieve a path to the Photo DB

@@ -341,7 +369,7 @@
@@ -352,7 +380,7 @@

itdb_get_photos_thumb_dir ()

-
gchar *             itdb_get_photos_thumb_dir           (const gchar *mountpoint);
+
gchar *             itdb_get_photos_thumb_dir           (const gchar *mountpoint);

Retrieve the Photo Thumbnail directory by first calling itdb_get_control_dir() and then adding 'Photos/Thumbs' @@ -368,7 +396,7 @@

@@ -379,8 +407,8 @@

itdb_get_path ()

-
gchar *             itdb_get_path                       (const gchar *dir,
-                                                         const gchar *file);
+
gchar *             itdb_get_path                       (const gchar *dir,
+                                                         const gchar *file);

Retrieve a path to the file in dir

@@ -399,7 +427,7 @@
- @@ -411,8 +439,8 @@

itdb_resolve_path ()

-
gchar *             itdb_resolve_path                   (const gchar *root,
-                                                         const gchar * const *components);
+
gchar *             itdb_resolve_path                   (const gchar *root,
+                                                         const gchar * const *components);

Resolve the path to a track on the iPod

@@ -447,9 +475,9 @@

itdb_cp ()

-
gboolean            itdb_cp                             (const gchar *from_file,
-                                                         const gchar *to_file,
-                                                         GError **error);
+
gboolean            itdb_cp                             (const gchar *from_file,
+                                                         const gchar *to_file,
+                                                         GError **error);

Copy file from_file to to_file.

@@ -468,7 +496,7 @@
- @@ -483,10 +511,10 @@

itdb_cp_get_dest_filename ()

-
gchar *             itdb_cp_get_dest_filename           (Itdb_Track *track,
-                                                         const gchar *mountpoint,
-                                                         const gchar *filename,
-                                                         GError **error);
+
gchar *             itdb_cp_get_dest_filename           (Itdb_Track *track,
+                                                         const gchar *mountpoint,
+                                                         const gchar *filename,
+                                                         GError **error);

Creates a valid filename on the iPod where filename can be copied.

@@ -523,7 +551,7 @@
- @@ -543,9 +571,9 @@

itdb_cp_finalize ()

Itdb_Track *        itdb_cp_finalize                    (Itdb_Track *track,
-                                                         const gchar *mountpoint,
-                                                         const gchar *dest_filename,
-                                                         GError **error);
+ const gchar *mountpoint, + const gchar *dest_filename, + GError **error);

Updates information in track necessary for the iPod.

@@ -595,7 +623,7 @@
- @@ -616,8 +644,8 @@

itdb_parse_file ()

-
Itdb_iTunesDB *     itdb_parse_file                     (const gchar *filename,
-                                                         GError **error);
+
Itdb_iTunesDB *     itdb_parse_file                     (const gchar *filename,
+                                                         GError **error);

Same as itunesdb_parse(), but filename is specified directly.

@@ -631,7 +659,7 @@
- @@ -648,9 +676,9 @@

itdb_write_file ()

-
gboolean            itdb_write_file                     (Itdb_iTunesDB *itdb,
-                                                         const gchar *filename,
-                                                         GError **error);
+
gboolean            itdb_write_file                     (Itdb_iTunesDB *itdb,
+                                                         const gchar *filename,
+                                                         GError **error);

Write the content of itdb to filename. If filename is NULL, it attempts to write to itdb->filename. @@ -670,7 +698,7 @@

- @@ -684,8 +712,8 @@

itdb_shuffle_write ()

-
gboolean            itdb_shuffle_write                  (Itdb_iTunesDB *itdb,
-                                                         GError **error);
+
gboolean            itdb_shuffle_write                  (Itdb_iTunesDB *itdb,
+                                                         GError **error);

Write out an iTunesSD for the Shuffle.

@@ -706,7 +734,7 @@
- @@ -721,9 +749,9 @@

itdb_shuffle_write_file ()

-
gboolean            itdb_shuffle_write_file             (Itdb_iTunesDB *itdb,
-                                                         const gchar *filename,
-                                                         GError **error);
+
gboolean            itdb_shuffle_write_file             (Itdb_iTunesDB *itdb,
+                                                         const gchar *filename,
+                                                         GError **error);

Do the actual writing to the iTunesSD

@@ -742,7 +770,7 @@
- diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Photo-database.html libgpod-0.7.94/docs/reference/html/libgpod-Photo-database.html --- libgpod-0.7.93/docs/reference/html/libgpod-Photo-database.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Photo-database.html 2010-08-31 22:10:59.000000000 +0100 @@ -37,44 +37,50 @@

Synopsis

                    Itdb_PhotoDB;
-Itdb_PhotoDB *      itdb_photodb_create                 (const gchar *mountpoint);
+Itdb_PhotoDB *      itdb_photodb_create                 (const gchar *mountpoint);
 void                itdb_photodb_free                   (Itdb_PhotoDB *photodb);
-Itdb_PhotoDB *      itdb_photodb_parse                  (const gchar *mp,
-                                                         GError **error);
-gboolean            itdb_photodb_write                  (Itdb_PhotoDB *photodb,
-                                                         GError **error);
+Itdb_PhotoDB *      itdb_photodb_parse                  (const gchar *mp,
+                                                         GError **error);
+gboolean            itdb_photodb_write                  (Itdb_PhotoDB *photodb,
+                                                         GError **error);
 Itdb_Artwork *      itdb_photodb_add_photo              (Itdb_PhotoDB *db,
-                                                         const gchar *filename,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+                                                         const gchar *filename,
+                                                         gint position,
+                                                         gint rotation,
+                                                         GError **error);
 Itdb_Artwork *      itdb_photodb_add_photo_from_data    (Itdb_PhotoDB *db,
-                                                         const guchar *image_data,
-                                                         gsize image_data_len,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+                                                         const guchar *image_data,
+                                                         gsize image_data_len,
+                                                         gint position,
+                                                         gint rotation,
+                                                         GError **error);
 Itdb_Artwork *      itdb_photodb_add_photo_from_pixbuf  (Itdb_PhotoDB *db,
-                                                         gpointer pixbuf,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+                                                         gpointer pixbuf,
+                                                         gint position,
+                                                         gint rotation,
+                                                         GError **error);
 void                itdb_photodb_remove_photo           (Itdb_PhotoDB *db,
                                                          Itdb_PhotoAlbum *album,
                                                          Itdb_Artwork *photo);
                     Itdb_PhotoAlbum;
+void                itdb_photodb_photoalbum_free        (Itdb_PhotoAlbum *album);
+Itdb_PhotoAlbum *   itdb_photodb_photoalbum_new         (const gchar *albumname);
+void                itdb_photodb_photoalbum_add         (Itdb_PhotoDB *db,
+                                                         Itdb_PhotoAlbum *album,
+                                                         gint pos);
+void                itdb_photodb_photoalbum_unlink      (Itdb_PhotoAlbum *album);
 Itdb_PhotoAlbum *   itdb_photodb_photoalbum_create      (Itdb_PhotoDB *db,
-                                                         const gchar *albumname,
-                                                         gint pos);
+                                                         const gchar *albumname,
+                                                         gint pos);
 void                itdb_photodb_photoalbum_add_photo   (Itdb_PhotoDB *db,
                                                          Itdb_PhotoAlbum *album,
                                                          Itdb_Artwork *photo,
-                                                         gint position);
+                                                         gint position);
 Itdb_PhotoAlbum *   itdb_photodb_photoalbum_by_name     (Itdb_PhotoDB *db,
-                                                         const gchar *albumname);
+                                                         const gchar *albumname);
 void                itdb_photodb_photoalbum_remove      (Itdb_PhotoDB *db,
                                                          Itdb_PhotoAlbum *album,
-                                                         gboolean remove_pics);
+                                                         gboolean remove_pics);
 
@@ -182,12 +188,12 @@
- + - + @@ -197,32 +203,32 @@ - + - + - + - + - + - + @@ -243,7 +249,7 @@

itdb_photodb_create ()

-
Itdb_PhotoDB *      itdb_photodb_create                 (const gchar *mountpoint);
+
Itdb_PhotoDB *      itdb_photodb_create                 (const gchar *mountpoint);

Creates a new Itdb_PhotoDB. If mountpoint is NULL, you will have to set it manually later by calling itdb_device_set_mountpoint(). @@ -288,8 +294,8 @@


itdb_photodb_parse ()

-
Itdb_PhotoDB *      itdb_photodb_parse                  (const gchar *mp,
-                                                         GError **error);
+
Itdb_PhotoDB *      itdb_photodb_parse                  (const gchar *mp,
+                                                         GError **error);

Parses the photo database of an iPod mounted at mp.

@@ -319,8 +325,8 @@

itdb_photodb_write ()

-
gboolean            itdb_photodb_write                  (Itdb_PhotoDB *photodb,
-                                                         GError **error);
+
gboolean            itdb_photodb_write                  (Itdb_PhotoDB *photodb,
+                                                         GError **error);

Write out a PhotoDB.

@@ -337,7 +343,7 @@
- @@ -355,10 +361,10 @@

itdb_photodb_add_photo ()

Itdb_Artwork *      itdb_photodb_add_photo              (Itdb_PhotoDB *db,
-                                                         const gchar *filename,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+ const gchar *filename, + gint position, + gint rotation, + GError **error);

Add a photo to the PhotoDB. The photo is automatically added to the first Photoalbum, which by default contains a list of all photos in @@ -366,8 +372,8 @@

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

mountpoint :

the iPod mountpoint +

Returns :

path to the iTunesCDB or NULL if non-existent. Must g_free() after use.

Returns :

path to the ArtworkDB or NULL if non-existent. Must g_free() + path to the ArtworkDB or NULL if non-existent. Must g_free() after use.

Returns :

path to the PhotoDB or NULL if non-existent. Must -g_free() after use. +g_free() after use.

Returns :

path to the Artwork directory or NULL if -non-existent. Must g_free() after use. +non-existent. Must g_free() after use.

Returns :

path to the file or NULL if non-existent. Must g_free() + path to the file or NULL if non-existent. Must g_free() after use.

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

error :

return location for a GError or NULL +return location for a GError or NULL

GList *photos;

GList *photos;

A list of photos in the database (Itdb_Artwork)

GList *photoalbums;

GList *photoalbums;

A list of albums in the database (Itdb_PhotoAlbum)

gint32 reserved_int1;

gint32 reserved_int1;

Reserved for future use

gint32 reserved_int2;

gint32 reserved_int2;

Reserved for future use

gpointer reserved1;

gpointer reserved1;

Reserved for future use

gpointer reserved2;

gpointer reserved2;

Reserved for future use

guint64 usertype;

guint64 usertype;

For use by application

gpointer userdata;

gpointer userdata;

For use by application

error :

return location for a GError or NULL +return location for a GError or NULL
@@ -396,7 +402,7 @@ - @@ -413,11 +419,11 @@

itdb_photodb_add_photo_from_data ()

Itdb_Artwork *      itdb_photodb_add_photo_from_data    (Itdb_PhotoDB *db,
-                                                         const guchar *image_data,
-                                                         gsize image_data_len,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+ const guchar *image_data, + gsize image_data_len, + gint position, + gint rotation, + GError **error);

Add a photo to the PhotoDB. The photo is automatically added to the first Photoalbum, which by default contains a list of all photos in @@ -425,8 +431,8 @@

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

error :

return location for a GError or NULL +return location for a GError or NULL
@@ -461,7 +467,7 @@ - @@ -478,10 +484,10 @@

itdb_photodb_add_photo_from_pixbuf ()

Itdb_Artwork *      itdb_photodb_add_photo_from_pixbuf  (Itdb_PhotoDB *db,
-                                                         gpointer pixbuf,
-                                                         gint position,
-                                                         gint rotation,
-                                                         GError **error);
+ gpointer pixbuf, + gint position, + gint rotation, + GError **error);

Add a photo to the PhotoDB. The photo is automatically added to the first Photoalbum, which by default contains a list of all photos in @@ -489,8 +495,8 @@

For the rotation angle you can also use the gdk constants -GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, -GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE. +GDK_PIXBUF_ROTATE_NONE, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE, +GDK_PIXBUF_ROTATE_UPSIDEDOWN, AND GDK_PIXBUF_ROTATE_CLOCKWISE.

error :

return location for a GError or NULL +return location for a GError or NULL
@@ -502,7 +508,7 @@ - @@ -519,7 +525,7 @@ - @@ -626,121 +632,122 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + @@ -759,11 +766,101 @@

Since 0.4.0


+
+

itdb_photodb_photoalbum_free ()

+
void                itdb_photodb_photoalbum_free        (Itdb_PhotoAlbum *album);
+

+Frees the memory used by album +

+

pixbuf :

a GdkPixbuf to use as the image data +a GdkPixbuf to use as the image data

error :

return location for a GError or NULL +return location for a GError or NULL

gchar *name;

gchar *name;

The name of photoalbum in UTF8

GList *members;

GList *members;

A list of photos in album (Itdb_Artwork)

guint8 album_type;

guint8 album_type;

The album type. 0x01 for master (Photo Library), 0x02 for a normal album. (4 and 5 have also been seen.)

guint8 playmusic;

guint8 playmusic;

Play music during slideshow

guint8 repeat;

guint8 repeat;

Repeat the slideshow

guint8 random;

guint8 random;

Show slides in random order

guint8 show_titles;

guint8 show_titles;

Show slide captions

guint8 transition_direction;

guint8 transition_direction;

Transition direction. 0=none, 1=left-to-right, 2=right-to-left, 3=top-to-bottom, 4=bottom-to-top

gint32 slide_duration;

gint32 slide_duration;

Slide duration in seconds

gint32 transition_duration;

gint32 transition_duration;

Transition duration, in milliseconds

gint64 song_id;

gint64 song_id;

The dbid2 of a track to play during slideshow

gint32 unk024;

gint32 unk024;

Unknown, seems to be always 0

gint16 unk028;

gint16 unk028;

Unknown, seems to be always 0

gint32 unk044;

gint32 unk044;

Unknown, seems to always be 0

gint32 unk048;

gint32 unk048;

Unknown, seems to always be 0

gint32 album_id;

+

gint32 album_id;

Unique integer for each playlist. This is set + automatically when the PhotoDB is written.

gint32 prev_album_id;

gint32 prev_album_id;

The id of the previous playlist. This is set automatically when the PhotoDB is written.

gint32 reserved_int1;

gint32 reserved_int1;

Reserved for future use

gint32 reserved_int2;

gint32 reserved_int2;

Reserved for future use

gpointer reserved1;

gpointer reserved1;

Reserved for future use

gpointer reserved2;

gpointer reserved2;

Reserved for future use

guint64 usertype;

guint64 usertype;

For use by application

gpointer userdata;

gpointer userdata;

For use by application
++ + + + +

album :

an Itdb_PhotoAlbum +
+
+
+
+

itdb_photodb_photoalbum_new ()

+
Itdb_PhotoAlbum *   itdb_photodb_photoalbum_new         (const gchar *albumname);
+

+Creates an empty Itdb_PhotoAlbum named albumname +

+
++ + + + + + + + + + +

albumname :

name of the new album +

Returns :

the new Itdb_PhotoAlbum, free it with +itdb_photodb_photoalbum_free() when no longer needed +
+
+
+
+

itdb_photodb_photoalbum_add ()

+
void                itdb_photodb_photoalbum_add         (Itdb_PhotoDB *db,
+                                                         Itdb_PhotoAlbum *album,
+                                                         gint pos);
+

+Adds album to db->photoalbums at position pos (or at the end if pos +is -1).The ib gets ownership of the album and will take care of +freeing the memory it uses when it's no longer necessary. +

+
++ + + + + + + + + + + + + + +

db :

an Itdb_PhotoDB +

album :

an Itdb_PhotoAlbum +

pos :

position of the album to add +
+
+
+
+

itdb_photodb_photoalbum_unlink ()

+
void                itdb_photodb_photoalbum_unlink      (Itdb_PhotoAlbum *album);
+

+Removes album from the Itdb_PhotoDB it's associated with, but do not free +memory. +album->photodb is set to NULL. +

+
++ + + + +

album :

an Itdb_PhotoAlbum +
+
+

itdb_photodb_photoalbum_create ()

Itdb_PhotoAlbum *   itdb_photodb_photoalbum_create      (Itdb_PhotoDB *db,
-                                                         const gchar *albumname,
-                                                         gint pos);
+ const gchar *albumname, + gint pos);

Create and add a new photoalbum.

@@ -802,7 +899,7 @@
void                itdb_photodb_photoalbum_add_photo   (Itdb_PhotoDB *db,
                                                          Itdb_PhotoAlbum *album,
                                                          Itdb_Artwork *photo,
-                                                         gint position);
+ gint position);

Adds a photo already in the library to the specified album album. Photos are automatically added to the first album (Photo @@ -843,7 +940,7 @@

itdb_photodb_photoalbum_by_name ()

Itdb_PhotoAlbum *   itdb_photodb_photoalbum_by_name     (Itdb_PhotoDB *db,
-                                                         const gchar *albumname);
+ const gchar *albumname);

Find the first photoalbum with a given name or the Photo Library Album if called with no name. @@ -878,7 +975,7 @@

itdb_photodb_photoalbum_remove ()

void                itdb_photodb_photoalbum_remove      (Itdb_PhotoDB *db,
                                                          Itdb_PhotoAlbum *album,
-                                                         gboolean remove_pics);
+ gboolean remove_pics);

Remove album from the Photo Database. If remove_pics is TRUE, remove all photos contained in album from the Photo Database. diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Playlists.html libgpod-0.7.94/docs/reference/html/libgpod-Playlists.html --- libgpod-0.7.93/docs/reference/html/libgpod-Playlists.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Playlists.html 2010-08-31 22:10:59.000000000 +0100 @@ -38,41 +38,42 @@

Synopsis

                    Itdb_Playlist;
+                    Itdb_Playlist_Private;
 enum                ItdbPlaylistSortOrder;
-Itdb_Playlist *     itdb_playlist_new                   (const gchar *title,
-                                                         gboolean spl);
+Itdb_Playlist *     itdb_playlist_new                   (const gchar *title,
+                                                         gboolean spl);
 void                itdb_playlist_free                  (Itdb_Playlist *pl);
 Itdb_Playlist *     itdb_playlist_duplicate             (Itdb_Playlist *pl);
 void                itdb_playlist_add                   (Itdb_iTunesDB *itdb,
                                                          Itdb_Playlist *pl,
-                                                         gint32 pos);
+                                                         gint32 pos);
 void                itdb_playlist_move                  (Itdb_Playlist *pl,
-                                                         gint32 pos);
+                                                         gint32 pos);
 void                itdb_playlist_remove                (Itdb_Playlist *pl);
 void                itdb_playlist_unlink                (Itdb_Playlist *pl);
 void                itdb_playlist_add_track             (Itdb_Playlist *pl,
                                                          Itdb_Track *track,
-                                                         gint32 pos);
+                                                         gint32 pos);
 void                itdb_playlist_remove_track          (Itdb_Playlist *pl,
                                                          Itdb_Track *track);
-gboolean            itdb_playlist_contains_track        (Itdb_Playlist *pl,
+gboolean            itdb_playlist_contains_track        (Itdb_Playlist *pl,
                                                          Itdb_Track *track);
-guint32             itdb_playlist_contain_track_number  (Itdb_Track *tr);
-guint32             itdb_playlist_tracks_number         (Itdb_Playlist *pl);
+guint32             itdb_playlist_contain_track_number  (Itdb_Track *tr);
+guint32             itdb_playlist_tracks_number         (Itdb_Playlist *pl);
 Itdb_Playlist *     itdb_playlist_mpl                   (Itdb_iTunesDB *itdb);
-gboolean            itdb_playlist_is_mpl                (Itdb_Playlist *pl);
+gboolean            itdb_playlist_is_mpl                (Itdb_Playlist *pl);
 void                itdb_playlist_set_mpl               (Itdb_Playlist *pl);
 Itdb_Playlist *     itdb_playlist_podcasts              (Itdb_iTunesDB *itdb);
-gboolean            itdb_playlist_is_podcasts           (Itdb_Playlist *pl);
+gboolean            itdb_playlist_is_podcasts           (Itdb_Playlist *pl);
 void                itdb_playlist_set_podcasts          (Itdb_Playlist *pl);
-gboolean            itdb_playlist_exists                (Itdb_iTunesDB *itdb,
+gboolean            itdb_playlist_exists                (Itdb_iTunesDB *itdb,
                                                          Itdb_Playlist *pl);
 Itdb_Playlist *     itdb_playlist_by_id                 (Itdb_iTunesDB *itdb,
-                                                         guint64 id);
+                                                         guint64 id);
 Itdb_Playlist *     itdb_playlist_by_nr                 (Itdb_iTunesDB *itdb,
-                                                         guint32 num);
+                                                         guint32 num);
 Itdb_Playlist *     itdb_playlist_by_name               (Itdb_iTunesDB *itdb,
-                                                         gchar *name);
+                                                         gchar *name);
 void                itdb_playlist_randomize             (Itdb_Playlist *pl);
 
@@ -131,42 +132,42 @@ -

gchar *name;

+

gchar *name;

The name of the playlist in UTF8 -

guint8 type;

+

guint8 type;

The playlist type (normal or master) -

guint8 flag1;

+

guint8 flag1;

Unknown, usually set to 0 -

guint8 flag2;

+

guint8 flag2;

Unknown, always set to 0 -

guint8 flag3;

+

guint8 flag3;

Unknown, always set to 0 -

gint num;

+

gint num;

The number of tracks in the playlist -

GList *members;

+

GList *members;

A list of tracks in the playlist (Itdb_Track) -

gboolean is_spl;

+

gboolean is_spl;

True if the playlist is a smart playlist, otherwise false @@ -177,17 +178,17 @@ -

guint64 id;

+

guint64 id;

The playlist ID -

guint32 sortorder;

+

guint32 sortorder;

The playlist sort order (ItdbPlaylistSortOrder) -

guint32 podcastflag;

+

guint32 podcastflag;

This is set to 0 on normal playlists and to 1 for the Podcast playlist. If set to 1, the playlist will not be shown under 'Playlists' on the iPod, but as 'Podcasts' @@ -207,42 +208,42 @@ -

gpointer reserved100;

+

gpointer reserved100;

Reserved for MHOD100 implementation -

gpointer reserved101;

+

gpointer reserved101;

Reserved for MHOD100 implementation -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

Itdb_Playlist_Private *priv;

+

Itdb_Playlist_Private *priv;

Private data -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use -

guint64 usertype;

+

guint64 usertype;

For use by application -

gpointer userdata;

+

gpointer userdata;

For use by application @@ -260,6 +261,16 @@

+
+

Itdb_Playlist_Private

+
typedef struct {
+    Itdb_Playlist_Mhsd5_Type mhsd5_type;
+} Itdb_Playlist_Private;
+
+

+

+
+

enum ItdbPlaylistSortOrder

typedef enum
@@ -437,8 +448,8 @@
 

itdb_playlist_new ()

-
Itdb_Playlist *     itdb_playlist_new                   (const gchar *title,
-                                                         gboolean spl);
+
Itdb_Playlist *     itdb_playlist_new                   (const gchar *title,
+                                                         gboolean spl);

Creates a new playlist. If spl is TRUE, a smart playlist is generated. pl->id is set by itdb_playlist_add() when the playlist @@ -514,7 +525,7 @@

itdb_playlist_add ()

void                itdb_playlist_add                   (Itdb_iTunesDB *itdb,
                                                          Itdb_Playlist *pl,
-                                                         gint32 pos);
+ gint32 pos);

Adds playlist pl to the database itdb at position pos (-1 for "append to end"). A unique id is created if pl->id is equal to @@ -547,7 +558,7 @@

itdb_playlist_move ()

void                itdb_playlist_move                  (Itdb_Playlist *pl,
-                                                         gint32 pos);
+ gint32 pos);

Moves playlist pl to position pos. -1 will append to the end of the list. @@ -607,7 +618,7 @@

itdb_playlist_add_track ()

void                itdb_playlist_add_track             (Itdb_Playlist *pl,
                                                          Itdb_Track *track,
-                                                         gint32 pos);
+ gint32 pos);

Adds track to pl at position pos (-1 to append at the end)

@@ -662,7 +673,7 @@

itdb_playlist_contains_track ()

-
gboolean            itdb_playlist_contains_track        (Itdb_Playlist *pl,
+
gboolean            itdb_playlist_contains_track        (Itdb_Playlist *pl,
                                                          Itdb_Track *track);

Checks if track is in pl @@ -691,7 +702,7 @@


itdb_playlist_contain_track_number ()

-
guint32             itdb_playlist_contain_track_number  (Itdb_Track *tr);
+
guint32             itdb_playlist_contain_track_number  (Itdb_Track *tr);

Counts the number of playlist track is a member of (not including the master playlist) @@ -715,7 +726,7 @@


itdb_playlist_tracks_number ()

-
guint32             itdb_playlist_tracks_number         (Itdb_Playlist *pl);
+
guint32             itdb_playlist_tracks_number         (Itdb_Playlist *pl);

Counts the number of tracks in pl

@@ -761,7 +772,7 @@

itdb_playlist_is_mpl ()

-
gboolean            itdb_playlist_is_mpl                (Itdb_Playlist *pl);
+
gboolean            itdb_playlist_is_mpl                (Itdb_Playlist *pl);

Checks if pl is the master playlist

@@ -829,7 +840,7 @@

itdb_playlist_is_podcasts ()

-
gboolean            itdb_playlist_is_podcasts           (Itdb_Playlist *pl);
+
gboolean            itdb_playlist_is_podcasts           (Itdb_Playlist *pl);

Checks if pl is the podcasts playlist

@@ -871,7 +882,7 @@

itdb_playlist_exists ()

-
gboolean            itdb_playlist_exists                (Itdb_iTunesDB *itdb,
+
gboolean            itdb_playlist_exists                (Itdb_iTunesDB *itdb,
                                                          Itdb_Playlist *pl);

Checks if pl is present in itdb @@ -901,7 +912,7 @@

itdb_playlist_by_id ()

Itdb_Playlist *     itdb_playlist_by_id                 (Itdb_iTunesDB *itdb,
-                                                         guint64 id);
+ guint64 id);

Looks up a playlist whose ID is id

@@ -931,7 +942,7 @@

itdb_playlist_by_nr ()

Itdb_Playlist *     itdb_playlist_by_nr                 (Itdb_iTunesDB *itdb,
-                                                         guint32 num);
+ guint32 num);

Gets the playlist at the given position in itdb

@@ -961,7 +972,7 @@

itdb_playlist_by_name ()

Itdb_Playlist *     itdb_playlist_by_name               (Itdb_iTunesDB *itdb,
-                                                         gchar *name);
+ gchar *name);

Searches a playlist whose name is name in itdb

diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Smart-Playlists.html libgpod-0.7.94/docs/reference/html/libgpod-Smart-Playlists.html --- libgpod-0.7.93/docs/reference/html/libgpod-Smart-Playlists.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Smart-Playlists.html 2010-08-31 22:10:59.000000000 +0100 @@ -58,12 +58,12 @@ Itdb_SPLRule * itdb_splr_new (void); void itdb_splr_add (Itdb_Playlist *pl, Itdb_SPLRule *splr, - gint pos); + gint pos); Itdb_SPLRule * itdb_splr_add_new (Itdb_Playlist *pl, - gint pos); + gint pos); void itdb_spl_copy_rules (Itdb_Playlist *dest, Itdb_Playlist *src); -gboolean itdb_splr_eval (Itdb_SPLRule *splr, +gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track); void itdb_spl_update (Itdb_Playlist *spl); void itdb_spl_update_all (Itdb_iTunesDB *itdb); @@ -102,57 +102,57 @@ -

guint8 liveupdate;

+

guint8 liveupdate;

Live Updating -

guint8 checkrules;

+

guint8 checkrules;

Match this number of rules. If set to 0, ignore rules. -

guint8 checklimits;

+

guint8 checklimits;

Limit to this number of limittype. If 0, no limits. -

guint32 limittype;

+

guint32 limittype;

an ItdbLimitType -

guint32 limitsort;

+

guint32 limitsort;

an ItdbLimitSort -

guint32 limitvalue;

+

guint32 limitvalue;

The value typed next to "Limit type" -

guint8 matchcheckedonly;

+

guint8 matchcheckedonly;

Match only checked songs -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

gpointer reserved1;

+

gpointer reserved1;

Reserved for future use -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use @@ -204,92 +204,92 @@ -

guint32 field;

+

guint32 field;

an ItdbSPLFieldType -

guint32 action;

+

guint32 action;

an ItdbSPLActionType -

gchar *string;

+

gchar *string;

data in UTF8 -

guint64 fromvalue;

+

guint64 fromvalue;

from value -

gint64 fromdate;

+

gint64 fromdate;

from date -

guint64 fromunits;

+

guint64 fromunits;

from units -

guint64 tovalue;

+

guint64 tovalue;

to value -

gint64 todate;

+

gint64 todate;

to date -

guint64 tounits;

+

guint64 tounits;

to units -

guint32 unk052;

+

guint32 unk052;

Unknown -

guint32 unk056;

+

guint32 unk056;

Unknown -

guint32 unk060;

+

guint32 unk060;

Unknown -

guint32 unk064;

+

guint32 unk064;

Unknown -

guint32 unk068;

+

guint32 unk068;

Unknown -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

gpointer reserved1;

+

gpointer reserved1;

Reserved for future use -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use @@ -318,38 +318,38 @@ -

guint32 unk004;

+

guint32 unk004;

Unknown -

guint32 match_operator;

+

guint32 match_operator;

Whether all rules must match (ITDB_SPLMATCH_AND) or any rules may match (ITDB_SPLMATCH_OR) -

GList *rules;

+

GList *rules;

list of Itdb_SPLRule's -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

gpointer reserved1;

+

gpointer reserved1;

Reserved for future use -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use @@ -1324,7 +1324,7 @@

itdb_splr_add ()

void                itdb_splr_add                       (Itdb_Playlist *pl,
                                                          Itdb_SPLRule *splr,
-                                                         gint pos);
+ gint pos);

Adds the smart rule splr to pl at position pos. If pos is -1, splr gets appended to the end. After this call, splr memory is @@ -1355,7 +1355,7 @@

itdb_splr_add_new ()

Itdb_SPLRule *      itdb_splr_add_new                   (Itdb_Playlist *pl,
-                                                         gint pos);
+ gint pos);

Creates a new smart rule and inserts it at position pos in pl. If pos is -1, the new rule gets appended to the end. @@ -1412,7 +1412,7 @@


itdb_splr_eval ()

-
gboolean            itdb_splr_eval                      (Itdb_SPLRule *splr,
+
gboolean            itdb_splr_eval                      (Itdb_SPLRule *splr,
                                                          Itdb_Track *track);

Evaluates splr's truth against track. track->itdb must be set. diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-The-Itdb-iTunesDB-structure.html libgpod-0.7.94/docs/reference/html/libgpod-The-Itdb-iTunesDB-structure.html --- libgpod-0.7.93/docs/reference/html/libgpod-The-Itdb-iTunesDB-structure.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-The-Itdb-iTunesDB-structure.html 2010-08-31 22:10:59.000000000 +0100 @@ -38,25 +38,26 @@

Synopsis

                    Itdb_iTunesDB;
+                    Itdb_iTunesDB_Private;
 enum                ItdbFileError;
 Itdb_iTunesDB *     itdb_new                            (void);
 void                itdb_free                           (Itdb_iTunesDB *itdb);
-Itdb_iTunesDB *     itdb_parse                          (const gchar *mp,
-                                                         GError **error);
-gboolean            itdb_write                          (Itdb_iTunesDB *itdb,
-                                                         GError **error);
+Itdb_iTunesDB *     itdb_parse                          (const gchar *mp,
+                                                         GError **error);
+gboolean            itdb_write                          (Itdb_iTunesDB *itdb,
+                                                         GError **error);
 void                itdb_set_mountpoint                 (Itdb_iTunesDB *itdb,
-                                                         const gchar *mp);
-const gchar *       itdb_get_mountpoint                 (Itdb_iTunesDB *itdb);
-gboolean            itdb_init_ipod                      (const gchar *mountpoint,
-                                                         const gchar *model_number,
-                                                         const gchar *ipod_name,
-                                                         GError **error);
-guint32             itdb_tracks_number                  (Itdb_iTunesDB *itdb);
-guint32             itdb_tracks_number_nontransferred   (Itdb_iTunesDB *itdb);
-guint32             itdb_playlists_number               (Itdb_iTunesDB *itdb);
-void                (*ItdbUserDataDestroyFunc)          (gpointer userdata);
-gpointer            (*ItdbUserDataDuplicateFunc)        (gpointer userdata);
+                                                         const gchar *mp);
+const gchar *       itdb_get_mountpoint                 (Itdb_iTunesDB *itdb);
+gboolean            itdb_init_ipod                      (const gchar *mountpoint,
+                                                         const gchar *model_number,
+                                                         const gchar *ipod_name,
+                                                         GError **error);
+guint32             itdb_tracks_number                  (Itdb_iTunesDB *itdb);
+guint32             itdb_tracks_number_nontransferred   (Itdb_iTunesDB *itdb);
+guint32             itdb_playlists_number               (Itdb_iTunesDB *itdb);
+void                (*ItdbUserDataDestroyFunc)          (gpointer userdata);
+gpointer            (*ItdbUserDataDuplicateFunc)        (gpointer userdata);
 
@@ -104,7 +105,7 @@

Each track may have a thumbnail associated with it. You can retrieve a -GdkPixmap of the thumbnail using itdb_artwork_get_pixbuf(). A +GdkPixmap of the thumbnail using itdb_artwork_get_pixbuf(). A thumbnail can be added with itdb_track_set_thumbnails(). A thumbnail can be removed with itdb_track_remove_thumbnails(). Please see the Artwork section for more @@ -169,17 +170,17 @@ -

GList *tracks;

+

GList *tracks;

A list of tracks in the database (Itdb_Track) -

GList *playlists;

+

GList *playlists;

A list of playlists in the database (Itdb_Playlist) -

gchar *filename;

+

gchar *filename;

The filename of the iTunesDB @@ -189,42 +190,42 @@ -

guint32 version;

+

guint32 version;

The version number of the iTunesDB -

guint64 id;

+

guint64 id;

A 64 bit id value for the iTunesDB -

gint32 tzoffset;

+

gint32 tzoffset;

offset in seconds from UTC -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

Itdb_iTunesDB_Private *priv;

+

Itdb_iTunesDB_Private *priv;

Private data -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use -

guint64 usertype;

+

guint64 usertype;

For use by application -

gpointer userdata;

+

gpointer userdata;

For use by application @@ -242,6 +243,27 @@

+
+

Itdb_iTunesDB_Private

+
typedef struct {
+    GList *mhsd5_playlists;
+    guint16 unk_0x22;
+    guint64 id_0x24;
+    guint16 lang;
+    guint64 pid;
+    gint32 unk_0x50;
+    gint32 unk_0x54;
+    gint16 audio_language;
+    gint16 subtitle_language;
+    gint16 unk_0xa4;
+    gint16 unk_0xa6;
+    gint32 unk_0xa8;
+} Itdb_iTunesDB_Private;
+
+

+

+
+

enum ItdbFileError

typedef enum
@@ -324,8 +346,8 @@
 

itdb_parse ()

-
Itdb_iTunesDB *     itdb_parse                          (const gchar *mp,
-                                                         GError **error);
+
Itdb_iTunesDB *     itdb_parse                          (const gchar *mp,
+                                                         GError **error);

Parse the Itdb_iTunesDB of the iPod located at mp

@@ -339,7 +361,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL @@ -356,8 +378,8 @@

itdb_write ()

-
gboolean            itdb_write                          (Itdb_iTunesDB *itdb,
-                                                         GError **error);
+
gboolean            itdb_write                          (Itdb_iTunesDB *itdb,
+                                                         GError **error);

Write out an iTunesDB. It reassigns unique IDs to all tracks. An existing "Play Counts" file is renamed to "Play Counts.bak" if @@ -375,7 +397,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL @@ -391,7 +413,7 @@

itdb_set_mountpoint ()

void                itdb_set_mountpoint                 (Itdb_iTunesDB *itdb,
-                                                         const gchar *mp);
+ const gchar *mp);

Sets the mountpoint of itdb. Always use this function to set the mountpoint of an Itdb_iTunesDB as it will reset the number of @@ -428,7 +450,7 @@


itdb_get_mountpoint ()

-
const gchar *       itdb_get_mountpoint                 (Itdb_iTunesDB *itdb);
+
const gchar *       itdb_get_mountpoint                 (Itdb_iTunesDB *itdb);

Retrieve a reference to the mountpoint of itdb

@@ -454,10 +476,10 @@

itdb_init_ipod ()

-
gboolean            itdb_init_ipod                      (const gchar *mountpoint,
-                                                         const gchar *model_number,
-                                                         const gchar *ipod_name,
-                                                         GError **error);
+
gboolean            itdb_init_ipod                      (const gchar *mountpoint,
+                                                         const gchar *model_number,
+                                                         const gchar *ipod_name,
+                                                         GError **error);

Initialise an iPod device from scratch. The function attempts to create a blank database, complete with master playlist and device @@ -491,7 +513,7 @@

error :

-return location for a GError or NULL +return location for a GError or NULL @@ -507,7 +529,7 @@

itdb_tracks_number ()

-
guint32             itdb_tracks_number                  (Itdb_iTunesDB *itdb);
+
guint32             itdb_tracks_number                  (Itdb_iTunesDB *itdb);

Counts the number of tracks stored in itdb

@@ -530,7 +552,7 @@

itdb_tracks_number_nontransferred ()

-
guint32             itdb_tracks_number_nontransferred   (Itdb_iTunesDB *itdb);
+
guint32             itdb_tracks_number_nontransferred   (Itdb_iTunesDB *itdb);

Counts the number of non-transferred tracks in itdb

@@ -555,7 +577,7 @@

itdb_playlists_number ()

-
guint32             itdb_playlists_number               (Itdb_iTunesDB *itdb);
+
guint32             itdb_playlists_number               (Itdb_iTunesDB *itdb);

Counts the number of playlists stored in itdb

@@ -579,7 +601,7 @@

ItdbUserDataDestroyFunc ()

-
void                (*ItdbUserDataDestroyFunc)          (gpointer userdata);
+
void                (*ItdbUserDataDestroyFunc)          (gpointer userdata);

Function called to free userdata

@@ -587,7 +609,7 @@

userdata :

-A gpointer to user data +A gpointer to user data
@@ -595,7 +617,7 @@

ItdbUserDataDuplicateFunc ()

-
gpointer            (*ItdbUserDataDuplicateFunc)        (gpointer userdata);
+
gpointer            (*ItdbUserDataDuplicateFunc)        (gpointer userdata);

Function called to duplicate userdata

@@ -604,12 +626,12 @@

userdata :

-A gpointer to user data +A gpointer to user data

Returns :

- A gpointer + A gpointer diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Time-handling.html libgpod-0.7.94/docs/reference/html/libgpod-Time-handling.html --- libgpod-0.7.93/docs/reference/html/libgpod-Time-handling.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Time-handling.html 2010-08-31 22:10:59.000000000 +0100 @@ -64,7 +64,7 @@

Warning

itdb_time_get_mac_time is deprecated and should not be used in newly-written code. kept for compatibility with older code, directly use -g_get_current_time() or time(NULL) instead

+g_get_current_time() or time(NULL) instead

Gets the current time in a format appropriate for storing in the libgpod diff -Nru libgpod-0.7.93/docs/reference/html/libgpod-Tracks.html libgpod-0.7.94/docs/reference/html/libgpod-Tracks.html --- libgpod-0.7.93/docs/reference/html/libgpod-Tracks.html 2010-04-06 21:54:47.000000000 +0100 +++ libgpod-0.7.94/docs/reference/html/libgpod-Tracks.html 2010-08-31 22:10:59.000000000 +0100 @@ -38,34 +38,35 @@

Synopsis

                    Itdb_Track;
+                    Itdb_Track_Private;
 enum                Itdb_Mediatype;
 #define             ITDB_RATING_STEP
 Itdb_Track *        itdb_track_new                      (void);
 void                itdb_track_free                     (Itdb_Track *track);
 void                itdb_track_add                      (Itdb_iTunesDB *itdb,
                                                          Itdb_Track *track,
-                                                         gint32 pos);
+                                                         gint32 pos);
 void                itdb_track_remove                   (Itdb_Track *track);
 void                itdb_track_unlink                   (Itdb_Track *track);
 Itdb_Track *        itdb_track_duplicate                (Itdb_Track *tr);
 Itdb_Track *        itdb_track_by_id                    (Itdb_iTunesDB *itdb,
-                                                         guint32 id);
-GTree *             itdb_track_id_tree_create           (Itdb_iTunesDB *itdb);
-void                itdb_track_id_tree_destroy          (GTree *idtree);
-Itdb_Track *        itdb_track_id_tree_by_id            (GTree *idtree,
-                                                         guint32 id);
-gpointer            itdb_track_get_thumbnail            (Itdb_Track *track,
-                                                         gint width,
-                                                         gint height);
-gboolean            itdb_track_has_thumbnails           (Itdb_Track *track);
-gboolean            itdb_track_set_thumbnails           (Itdb_Track *track,
-                                                         const gchar *filename);
-gboolean            itdb_track_set_thumbnails_from_data (Itdb_Track *track,
-                                                         const guchar *image_data,
-                                                         gsize image_data_len);
-gboolean            itdb_track_set_thumbnails_from_pixbuf
+                                                         guint32 id);
+GTree *             itdb_track_id_tree_create           (Itdb_iTunesDB *itdb);
+void                itdb_track_id_tree_destroy          (GTree *idtree);
+Itdb_Track *        itdb_track_id_tree_by_id            (GTree *idtree,
+                                                         guint32 id);
+gpointer            itdb_track_get_thumbnail            (Itdb_Track *track,
+                                                         gint width,
+                                                         gint height);
+gboolean            itdb_track_has_thumbnails           (Itdb_Track *track);
+gboolean            itdb_track_set_thumbnails           (Itdb_Track *track,
+                                                         const gchar *filename);
+gboolean            itdb_track_set_thumbnails_from_data (Itdb_Track *track,
+                                                         const guchar *image_data,
+                                                         gsize image_data_len);
+gboolean            itdb_track_set_thumbnails_from_pixbuf
                                                         (Itdb_Track *track,
-                                                         gpointer pixbuf);
+                                                         gpointer pixbuf);
 void                itdb_track_remove_thumbnails        (Itdb_Track *track);
 
@@ -257,74 +258,74 @@ -

gchar *title;

+

gchar *title;

The title of the track in UTF8 -

gchar *ipod_path;

+

gchar *ipod_path;

The file path on the iPod. Directories are separated with ":" instead of "/". The path is relative to the iPod mountpoint. -

gchar *album;

+

gchar *album;

The album name in UTF8 -

gchar *artist;

+

gchar *artist;

The artist name in UTF8 -

gchar *genre;

+

gchar *genre;

The genre in UTF8 -

gchar *filetype;

+

gchar *filetype;

A UTF8 string describing the file type. E.g. "MP3-File". -

gchar *comment;

+

gchar *comment;

A comment in UTF8 -

gchar *category;

+

gchar *category;

The category ("Technology", "Music", etc.) where the podcast was located. (Added in dbversion 0x0d) -

gchar *composer;

+

gchar *composer;

The composer name in UTF8 -

gchar *grouping;

+

gchar *grouping;

??? (UTF8) -

gchar *description;

+

gchar *description;

Description text (such as podcast show notes). (Added in dbversion 0x0d) -

gchar *podcasturl;

+

gchar *podcasturl;

Podcast Enclosure URL in UTF-8 or ASCII. (Added in dbversion 0x0d) -

gchar *podcastrss;

+

gchar *podcastrss;

Podcast RSS URL in UTF-8 or ASCII. (Added in dbversion 0x0d) @@ -337,43 +338,43 @@ -

gchar *subtitle;

+

gchar *subtitle;

Subtitle (usually the same as Description). (Added in dbversion 0x0d) -

gchar *tvshow;

+

gchar *tvshow;

Name of the TV show (only used for TV Shows). (Added in dbversion 0x0d?) (Since libgpod-0.4.2) -

gchar *tvepisode;

+

gchar *tvepisode;

The episode number (only used for TV Shows). (Added in dbversion 0x0d?) (Since libgpod-0.4.2) -

gchar *tvnetwork;

+

gchar *tvnetwork;

The TV network (only used for TV Shows). (Added in dbversion 0x0d?) (Since libgpod-0.4.2) -

gchar *albumartist;

+

gchar *albumartist;

The album artist (Added in dbversion 0x13?) (Since libgpod-0.4.2) -

gchar *keywords;

+

gchar *keywords;

List of keywords pertaining to the track. (Added in dbversion 0x13?) (Since libgpod-0.4.2) -

gchar *sort_artist;

+

gchar *sort_artist;

The artist name used for sorting. Artists with names like "The Artist" would have "Artist, The" here. If you do not set this field, @@ -384,101 +385,101 @@ -

gchar *sort_title;

+

gchar *sort_title;

The track title used for sorting. See sort_artist. (Since libgpod-0.5.0) -

gchar *sort_album;

+

gchar *sort_album;

The album name used for sorting. See sort_artist. (Since libgpod-0.5.0) -

gchar *sort_albumartist;

+

gchar *sort_albumartist;

The album artist used for sorting. See sort_artist. (Since libgpod-0.5.0) -

gchar *sort_composer;

+

gchar *sort_composer;

The composer used for sorting. See sort_artist. (Since libgpod-0.5.0) -

gchar *sort_tvshow;

+

gchar *sort_tvshow;

The name of the TV show used for sorting. See sort_artist. (Since libgpod-0.5.0) -

guint32 id;

+

guint32 id;

Unique ID of track -

gint32 size;

+

gint32 size;

The size of the file in bytes -

gint32 tracklen;

+

gint32 tracklen;

The length of the track in ms -

gint32 cd_nr;

+

gint32 cd_nr;

The CD number the track comes from. -

gint32 cds;

+

gint32 cds;

The total number of CDs. -

gint32 track_nr;

+

gint32 track_nr;

The track number. -

gint32 tracks;

+

gint32 tracks;

The total number of tracks. -

gint32 bitrate;

+

gint32 bitrate;

The bitrate at which the file is encoded. -

guint16 samplerate;

+

guint16 samplerate;

The samplerate of the track (e.g. CD = 44100) -

guint16 samplerate_low;

+

guint16 samplerate_low;

In the iTunesDB the samplerate is multiplied by 0x10000 -- these are the lower 16 bit, which are usually 0 -

gint32 year;

+

gint32 year;

The year the track was released -

gint32 volume;

+

gint32 volume;

Volume adjustment field. This is a value from -255 to 255 that will be applied to the track on playback. -

guint32 soundcheck;

+

guint32 soundcheck;

The SoundCheck value to apply to the song, when SoundCheck is switched on in the iPod settings. The value for this field can be determined by @@ -509,7 +510,7 @@ -

guint32 bookmark_time;

+

guint32 bookmark_time;

The time, in milliseconds, that the track will start playing at. This is used for AudioBook filetypes (.aa and .m4b). Note that there is @@ -519,17 +520,17 @@ -

guint32 rating;

+

guint32 rating;

The track rating (stars * ITDB_RATING_STEP) -

guint32 playcount;

+

guint32 playcount;

The number of times the track has been played -

guint32 playcount2;

+

guint32 playcount2;

This also stores the play count of the track. It is unclear if this ever differs from the above value. During sync, this is set @@ -537,23 +538,23 @@ -

guint32 recent_playcount;

+

guint32 recent_playcount;

The number of times the track was played since the last sync. -

gboolean transferred;

+

gboolean transferred;

Whether the file been transferred to iPod. -

gint16 BPM;

+

gint16 BPM;

BPM (beats per minute) of the track -

guint8 app_rating;

+

guint8 app_rating;

The last rating set by an application (e.g. iTunes). If the rating on the iPod and the rating field above differ, the original @@ -562,41 +563,41 @@ -

guint8 type1;

+

guint8 type1;

CBR MP3s and AAC are 0x00, VBR MP3s are 0x01 -

guint8 type2;

+

guint8 type2;

MP3s are 0x01, AAC are 0x00 -

guint8 compilation;

+

guint8 compilation;

Flag to mark the track as a compilation. True if set to 0x1, false if set to 0x0. -

guint32 starttime;

+

guint32 starttime;

The offset, in milliseconds, at which the song will start playing. -

guint32 stoptime;

+

guint32 stoptime;

The offset, in milliseconds, at which the song will stop playing. -

guint8 checked;

+

guint8 checked;

Flag for whether the track is checked. True if set to 0x0, false if set to 0x1 -

guint64 dbid;

+

guint64 dbid;

Unique database ID that identifies this song across the databases on the iPod. For example, this id joins an iTunesDB mhit with an @@ -604,20 +605,20 @@ -

guint32 drm_userid;

+

guint32 drm_userid;

Apple Store/Audible User ID (for DRM'ed files only, set to 0 otherwise). -

guint32 visible;

+

guint32 visible;

If this value is 1, the song is visible on the iPod. All other values cause the file to be hidden. -

guint32 filetype_marker;

+

guint32 filetype_marker;

This appears to always be 0 on hard drive based iPods, but for the iTunesDB that is written to an iPod Shuffle, iTunes 4.7.1 writes out the @@ -630,14 +631,14 @@ -

guint16 artwork_count;

+

guint16 artwork_count;

The number of album artwork items associated with this song. libgpod updates this value when syncing. -

guint32 artwork_size;

+

guint32 artwork_size;

The total size of artwork (in bytes) attached to this song, when it is converted to JPEG format. Observed in dbversion 0x0b and with @@ -654,7 +655,7 @@ -

guint16 unk126;

+

guint16 unk126;

Unknown, but always seems to be 0xffff for MP3/AAC songs, 0x0 for uncompressed songs (like WAVE format), 0x1 for Audible. libgpod @@ -662,7 +663,7 @@ -

guint32 unk132;

+

guint32 unk132;

Unknown @@ -675,7 +676,7 @@ -

guint16 unk144;

+

guint16 unk144;

Unknown, but MP3 songs appear to be always 0x000c, AAC songs are always 0x0033, Audible files are 0x0029, WAV files are 0x0. libgpod @@ -684,48 +685,48 @@ -

guint16 explicit_flag;

+

guint16 explicit_flag;

Flag to mark a track as "explicit" in iTunes. True if to 0x1, false if set to 0x0. -

guint32 unk148;

+

guint32 unk148;

Unknown - used for Apple Store DRM songs (always 0x01010100?), zero otherwise -

guint32 unk152;

+

guint32 unk152;

Unknown -

guint32 skipcount;

+

guint32 skipcount;

The number of times the track has been skipped. (Added in dbversion 0x0c) -

guint32 recent_skipcount;

+

guint32 recent_skipcount;

The number of times the track was skipped since the last sync. -

guint32 last_skipped;

+

guint32 last_skipped;

The time the track was last skipped. (Added in dbversion 0x0c) -

guint8 has_artwork;

+

guint8 has_artwork;

Whether the track has artwork. True if set to 0x01, false if set to 0x02. -

guint8 skip_when_shuffling;

+

guint8 skip_when_shuffling;

Flag to skip the track when shuffling. True if set to 0x01, false if set to 0x00. Audiobooks (.aa and .m4b) always seem to be skipped when @@ -733,7 +734,7 @@ -

guint8 remember_playback_position;

+

guint8 remember_playback_position;

Flag to remember playback position. True when set to 0x01, false when set to 0x00. Audiobooks (.aa and .m4b) always seem to @@ -742,7 +743,7 @@ -

guint8 flag4;

+

guint8 flag4;

Used for podcasts, 0x00 otherwise. If set to 0x01 the "Now Playing" page will show Title/Album, when set to 0x00 it will also show @@ -752,7 +753,7 @@ -

guint64 dbid2;

+

guint64 dbid2;

The purpose of the field is unclear. If not set, libgpod will set this to the same value as dbid when adding a track. (With iTunes, since @@ -761,7 +762,7 @@ -

guint8 lyrics_flag;

+

guint8 lyrics_flag;

Whether the track has lyrics (e.g. it has a USLT ID3 tag in an MP3 or a lyr atom in an MP4). True if set to 0x01, false if set to @@ -769,13 +770,13 @@ -

guint8 movie_flag;

+

guint8 movie_flag;

Whether the track is a movie. True if set to 0x01, false if set to 0x00. -

guint8 mark_unplayed;

+

guint8 mark_unplayed;

A value of 0x02 marks a podcast as unplayed on the iPod, with a bullet. Once played it is set to 0x01. Non-podcasts have this set to 0x01. @@ -783,41 +784,41 @@ -

guint8 unk179;

+

guint8 unk179;

Unknown, always 0x00 so far. (Added in dbversion 0x0c) -

guint32 unk180;

+

guint32 unk180;

Unknown. (Added in dbversion 0x0c) -

guint32 pregap;

+

guint32 pregap;

The number of samples of silence before the track starts (for gapless playback). -

guint64 samplecount;

+

guint64 samplecount;

The number of samples in the track (for gapless playback). -

guint32 unk196;

+

guint32 unk196;

Unknown. (Added in dbversion 0x0c) -

guint32 postgap;

+

guint32 postgap;

The number of samples of silence at the end of the track (for gapless playback). -

guint32 unk204;

+

guint32 unk204;

Unknown. Appears to be 0x1 for files encoded using the MP3 encoder, 0x0 otherwise. (Added in dbversion 0x0c, first values observed in @@ -825,7 +826,7 @@ -

guint32 mediatype;

+

guint32 mediatype;

The type of file. It must be set to 0x00000001 for audio files, and set to 0x00000002 for video files. If set to 0x00, the files show up @@ -853,13 +854,13 @@ -

guint32 season_nr;

+

guint32 season_nr;

The season number of the track (only used for TV Shows). -

guint32 episode_nr;

+

guint32 episode_nr;

The episode number of the track (only used for TV Shows). Although this is not displayed on the iPod, the episodes are sorted by episode @@ -867,44 +868,44 @@ -

guint32 unk220;

+

guint32 unk220;

Unknown. This has something to do with protected files. It is set to 0x0 for non-protected files. -

guint32 unk224;

+

guint32 unk224;

Unknown. (Added in dbversion 0x0c) -

guint32 unk228;

+

guint32 unk228;

Unknown. (Added in dbversion 0x0c) -

guint32 unk232;

+

guint32 unk232;

Unknown. (Added in dbversion 0x0c) -

guint32 unk236;

+

guint32 unk236;

Unknown. (Added in dbversion 0x0c) -

guint32 unk240;

+

guint32 unk240;

Unknown. (Added in dbversion 0x0c) -

guint32 unk244;

+

guint32 unk244;

Unknown. (Added in dbversion 0x13) -

guint32 gapless_data;

+

guint32 gapless_data;

The size in bytes from first Synch Frame (which is usually the XING frame that includes the LAME tag) until the 8th before @@ -915,25 +916,25 @@ -

guint32 unk252;

+

guint32 unk252;

Unknown. (Added in dbversion 0x0c) -

guint16 gapless_track_flag;

+

guint16 gapless_track_flag;

If set to 1, this track has gapless playback data. (Added in dbversion 0x13) -

guint16 gapless_album_flag;

+

guint16 gapless_album_flag;

If set to 1, this track does not use crossfading in iTunes. (Added in dbversion 0x13) -

guint16 obsolete;

+

guint16 obsolete;

@@ -943,79 +944,79 @@ -

guint32 mhii_link;

+

guint32 mhii_link;

This is set to the id of the corresponding ArtworkDB mhii, used for sparse artwork support. (Since libgpod-0.7.0) -

gint32 reserved_int1;

+

gint32 reserved_int1;

Reserved for future use -

gint32 reserved_int2;

+

gint32 reserved_int2;

Reserved for future use -

gint32 reserved_int3;

+

gint32 reserved_int3;

Reserved for future use -

gint32 reserved_int4;

+

gint32 reserved_int4;

Reserved for future use -

gint32 reserved_int5;

+

gint32 reserved_int5;

Reserved for future use -

gint32 reserved_int6;

+

gint32 reserved_int6;

Reserved for future use -

Itdb_Track_Private *priv;

- +

Itdb_Track_Private *priv;

+Private data -

gpointer reserved2;

+

gpointer reserved2;

Reserved for future use -

gpointer reserved3;

+

gpointer reserved3;

Reserved for future use -

gpointer reserved4;

+

gpointer reserved4;

Reserved for future use -

gpointer reserved5;

+

gpointer reserved5;

Reserved for future use -

gpointer reserved6;

+

gpointer reserved6;

Reserved for future use -

guint64 usertype;

+

guint64 usertype;

For use by application -

gpointer userdata;

+

gpointer userdata;

For use by application @@ -1033,6 +1034,18 @@

+
+

Itdb_Track_Private

+
typedef struct {
+	guint32 album_id;
+	guint32 artist_id;
+	guint32 composer_id;
+} Itdb_Track_Private;
+
+

+

+
+

enum Itdb_Mediatype

typedef enum
@@ -1048,6 +1061,7 @@
     ITDB_MEDIATYPE_ITUNES_EXTRA = 0x010000,
     ITDB_MEDIATYPE_MEMO         = 0x100000,
     ITDB_MEDIATYPE_ITUNES_U     = 0x200000,
+    ITDB_MEDIATYPE_EPUB_BOOK    = 0x400000
 } Itdb_Mediatype;
 

@@ -1093,29 +1107,33 @@

ITDB_MEDIATYPE_RINGTONE

- +Ringtone

ITDB_MEDIATYPE_RENTAL

- +Rental

ITDB_MEDIATYPE_ITUNES_EXTRA

- +?

ITDB_MEDIATYPE_MEMO

- +Memo

ITDB_MEDIATYPE_ITUNES_U

- +iTunes U + +

ITDB_MEDIATYPE_EPUB_BOOK

+ +

Since 0.5.0

@@ -1167,7 +1185,7 @@

itdb_track_add ()

void                itdb_track_add                      (Itdb_iTunesDB *itdb,
                                                          Itdb_Track *track,
-                                                         gint32 pos);
+ gint32 pos);

Adds track to itdb->tracks at position pos (or at the end if pos is -1). The application is responsible to also add it to the master @@ -1259,7 +1277,7 @@

itdb_track_by_id ()

Itdb_Track *        itdb_track_by_id                    (Itdb_iTunesDB *itdb,
-                                                         guint32 id);
+ guint32 id);

Looks up a track using its ID in itdb.

@@ -1300,7 +1318,7 @@

itdb_track_id_tree_create ()

-
GTree *             itdb_track_id_tree_create           (Itdb_iTunesDB *itdb);
+
GTree *             itdb_track_id_tree_create           (Itdb_iTunesDB *itdb);

Creates a balanced-binary tree for quick ID lookup that is used in itdb_track_by_id_tree() @@ -1315,7 +1333,7 @@

Returns :

- a GTree indexed by track IDs to be freed with + a GTree indexed by track IDs to be freed with itdb_track_id_tree_destroy() when no longer used @@ -1325,7 +1343,7 @@

itdb_track_id_tree_destroy ()

-
void                itdb_track_id_tree_destroy          (GTree *idtree);
+
void                itdb_track_id_tree_destroy          (GTree *idtree);

Frees the memory used by idtree

@@ -1333,7 +1351,7 @@

idtree :

-a GTree +a GTree
@@ -1341,8 +1359,8 @@

itdb_track_id_tree_by_id ()

-
Itdb_Track *        itdb_track_id_tree_by_id            (GTree *idtree,
-                                                         guint32 id);
+
Itdb_Track *        itdb_track_id_tree_by_id            (GTree *idtree,
+                                                         guint32 id);

Lookup an Itdb_Track by id using idtree for faster lookup (compared to itdb_track_by_id()) @@ -1352,7 +1370,7 @@

idtree :

-a GTree created using itdb_track_id_tree_create() +a GTree created using itdb_track_id_tree_create() @@ -1372,9 +1390,9 @@

itdb_track_get_thumbnail ()

-
gpointer            itdb_track_get_thumbnail            (Itdb_Track *track,
-                                                         gint width,
-                                                         gint height);
+
gpointer            itdb_track_get_thumbnail            (Itdb_Track *track,
+                                                         gint width,
+                                                         gint height);

Get a thumbnail representing the cover associated with the current track, scaling it if appropriate. If either height or width is -1, then the biggest @@ -1402,7 +1420,7 @@

Returns :

- a GdkPixbuf that must be unreffed when no longer used, NULL + a GdkPixbuf that must be unreffed when no longer used, NULL if no artwork could be found or if libgpod is compiled without GdkPixbuf support @@ -1415,7 +1433,7 @@

itdb_track_has_thumbnails ()

-
gboolean            itdb_track_has_thumbnails           (Itdb_Track *track);
+
gboolean            itdb_track_has_thumbnails           (Itdb_Track *track);

Determine if a track has thumbnails

@@ -1440,8 +1458,8 @@

itdb_track_set_thumbnails ()

-
gboolean            itdb_track_set_thumbnails           (Itdb_Track *track,
-                                                         const gchar *filename);
+
gboolean            itdb_track_set_thumbnails           (Itdb_Track *track,
+                                                         const gchar *filename);

Uses the image contained in filename to generate iPod thumbnails. The image can be in any format supported by gdk-pixbuf. To save memory, the thumbnails @@ -1474,9 +1492,9 @@


itdb_track_set_thumbnails_from_data ()

-
gboolean            itdb_track_set_thumbnails_from_data (Itdb_Track *track,
-                                                         const guchar *image_data,
-                                                         gsize image_data_len);
+
gboolean            itdb_track_set_thumbnails_from_data (Itdb_Track *track,
+                                                         const guchar *image_data,
+                                                         gsize image_data_len);

Uses image_data to generate iPod thumbnails. The image can be in any format supported by gdk-pixbuf. To save memory, the thumbnails @@ -1515,9 +1533,9 @@


itdb_track_set_thumbnails_from_pixbuf ()

-
gboolean            itdb_track_set_thumbnails_from_pixbuf
+
gboolean            itdb_track_set_thumbnails_from_pixbuf
                                                         (Itdb_Track *track,
-                                                         gpointer pixbuf);
+ gpointer pixbuf);

Uses pixbuf to generate iPod thumbnails. To save memory, the thumbnails will only be generated when necessary, i.e. when itdb_save() or a @@ -1533,7 +1551,7 @@

pixbuf :

-a GdkPixbuf used to generate the thumbnail +a GdkPixbuf used to generate the thumbnail diff -Nru libgpod-0.7.93/docs/reference/libgpod-sections.txt libgpod-0.7.94/docs/reference/libgpod-sections.txt --- libgpod-0.7.93/docs/reference/libgpod-sections.txt 2010-04-06 21:54:44.000000000 +0100 +++ libgpod-0.7.94/docs/reference/libgpod-sections.txt 2010-08-31 22:10:59.000000000 +0100 @@ -2,6 +2,7 @@ itunesdb-db The Itdb_iTunesDB structure Itdb_iTunesDB +Itdb_iTunesDB_Private ItdbFileError itdb_new @@ -29,6 +30,9 @@ itdb_filename_on_ipod itdb_musicdirs_number itdb_rename_files + +itdb_start_sync +itdb_stop_sync
@@ -42,6 +46,7 @@ itdb_get_photos_dir itdb_get_itunesdb_path itdb_get_itunessd_path +itdb_get_itunescdb_path itdb_get_artworkdb_path itdb_get_photodb_path itdb_get_photos_thumb_dir @@ -71,6 +76,7 @@ track Tracks Itdb_Track +Itdb_Track_Private Itdb_Mediatype ITDB_RATING_STEP itdb_track_new @@ -96,6 +102,7 @@ playlists Playlists Itdb_Playlist +Itdb_Playlist_Private ItdbPlaylistSortOrder itdb_playlist_new itdb_playlist_free @@ -123,6 +130,7 @@ itdb_playlist_by_name itdb_playlist_randomize +
@@ -168,6 +176,7 @@ itdb_chapterdata_duplicate itdb_chapterdata_remove_chapter itdb_chapterdata_remove_chapters +itdb_chapterdata_unlink_chapter itdb_chapterdata_free
@@ -231,10 +240,17 @@ itdb_photodb_remove_photo Itdb_PhotoAlbum + +itdb_photodb_photoalbum_free +itdb_photodb_photoalbum_new +itdb_photodb_photoalbum_add +itdb_photodb_photoalbum_unlink + itdb_photodb_photoalbum_create itdb_photodb_photoalbum_add_photo itdb_photodb_photoalbum_by_name itdb_photodb_photoalbum_remove +
@@ -284,6 +300,7 @@ MhodHeaderSmartPlaylistRuleString MhodHeaderSmartPlaylistRuleNonString MhodHeaderSmartPlaylistRule +Itdb_Playlist_Mhsd5_Type iTunesDB_MhsdHeader MhodHeader NO_PLAYCOUNT @@ -302,6 +319,12 @@ Itdb_DB ItdbChecksumType ItdbThumbDataType +Itdb_Thumb_File +Itdb_Thumb_Ipod +Itdb_Thumb_Ipod_Item +Itdb_Thumb_Memory +Itdb_Thumb_Pixbuf +Itdb_Item_Id GChecksum GChecksumType @@ -378,4 +401,12 @@ sha_init sha_update itdb_compute_hash + +u32 +u64 +u8 +ROTL +ROTL16 +ROTL24 +ROTL8
diff -Nru libgpod-0.7.93/docs/reference/Makefile.in libgpod-0.7.94/docs/reference/Makefile.in --- libgpod-0.7.93/docs/reference/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/docs/reference/Makefile.in 2010-08-31 22:10:47.000000000 +0100 @@ -47,8 +47,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -100,7 +100,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -148,8 +152,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -220,6 +228,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/docs/reference/tmpl/artwork.sgml libgpod-0.7.94/docs/reference/tmpl/artwork.sgml --- libgpod-0.7.93/docs/reference/tmpl/artwork.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/artwork.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -19,9 +19,6 @@ - - - @@ -50,7 +47,6 @@ -@void: @Returns: diff -Nru libgpod-0.7.93/docs/reference/tmpl/chapterdata.sgml libgpod-0.7.94/docs/reference/tmpl/chapterdata.sgml --- libgpod-0.7.93/docs/reference/tmpl/chapterdata.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/chapterdata.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -18,9 +18,6 @@ - - - @@ -52,7 +49,6 @@ -@void: @Returns: @@ -78,7 +74,6 @@ -@void: @Returns: @@ -119,6 +114,15 @@ @chapterdata: + + + + + +@chapterdata: +@chapter: + + diff -Nru libgpod-0.7.93/docs/reference/tmpl/device.sgml libgpod-0.7.94/docs/reference/tmpl/device.sgml --- libgpod-0.7.93/docs/reference/tmpl/device.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/device.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -17,9 +17,6 @@ - - - @@ -39,7 +36,6 @@ -@void: @Returns: @@ -134,7 +130,6 @@ -@void: @Returns: @@ -172,7 +167,6 @@ @ITDB_IPOD_GENERATION_CLASSIC_3: @ITDB_IPOD_GENERATION_NANO_5: @ITDB_IPOD_GENERATION_TOUCH_3: -@ITDB_IPOD_GENERATION_IPAD_1: @@ -228,9 +222,6 @@ @ITDB_IPOD_MODEL_SHUFFLE_BLACK: @ITDB_IPOD_MODEL_IPHONE_WHITE: @ITDB_IPOD_MODEL_IPHONE_BLACK: -@ITDB_IPOD_MODEL_SHUFFLE_GOLD: -@ITDB_IPOD_MODEL_SHUFFLE_STAINLESS: -@ITDB_IPOD_MODEL_IPAD: diff -Nru libgpod-0.7.93/docs/reference/tmpl/Internal.sgml libgpod-0.7.94/docs/reference/tmpl/Internal.sgml --- libgpod-0.7.93/docs/reference/tmpl/Internal.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/Internal.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -17,6 +17,3 @@ - - - diff -Nru libgpod-0.7.93/docs/reference/tmpl/itunesdb-copying.sgml libgpod-0.7.94/docs/reference/tmpl/itunesdb-copying.sgml --- libgpod-0.7.93/docs/reference/tmpl/itunesdb-copying.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/itunesdb-copying.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -18,9 +18,6 @@ - - - @@ -76,3 +73,21 @@ @Returns: + + + + + +@itdb: +@Returns: + + + + + + + +@itdb: +@Returns: + + diff -Nru libgpod-0.7.93/docs/reference/tmpl/itunesdb-db.sgml libgpod-0.7.94/docs/reference/tmpl/itunesdb-db.sgml --- libgpod-0.7.93/docs/reference/tmpl/itunesdb-db.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/itunesdb-db.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -89,9 +89,6 @@ - - - @@ -112,6 +109,24 @@ @userdata_duplicate: @userdata_destroy: + + + + + +@mhsd5_playlists: +@unk_0x22: +@id_0x24: +@lang: +@pid: +@unk_0x50: +@unk_0x54: +@audio_language: +@subtitle_language: +@unk_0xa4: +@unk_0xa6: +@unk_0xa8: + @@ -128,7 +143,6 @@ -@void: @Returns: diff -Nru libgpod-0.7.93/docs/reference/tmpl/itunesdb-lowlevel.sgml libgpod-0.7.94/docs/reference/tmpl/itunesdb-lowlevel.sgml --- libgpod-0.7.93/docs/reference/tmpl/itunesdb-lowlevel.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/itunesdb-lowlevel.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -18,9 +18,6 @@ - - - @@ -93,6 +90,15 @@ @Returns: + + + + + +@mountpoint: +@Returns: + + diff -Nru libgpod-0.7.93/docs/reference/tmpl/itunesdb-time.sgml libgpod-0.7.94/docs/reference/tmpl/itunesdb-time.sgml --- libgpod-0.7.93/docs/reference/tmpl/itunesdb-time.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/itunesdb-time.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -24,15 +24,11 @@ - - - -@void: @Returns: diff -Nru libgpod-0.7.93/docs/reference/tmpl/photodb.sgml libgpod-0.7.94/docs/reference/tmpl/photodb.sgml --- libgpod-0.7.93/docs/reference/tmpl/photodb.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/photodb.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -91,9 +91,6 @@ - - - @@ -230,6 +227,41 @@ @userdata_duplicate: @userdata_destroy: + + + + + +@album: + + + + + + + +@albumname: +@Returns: + + + + + + + +@db: +@album: +@pos: + + + + + + + +@album: + + diff -Nru libgpod-0.7.93/docs/reference/tmpl/playlists.sgml libgpod-0.7.94/docs/reference/tmpl/playlists.sgml --- libgpod-0.7.93/docs/reference/tmpl/playlists.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/playlists.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -19,9 +19,6 @@ - - - @@ -53,6 +50,13 @@ @userdata_duplicate: @userdata_destroy: + + + + + +@mhsd5_type: + diff -Nru libgpod-0.7.93/docs/reference/tmpl/smart-playlists.sgml libgpod-0.7.94/docs/reference/tmpl/smart-playlists.sgml --- libgpod-0.7.93/docs/reference/tmpl/smart-playlists.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/smart-playlists.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -17,9 +17,6 @@ - - - @@ -278,7 +275,6 @@ -@void: @Returns: diff -Nru libgpod-0.7.93/docs/reference/tmpl/track.sgml libgpod-0.7.94/docs/reference/tmpl/track.sgml --- libgpod-0.7.93/docs/reference/tmpl/track.sgml 2010-04-06 21:54:43.000000000 +0100 +++ libgpod-0.7.94/docs/reference/tmpl/track.sgml 2010-08-31 22:10:59.000000000 +0100 @@ -18,9 +18,6 @@ - - - @@ -149,6 +146,15 @@ @userdata_duplicate: @userdata_destroy: + + + + + +@album_id: +@artist_id: +@composer_id: + @@ -178,7 +184,6 @@ -@void: @Returns: diff -Nru libgpod-0.7.93/m4/ax_pkg_swig.m4 libgpod-0.7.94/m4/ax_pkg_swig.m4 --- libgpod-0.7.93/m4/ax_pkg_swig.m4 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/m4/ax_pkg_swig.m4 2010-08-30 22:40:32.000000000 +0100 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.nongnu.org/autoconf-archive/ax_pkg_swig.html +# http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html # =========================================================================== # # SYNOPSIS @@ -62,7 +62,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 5 +#serial 7 AC_DEFUN([AX_PKG_SWIG],[ AC_PATH_PROG([SWIG],[swig]) @@ -105,9 +105,15 @@ if test -z "$available_patch" ; then [available_patch=0] fi - if test $available_major -ne $required_major \ - -o $available_minor -ne $required_minor \ - -o $available_patch -lt $required_patch ; then + # Convert the version tuple into a single number for easier comparison. + # Using base 100 should be safe since SWIG internally uses BCD values + # to encode its version number. + required_swig_vernum=`expr $required_major \* 10000 \ + \+ $required_minor \* 100 \+ $required_patch` + available_swig_vernum=`expr $available_major \* 10000 \ + \+ $available_minor \* 100 \+ $available_patch` + + if test $available_swig_vernum -lt $required_swig_vernum; then AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version.]) SWIG='' m4_ifval([$3],[$3],[]) diff -Nru libgpod-0.7.93/m4/intltool.m4 libgpod-0.7.94/m4/intltool.m4 --- libgpod-0.7.93/m4/intltool.m4 2010-04-06 21:54:15.000000000 +0100 +++ libgpod-0.7.94/m4/intltool.m4 2010-08-31 22:10:43.000000000 +0100 @@ -172,7 +172,7 @@ AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl -dnl The following CONFIG_COMMANDS should be exetuted at the very end +dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ diff -Nru libgpod-0.7.93/m4/Makefile.in libgpod-0.7.94/m4/Makefile.in --- libgpod-0.7.93/m4/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/m4/Makefile.in 2010-08-31 22:10:48.000000000 +0100 @@ -40,8 +40,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -93,7 +93,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -141,8 +145,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -213,6 +221,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/m4/mono.m4 libgpod-0.7.94/m4/mono.m4 --- libgpod-0.7.93/m4/mono.m4 1970-01-01 01:00:00.000000000 +0100 +++ libgpod-0.7.94/m4/mono.m4 2010-08-30 22:40:32.000000000 +0100 @@ -0,0 +1,101 @@ +AC_DEFUN([SHAMROCK_EXPAND_LIBDIR], +[ + expanded_libdir=`( + case $prefix in + NONE) prefix=$ac_default_prefix ;; + *) ;; + esac + case $exec_prefix in + NONE) exec_prefix=$prefix ;; + *) ;; + esac + eval echo $libdir + )` + AC_SUBST(expanded_libdir) +]) + +AC_DEFUN([SHAMROCK_FIND_PROGRAM], +[ + AC_PATH_PROG($1, $2, $3) + AC_SUBST($1) +]) + +AC_DEFUN([SHAMROCK_FIND_PROGRAM_OR_BAIL], +[ + SHAMROCK_FIND_PROGRAM($1, $2, no) + if test "x$$1" = "xno"; then + if test "X$with_mono" = "Xyes"; then + AC_MSG_ERROR([You need to install '$2']) + else + mono_detected=no + fi + fi +]) + +AC_DEFUN([SHAMROCK_FIND_MONO_2_0_COMPILER], +[ + SHAMROCK_FIND_PROGRAM_OR_BAIL(MCS, gmcs) +]) + +AC_DEFUN([SHAMROCK_FIND_MONO_RUNTIME], +[ + SHAMROCK_FIND_PROGRAM_OR_BAIL(MONO, mono) +]) + +AC_DEFUN([SHAMROCK_CHECK_MONO_MODULE], +[ + PKG_CHECK_MODULES(MONO_MODULE, mono >= $1, found_mono="yes", found_mono="no") + if test "x$found_mono" = "xno"; then + if test "X$with_mono" = "Xyes"; then + AC_MSG_ERROR([You need to install mono]) + else + mono_detected=no + fi + fi +]) + +AC_DEFUN([CHECK_GLIB_GTK_SHARP], +[ + found_gtksharp="yes" + PKG_CHECK_MODULES(GDKSHARP, + gtk-sharp-2.0 >= $GTK_SHARP_MIN_VERSION, [], found_gtksharp="no") + AC_SUBST(GDKSHARP_LIBS) + + PKG_CHECK_MODULES(GLIBSHARP, + glib-sharp-2.0 >= $GTK_SHARP_MIN_VERSION, [], found_gtksharp="no") + AC_SUBST(GLIBSHARP_LIBS) + if test "X$found_gtksharp" != "Xyes"; then + if test "X$with_mono" = "Xyes"; then + AC_MSG_ERROR([You need to install gtk-sharp]) + else + mono_detected=no + fi + fi +]) + +dnl check for mono and required dependencies +AC_DEFUN([LIBGPOD_CHECK_MONO], +[ + AC_ARG_WITH(mono, + AC_HELP_STRING([--with-mono], + [build mono bindings [[default=auto]]]), + [with_mono=$withval],[with_mono=auto]) + + AC_MSG_CHECKING(whether to build mono bindings) + AC_MSG_RESULT($with_mono) + + if test "X$with_mono" != Xno; then + mono_detected="yes" + SHAMROCK_EXPAND_LIBDIR + SHAMROCK_CHECK_MONO_MODULE($MONO_MIN_VERSION) + SHAMROCK_FIND_MONO_2_0_COMPILER + SHAMROCK_FIND_MONO_RUNTIME + CHECK_GLIB_GTK_SHARP + if test "X$mono_detected" = "Xno"; then + with_mono="no" + else + with_mono="yes" + fi + fi + AM_CONDITIONAL(HAVE_MONO, test x$with_mono = xyes) +]) diff -Nru libgpod-0.7.93/Makefile.in libgpod-0.7.94/Makefile.in --- libgpod-0.7.93/Makefile.in 2010-04-06 21:54:20.000000000 +0100 +++ libgpod-0.7.94/Makefile.in 2010-08-31 22:10:48.000000000 +0100 @@ -46,8 +46,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ @@ -174,7 +174,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -222,8 +226,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -294,6 +302,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/NEWS libgpod-0.7.94/NEWS --- libgpod-0.7.93/NEWS 2010-04-06 21:45:48.000000000 +0100 +++ libgpod-0.7.94/NEWS 2010-08-31 22:03:28.000000000 +0100 @@ -2,6 +2,21 @@ ===================================== For information about iPhone/iPod Touch/iPod Nano 5g support, please read +carefully the overview of libgpod 0.7.90 below. The iPhone 4 and the iPad +aren't supported, other iOS4 devices might work. +This release adds support for the button-less iPod Shuffles (without voice +over) and CLI (mono/C# bindings), as well as various bug fixes. + +* Shuffle 3g and 4g support (Adam Broschinski) +* CLI bindings (Nathaniel McCallum, Alan McGovern, Bertrand Lorentz) +* artwork fixes (Nikias Bassen) +* various bug fixes (Todd Zullinger, Olivier Crête, Cédric Bellegarde, Alex + Mauer, Christophe Fergeau) + +Overview of changes in libgpod 0.7.93 +===================================== + +For information about iPhone/iPod Touch/iPod Nano 5g support, please read carefully the overview of libgpod 0.7.90 below. This release mainly contain bugfixes that should polish iPhone use. diff -Nru libgpod-0.7.93/src/db-artwork-parser.c libgpod-0.7.94/src/db-artwork-parser.c --- libgpod-0.7.93/src/db-artwork-parser.c 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/db-artwork-parser.c 2010-06-15 22:09:46.000000000 +0100 @@ -99,7 +99,7 @@ } struct ParsedMhodString { - enum MhodType mhod_type; + enum MhodArtworkType mhod_type; char *mhod_string; }; diff -Nru libgpod-0.7.93/src/itdb_artwork.c libgpod-0.7.94/src/itdb_artwork.c --- libgpod-0.7.93/src/itdb_artwork.c 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/itdb_artwork.c 2010-08-30 22:40:32.000000000 +0100 @@ -435,8 +435,6 @@ gboolean free_use_pixels = FALSE; guint16 *pixels_arranged; - guint i; - g_return_val_if_fail (bytes_len < 2*(G_MAXUINT/3), NULL); g_return_val_if_fail (2*width*height < G_MAXUINT, NULL); g_return_val_if_fail (width==height, NULL); @@ -460,22 +458,7 @@ return NULL; } - result = g_malloc ((bytes_len/2) * 3); - - for (i = 0; i < bytes_len/2; i++) { - guint16 cur_pixel; - /* FIXME: endianness */ - cur_pixel = get_gint16 (pixels_arranged[i], byte_order); - /* Unpack pixels */ - result[3*i] = (cur_pixel & RED_MASK_555) >> RED_SHIFT_555; - result[3*i+1] = (cur_pixel & GREEN_MASK_555) >> GREEN_SHIFT_555; - result[3*i+2] = (cur_pixel & BLUE_MASK_555) >> BLUE_SHIFT_555; - - /* Normalize color values so that they use a [0..255] range */ - result[3*i] <<= (8 - RED_BITS_555); - result[3*i+1] <<= (8 - GREEN_BITS_555); - result[3*i+2] <<= (8 - BLUE_BITS_555); - } + result = unpack_RGB_555 (pixels_arranged, bytes_len, byte_order); g_free (pixels_arranged); if (free_use_pixels) @@ -808,6 +791,24 @@ } +static guint get_aligned_width (const Itdb_ArtworkFormat *img_info, + gsize pixel_size) +{ + guint width; + guint alignment = img_info->row_bytes_alignment/pixel_size; + + if (alignment * pixel_size != img_info->row_bytes_alignment) { + g_warning ("RowBytesAlignment (%d) not a multiple of pixel size (%"G_GSIZE_FORMAT")", + img_info->row_bytes_alignment, pixel_size); + } + + width = img_info->width; + if ((alignment != 0) && ((img_info->width % alignment) != 0)) { + width += alignment - (img_info->width % alignment); + } + return width; +} + gpointer itdb_thumb_ipod_item_to_pixbuf (Itdb_Device *device, Itdb_Thumb_Ipod_Item *item) { @@ -819,6 +820,7 @@ gint pad_y = item->vertical_padding; gint width = item->width; gint height = item->height; + guint rowstride; const Itdb_ArtworkFormat *img_info = item->format; guchar *pixels; @@ -835,12 +837,14 @@ return NULL; } + /* FIXME: this is broken for non-16bpp image formats :-/ */ + rowstride = get_aligned_width (img_info, sizeof(guint16))*3; pixbuf_full = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, FALSE, 8, img_info->width, img_info->height, - img_info->width*3, + rowstride, (GdkPixbufDestroyNotify)g_free, NULL); diff -Nru libgpod-0.7.93/src/itdb_chapterdata.c libgpod-0.7.94/src/itdb_chapterdata.c --- libgpod-0.7.93/src/itdb_chapterdata.c 2010-04-03 17:00:47.000000000 +0100 +++ libgpod-0.7.94/src/itdb_chapterdata.c 2010-08-30 22:40:32.000000000 +0100 @@ -129,11 +129,17 @@ void itdb_chapterdata_remove_chapter (Itdb_Chapterdata *chapterdata, Itdb_Chapter *chapter) { + itdb_chapterdata_unlink_chapter(chapterdata, chapter); + itdb_chapter_free (chapter); +} + +void +itdb_chapterdata_unlink_chapter (Itdb_Chapterdata *chapterdata, Itdb_Chapter *chapter) +{ g_return_if_fail (chapterdata); g_return_if_fail (chapter); chapterdata->chapters = g_list_remove (chapterdata->chapters, chapter); - itdb_chapter_free (chapter); } /** diff -Nru libgpod-0.7.93/src/itdb_device.c libgpod-0.7.94/src/itdb_device.c --- libgpod-0.7.93/src/itdb_device.c 2010-04-06 19:44:56.000000000 +0100 +++ libgpod-0.7.94/src/itdb_device.c 2010-08-30 22:40:32.000000000 +0100 @@ -139,8 +139,17 @@ /* Shuffle / Eigth Generation */ /* Bar, button-less, speaking */ - {"B867", 4, ITDB_IPOD_MODEL_SHUFFLE_SILVER, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, - {"C164", 4, ITDB_IPOD_MODEL_SHUFFLE_BLACK, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C306", 2, ITDB_IPOD_MODEL_SHUFFLE_SILVER, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C323", 2, ITDB_IPOD_MODEL_SHUFFLE_BLACK, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C381", 2, ITDB_IPOD_MODEL_SHUFFLE_GREEN, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C384", 2, ITDB_IPOD_MODEL_SHUFFLE_BLUE, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C387", 2, ITDB_IPOD_MODEL_SHUFFLE_PINK, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"B867", 4, ITDB_IPOD_MODEL_SHUFFLE_SILVER, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C164", 4, ITDB_IPOD_MODEL_SHUFFLE_BLACK, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C303", 4, ITDB_IPOD_MODEL_SHUFFLE_STAINLESS, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C307", 4, ITDB_IPOD_MODEL_SHUFFLE_GREEN, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C328", 4, ITDB_IPOD_MODEL_SHUFFLE_BLUE, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, + {"C331", 4, ITDB_IPOD_MODEL_SHUFFLE_PINK, ITDB_IPOD_GENERATION_SHUFFLE_4, 3}, /* Nano / Fifth Generation (first nano generation) */ /* Buttons are integrated into the "touch wheel". */ @@ -290,6 +299,9 @@ {"C131", 16, ITDB_IPOD_MODEL_IPHONE_BLACK, ITDB_IPOD_GENERATION_IPHONE_3, 50}, {"C133", 32, ITDB_IPOD_MODEL_IPHONE_BLACK, ITDB_IPOD_GENERATION_IPHONE_3, 50}, {"C134", 32, ITDB_IPOD_MODEL_IPHONE_WHITE, ITDB_IPOD_GENERATION_IPHONE_3, 50}, + /* iPhone 4G */ + {"C603", 16, ITDB_IPOD_MODEL_IPHONE_BLACK, ITDB_IPOD_GENERATION_IPHONE_4, 50}, + {"C605", 32, ITDB_IPOD_MODEL_IPHONE_BLACK, ITDB_IPOD_GENERATION_IPHONE_4, 50}, /* iPad */ {"B292", 16, ITDB_IPOD_MODEL_IPAD, ITDB_IPOD_GENERATION_IPAD_1, 50}, @@ -766,6 +778,7 @@ { "726", "C037" }, /* 8GB Blue Nano 5g */ { "72A", "C040" }, /* 8GB Green Nano 5g */ { "72F", "C046" }, /* 8GB Orange Nano 5g */ + { "72K", "C049" }, /* 8GB Red Nano 5g */ { "72L", "C050" }, /* 8GB Pink Nano 5g */ { "72Q", "C060" }, /* 16GB Silver Nano 5g */ @@ -778,8 +791,17 @@ { "73A", "C074" }, /* 16GB Red Nano 5g */ { "73B", "C075" }, /* 16GB Pink Nano 5g */ + { "A1S", "C306" }, /* 2GB Silver Shuffle 4g */ + { "A78", "C323" }, /* 2GB Black Shuffle 4g */ + { "ALB", "C381" }, /* 2GB Green Shuffle 4g */ + { "ALD", "C384" }, /* 2GB Blue Shuffle 4g */ + { "ALG", "C387" }, /* 2GB Pink Shuffle 4g */ { "4NZ", "B867" }, /* 4GB Silver Shuffle 4g */ { "891", "C164" }, /* 4GB Black Shuffle 4g */ + { "A1L", "C303" }, /* 4GB Stainless Shuffle 4g */ + { "A1U", "C307" }, /* 4GB Green Shuffle 4g */ + { "A7B", "C328" }, /* 4GB Blue Shuffle 4g */ + { "A7D", "C331" }, /* 4GB Pink Shuffle 4g */ { "W4N", "A623" }, /* 8GB Silver iPod Touch (1st gen) */ { "W4T", "A627" }, /* 16GB Silver iPod Touch (1st gen) */ @@ -798,7 +820,11 @@ { "3NP", "C131" }, /* 16GB Black iPhone 3GS */ { "3NR", "C133" }, /* 32GB Black iPhone 3GS */ { "3NS", "C134" }, /* 32GB White iPhone 3GS */ + { "A4S", "C603" }, /* 16GB Black iPhone 4G */ + { "A4T", "C605" }, /* 32GB Black iPhone 4G */ + { "Z38", "B292" }, /* 16GB iPad with Wifi */ + { "Z39", "B293" }, /* 32GB iPad with Wifi */ { "Z3A", "B294" }, /* 64GB iPad with Wifi */ { NULL , NULL } }; @@ -1318,6 +1344,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: /* FIXME: needs to check firmware version */ return TRUE; @@ -1378,6 +1405,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: supports_sparse_artwork = TRUE; break; @@ -1687,6 +1715,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: return TRUE; } @@ -1778,6 +1807,8 @@ return ITDB_CHECKSUM_HASH58; case 4: return ITDB_CHECKSUM_HASH72; + case 5: + return ITDB_CHECKSUM_HASHAB; default: return ITDB_CHECKSUM_UNKNOWN; } @@ -1803,9 +1834,12 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: - case ITDB_IPOD_GENERATION_IPAD_1: return ITDB_CHECKSUM_HASH72; + case ITDB_IPOD_GENERATION_IPAD_1: + case ITDB_IPOD_GENERATION_IPHONE_4: + return ITDB_CHECKSUM_HASHAB; + case ITDB_IPOD_GENERATION_UNKNOWN: case ITDB_IPOD_GENERATION_FIRST: case ITDB_IPOD_GENERATION_SECOND: @@ -1842,6 +1876,7 @@ return itdb_hash58_write_hash (device, itdb_data, itdb_len, error); case ITDB_CHECKSUM_HASH72: return itdb_hash72_write_hash (device, itdb_data, itdb_len, error); + case ITDB_CHECKSUM_HASHAB: case ITDB_CHECKSUM_UNKNOWN: g_set_error (error, 0, -1, "Unsupported checksum type"); return FALSE; @@ -2043,6 +2078,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: return TRUE; } @@ -2086,6 +2122,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: return FALSE; case ITDB_IPOD_GENERATION_SHUFFLE_1: @@ -2136,9 +2173,67 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: case ITDB_IPOD_GENERATION_IPAD_1: return TRUE; } g_return_val_if_reached (FALSE); } } + +enum ItdbShadowDBVersion itdb_device_get_shadowdb_version (const Itdb_Device *device) +{ + int version; + + version = 0; + if (device->sysinfo_extended != NULL) { + version = itdb_sysinfo_properties_get_shadow_db_version (device->sysinfo_extended); + } + + if (version == 0) { + const Itdb_IpodInfo *info; + + info = itdb_device_get_ipod_info (device); + switch (info->ipod_generation) { + case ITDB_IPOD_GENERATION_UNKNOWN: + case ITDB_IPOD_GENERATION_FIRST: + case ITDB_IPOD_GENERATION_SECOND: + case ITDB_IPOD_GENERATION_THIRD: + case ITDB_IPOD_GENERATION_MOBILE: + case ITDB_IPOD_GENERATION_FOURTH: + case ITDB_IPOD_GENERATION_PHOTO: + case ITDB_IPOD_GENERATION_MINI_1: + case ITDB_IPOD_GENERATION_MINI_2: + case ITDB_IPOD_GENERATION_NANO_1: + case ITDB_IPOD_GENERATION_NANO_2: + case ITDB_IPOD_GENERATION_NANO_3: + case ITDB_IPOD_GENERATION_NANO_4: + case ITDB_IPOD_GENERATION_NANO_5: + case ITDB_IPOD_GENERATION_VIDEO_1: + case ITDB_IPOD_GENERATION_VIDEO_2: + case ITDB_IPOD_GENERATION_CLASSIC_1: + case ITDB_IPOD_GENERATION_CLASSIC_2: + case ITDB_IPOD_GENERATION_CLASSIC_3: + case ITDB_IPOD_GENERATION_TOUCH_1: + case ITDB_IPOD_GENERATION_TOUCH_2: + case ITDB_IPOD_GENERATION_TOUCH_3: + case ITDB_IPOD_GENERATION_IPHONE_1: + case ITDB_IPOD_GENERATION_IPHONE_2: + case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: + case ITDB_IPOD_GENERATION_IPAD_1: + version = ITDB_SHADOW_DB_UNKNOWN; + break; + case ITDB_IPOD_GENERATION_SHUFFLE_1: + case ITDB_IPOD_GENERATION_SHUFFLE_2: + version = ITDB_SHADOW_DB_V1; + break; + case ITDB_IPOD_GENERATION_SHUFFLE_3: + case ITDB_IPOD_GENERATION_SHUFFLE_4: + version = ITDB_SHADOW_DB_V2; + break; + } + } + + return version; +} diff -Nru libgpod-0.7.93/src/itdb_device.h libgpod-0.7.94/src/itdb_device.h --- libgpod-0.7.93/src/itdb_device.h 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/itdb_device.h 2010-08-30 22:40:32.000000000 +0100 @@ -79,7 +79,8 @@ ITDB_CHECKSUM_UNKNOWN = -1, ITDB_CHECKSUM_NONE = 0, ITDB_CHECKSUM_HASH58 = 1, - ITDB_CHECKSUM_HASH72 = 2 + ITDB_CHECKSUM_HASH72 = 2, + ITDB_CHECKSUM_HASHAB = 3 }; /** @@ -130,12 +131,12 @@ * (not currently used) * @interlaced: If TRUE, the thumbnails are interlaced * (not currently used) - * @align_row_bytes: If TRUE, each pixel row must be aligned a 2-byte boundary * @color_adjustment: Color adjustment for the thumbnails * (not currently used) * @gamma: Gamma value for the thumbails * (not currently used) * @associated_format: Unknown (not currently used) + * @row_bytes_alignment: Specifies the number of bytes a pixel row must be aligned to * * Structure representing the characteristics of the thumbnails to * write to a given .ithmb file. The format of the structure is based @@ -153,10 +154,10 @@ gint display_width; gboolean interlaced; - gboolean align_row_bytes; gint color_adjustment; gdouble gamma; gint associated_format; + gint row_bytes_alignment; }; /* Error domain */ @@ -181,6 +182,7 @@ G_GNUC_INTERNAL gboolean itdb_device_is_iphone_family (const Itdb_Device *device); G_GNUC_INTERNAL gboolean itdb_device_is_shuffle (const Itdb_Device *device); G_GNUC_INTERNAL ItdbChecksumType itdb_device_get_checksum_type (const Itdb_Device *device); +G_GNUC_INTERNAL enum ItdbShadowDBVersion itdb_device_get_shadowdb_version (const Itdb_Device *device); const Itdb_IpodInfo * itdb_ipod_info_from_serial (const char *serial); diff -Nru libgpod-0.7.93/src/itdb.h libgpod-0.7.94/src/itdb.h --- libgpod-0.7.93/src/itdb.h 2010-04-06 21:46:43.000000000 +0100 +++ libgpod-0.7.94/src/itdb.h 2010-08-30 22:40:32.000000000 +0100 @@ -123,6 +123,7 @@ * @ITDB_IPOD_GENERATION_IPHONE_1: First Generation iPhone * @ITDB_IPOD_GENERATION_IPHONE_2: Second Generation iPhone (aka iPhone 3G) * @ITDB_IPOD_GENERATION_IPHONE_3: Third Generation iPhone (aka iPhone 3GS) + * @ITDB_IPOD_GENERATION_IPHONE_4: Fourth Generation iPhone * * iPod generation information * @@ -161,7 +162,8 @@ ITDB_IPOD_GENERATION_CLASSIC_3, ITDB_IPOD_GENERATION_NANO_5, ITDB_IPOD_GENERATION_TOUCH_3, - ITDB_IPOD_GENERATION_IPAD_1 + ITDB_IPOD_GENERATION_IPAD_1, + ITDB_IPOD_GENERATION_IPHONE_4 } Itdb_IpodGeneration; /** @@ -1031,6 +1033,8 @@ * @unk028: Unknown, seems to be always 0 * @unk044: Unknown, seems to always be 0 * @unk048: Unknown, seems to always be 0 + * @album_id: Unique integer for each playlist. This is set + * automatically when the PhotoDB is written. * @prev_album_id: The id of the previous playlist. This is set * automatically when the PhotoDB is written. * @reserved_int1: Reserved for future use @@ -1229,6 +1233,11 @@ * @ITDB_MEDIATYPE_AUDIOBOOK: Audio books * @ITDB_MEDIATYPE_MUSICVIDEO: Music videos * @ITDB_MEDIATYPE_TVSHOW: TV Shows + * @ITDB_MEDIATYPE_RINGTONE: Ringtone + * @ITDB_MEDIATYPE_RENTAL: Rental + * @ITDB_MEDIATYPE_ITUNES_EXTRA: ? + * @ITDB_MEDIATYPE_MEMO: Memo + * @ITDB_MEDIATYPE_ITUNES_U: iTunes U * * Mediatype definitions * @@ -1251,6 +1260,7 @@ ITDB_MEDIATYPE_ITUNES_EXTRA = 0x010000, ITDB_MEDIATYPE_MEMO = 0x100000, ITDB_MEDIATYPE_ITUNES_U = 0x200000, + ITDB_MEDIATYPE_EPUB_BOOK = 0x400000 } Itdb_Mediatype; typedef struct _Itdb_Track_Private Itdb_Track_Private; @@ -1547,6 +1557,7 @@ * @userdata: For use by application * @userdata_duplicate: A function to duplicate #userdata * @userdata_destroy: A function to free #userdata + * @priv: Private data * * Structure representing a track in an iTunesDB * @@ -1864,6 +1875,9 @@ gboolean itdb_playlist_is_podcasts (Itdb_Playlist *pl); void itdb_playlist_set_podcasts (Itdb_Playlist *pl); +/* playlist functions for audiobooks playlist */ +gboolean itdb_playlist_is_audiobooks (Itdb_Playlist *pl); + /* smart playlist functions */ ItdbSPLFieldType itdb_splr_get_field_type (const Itdb_SPLRule *splr); ItdbSPLActionType itdb_splr_get_action_type (const Itdb_SPLRule *splr); @@ -1916,6 +1930,9 @@ const gchar *albumname, gint pos); Itdb_PhotoDB *itdb_photodb_create (const gchar *mountpoint); +Itdb_PhotoAlbum *itdb_photodb_photoalbum_new (const gchar *albumname); +void itdb_photodb_photoalbum_free (Itdb_PhotoAlbum *album); +void itdb_photodb_photoalbum_add (Itdb_PhotoDB *db, Itdb_PhotoAlbum *album, gint pos); void itdb_photodb_free (Itdb_PhotoDB *photodb); gboolean itdb_photodb_write (Itdb_PhotoDB *photodb, GError **error); void itdb_photodb_remove_photo (Itdb_PhotoDB *db, @@ -1924,6 +1941,7 @@ void itdb_photodb_photoalbum_remove (Itdb_PhotoDB *db, Itdb_PhotoAlbum *album, gboolean remove_pics); +void itdb_photodb_photoalbum_unlink (Itdb_PhotoAlbum *album); Itdb_PhotoAlbum *itdb_photodb_photoalbum_by_name(Itdb_PhotoDB *db, const gchar *albumname ); @@ -1963,6 +1981,7 @@ void itdb_chapterdata_free (Itdb_Chapterdata *chapterdata); Itdb_Chapterdata *itdb_chapterdata_duplicate (Itdb_Chapterdata *chapterdata); void itdb_chapterdata_remove_chapter (Itdb_Chapterdata *chapterdata, Itdb_Chapter *chapter); +void itdb_chapterdata_unlink_chapter (Itdb_Chapterdata *chapterdata, Itdb_Chapter *chapter); void itdb_chapterdata_remove_chapters (Itdb_Chapterdata *chapterdata); Itdb_Chapter *itdb_chapter_new (void); void itdb_chapter_free (Itdb_Chapter *chapter); diff -Nru libgpod-0.7.93/src/itdb_itunesdb.c libgpod-0.7.94/src/itdb_itunesdb.c --- libgpod-0.7.93/src/itdb_itunesdb.c 2010-04-06 19:44:56.000000000 +0100 +++ libgpod-0.7.94/src/itdb_itunesdb.c 2010-08-31 22:00:23.000000000 +0100 @@ -318,6 +318,8 @@ static guint64 raw_get64bint (FContents *cts, glong seek); static float raw_get32bfloat (FContents *cts, glong seek); +static gboolean is_shuffle_2g (Itdb_Device *device); + static const ByteReader LITTLE_ENDIAN_READER = { raw_get16lint, raw_get24lint, raw_get32lint, raw_get64lint, raw_get32lfloat @@ -1017,56 +1019,99 @@ static gboolean itunesstats_read (FImport *fimp, FContents *cts) { GList* playcounts = NULL; - guint32 entry_num, i=0; - glong seek; + guint32 entry_num, entry_length, i=0; + struct playcount *playcount; + glong seek = 0; g_return_val_if_fail (fimp, FALSE); g_return_val_if_fail (cts, FALSE); + g_return_val_if_fail (fimp->itdb, FALSE); + g_return_val_if_fail (fimp->itdb->device, FALSE); - /* number of entries */ - entry_num = get32lint (cts, 0); - CHECK_ERROR (fimp, FALSE); - - seek = 6; - for (i=0; iitdb->device)) { - struct playcount *playcount = g_new0 (struct playcount, 1); - guint32 entry_length = get24lint (cts, seek+0); - CHECK_ERROR (fimp, FALSE); - if (entry_length < 18) - { - g_set_error (&fimp->error, - ITDB_FILE_ERROR, - ITDB_FILE_ERROR_CORRUPT, - _("iTunesStats file ('%s'): entry length smaller than expected (%d<18)."), - cts->filename, entry_length); - return FALSE; - } + /* Old iTunesStats format */ - playcounts = g_list_prepend (playcounts, playcount); - /* NOTE: - * - * The iPod (firmware 1.3, 2.0, ...?) doesn't seem to use the - * timezone information correctly -- no matter what you set - * iPod's timezone to, it will always record as if it were set - * to UTC -- we need to subtract the difference between - * current timezone and UTC to get a correct - * display. -- this should be done by the application were - * necessary */ - playcount->bookmark_time = get24lint (cts, seek+3); - CHECK_ERROR (fimp, FALSE); - playcount->st_unk06 = get24lint (cts, seek+6); - CHECK_ERROR (fimp, FALSE); - playcount->st_unk09 = get24lint (cts, seek+9); - CHECK_ERROR (fimp, FALSE); - playcount->playcount = get24lint (cts, seek+12); - CHECK_ERROR (fimp, FALSE); - playcount->skipped = get24lint (cts, seek+15); - CHECK_ERROR (fimp, FALSE); - - playcount->rating = NO_PLAYCOUNT; + /* number of entries */ + entry_num = get24lint (cts, seek); + CHECK_ERROR (fimp, FALSE); + seek = 6; + for (i=0; ierror, + ITDB_FILE_ERROR, + ITDB_FILE_ERROR_CORRUPT, + _("iTunesStats file ('%s'): entry length smaller than expected (%d<18)."), + cts->filename, entry_length); + return FALSE; + } + playcount = g_new0 (struct playcount, 1); + playcounts = g_list_prepend (playcounts, playcount); + /* NOTE: + * + * The iPod (firmware 1.3, 2.0, ...?) doesn't seem to use the + * timezone information correctly -- no matter what you set + * iPod's timezone to, it will always record as if it were set + * to UTC -- we need to subtract the difference between + * current timezone and UTC to get a correct + * display. -- this should be done by the application were + * necessary */ + playcount->bookmark_time = get24lint (cts, seek+3); + CHECK_ERROR (fimp, FALSE); + playcount->st_unk06 = get24lint (cts, seek+6); + CHECK_ERROR (fimp, FALSE); + playcount->st_unk09 = get24lint (cts, seek+9); + CHECK_ERROR (fimp, FALSE); + playcount->playcount = get24lint (cts, seek+12); + CHECK_ERROR (fimp, FALSE); + playcount->skipped = get24lint (cts, seek+15); + CHECK_ERROR (fimp, FALSE); + + playcount->rating = NO_PLAYCOUNT; - seek += entry_length; + seek += entry_length; + } + } else { + /* New iTunesStats format */ + entry_num = get32lint (cts, seek); /* Number of entries */ + CHECK_ERROR (fimp, FALSE); + + seek = 8; + for (i=0; ierror, + ITDB_FILE_ERROR, + ITDB_FILE_ERROR_CORRUPT, + _("iTunesStats file ('%s'): entry length smaller than expected (%d<32)."), + cts->filename, entry_length); + return FALSE; + } + playcount = g_new0 (struct playcount, 1); + playcounts = g_list_prepend (playcounts, playcount); + + playcount->bookmark_time = get32lint (cts, seek+4); + CHECK_ERROR (fimp, FALSE); + playcount->playcount = get32lint (cts, seek+8); + CHECK_ERROR (fimp, FALSE); + playcount->time_played = get32lint (cts, seek+12); + CHECK_ERROR (fimp, FALSE); + playcount->skipped = get32lint (cts, seek+16); + CHECK_ERROR (fimp, FALSE); + playcount->last_skipped = get32lint (cts, seek+20); + CHECK_ERROR (fimp, FALSE); + /* 8 unknown bytes follow but it is unlikely they are + * the same as the unknown fields in the old format. + * I have only seen zeros in those spots so far so I'm + * ignoring them for now. */ + } } fimp->playcounts = g_list_reverse(playcounts); return TRUE; @@ -2046,6 +2091,7 @@ plitem = itdb_playlist_new (NULL, FALSE); + plitem->num = mhipnum; /* Some Playlists have added 256 to their type -- I don't know what it's for, so we just ignore it for now -> & 0xff */ plitem->type = get8int (cts, mhyp_seek+20); @@ -2175,7 +2221,7 @@ } #if ITUNESDB_DEBUG - fprintf(stderr, "pln: %s(%d Itdb_Tracks) \n", plitem->name, (int)tracknum); + fprintf(stderr, "pln: %s(%d Itdb_Tracks) \n", plitem->name, (int)plitem->num); #endif /* add new playlist */ @@ -3132,8 +3178,8 @@ g_set_error (error, ITDB_FILE_ERROR, ITDB_FILE_ERROR_NOTFOUND, - _("File not found: '%s'."), - filename); + _("Couldn't find an iPod database on %s."), + mp); } g_free (filename); return itdb; @@ -3276,6 +3322,13 @@ put_data (cts, (gchar *)&n, 2); } +/* Write 2-byte integer @n to @cts at position @seek in + little endian order */ +static void raw_put16lint_seek (WContents *cts, guint32 n, gulong seek) +{ + n = GUINT16_TO_LE (n); + put_data_seek (cts, (gchar *)&n, 2, seek); +} /* Write 3-byte integer @n to @cts in big endian order. */ static void raw_put24lint (WContents *cts, guint32 n) @@ -3343,6 +3396,13 @@ put_data (cts, (gchar *)&n, 2); } +/* Write a 2-byte integer @n to @cts at position @seek in big + endian order. */ +static void raw_put16bint_seek (WContents *cts, guint16 n, gulong seek) +{ + n = GUINT16_TO_BE (n); + put_data_seek (cts, (gchar *)&n, 2, seek); +} /* Write 3-byte integer @n to @cts in big endian order. */ static void raw_put24bint (WContents *cts, guint32 n) @@ -3448,6 +3508,15 @@ else raw_put16bint (cts, n); } + +static void put16lint_seek (WContents *cts, guint16 n, gulong seek) +{ + if(!cts->reversed) + raw_put16lint_seek (cts, n, seek); + else + raw_put16bint_seek (cts, n, seek); +} + #if 0 static void put24lint (WContents *cts, guint32 n) { @@ -3501,6 +3570,15 @@ raw_put16bint (cts, n); } +#if 0 +static void put16bint_seek (WContents *cts, guint16 n, gulong seek) +{ + if (cts->reversed) + raw_put16lint_seek (cts, n, seek); + else + raw_put16bint_seek (cts, n, seek); +} +#endif static void put24bint (WContents *cts, guint32 n) { if (cts->reversed) @@ -3593,7 +3671,7 @@ put32lint (cts, children); put64lint (cts, fexp->itdb->id); /* 0x20 */ - put16lint (cts, 1); + put16lint (cts, 1); /* OS type, 1 = MacOS X, 2 = Windows */ /* 0x22 */ put16lint (cts, fexp->itdb->priv->unk_0x22); /* unknown */ @@ -3634,6 +3712,11 @@ put32lint_seek (cts, cts->pos-header_seek, header_seek+8); } +/* Fill in the length of a short header which are common in the itunesSD */ +static void fix_short_header (WContents *cts, gulong header_seek) +{ + put32lint_seek (cts, cts->pos-header_seek, header_seek+4); +} /* Write out the mhsd header. Size will be written later */ static void mk_mhsd (FExport *fexp, guint32 type) @@ -5446,20 +5529,28 @@ { Itdb_Track *track1 = (Itdb_Track *)v1; Itdb_Track *track2 = (Itdb_Track *)v2; + gboolean same_show; gboolean same_album; - same_album = safe_str_equal (track1->album, track2->album); + /*album is the same if: + * tvshow is the same, and + * album and albumartist are the same, or + * albumartist is null and artist and album are the same + */ + same_show = safe_str_equal (track1->tvshow, track2->tvshow); + if (!same_show) { + return FALSE; + } + same_album = safe_str_equal (track1->album, track2->album); if (!same_album) { return FALSE; } if ((track1->albumartist != NULL) && (track2->albumartist != NULL)) { - return safe_str_equal (track1->albumartist, track2->albumartist); - } else if ((track1->artist != NULL) && (track2->artist != NULL)) { - return safe_str_equal (track1->artist, track2->artist); + return safe_str_equal (track1->albumartist, track2->albumartist); } else { - return same_album; + return safe_str_equal (track1->artist, track2->artist); } } @@ -5517,8 +5608,10 @@ static void prepare_itdb_for_write (FExport *fexp) { GList *gl; + GList *pl; Itdb_iTunesDB *itdb; Itdb_Playlist *mpl; + Itdb_Playlist *playlist; guint album_id = 1; guint artist_id = 1; guint composer_id = 1; @@ -5606,6 +5699,13 @@ } } } + + /* Make sure playlist->num is correct */ + for (pl = itdb->playlists; pl; pl = pl->next) { + playlist = pl->data; + g_return_if_fail (playlist); + playlist->num = itdb_playlist_tracks_number (playlist); + } } static gboolean itdb_write_file_internal (Itdb_iTunesDB *itdb, @@ -5661,6 +5761,15 @@ goto err; } + /* write albums (mhsd type 4) */ + if (!write_mhsd_albums (fexp)) { + g_set_error (&fexp->error, + ITDB_FILE_ERROR, + ITDB_FILE_ERROR_ITDB_CORRUPT, + _("Error writing list of albums (mhsd type 4)")); + goto err; + } + /* write special podcast version mhsd (mhsd type 3) */ if (!fexp->error && !write_mhsd_playlists (fexp, 3)) { g_set_error (&fexp->error, @@ -5678,14 +5787,6 @@ goto err; } - /* write albums (mhsd type 4) */ - if (!write_mhsd_albums (fexp)) { - g_set_error (&fexp->error, - ITDB_FILE_ERROR, - ITDB_FILE_ERROR_ITDB_CORRUPT, - _("Error writing list of albums (mhsd type 4)")); - goto err; - } /* write artists (mhsd type 8) */ if (!fexp->error && !write_mhsd_artists (fexp)) { g_set_error (&fexp->error, @@ -5739,7 +5840,7 @@ if (itdb_device_is_shuffle (itdb->device)) { /* iPod Shuffle uses a simplified database in addition to the * iTunesDB */ - if (itdb_shuffle_write (itdb, &fexp->error) != 0) { + if (!itdb_shuffle_write (itdb, &fexp->error)) { goto err; } } @@ -6112,6 +6213,339 @@ return FALSE; } +/* Converts a standard itunesDB filetype to the one used in itunesSD */ +/* TODO: Find the values for other filetypes */ +static guint convert_filetype (gchar *filetype) +{ + guint32 stype; + /* Type 0x01 Default value */ + /* gchar *mp3_desc[] = {"MPEG", "MP3", "mpeg", "mp3", NULL}; */ + /* Type 0x02 */ + gchar *mp4_desc[] = {"AAC", "MP4", "M4A", "aac", "mp4", "m4a", NULL}; + /* Type 0x04 */ + gchar *wav_desc[] = {"WAV", "wav", NULL}; + + /* Default to mp3 */ + stype=0x01; + + if (haystack (filetype, mp4_desc)) + stype=0x02; + else if (haystack (filetype, wav_desc)) + stype=0x04; + + return stype; +} + +/* Write out the rths header, the iTunesSD track header */ +static gboolean write_rths (WContents *cts, Itdb_Track *track) +{ + gulong rths_seek; + gint padlength; + gchar *path; + + g_return_val_if_fail (cts, FALSE); + g_return_val_if_fail (track, FALSE); + + rths_seek=cts->pos; + + /* Prep the path */ + /* Correct this if the path field changes length */ + path = g_strndup (track->ipod_path, 256); + g_strdelimit (path, ":", '/'); + + put_header (cts, "rths"); + put32lint (cts, -1); /* Length of header to be added later */ + put32lint (cts, track->starttime); /* Start pos in ms */ + put32lint (cts, track->stoptime); /* Stop pos in ms */ + put32lint (cts, track->volume); /* Volume gain */ + put32lint (cts, convert_filetype (track->filetype)); /* Filetype see + convert filetype*/ + /* If the length of this field changes make sure to correct the + g_strndup above */ + put_string (cts, path); /* Path to the song */ + for (padlength = 256-strlen (path); padlength > 0; padlength--) + put8int (cts, 0); + + put32lint (cts, track->bookmark_time); /* Bookmark time */ + /* Don't Skip on shuffle */ + /* This field has the exact opposite value as in the iTunesDB */ + /* 1 when you want to skip, 0 when you don't want to skip */ + put8int (cts, !track->skip_when_shuffling); + put8int (cts, track->remember_playback_position); /* Remember playing pos */ + /* put8int (cts, ); In uninterruptable album */ + put8int (cts, 0); /* Best guess its gapless album */ + put8int (cts, 0); /* Unknown */ + put32lint (cts, track->pregap); /* Pregap */ + put32lint (cts, track->postgap); /* Postgap */ + put32lint (cts, (guint32) track->samplecount); /* Number of Samples */ + put32_n0 (cts, 1); /* Unknown */ + put32lint (cts, track->gapless_data); /* Gapless Data */ + put32_n0 (cts, 1); /* Unknown */ + put32lint (cts, track->priv->album_id); /* Album ID */ + put16lint (cts, track->track_nr); /* Track number */ + put16lint (cts, track->cd_nr); /* Disk number */ + put32_n0 (cts, 2); /* Unknown */ + put64lint (cts, track->dbid); /* Voiceover Filename also dbid*/ + put32lint (cts, track->priv->artist_id); /* Artist ID */ + put32_n0 (cts, 8); /* Unknown */ + + fix_short_header (cts, rths_seek); + + g_free (path); + + return TRUE; +} + +/* Write out the hths header, the iTunesSD track list header*/ +static gboolean write_hths (FExport *fexp) +{ + gulong hths_seek, track_seek; + WContents *cts; + GList *gl; + guint32 trackcnt; + guint32 nonstdtrackcnt; + + g_return_val_if_fail (fexp, FALSE); + g_return_val_if_fail (fexp->itdb, FALSE); + g_return_val_if_fail (fexp->wcontents, FALSE); + + cts = fexp->wcontents; + hths_seek = cts->pos; + trackcnt = itdb_tracks_number(fexp->itdb); + nonstdtrackcnt = 0; /* Counts the number of audiobook and podcast tracks */ + + /* Add Track list offset to bdhs header */ + /* If the bdhs header changes make sure the seek value is still correct */ + put32lint_seek(cts, cts->pos, 36); + + put_header (cts, "hths"); + put32lint (cts, -1); /* Length of header to be added later */ + put32lint (cts, trackcnt); /* Number of tracks */ + put32_n0 (cts, 2); /* Unknown */ + track_seek=cts->pos; /* Put the offset of the first track here */ + put32_n0 (cts, trackcnt); /* The offset for each track to be added later */ + + fix_short_header (cts, hths_seek); + + /* Add each tracks header */ + for(gl=fexp->itdb->tracks;gl;gl=gl->next) + { + Itdb_Track *track = gl->data; + + /* Add this tracks offset then add the track */ + put32lint_seek(cts, cts->pos, track_seek); + g_return_val_if_fail (write_rths(cts, track), FALSE); + + if (track->mediatype == ITDB_MEDIATYPE_AUDIOBOOK || + track->mediatype == ITDB_MEDIATYPE_PODCAST) + nonstdtrackcnt++; + + /* Go to the offset for the next track */ + track_seek += 4; + } + /* Add the number of nonpodcasts to bdhs header */ + /* If the bdhs header changes make sure the seek value is still correct */ + put32lint_seek(cts, trackcnt-nonstdtrackcnt, 32); + return TRUE; +} + +/* Write out the lphs header, the iTunesSD playlist header */ +static gboolean write_lphs (WContents *cts, Itdb_Playlist *pl) +{ + gulong lphs_seek; + GList *tl, *tracks, *current_track; + Itdb_Track *tr, *ctr; + guint64 id; + guint32 stype; + guint32 tracknum; + guint32 nonstdtrackcnt; + + g_return_val_if_fail (pl, FALSE); + g_return_val_if_fail (pl->itdb, FALSE); + g_return_val_if_fail (cts, FALSE); + + lphs_seek = cts->pos; + tracks = pl->itdb->tracks; + nonstdtrackcnt = 0; /* The number of audiobook and podcast tracks*/ + /* Change the playlist itunesDB type into a itunesSD type */ + /* 1 is for the master playlist + 2 is for a normal playlist + 3 is for the podcast playlist + 4 is for an audiobook playlist */ + if (itdb_playlist_is_mpl (pl)) + stype = 1; + else if (itdb_playlist_is_podcasts (pl)) + stype = 3; + else if (itdb_playlist_is_audiobooks (pl)) + stype = 4; + else /* Everything else we treat as normal */ + stype = 2; + + put_header (cts, "lphs"); + put32lint (cts, -1); /* Length of header to be written later */ + put32lint (cts, pl->num); /* Number of tracks in this playlist */ + put32lint (cts, -1); /* The number of non podcasts or audiobooks to be added later */ + + if (stype == 1) + put32_n0 (cts, 2); /* The voiceover for the master is at 0 */ + else + put64lint (cts, pl->id); /* Voiceover filename also Playlist ID */ + + put32lint (cts, stype); /* Type of playlist */ + put32_n0 (cts, 4); /* Unknown */ + if (tracks) /* It makes no sense to do the following if there is no tracks */ + { + /* Walk the playlist and find and write out the track number + of each track in it */ + for( tl = pl -> members; tl; tl = tl->next) + { + tracknum = 0; + current_track= tracks; + tr = tl->data; + id = tr->dbid; + ctr = current_track->data; + /* Count the number of podcasts and audiobooks for later use */ + if (tr->mediatype == ITDB_MEDIATYPE_AUDIOBOOK || + tr->mediatype == ITDB_MEDIATYPE_PODCAST) + nonstdtrackcnt++; + + while( id != ctr->dbid) + { + tracknum ++; + current_track = current_track->next; + g_return_val_if_fail (current_track, FALSE); + ctr = current_track->data; + } + put32lint (cts, tracknum); + } + } + + put32lint_seek (cts, pl->num - nonstdtrackcnt, lphs_seek+12); + fix_short_header (cts, lphs_seek); + return TRUE; + +} + +/* Write out the hphs header, the iTunesSD playlist list header */ +static gboolean write_hphs (FExport *fexp) +{ + gulong hphs_seek, playlist_seek; + WContents *cts; + GList *gl; + guint16 playlistcnt; + guint16 podcastscnt; + guint16 audiobookscnt; + + g_return_val_if_fail (fexp, FALSE); + g_return_val_if_fail (fexp->itdb, FALSE); + g_return_val_if_fail (fexp->wcontents, FALSE); + + cts = fexp->wcontents; + hphs_seek = cts->pos; + playlistcnt = itdb_playlists_number (fexp->itdb); + podcastscnt = 0; /* Number of podcast playlists should be 1 if one exists*/ + audiobookscnt = 0; + + /* Add the Playlist Header Offset */ + put32lint_seek (cts, cts->pos, 40); + + put_header (cts, "hphs"); + put32lint (cts, -1); /* Length of header to be added later */ + put16lint (cts, playlistcnt); /* Number of playlists */ + put16_n0 (cts, 1); /* Unknown */ + put16lint (cts, 0xffff); /* Number of non podcast playlists if there + isn't a podcast playlist leave this + current value. There should be at most 1 + podcast playlist. */ + put16lint (cts, 0x0100); /* Unknown */ + put16lint (cts, 0xffff); /* Number of non audiobook playlists if there + isn't a audiobook playlist leave this field + the current value. */ + put16_n0 (cts, 1); + + playlist_seek = cts->pos; + put32_n0 (cts, playlistcnt); /* Offsets for each playlist */ + + fix_short_header (cts, hphs_seek); + + for (gl = fexp->itdb->playlists; gl; gl = gl->next) + { + Itdb_Playlist *pl = gl->data; + + /* Write this headers offset */ + put32lint_seek (cts, cts->pos, playlist_seek); + if (itdb_playlist_is_podcasts (pl)) + podcastscnt++; + else if (itdb_playlist_is_audiobooks (pl)) + audiobookscnt++; + + g_return_val_if_fail (write_lphs (cts, pl),FALSE); + + /* Move to the field for the next header */ + playlist_seek += 4; + } + /* Is there at least 1 podcast playlist? If so correct the + first 0xffff from before */ + if (podcastscnt != 0) + put16lint_seek (cts, playlistcnt-podcastscnt, hphs_seek+12); + + /* Is there at least 1 audiobook playlist? If so correct the + second 0xffff from before */ + if (audiobookscnt != 0) + put16lint_seek (cts, playlistcnt-audiobookscnt, hphs_seek+16); + + return TRUE; +} + +/* Write out the bdhs header, the main iTunesSD header */ +static gboolean write_bdhs (FExport *fexp) +{ + WContents *cts; + gulong bdhs_seek; + guint32 trackcnt; + guint32 playlistcnt; + + g_return_val_if_fail (fexp, FALSE); + g_return_val_if_fail (fexp->itdb, FALSE); + g_return_val_if_fail (fexp->wcontents, FALSE); + + cts = fexp->wcontents; + bdhs_seek = cts->pos; + trackcnt = itdb_tracks_number (fexp->itdb); + playlistcnt = itdb_playlists_number (fexp->itdb); + + put_header (cts, "bdhs"); + put32lint (cts, 0x02000003); /* Unknown */ + put32lint (cts, -1); /* Length of header to be added later*/ + put32lint (cts, trackcnt); /* Number of tracks */ + put32lint (cts, playlistcnt); /* Number of playlists */ + put32_n0 (cts, 2); /* Unknown */ + /* TODO: Parse the max volume */ + put8int (cts, 0); /* Max Volume currently ignored and set to max */ + /* TODO: Find another source of the voiceover option */ + put8int (cts, 1); /* Voiceover currently ignored and set to on */ + put16_n0 (cts, 1); /* Unknown */ + + /* If the bdhs header changes the offsets of these fields may change + make sure you correct the field offset in their respective tags */ + + put32lint (cts, -1); /* Number of tracks excluding podcasts and audiobooks + added in write_hths */ + put32lint (cts, -1); /* Track Header Offset added in write_hths */ + put32lint (cts, -1); /* Playlist Header Offset added in write_hphs */ + + put32_n0 (cts, 5); /* Unknown */ + + fix_header(cts, bdhs_seek); + + return TRUE; +} + +static gboolean is_shuffle_2g (Itdb_Device *device) +{ + return (itdb_device_get_shadowdb_version (device) == ITDB_SHADOW_DB_V1); +} + /** * itdb_shuffle_write_file: * @itdb: the #Itdb_iTunesDB to write to disk @@ -6133,92 +6567,115 @@ g_return_val_if_fail (itdb, FALSE); g_return_val_if_fail (filename, FALSE); + g_return_val_if_fail (itdb->device, FALSE); + + /* Set endianess flag just in case */ + if (!itdb->device->byte_order) + itdb_device_autodetect_endianess (itdb->device); fexp = g_new0 (FExport, 1); fexp->itdb = itdb; fexp->wcontents = wcontents_new (filename); cts = fexp->wcontents; - prepare_itdb_for_write (fexp); - - put24bint (cts, itdb_tracks_number (itdb)); - put24bint (cts, 0x010600); - put24bint (cts, 0x12); /* size of header */ - put24bint (cts, 0x0); /* padding? */ - put24bint (cts, 0x0); - put24bint (cts, 0x0); - - for (gl=itdb->tracks; gl; gl=gl->next) - { - Itdb_Track *tr = gl->data; - gchar *path; - gunichar2 *path_utf16; - glong pathlen; - gchar *mp3_desc[] = {"MPEG", "MP3", "mpeg", "mp3", NULL}; - gchar *mp4_desc[] = {"AAC", "MP4", "aac", "mp4", NULL}; - gchar *wav_desc[] = {"WAV", "wav", NULL}; + cts->reversed = (itdb->device->byte_order == G_BIG_ENDIAN); - g_return_val_if_fail (tr, FALSE); + prepare_itdb_for_write (fexp); - put24bint (cts, 0x00022e); - put24bint (cts, 0x5aa501); - /* starttime is in 256 ms incr. for shuffle */ - put24bint (cts, tr->starttime / 256); - put24bint (cts, 0); - put24bint (cts, 0); - put24bint (cts, tr->stoptime / 256); - put24bint (cts, 0); - put24bint (cts, 0); - /* track->volume ranges from -255 to +255 */ - /* we want 0 - 200 */ - put24bint (cts, ((tr->volume + 255) * 201) / 511); - - /* The next one should be 0x01 for MP3, - ** 0x02 for AAC, and 0x04 for WAV, but I can't find - ** a suitable indicator within the track structure? */ - /* JCS: let's do heuristic on tr->filetype which would contain - "MPEG audio file", "AAC audio file", "Protected AAC audio - file", "AAC audio book file", "WAV audio file" (or similar - if not written by gtkpod) */ - - if (haystack (tr->filetype, mp3_desc)) - put24bint (cts, 0x01); - else if (haystack (tr->filetype, mp4_desc)) - put24bint (cts, 0x02); - else if (haystack (tr->filetype, wav_desc)) - put24bint (cts, 0x04); - else - put24bint (cts, 0x01); /* default to mp3 */ + if (is_shuffle_2g (itdb->device)) { + /* Older iTunesSD format */ + put24bint (cts, itdb_tracks_number (itdb)); + put24bint (cts, 0x010600); + put24bint (cts, 0x12); /* size of header */ + put24bint (cts, 0x0); /* padding? */ + put24bint (cts, 0x0); + put24bint (cts, 0x0); + + for (gl=itdb->tracks; gl; gl=gl->next) + { + Itdb_Track *tr = gl->data; + gchar *path; + gunichar2 *path_utf16; + glong pathlen; + + g_return_val_if_fail (tr, FALSE); + + put24bint (cts, 0x00022e); + put24bint (cts, 0x5aa501); + /* starttime is in 256 ms incr. for shuffle */ + put24bint (cts, tr->starttime / 256); + put24bint (cts, 0); + put24bint (cts, 0); + put24bint (cts, tr->stoptime / 256); + put24bint (cts, 0); + put24bint (cts, 0); + /* track->volume ranges from -255 to +255 */ + /* we want 0 - 200 */ + put24bint (cts, ((tr->volume + 255) * 201) / 511); + + /* The next one should be 0x01 for MP3, + ** 0x02 for AAC, and 0x04 for WAV, but I can't find + ** a suitable indicator within the track structure? */ + /* JCS: let's do heuristic on tr->filetype which would contain + "MPEG audio file", "AAC audio file", "Protected AAC audio + file", "AAC audio book file", "WAV audio file" (or similar + if not written by gtkpod) */ + + put24bint (cts, convert_filetype (tr->filetype)); + + put24bint (cts, 0x200); + + path = g_strdup (tr->ipod_path); + /* shuffle uses forward slash separator, not colon */ + g_strdelimit (path, ":", '/'); + path_utf16 = g_utf8_to_utf16 (path, -1, NULL, &pathlen, NULL); + if (pathlen > 261) pathlen = 261; + fixup_little_utf16 (path_utf16); + put_data (cts, (gchar *)path_utf16, sizeof (gunichar2)*pathlen); + /* pad to 522 bytes */ + put16_n0 (cts, 261-pathlen); + g_free(path); + g_free(path_utf16); + + /* XXX FIXME: should depend on something, not hardcoded */ + put8int (cts, 0x1); /* song used in shuffle mode */ + put8int (cts, 0); /* song will not be bookmarkable */ + put8int (cts, 0); + } + }else { + /* Newer iTunesSD format */ + /* Add the main Header */ + write_bdhs(fexp); + + /* Add the Tracks Header */ + if (!write_hths(fexp)){ + g_set_error(&fexp->error, + ITDB_FILE_ERROR, + ITDB_FILE_ERROR_CORRUPT, + _("Error writing list of tracks (hths)")); + goto serr; + } - put24bint (cts, 0x200); - - path = g_strdup (tr->ipod_path); - /* shuffle uses forward slash separator, not colon */ - g_strdelimit (path, ":", '/'); - path_utf16 = g_utf8_to_utf16 (path, -1, NULL, &pathlen, NULL); - if (pathlen > 261) pathlen = 261; - fixup_little_utf16 (path_utf16); - put_data (cts, (gchar *)path_utf16, sizeof (gunichar2)*pathlen); - /* pad to 522 bytes */ - put16_n0 (cts, 261-pathlen); - g_free(path); - g_free(path_utf16); - - /* XXX FIXME: should depend on something, not hardcoded */ - put8int (cts, 0x1); /* song used in shuffle mode */ - put8int (cts, 0); /* song will not be bookmarkable */ - put8int (cts, 0); + /* Add the Playlist Header */ + if(!fexp->error && !write_hphs(fexp)){ + g_set_error(&fexp->error, + ITDB_FILE_ERROR, + ITDB_FILE_ERROR_CORRUPT, + _("Error writing playlists (hphs)")); + goto serr; + } } - if (!fexp->error) + if (!fexp->error) { if (!wcontents_write (cts)) g_propagate_error (&fexp->error, cts->error); - } - if (fexp->error) - { - g_propagate_error (error, fexp->error); - result = FALSE; - } + } +serr: + if (fexp->error) + { + g_propagate_error (error, fexp->error); + result = FALSE; + } wcontents_free (cts); g_free (fexp); diff -Nru libgpod-0.7.93/src/itdb_photoalbum.c libgpod-0.7.94/src/itdb_photoalbum.c --- libgpod-0.7.93/src/itdb_photoalbum.c 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/itdb_photoalbum.c 2010-08-30 22:40:32.000000000 +0100 @@ -91,9 +91,7 @@ saved (itdb_device_write_sysinfo() is called). */ - static Itdb_PhotoDB *itdb_photodb_new (void); -static void itdb_photodb_photoalbum_free (Itdb_PhotoAlbum *pa); /* Set @error with standard error message */ static void error_no_photos_dir (const gchar *mp, GError **error) @@ -337,7 +335,13 @@ return max_seen_id; } -static void itdb_photodb_photoalbum_free (Itdb_PhotoAlbum *album) +/** + * itdb_photodb_photoalbum_free: + * @album: an #Itdb_PhotoAlbum + * + * Frees the memory used by @album + */ +void itdb_photodb_photoalbum_free (Itdb_PhotoAlbum *album) { if (album) { @@ -681,8 +685,9 @@ Itdb_PhotoAlbum *album, gboolean remove_pics) { - g_return_if_fail (db); g_return_if_fail (album); + g_return_if_fail (album->photodb); + g_return_if_fail (db == NULL || album->photodb == db); /* if remove_pics, iterate over the photos within that album * and remove them from the database */ @@ -696,14 +701,31 @@ while (album->members) { Itdb_Artwork *photo = album->members->data; - itdb_photodb_remove_photo (db, NULL, photo); + itdb_photodb_remove_photo (album->photodb, NULL, photo); } } - db->photoalbums = g_list_remove (db->photoalbums, album); + itdb_photodb_photoalbum_unlink (album); itdb_photodb_photoalbum_free (album); } /** + * itdb_photodb_photoalbum_unlink: + * @album: an #Itdb_PhotoAlbum + * + * Removes @album from the #Itdb_PhotoDB it's associated with, but do not free + * memory. + * @album->photodb is set to NULL. + */ +void itdb_photodb_photoalbum_unlink (Itdb_PhotoAlbum *album) +{ + g_return_if_fail (album); + g_return_if_fail (album->photodb); + + album->photodb->photoalbums = g_list_remove (album->photodb->photoalbums, album); + album->photodb = NULL; +} + +/** * itdb_photodb_photoalbum_add_photo: * @db: the #Itdb_PhotoDB to act on * @album: the #Itdb_PhotoAlbum to add the photo to @@ -754,16 +776,52 @@ g_return_val_if_fail (db, NULL); g_return_val_if_fail (albumname, NULL); + album = itdb_photodb_photoalbum_new (albumname); + g_return_val_if_fail (album, NULL); + + itdb_photodb_photoalbum_add(db, album, pos); + return album; +} + +/** + * itdb_photodb_photoalbum_new: + * @albumname: name of the new album + * + * Creates an empty #Itdb_PhotoAlbum named @albumname + * + * Returns: the new #Itdb_PhotoAlbum, free it with + * itdb_photodb_photoalbum_free () when no longer needed + */ +Itdb_PhotoAlbum *itdb_photodb_photoalbum_new (const gchar *albumname) +{ + Itdb_PhotoAlbum *album; + + g_return_val_if_fail (albumname, NULL); + album = g_new0 (Itdb_PhotoAlbum, 1); album->album_type = 2; /* normal album, set to 1 for Photo Library */ - album->photodb = db; album->name = g_strdup(albumname); - db->photoalbums = g_list_insert (db->photoalbums, album, pos); return album; } /** + * itdb_photodb_photoalbum_add: + * @db: an #Itdb_PhotoDB + * @album: an #Itdb_PhotoAlbum + * @pos: position of the album to add + * + * Adds @album to @db->photoalbums at position @pos (or at the end if pos + * is -1).The @ib gets ownership of the @album and will take care of + * freeing the memory it uses when it's no longer necessary. + */ +void itdb_photodb_photoalbum_add (Itdb_PhotoDB *db, Itdb_PhotoAlbum *album, gint pos) +{ + album->photodb = db; + db->photoalbums = g_list_insert (db->photoalbums, album, pos); +} + +/** * itdb_photodb_write: * @photodb: the #Itdb_PhotoDB to write to disk * @error: return location for a #GError or NULL diff -Nru libgpod-0.7.93/src/itdb_playlist.c libgpod-0.7.94/src/itdb_playlist.c --- libgpod-0.7.93/src/itdb_playlist.c 2010-04-03 17:00:47.000000000 +0100 +++ libgpod-0.7.94/src/itdb_playlist.c 2010-08-30 22:40:32.000000000 +0100 @@ -1576,6 +1576,34 @@ } /** + * itdb_playlist_is_audiobooks: + * @pl: an #Itdb_Playlist + * + * Checks if @pl is an audiobook playlist + * + * Returns: TRUE if all tracks in @pl have a mediatype of ITDB_MEDIATYPE_AUDIOBOOK, + FALSE if there are no tracks or one track does not the correct type + * + */ +gboolean itdb_playlist_is_audiobooks (Itdb_Playlist *pl) +{ + GList *tl; + Itdb_Track *track; + + g_return_val_if_fail (pl, FALSE); + g_return_val_if_fail (pl->members, FALSE); + for (tl = pl->members; tl; tl = tl->next) + { + track = tl->data; + if (track->mediatype != ITDB_MEDIATYPE_AUDIOBOOK) + { + return FALSE; + } + } + return TRUE; +} + +/** * itdb_playlist_set_mpl: * @pl: an #Itdb_Playlist * diff -Nru libgpod-0.7.93/src/itdb_private.h libgpod-0.7.94/src/itdb_private.h --- libgpod-0.7.93/src/itdb_private.h 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/itdb_private.h 2010-08-31 22:00:23.000000000 +0100 @@ -42,6 +42,12 @@ not visible in iPod */ }; +enum ItdbShadowDBVersion { + ITDB_SHADOW_DB_UNKNOWN, + ITDB_SHADOW_DB_V1, + ITDB_SHADOW_DB_V2, +}; + /* always use itdb_playlists_is_podcasts() to check for podcasts PL */ enum ItdbPlFlag { /* types for playlist->podcastflag */ ITDB_PL_FLAG_NORM = 0, /* normal playlist, visible under diff -Nru libgpod-0.7.93/src/itdb_sysinfo_extended_parser.c libgpod-0.7.94/src/itdb_sysinfo_extended_parser.c --- libgpod-0.7.93/src/itdb_sysinfo_extended_parser.c 2009-12-10 20:59:55.000000000 +0000 +++ libgpod-0.7.94/src/itdb_sysinfo_extended_parser.c 2010-08-31 22:00:23.000000000 +0100 @@ -80,6 +80,7 @@ gint oem_id; gint oem_u; gint db_version; + int shadowdb_version; char *min_build_id; char *language; gboolean voice_memos_supported; @@ -218,6 +219,7 @@ { "GamesPlatformVersion", G_TYPE_INT, G_STRUCT_OFFSET (SysInfoIpodProperties, games_platform_version) }, { "RentalClockBias", G_TYPE_INT, G_STRUCT_OFFSET (SysInfoIpodProperties, rental_clock_bias) }, { "SQLiteDB", G_TYPE_BOOLEAN, G_STRUCT_OFFSET (SysInfoIpodProperties, sqlite_db) }, + { "ShadowDBVersion", G_TYPE_INT, G_STRUCT_OFFSET (SysInfoIpodProperties, shadowdb_version) }, { NULL, G_TYPE_NONE, 0 } }; @@ -231,7 +233,9 @@ /* { "PixelFormat", G_TYPE_STRING, G_STRUCT_OFFSET (Itdb_ArtworkFormat, format) },*/ { "Interlaced", G_TYPE_BOOLEAN, G_STRUCT_OFFSET (Itdb_ArtworkFormat, interlaced) }, { "Crop", G_TYPE_BOOLEAN, G_STRUCT_OFFSET (Itdb_ArtworkFormat, crop) }, - { "AlignRowBytes", G_TYPE_BOOLEAN, G_STRUCT_OFFSET (Itdb_ArtworkFormat, align_row_bytes) }, +/* AlignRowBytes is an older version of RowBytesAlignment, it's equivalent + * to a value of 4 for RowBytesAlignemnt */ +/* { "AlignRowBytes", G_TYPE_BOOLEAN, G_STRUCT_OFFSET (Itdb_ArtworkFormat, align_row_bytes) },*/ { "Rotation", G_TYPE_INT, G_STRUCT_OFFSET (Itdb_ArtworkFormat, rotation) }, /* BackColor needs to be converted to a gint, this is special-cased * in g_value_to_image_format */ @@ -239,6 +243,7 @@ { "ColorAdjustment", G_TYPE_INT, G_STRUCT_OFFSET (Itdb_ArtworkFormat, color_adjustment) }, { "GammaAdjustment", G_TYPE_DOUBLE, G_STRUCT_OFFSET (Itdb_ArtworkFormat, gamma) }, { "AssociatedFormat", G_TYPE_INT, G_STRUCT_OFFSET (Itdb_ArtworkFormat, associated_format) }, + { "RowBytesAlignment", G_TYPE_INT, G_STRUCT_OFFSET (Itdb_ArtworkFormat, row_bytes_alignment) }, { NULL, G_TYPE_NONE, 0 } }; @@ -457,6 +462,14 @@ dict_to_struct (dict, sysinfo_image_format_fields_mapping, img_spec); + if (get_boolean (dict, "AlignRowBytes") + && (img_spec->row_bytes_alignment == 0)) { + /* at least the nano3g has the AlignRowBytes key with no + * RowBytesAlignment key. + */ + img_spec->row_bytes_alignment = 4; + } + return img_spec; } @@ -712,3 +725,10 @@ g_return_val_if_fail (props != NULL, FALSE); return props->db_version; } + +gint +itdb_sysinfo_properties_get_shadow_db_version (const SysInfoIpodProperties *props) +{ + g_return_val_if_fail (props != NULL, 0); + return props->shadowdb_version; +} diff -Nru libgpod-0.7.93/src/itdb_sysinfo_extended_parser.h libgpod-0.7.94/src/itdb_sysinfo_extended_parser.h --- libgpod-0.7.93/src/itdb_sysinfo_extended_parser.h 2009-12-10 20:59:55.000000000 +0000 +++ libgpod-0.7.94/src/itdb_sysinfo_extended_parser.h 2010-08-30 22:40:32.000000000 +0100 @@ -72,6 +72,8 @@ itdb_sysinfo_properties_get_family_id (const SysInfoIpodProperties *props); G_GNUC_INTERNAL gint itdb_sysinfo_properties_get_db_version (const SysInfoIpodProperties *props); +G_GNUC_INTERNAL gint +itdb_sysinfo_properties_get_shadow_db_version (const SysInfoIpodProperties *props); G_END_DECLS diff -Nru libgpod-0.7.93/src/itdb_zlib.c libgpod-0.7.94/src/itdb_zlib.c --- libgpod-0.7.93/src/itdb_zlib.c 2009-12-10 20:59:55.000000000 +0000 +++ libgpod-0.7.94/src/itdb_zlib.c 2010-08-30 22:40:32.000000000 +0100 @@ -112,8 +112,8 @@ cts = fimp->fcontents; - cSize = *(guint32*)(cts->contents+8); - headerSize = *(guint32*)(cts->contents+4); + cSize = GUINT32_FROM_LE (*(guint32*)(cts->contents+8)); + headerSize = GUINT32_FROM_LE (*(guint32*)(cts->contents+4)); uSize = 0; if (headerSize < 0xA9) { diff -Nru libgpod-0.7.93/src/ithumb-writer.c libgpod-0.7.94/src/ithumb-writer.c --- libgpod-0.7.93/src/ithumb-writer.c 2010-04-04 22:00:15.000000000 +0100 +++ libgpod-0.7.94/src/ithumb-writer.c 2010-08-30 22:40:32.000000000 +0100 @@ -87,6 +87,24 @@ return get_gint16 (r | g | b, byte_order); } +static guint get_aligned_width (const Itdb_ArtworkFormat *img_info, + gsize pixel_size) +{ + guint width; + guint alignment = img_info->row_bytes_alignment/pixel_size; + + if (alignment * pixel_size != img_info->row_bytes_alignment) { + g_warning ("RowBytesAlignment (%d) not a multiple of pixel size (%"G_GSIZE_FORMAT")", + img_info->row_bytes_alignment, pixel_size); + } + + width = img_info->width; + if ((alignment != 0) && ((img_info->width % alignment) != 0)) { + width += alignment - (img_info->width % alignment); + } + return width; +} + static guint16 * pack_RGB_565 (GdkPixbuf *pixbuf, const Itdb_ArtworkFormat *img_info, gint horizontal_padding, gint vertical_padding, @@ -109,13 +127,8 @@ g_return_val_if_fail (((width + horizontal_padding) <= img_info->width), NULL); g_return_val_if_fail (((height + vertical_padding) <= img_info->height), NULL); - if ((img_info->align_row_bytes) && ((img_info->width % 2) != 0)) { - /* each pixel is 2 bytes, to align rows on 4 bytes boundaries, - * width must be a multiple of 2 */ - dest_width = img_info->width + 1; - } else { - dest_width = img_info->width; - } + + dest_width = get_aligned_width (img_info, sizeof(guint16)); /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); @@ -134,11 +147,6 @@ result[line + w] = get_RGB_565_pixel (img_info->back_color, byte_order); } - line += (height+vertical_padding)*dest_width; - for (w = 0 ; w < dest_width; w++) { - result[line + w] = get_RGB_565_pixel (img_info->back_color, - byte_order); - } } for (h = 0; h < height; h++) { @@ -162,6 +170,15 @@ result[line + w] = packed_pixel; } } + + for (h = height + vertical_padding; h < img_info->height; h++) { + gint line = h * dest_width; + gint w; + for (w = 0 ; w < dest_width; w++) { + result[line + w] = get_RGB_565_pixel (img_info->back_color, + byte_order); + } + } return result; } @@ -217,13 +234,7 @@ g_return_val_if_fail (((width + horizontal_padding) <= img_info->width), NULL); g_return_val_if_fail (((height + vertical_padding) <= img_info->height), NULL); - if ((img_info->align_row_bytes) && ((img_info->width % 2) != 0)) { - /* each pixel is 2 bytes, to align rows on 4 bytes boundaries, - * width must be a multiple of 2 */ - dest_width = img_info->width + 1; - } else { - dest_width = img_info->width; - } + dest_width = get_aligned_width (img_info, sizeof(guint16)); /* Make sure thumb size calculation won't overflow */ g_return_val_if_fail (dest_width != 0, NULL); @@ -242,11 +253,6 @@ result[line + w] = get_RGB_555_pixel (img_info->back_color, byte_order, TRUE); } - line += (height+vertical_padding)*dest_width; - for (w = 0 ; w < dest_width; w++) { - result[line + w] = get_RGB_555_pixel (img_info->back_color, - byte_order, TRUE); - } } for (h = 0; h < height; h++) { @@ -271,6 +277,15 @@ result[line + w] = packed_pixel; } } + + for (h = height + vertical_padding; h < img_info->height; h++) { + gint line = h * dest_width; + gint w; + for (w = 0 ; w < dest_width; w++) { + result[line + w] = get_RGB_555_pixel (img_info->back_color, + byte_order, TRUE); + } + } return result; } @@ -342,11 +357,6 @@ result[line + w] = get_RGB_888_pixel (img_info->back_color, byte_order, TRUE); } - line += (height+vertical_padding)*img_info->width; - for (w = 0 ; w < img_info->width; w++) { - result[line + w] = get_RGB_888_pixel (img_info->back_color, - byte_order, TRUE); - } } for (h = 0; h < height; h++) { @@ -371,6 +381,16 @@ result[line + w] = packed_pixel; } } + + for (h = height + vertical_padding; h < img_info->height; h++) { + gint line = h*img_info->width; + gint w; + + for (w = 0 ; w < img_info->width; w++) { + result[line + w] = get_RGB_888_pixel (img_info->back_color, + byte_order, TRUE); + } + } return (guint16 *)result; } @@ -432,11 +452,9 @@ if (pixels) { gint row_stride; - if ((img_info->align_row_bytes) && ((img_info->width % 2) != 0)) { - row_stride = img_info->width + 1; - } else { - row_stride = img_info->width; - } + + row_stride = get_aligned_width (img_info, sizeof(guint16)); + deranged_pixels = derange_pixels (NULL, pixels, img_info->width, img_info->height, row_stride); @@ -899,25 +917,6 @@ return TRUE; } -static void set_thumb_padding (iThumbWriter *writer, - Itdb_Thumb_Ipod_Item *thumb, - gint width, gint height) -{ - switch (writer->db_type) - { - case DB_TYPE_PHOTO: - thumb->horizontal_padding = (writer->img_info->width - width)/2; - thumb->vertical_padding = (writer->img_info->height - height)/2; - break; - case DB_TYPE_ITUNES: - thumb->horizontal_padding = 0; - thumb->vertical_padding = 0; - break; - default: - g_return_if_reached (); - } -} - static GdkPixbuf *pixbuf_from_image_data (guchar *image_data, gsize len) { GdkPixbuf *pixbuf; @@ -1007,8 +1006,9 @@ thumb_ipod = itdb_thumb_new_item_from_ipod (writer->img_info); g_assert (thumb_ipod != NULL); - set_thumb_padding (writer, thumb_ipod, width, height); + thumb_ipod->horizontal_padding = (writer->img_info->width - width)/2; + thumb_ipod->vertical_padding = (writer->img_info->height - height)/2; /* The thumbnail width/height is inclusive padding */ thumb_ipod->width = thumb_ipod->horizontal_padding + width; thumb_ipod->height = thumb_ipod->vertical_padding + height; diff -Nru libgpod-0.7.93/src/Makefile.in libgpod-0.7.94/src/Makefile.in --- libgpod-0.7.93/src/Makefile.in 2010-04-06 21:54:19.000000000 +0100 +++ libgpod-0.7.94/src/Makefile.in 2010-08-31 22:10:48.000000000 +0100 @@ -45,8 +45,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -176,7 +176,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -224,8 +228,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -296,6 +304,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/tests/Makefile.in libgpod-0.7.94/tests/Makefile.in --- libgpod-0.7.93/tests/Makefile.in 2010-04-06 21:54:20.000000000 +0100 +++ libgpod-0.7.94/tests/Makefile.in 2010-08-31 22:10:48.000000000 +0100 @@ -45,8 +45,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -223,7 +223,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -271,8 +275,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -343,6 +351,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/TODO libgpod-0.7.94/TODO --- libgpod-0.7.93/TODO 2010-03-28 20:34:41.000000000 +0100 +++ libgpod-0.7.94/TODO 2010-05-10 20:11:18.000000000 +0100 @@ -10,3 +10,6 @@ * reproduce wuda's photo bug * reproduce bug with python bindings (#2946863) * look at rating/playcount bug (#2894898) + +* empty playlists? +* playlists added to multiple Itdbs diff -Nru libgpod-0.7.93/tools/generic-callout.c libgpod-0.7.94/tools/generic-callout.c --- libgpod-0.7.93/tools/generic-callout.c 2010-04-06 19:41:45.000000000 +0100 +++ libgpod-0.7.94/tools/generic-callout.c 2010-08-30 22:40:32.000000000 +0100 @@ -144,6 +144,7 @@ case ITDB_IPOD_GENERATION_IPHONE_1: case ITDB_IPOD_GENERATION_IPHONE_2: case ITDB_IPOD_GENERATION_IPHONE_3: + case ITDB_IPOD_GENERATION_IPHONE_4: return g_strdup ("phone"); case ITDB_IPOD_GENERATION_IPAD_1: return g_strdup ("ipad"); @@ -216,6 +217,8 @@ return 2.0; case ITDB_IPOD_GENERATION_IPHONE_3: return 3.0; + case ITDB_IPOD_GENERATION_IPHONE_4: + return 4.0; case ITDB_IPOD_GENERATION_IPAD_1: return 1.0; case ITDB_IPOD_GENERATION_MOBILE: @@ -416,6 +419,8 @@ return g_strdup ("phone-apple-iphone-3g"); case ITDB_IPOD_GENERATION_IPHONE_3: return g_strdup ("phone-apple-iphone-3gs"); + case ITDB_IPOD_GENERATION_IPHONE_4: + return g_strdup ("phone-apple-iphone-4g"); case ITDB_IPOD_GENERATION_IPAD_1: return g_strdup ("computer-apple-ipad"); case ITDB_IPOD_GENERATION_MOBILE: @@ -603,7 +608,17 @@ devdirpath = itdb_get_device_dir (mountpoint); /* Make sure the device dir exists (not necessarily true on * Shuffles */ - g_mkdir (devdirpath, 0777); + if (devdirpath == NULL) { + gchar *itunesdirpath; + + itunesdirpath = itdb_get_itunes_dir (mountpoint); + if (itunesdirpath == NULL) { + return FALSE; + } + devdirpath = g_build_filename (itunesdirpath, "Device", NULL); + g_free (itunesdirpath); + g_mkdir (devdirpath, 0777); + } filename = g_build_filename (devdirpath, "SysInfoExtended", NULL); g_free (devdirpath); if (filename == NULL) { diff -Nru libgpod-0.7.93/tools/Makefile.in libgpod-0.7.94/tools/Makefile.in --- libgpod-0.7.93/tools/Makefile.in 2010-04-06 21:54:20.000000000 +0100 +++ libgpod-0.7.94/tools/Makefile.in 2010-08-31 22:10:48.000000000 +0100 @@ -66,8 +66,8 @@ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ - $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mono.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs @@ -275,7 +275,11 @@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GDKPIXBUF_REQ = @GDKPIXBUF_REQ@ +GDKSHARP_CFLAGS = @GDKSHARP_CFLAGS@ +GDKSHARP_LIBS = @GDKSHARP_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GLIBSHARP_CFLAGS = @GLIBSHARP_CFLAGS@ +GLIBSHARP_LIBS = @GLIBSHARP_LIBS@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GMOFILES = @GMOFILES@ @@ -323,8 +327,12 @@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ +MCS = @MCS@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ +MONO = @MONO@ +MONO_MODULE_CFLAGS = @MONO_MODULE_CFLAGS@ +MONO_MODULE_LIBS = @MONO_MODULE_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ @@ -395,6 +403,7 @@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ +expanded_libdir = @expanded_libdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ diff -Nru libgpod-0.7.93/tools/read-sysinfoextended.c libgpod-0.7.94/tools/read-sysinfoextended.c --- libgpod-0.7.93/tools/read-sysinfoextended.c 2010-02-09 22:48:31.000000000 +0000 +++ libgpod-0.7.94/tools/read-sysinfoextended.c 2010-08-30 22:40:32.000000000 +0100 @@ -25,6 +25,7 @@ #include #include +#include #include #include "itdb.h" @@ -38,6 +39,39 @@ extern char *read_sysinfo_extended_from_usb (guint bus_number, guint device_address); #endif +static gboolean write_sysinfo_extended (const char *mountpoint, + const char *data) +{ + char *filename; + char *devdirpath; + gboolean result; + + devdirpath = itdb_get_device_dir (mountpoint); + /* Make sure the device dir exists (not necessarily true on + * Shuffles */ + if (devdirpath == NULL) { + gchar *itunesdirpath; + + itunesdirpath = itdb_get_itunes_dir (mountpoint); + if (itunesdirpath == NULL) { + return FALSE; + } + devdirpath = g_build_filename (itunesdirpath, "Device", NULL); + g_free (itunesdirpath); + g_mkdir (devdirpath, 0777); + } + filename = g_build_filename (devdirpath, "SysInfoExtended", NULL); + g_free (devdirpath); + if (filename == NULL) { + return FALSE; + } + + result = g_file_set_contents (filename, data, -1, NULL); + g_free (filename); + + return result; +} + int main (int argc, char **argv) { @@ -86,34 +120,14 @@ return 1; } else { const char *mountpoint = argv[argc-1]; - char *device_path; - char *filename; - gboolean success; - - device_path = itdb_get_device_dir (mountpoint); - if (device_path == NULL) { - g_free (xml); - g_print (_("Couldn't resolve Device directory path on %s\n"), - mountpoint); - return 1; - } - - filename = g_build_filename (device_path, "SysInfoExtended", NULL); - g_free (device_path); - if (filename == NULL) { - g_print (_("Couldn't resolve SysInfoExtended path on %s"), - mountpoint); - g_free (xml); - return 1; - } - - success = g_file_set_contents (filename, xml, -1, NULL); - g_free (xml); - g_free (filename); - if (!success) { - g_print (_("Couldn't write SysInfoExtended to %s"), mountpoint); - return 1; - } + gboolean success; + + success = write_sysinfo_extended (mountpoint, xml); + g_free (xml); + if (!success) { + g_print (_("Couldn't write SysInfoExtended to %s"), mountpoint); + return 1; + } } return 0;