You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(132) |
Dec
(135) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(87) |
Feb
(82) |
Mar
(117) |
Apr
(108) |
May
(231) |
Jun
(265) |
Jul
(31) |
Aug
(32) |
Sep
(89) |
Oct
(50) |
Nov
(112) |
Dec
(92) |
2007 |
Jan
(136) |
Feb
(82) |
Mar
(66) |
Apr
(104) |
May
(74) |
Jun
(103) |
Jul
(50) |
Aug
(23) |
Sep
(22) |
Oct
(39) |
Nov
(56) |
Dec
(88) |
2008 |
Jan
(51) |
Feb
(6) |
Mar
(6) |
Apr
(9) |
May
(39) |
Jun
(24) |
Jul
(48) |
Aug
(40) |
Sep
(9) |
Oct
(21) |
Nov
(12) |
Dec
(31) |
2009 |
Jan
(68) |
Feb
(14) |
Mar
(29) |
Apr
(40) |
May
(27) |
Jun
(9) |
Jul
(1) |
Aug
(10) |
Sep
(3) |
Oct
(7) |
Nov
(11) |
Dec
(165) |
2010 |
Jan
(72) |
Feb
(49) |
Mar
(30) |
Apr
(41) |
May
(17) |
Jun
(13) |
Jul
(99) |
Aug
(88) |
Sep
(59) |
Oct
(23) |
Nov
(11) |
Dec
(44) |
2011 |
Jan
(50) |
Feb
(28) |
Mar
(27) |
Apr
(18) |
May
(38) |
Jun
(5) |
Jul
(59) |
Aug
(7) |
Sep
(44) |
Oct
(12) |
Nov
(7) |
Dec
(10) |
2012 |
Jan
(8) |
Feb
(11) |
Mar
(17) |
Apr
(11) |
May
(3) |
Jun
(11) |
Jul
(26) |
Aug
(3) |
Sep
|
Oct
(17) |
Nov
(9) |
Dec
(1) |
2013 |
Jan
|
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Christophe F. <te...@us...> - 2011-07-24 12:11:23
|
The signed tag '0.8.2' was created. Tagger: Christophe Fergeau <cfe...@re...> Date: Sun Jul 24 14:10:48 2011 +0200 0.8.2 release Changes since the last tag '0.8.0': Adeodato Simó (2): fix parsing of timezone on some Classic python: add Itdb_Device::timezone_shift to the binding Alexander Weinert (1): fix compilation with --pedantic Bastien Nocera (2): Fix warnings with GCC 4.6 Require gmodule-2.0 for the blob loading code Christian Krause (2): [mono] fix alignment issues on x86 fix parsing of SysInfoExtended for nano 6g Christophe Fergeau (49): use autoupdate to modernize configure.ac adjust versioning to current autotools pratices remove recent playcount file after db writing attempt to bring sanity in shuffle generations add 4th generation Shuffles generate bzip2 tarballs Merge branch 'autotools' Add ebook support fix warning in test compilation Merge branch 'next' add 8GB Orange Nano 6g serial number add 16GB Blue Nano 6g serial number add 8GB Blue Nano 6g serial number Add 16GB Black Nano 6g serial number remove duplicate AC_CONFIG_SRCDIR factor common code in hash functions fix libgpod version number fix nano5g support failing to parse recent playcounts isn't fatal add more error reporting to sqlite generation add more nano6g serial numbers use appropriate compile flags for libimobiledevice report libimobiledevice dependency in .pc file use unsigned int for file size in iTunesDB [mono] raise mono versioning since ABI was broken python: fix python binding build python: allow passing mountpoint to test program fix inverted test in playcount check make smart playlist string comparisons case-insensitive usb: return NULL when nothing could be read from USB don't crash on NULL in itdb_sysinfo_properties_free udev: handle invalid XML files read from devices udev: add g_debug to help diagosing bugs udev: set log domain for udev helpers udev: rework udev rule to handle Shuffle 4g fix (again) creation of non-existing Device dirs sqlite: don't leak 'composer' statement python: make mountpoint arg optional in examples remove internal GChecksum copy optionally provide g_int64_{hash,equal} add optional g_checksum_reset implementation refresh po files disable HAL support by default enable udev by default add --with-udev-dir add more flags to make distcheck update NEWS for 0.8.2 release NEWS: add note about udev/hal changes 0.8.2 release James Burton (1): fix itdb_free crash Martin Szulecki (2): [sqlitedb] Remove the i_tunes_u column to fix a post process error [sqlitedb] Implement iPhoneSortKey and iPhoneSortSection sqlite functions Nikias Bassen (4): read genius_cuid (mhsd type 9) and also write it back write empty mhsd of type 10 add hashAB support via external module Do not write mhips for mhsd type 5 playlists phantomjinx (1): Fixed memory leaks Éric Lassauge (1): updated French translation |
From: Christophe F. <te...@us...> - 2011-07-24 12:10:00
|
commit 380b3cb7f3f1aae2c26faa9a471a01604aca7445 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 24 00:37:36 2011 +0200 0.8.2 release configure.ac | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) --- diff --git a/configure.ac b/configure.ac index 7d9aa38..669d433 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ AC_PREREQ(2.65) -AC_INIT([libgpod], [0.8.0]) +AC_INIT([libgpod], [0.8.2]) AC_CONFIG_SRCDIR([configure.ac]) AC_CONFIG_MACRO_DIR([m4]) @@ -11,7 +11,7 @@ dnl libtool versioning # changes to the signature and the semantic) # ? :+1 : ? == just internal changes # CURRENT : REVISION : AGE -LIBGPOD_SO_VERSION=7:1:3 +LIBGPOD_SO_VERSION=7:2:3 AC_SUBST(LIBGPOD_SO_VERSION) AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip]) |
From: Christophe F. <te...@us...> - 2011-07-24 12:09:53
|
commit 8f385165c5eee1538b898d9176ab609f5e6c7019 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 24 13:10:31 2011 +0200 NEWS: add note about udev/hal changes Mention that the udev helper is now built by default. NEWS | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) --- diff --git a/NEWS b/NEWS index a434c96..def943e 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,8 @@ However, libgpod now has a mechanism to dynamically load a module named $libdir/libgpod/libhashab.so. This will be useful to easily enable support for these devices if someone comes up with a way to compute the music database checksum. +The udev helper is now built by default, and the HAL callout is no longer +built by default, use --enable-udev/--with-hal if you need ot change that. * fix mono binding on 32 bit systems (Christian Krause) * better iOS 4.3 support (Martin Szulecki, Nikias Bassen) |
From: Christophe F. <te...@us...> - 2011-07-23 22:37:19
|
commit 0ee5463609dc03bc4f266bbb7e6ac202cc1bc550 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 24 00:33:44 2011 +0200 update NEWS for 0.8.2 release NEWS | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) --- diff --git a/NEWS b/NEWS index 3bddd88..a434c96 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,23 @@ +Overview of changes in libgpod 0.8.2 +==================================== + +iPhone 4/iPod Touch 4/iPad/Nano 6g are still unsupported in this release. +However, libgpod now has a mechanism to dynamically load +a module named $libdir/libgpod/libhashab.so. This will be useful to +easily enable support for these devices if someone comes up with a +way to compute the music database checksum. + +* fix mono binding on 32 bit systems (Christian Krause) +* better iOS 4.3 support (Martin Szulecki, Nikias Bassen) +* dynamic loader for libhashab.so (Nikias Bassen) +* make smartplaylists case-insensitive to match what iTunes does +* (Christophe Fergeau) +* more robust Shuffle support in udev helper (Christophe Fergeau) +* various compilation fixes and build system improvements (Alexander + Weinert, Bastien Nocera, Christophe Fergeau) +* bug fixes (phantomjinx, James Burton, Christophe Fergeau) +* updated French translation (Éric Lassauge) + Overview of changes in libgpod 0.8.0 ==================================== |
From: Christophe F. <te...@us...> - 2011-07-23 17:09:06
|
commit 6380f0308b7e61b0472e004d3cebfd5e5e8d932f Author: Christophe Fergeau <cfe...@re...> Date: Fri Jul 22 18:23:12 2011 +0200 add more flags to make distcheck We want to try compiling as much code as possible during make distcheck, so build python and mono bindings as well as the udev helpers. Makefile.am | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) --- diff --git a/Makefile.am b/Makefile.am index 14c4d1d..942d4fb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,9 +1,10 @@ SUBDIRS=src tools tests po m4 docs bindings # build documentation when doing a distcheck. -DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc \ - --with-hal-callouts-dir="`pwd`/hal/scripts" \ - --with-hal-fdi-dir="`pwd`/hal/fdi" +DISTCHECK_CONFIGURE_FLAGS = \ + --enable-gtk-doc --with-mono \ + --with-python --without-hal \ + --enable-udev --with-udev-dir=`pwd`/udev ACLOCAL_AMFLAGS = -I m4 |
From: Christophe F. <te...@us...> - 2011-07-23 17:09:00
|
commit 1a10a13a900f476aa92e9d9edc38c09708d96483 Author: Christophe Fergeau <cfe...@re...> Date: Fri Jul 22 18:19:31 2011 +0200 add --with-udev-dir This allows to install the udev helper to a different directory. This will mainly be useful for make distcheck configure.ac | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) --- diff --git a/configure.ac b/configure.ac index 2078a8b..7d9aa38 100644 --- a/configure.ac +++ b/configure.ac @@ -172,7 +172,11 @@ AC_ARG_ENABLE(udev, fi], [enable_udev=yes]) AM_CONDITIONAL(USE_UDEV, test x"$enable_udev" = xyes) -AC_SUBST([udevdir], [/lib/udev]) +udevdir="/lib/udev" +AC_ARG_WITH([udev-dir], + AS_HELP_STRING([--with-udev-dir=DIR],[Directory where udev expects helper programs to be located]), + [udevdir="$with_udev_dir"]) +AC_SUBST([udevdir], [$udevdir]) dnl *********************************************************************** dnl * for the udev and hal callouts, we need a temporary directory to |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:53
|
commit b19e306303b86ee649249a34817b4398190e1fc1 Author: Christophe Fergeau <cfe...@re...> Date: Fri Jul 22 18:18:52 2011 +0200 enable udev by default udev is the preferred way of reacting to device hotplug events, default to building libgpod udev helpers. They can still be explicitly disabled if needed. configure.ac | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) --- diff --git a/configure.ac b/configure.ac index b0da6ae..2078a8b 100644 --- a/configure.ac +++ b/configure.ac @@ -161,16 +161,16 @@ AM_CONDITIONAL(HAVE_LIBIMOBILEDEVICE, test x"$enable_libimobiledevice" = xyes) dnl *********************************************************************** dnl * udev can be used to run a callout as an alternative to the hal callout dnl * nowadays (2009), it's the recommended way of having callouts, so -dnl * it should be preferred over HAL +dnl * it should be preferred over HAL, and it's enabled by default. dnl *********************************************************************** AC_ARG_ENABLE(udev, [AS_HELP_STRING([--enable-udev],[Enable udev callout])], - [if test $enableval = "yes" ; then - enable_udev=yes + [if test x"$enableval" = "xno" ; then + enable_udev=no else - enable_udev=no + enable_udev=yes fi], - [enable_udev=no]) + [enable_udev=yes]) AM_CONDITIONAL(USE_UDEV, test x"$enable_udev" = xyes) AC_SUBST([udevdir], [/lib/udev]) |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:47
|
commit c41dc42c854daacbca61e0fd4b9f853deb46c628 Author: Christophe Fergeau <cfe...@re...> Date: Fri Jul 22 18:17:23 2011 +0200 disable HAL support by default HAL has been deprecated for some time now, stop automatically building support for it when possible. This is the first step towards eventual removal of that code one day. configure.ac | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-) --- diff --git a/configure.ac b/configure.ac index 4049a09..b0da6ae 100644 --- a/configure.ac +++ b/configure.ac @@ -107,12 +107,11 @@ AC_SUBST(Z_LIBS) AM_CONDITIONAL(HAVE_ZLIB, test x"$have_zlib" = xyes) dnl *********************************************************************** -dnl * HAL is optional, but is required if you want things to "just work" -dnl * when a recent iPod is plugged in -dnl * libgpod by itself doesn't use HAL at all, HAL is just used to build a -dnl * helper program which is then installed as a HAL callout +dnl * HAL used to be required for iPod hotplug to "just work". However, it +dnl * has been deprecated in favour of udev-based code, so it's now +dnl * disabled by default. dnl *********************************************************************** -AC_ARG_WITH(hal, AS_HELP_STRING([--without-hal],[Disable HAL support])) +AC_ARG_WITH(hal, AS_HELP_STRING([--with-hal],[Enable HAL support]),, [with_hal=no]) hal_callouts_dir="`$PKG_CONFIG --variable libdir hal`/hal/scripts" AC_ARG_WITH(hal_callouts_dir, AS_HELP_STRING([--with-hal-callouts-dir=DIR],[Directory where HAL expects its callout scripts to be located]),, @@ -126,7 +125,7 @@ AC_ARG_WITH(hal_fdi_dir, AS_HELP_STRING([--with-hal-fdi-dir=DIR],[Directory wher HALFDIDIR="$with_hal_fdi_dir" AC_SUBST(HALFDIDIR) -if test "x$with_hal" != "xno"; then +if test "x$with_hal" = "xyes"; then PKG_CHECK_MODULES(HAL, hal >= 0.5 hal < 0.6, enable_hal=yes, enable_hal=no) if test "x$enable_hal" != "xyes" -a "x$with_hal" = "xyes"; then AC_MSG_ERROR([HAL support explicitly requested but HAL couldn't be found]) |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:40
|
commit 26fab007c840ebd03fe39a1969d22e6b175e91ba Author: Alexander Weinert <ale...@gm...> Date: Fri Jul 22 16:30:21 2011 +0200 fix compilation with --pedantic Remove trailing ',' in the last member of enums. src/itdb.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) --- diff --git a/src/itdb.h b/src/itdb.h index 774a5c7..858cae7 100644 --- a/src/itdb.h +++ b/src/itdb.h @@ -411,7 +411,7 @@ typedef enum { ITDB_LIMITSORT_MOST_RECENTLY_PLAYED = 0x15, ITDB_LIMITSORT_LEAST_RECENTLY_PLAYED = 0x80000015,/* See note above */ ITDB_LIMITSORT_HIGHEST_RATING = 0x17, - ITDB_LIMITSORT_LOWEST_RATING = 0x80000017, /* See note above */ + ITDB_LIMITSORT_LOWEST_RATING = 0x80000017 /* See note above */ } ItdbLimitSort; /** @@ -502,7 +502,7 @@ typedef enum { ITDB_SPLACTION_IS_NOT = 0x03000001, ITDB_SPLACTION_DOES_NOT_CONTAIN = 0x03000002, ITDB_SPLACTION_DOES_NOT_START_WITH = 0x03000004, - ITDB_SPLACTION_DOES_NOT_END_WITH = 0x03000008, + ITDB_SPLACTION_DOES_NOT_END_WITH = 0x03000008 } ItdbSPLAction; /** @@ -579,7 +579,7 @@ typedef enum typedef enum { ITDB_SPLACTION_LAST_DAYS_VALUE = 86400, /* nr of secs in 24 hours */ ITDB_SPLACTION_LAST_WEEKS_VALUE = 604800, /* nr of secs in 7 days */ - ITDB_SPLACTION_LAST_MONTHS_VALUE = 2628000,/* nr of secs in 30.4167 + ITDB_SPLACTION_LAST_MONTHS_VALUE = 2628000 /* nr of secs in 30.4167 days ~= 1 month */ } ItdbSPLActionLast; |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:27
|
commit 722f80652bb114773e3961de8a405d63b9e9add5 Author: Éric Lassauge <las...@us...> Date: Tue Jul 19 22:20:35 2011 +0200 updated French translation po/fr.po | 566 +++++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 343 insertions(+), 223 deletions(-) --- diff --git a/po/fr.po b/po/fr.po index a655270..6c79e5a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,48 +1,40 @@ # French language translation for gtkpod -# Copyright (C) 2005-2008 Éric Lassauge +# Copyright (C) 2005-2011 Éric Lassauge # Copyright (C) 2003 David Le Brun # # -# Éric Lassauge <las...@us...>, 2008. +# Éric Lassauge <las...@us...>, 2008, 2011. # David Le Brun <da...@dy...>, 2003. # Alain Portal <ala...@fr...>, 2010. msgid "" msgstr "" -"Project-Id-Version: libgpod-0.7.0\n" +"Project-Id-Version: libgpod-0.8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-03 16:08-0400\n" -"PO-Revision-Date: 2010-01-22 15:02+0100\n" -"Last-Translator: Alain Portal <ala...@fr...>\n" -"Language-Team: French <kde...@kd...>\n" +"POT-Creation-Date: 2011-07-19 22:16+0200\n" +"PO-Revision-Date: 2011-01-10 18:52+0100\n" +"Last-Translator: Éric Lassauge <lassauge {AT} users {dot} sourceforge {dot} " +"net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -"X-Generator: Lokalize 1.0\n" -#: ../src/db-artwork-parser.c:140 +#: ../src/db-artwork-parser.c:141 #, c-format msgid "Unexpected mhod string type: %d\n" msgstr "Type de chaîne mhod inattendu : %d\n" -#: ../src/db-artwork-parser.c:460 +#: ../src/db-artwork-parser.c:461 #, c-format msgid "Unexpected mhsd index: %d\n" msgstr "Index mhsd inattendu : %d\n" -#: ../src/db-artwork-parser.c:540 +#: ../src/db-artwork-parser.c:541 #, c-format msgid "Could not find corresponding track (dbid: %s) for artwork entry.\n" msgstr "Impossible de trouver la piste (dbid : %s) pour l'image.\n" -#: ../src/db-artwork-parser.c:548 -#, c-format -msgid "iTunesDB and ArtworkDB artwork sizes inconsistent (%d+%d != %d)\n" -msgstr "" -"Tailles incohérentes pour l'image entre iTunesDB et ArtworkDB (%d+%d != %" -"d)\n" - -#: ../src/db-image-parser.c:91 +#: ../src/db-image-parser.c:90 #, c-format msgid "Unexpected image type in mhni: %d, offset: %d\n" msgstr "Type d'image inattendu dans mhni : %d, offset : %d\n" @@ -58,12 +50,12 @@ msgstr "Impossible d'accéder au fichier « %s »." msgid "Artwork support not compiled into libgpod." msgstr "Pas de prise en charge des images dans libgpod." -#: ../src/itdb_artwork.c:668 +#: ../src/itdb_artwork.c:651 #, c-format msgid "Could not find on iPod: '%s'\n" msgstr "Impossible de trouver « %s » sur l'iPod\n" -#: ../src/itdb_artwork.c:828 +#: ../src/itdb_artwork.c:830 #, c-format msgid "" "Unable to retrieve thumbnail (appears to be on iPod, but no image info " @@ -72,292 +64,355 @@ msgstr "" "Impossible de récupérer l'imagette (apparemment sur l'iPod, mais aucune info " "d'image disponible : fichier : « %s »\n" -#: ../src/itdb_device.c:263 +#: ../src/itdb_device.c:357 msgid "Invalid" msgstr "Non valide" -#: ../src/itdb_device.c:264 ../src/itdb_device.c:305 +#: ../src/itdb_device.c:358 ../src/itdb_device.c:405 msgid "Unknown" msgstr "Inconnu" -#: ../src/itdb_device.c:265 +#: ../src/itdb_device.c:359 msgid "Color" msgstr "Couleur" -#: ../src/itdb_device.c:266 +#: ../src/itdb_device.c:360 msgid "Color U2" msgstr "U2 couleur" -#: ../src/itdb_device.c:267 +#: ../src/itdb_device.c:361 msgid "Grayscale" msgstr "Niveaux de gris" -#: ../src/itdb_device.c:268 +#: ../src/itdb_device.c:362 msgid "Grayscale U2" msgstr "U2 niveaux de gris" -#: ../src/itdb_device.c:269 +#: ../src/itdb_device.c:363 msgid "Mini (Silver)" msgstr "Mini (argent)" -#: ../src/itdb_device.c:270 +#: ../src/itdb_device.c:364 msgid "Mini (Blue)" msgstr "Mini (bleu)" -#: ../src/itdb_device.c:271 +#: ../src/itdb_device.c:365 msgid "Mini (Pink)" msgstr "Mini (rose)" -#: ../src/itdb_device.c:272 +#: ../src/itdb_device.c:366 msgid "Mini (Green)" msgstr "Mini (vert)" -#: ../src/itdb_device.c:273 +#: ../src/itdb_device.c:367 msgid "Mini (Gold)" msgstr "Mini (or)" -#: ../src/itdb_device.c:274 +#: ../src/itdb_device.c:368 msgid "Shuffle" msgstr "Shuffle" -#: ../src/itdb_device.c:275 +#: ../src/itdb_device.c:369 msgid "Nano (White)" msgstr "Nano (blanc)" -#: ../src/itdb_device.c:276 +#: ../src/itdb_device.c:370 msgid "Nano (Black)" msgstr "Nano (noir)" -#: ../src/itdb_device.c:277 +#: ../src/itdb_device.c:371 msgid "Video (White)" msgstr "Vidéo (blanc)" -#: ../src/itdb_device.c:278 +#: ../src/itdb_device.c:372 msgid "Video (Black)" msgstr "Vidéo (noir)" -#: ../src/itdb_device.c:279 +#: ../src/itdb_device.c:373 msgid "Mobile (1)" msgstr "Mobile (1)" -#: ../src/itdb_device.c:280 +#: ../src/itdb_device.c:374 msgid "Video U2" msgstr "U2 Vidéo" -#: ../src/itdb_device.c:281 +#: ../src/itdb_device.c:375 msgid "Nano (Silver)" msgstr "Nano (argent)" -#: ../src/itdb_device.c:282 +#: ../src/itdb_device.c:376 msgid "Nano (Blue)" msgstr "Nano (bleu)" -#: ../src/itdb_device.c:283 +#: ../src/itdb_device.c:377 msgid "Nano (Green)" msgstr "Nano (vert)" -#: ../src/itdb_device.c:284 +#: ../src/itdb_device.c:378 msgid "Nano (Pink)" msgstr "Nano (rose)" -#: ../src/itdb_device.c:285 +#: ../src/itdb_device.c:379 msgid "Nano (Red)" msgstr "Nano (rouge)" -#: ../src/itdb_device.c:286 +#: ../src/itdb_device.c:380 msgid "Nano (Yellow)" msgstr "Nano (jaune)" -#: ../src/itdb_device.c:287 +#: ../src/itdb_device.c:381 msgid "Nano (Purple)" msgstr "Nano (violet)" -#: ../src/itdb_device.c:288 +#: ../src/itdb_device.c:382 msgid "Nano (Orange)" msgstr "Nano (orange)" -#: ../src/itdb_device.c:289 +#: ../src/itdb_device.c:383 msgid "iPhone (1)" msgstr "iPhone (1)" -#: ../src/itdb_device.c:290 +#: ../src/itdb_device.c:384 msgid "Shuffle (Silver)" msgstr "Shuffle (argent)" -#: ../src/itdb_device.c:291 +#: ../src/itdb_device.c:385 msgid "Shuffle (Pink)" msgstr "Shuffle (rose)" -#: ../src/itdb_device.c:292 +#: ../src/itdb_device.c:386 msgid "Shuffle (Blue)" msgstr "Shuffle (bleu)" -#: ../src/itdb_device.c:293 +#: ../src/itdb_device.c:387 msgid "Shuffle (Green)" msgstr "Shuffle (vert)" -#: ../src/itdb_device.c:294 +#: ../src/itdb_device.c:388 msgid "Shuffle (Orange)" msgstr "Shuffle (orange)" -#: ../src/itdb_device.c:295 +#: ../src/itdb_device.c:389 msgid "Shuffle (Purple)" msgstr "Shuffle (violet)" -#: ../src/itdb_device.c:296 +#: ../src/itdb_device.c:390 msgid "Shuffle (Red)" msgstr "Shuffle (rouge)" -#: ../src/itdb_device.c:297 +#: ../src/itdb_device.c:391 msgid "Classic (Silver)" msgstr "Classic (argent)" -#: ../src/itdb_device.c:298 +#: ../src/itdb_device.c:392 msgid "Classic (Black)" msgstr "Classic (noir)" -#: ../src/itdb_device.c:299 -msgid "Touch (Black)" -msgstr "Touch (noir)" +#: ../src/itdb_device.c:393 +msgid "Touch (Silver)" +msgstr "Touch (argent)" + +#: ../src/itdb_device.c:394 +msgid "Shuffle (Black)" +msgstr "Shuffle (noir)" + +#: ../src/itdb_device.c:395 +msgid "iPhone (White)" +msgstr "iPhone (blanc)" -#: ../src/itdb_device.c:306 +#: ../src/itdb_device.c:396 +msgid "iPhone (Black)" +msgstr "iPhone (noir)" + +#: ../src/itdb_device.c:397 +msgid "Shuffle (Gold)" +msgstr "Shuffle (or)" + +#: ../src/itdb_device.c:398 +msgid "Shuffle (Stainless)" +msgstr "Shuffle (inox)" + +#: ../src/itdb_device.c:399 ../src/itdb_device.c:434 +msgid "iPad" +msgstr "iPad" + +#: ../src/itdb_device.c:406 msgid "Regular (1st Gen.)" msgstr "Normal (1ère gén.)" -#: ../src/itdb_device.c:307 +#: ../src/itdb_device.c:407 msgid "Regular (2nd Gen.)" msgstr "Normal (2ème gén.)" -#: ../src/itdb_device.c:308 +#: ../src/itdb_device.c:408 msgid "Regular (3rd Gen.)" msgstr "Normal (3ème gén.)" -#: ../src/itdb_device.c:309 +#: ../src/itdb_device.c:409 msgid "Regular (4th Gen.)" msgstr "Normal (4ème gén.)" -#: ../src/itdb_device.c:310 +#: ../src/itdb_device.c:410 msgid "Photo" msgstr "Photo" -#: ../src/itdb_device.c:311 +#: ../src/itdb_device.c:411 msgid "Mobile Phones" msgstr "Téléphones mobiles" -#: ../src/itdb_device.c:312 +#: ../src/itdb_device.c:412 msgid "Mini (1st Gen.)" msgstr "Mini (1ère gén.)" -#: ../src/itdb_device.c:313 +#: ../src/itdb_device.c:413 msgid "Mini (2nd Gen.)" msgstr "Mini (2ème gén.)" -#: ../src/itdb_device.c:314 +#: ../src/itdb_device.c:414 msgid "Shuffle (1st Gen.)" msgstr "Shuffle (1ère gén.)" -#: ../src/itdb_device.c:315 +#: ../src/itdb_device.c:415 msgid "Shuffle (2nd Gen.)" msgstr "Shuffle (2ème gén.)" -#: ../src/itdb_device.c:316 +#: ../src/itdb_device.c:416 msgid "Shuffle (3rd Gen.)" msgstr "Shuffle (3ème gén.)" -#: ../src/itdb_device.c:317 +#: ../src/itdb_device.c:417 msgid "Nano (1st Gen.)" msgstr "Nano (1ère gén.)" -#: ../src/itdb_device.c:318 +#: ../src/itdb_device.c:418 msgid "Nano (2nd Gen.)" msgstr "Nano (2ème gén.)" -#: ../src/itdb_device.c:319 +#: ../src/itdb_device.c:419 msgid "Nano Video (3rd Gen.)" msgstr "Nano (3ème gén.)" -#: ../src/itdb_device.c:320 +#: ../src/itdb_device.c:420 msgid "Nano Video (4th Gen.)" msgstr "Nano vidéo (4ème gén.)" -#: ../src/itdb_device.c:321 +#: ../src/itdb_device.c:421 msgid "Video (1st Gen.)" msgstr "Vidéo (1ère gén.)" -#: ../src/itdb_device.c:322 +#: ../src/itdb_device.c:422 msgid "Video (2nd Gen.)" msgstr "Vidéo (2ème gén.)" -#: ../src/itdb_device.c:323 ../src/itdb_device.c:324 +#: ../src/itdb_device.c:423 ../src/itdb_device.c:424 ../src/itdb_device.c:431 msgid "Classic" msgstr "Classic" -#: ../src/itdb_device.c:325 +#: ../src/itdb_device.c:425 msgid "Touch" msgstr "Touch" -#: ../src/itdb_device.c:326 +#: ../src/itdb_device.c:426 msgid "iPhone" msgstr "iPhone" -#: ../src/itdb_device.c:327 ../src/itdb_device.c:328 -msgid "Unused" -msgstr "Inutilisé" +#: ../src/itdb_device.c:427 +msgid "Shuffle (4th Gen.)" +msgstr "Shuffle (4ème gén.)" + +#: ../src/itdb_device.c:428 +msgid "Touch (2nd Gen.)" +msgstr "Touch (2ème gén.)" -#: ../src/itdb_device.c:928 +#: ../src/itdb_device.c:429 +msgid "iPhone 3G" +msgstr "iPhone 3G" + +#: ../src/itdb_device.c:430 +msgid "iPhone 3GS" +msgstr "iPhone 3GS" + +#: ../src/itdb_device.c:432 +msgid "Nano with camera (5th Gen.)" +msgstr "Nano caméra (5ème gén.)" + +#: ../src/itdb_device.c:433 +msgid "Touch (3rd Gen.)" +msgstr "Touch (3ème gén.)" + +#: ../src/itdb_device.c:435 +msgid "iPhone 4" +msgstr "iPhone 4" + +#: ../src/itdb_device.c:436 +msgid "Touch (4th Gen.)" +msgstr "Touch (4ème gén.)" + +#: ../src/itdb_device.c:437 +msgid "Nano touch (6th Gen.)" +msgstr "Nano touch (6ème gén.)" + +#: ../src/itdb_device.c:1126 #, c-format msgid "Could not open '%s' for writing." msgstr "Impossible d'ouvrir le fichier « %s » en écriture." -#: ../src/itdb_device.c:937 +#: ../src/itdb_device.c:1135 #, c-format msgid "Device directory does not exist." msgstr "Le répertoire « Device » n'existe pas." -#: ../src/itdb_itunesdb.c:507 +#: ../src/itdb_itunesdb.c:519 #, c-format msgid "Illegal seek to offset %ld (length %ld) in file '%s'." msgstr "Erreur de flux à l'offset %ld (longueur %ld) dans le fichier « %s »." -#: ../src/itdb_itunesdb.c:910 +#: ../src/itdb_itunesdb.c:939 #, c-format msgid "Not a Play Counts file: '%s' (missing mhdp header)." msgstr "« %s » n'est pas un fichier de compteur (entête mhdp manquante)." -#: ../src/itdb_itunesdb.c:925 +#: ../src/itdb_itunesdb.c:954 #, c-format msgid "Play Counts file ('%s'): header length smaller than expected (%d<96)." msgstr "" -"Fichier de compteur (« %s ») : longueur de l'entête plus petite que prévue (%" -"d < 96)." +"Fichier de compteur (« %s ») : longueur de l'entête plus petite que prévue " +"(%d < 96)." -#: ../src/itdb_itunesdb.c:939 +#: ../src/itdb_itunesdb.c:968 #, c-format msgid "Play Counts file ('%s'): entry length smaller than expected (%d<12)." msgstr "" -"Fichier de compteur (« %s ») : longueur des données plus petite que prévue (%" -"d < 12)." +"Fichier de compteur (« %s ») : longueur des données plus petite que prévue " +"(%d < 12)." -#: ../src/itdb_itunesdb.c:1014 +#: ../src/itdb_itunesdb.c:1050 #, c-format msgid "iTunesStats file ('%s'): entry length smaller than expected (%d<18)." msgstr "" -"Fichier iTunesStats (« %s ») : longueur des données plus petite que prévue (%" -"d < 18)." +"Fichier iTunesStats (« %s ») : longueur des données plus petite que prévue " +"(%d < 18)." -#: ../src/itdb_itunesdb.c:1333 +#: ../src/itdb_itunesdb.c:1095 +#, c-format +msgid "iTunesStats file ('%s'): entry length smaller than expected (%d<32)." +msgstr "" +"Fichier iTunesStats (« %s ») : longueur des données plus petite que prévue " +"(%d < 32)." + +#: ../src/itdb_itunesdb.c:1606 #, c-format msgid "iTunesDB corrupt: no MHOD at offset %ld in file '%s'." msgstr "Corruption d'iTunesDB : pas de MHOD à l'offset %ld du fichier « %s »." -#: ../src/itdb_itunesdb.c:1519 +#: ../src/itdb_itunesdb.c:1775 #, c-format msgid "Unknown smart rule action at %ld: %x. Trying to continue.\n" msgstr "" "Règle de la liste intelligente inattendue %ld : %x. Tentative pour continuer " "quand même.\n" -#: ../src/itdb_itunesdb.c:1550 +#: ../src/itdb_itunesdb.c:1806 #, c-format msgid "" "Length of smart playlist rule field (%d) not as expected. Trying to continue " @@ -366,31 +421,32 @@ msgstr "" "Longueur du champ de la règle (%d) de la liste intelligente inattendue. " "Tentative pour continuer quand même.\n" -#: ../src/itdb_itunesdb.c:1593 +#: ../src/itdb_itunesdb.c:1849 #, c-format msgid "iTunesDB corrupt: no SLst at offset %ld in file '%s'." msgstr "Corruption d'iTunesDB : pas de SLst à l'offset %ld du fichier « %s »." -#: ../src/itdb_itunesdb.c:1606 +#: ../src/itdb_itunesdb.c:1862 #, c-format msgid "" "Encountered unknown MHOD type (%d) while parsing the iTunesDB. Ignoring.\n" "\n" msgstr "Type MHOD inconnu (%d) lors du parcours de iTunesDB. Erreur ignorée.\n" -#: ../src/itdb_itunesdb.c:1689 +#: ../src/itdb_itunesdb.c:1946 #, c-format msgid "iTunesDB corrupt: hunk length 0 for hunk at %ld in file '%s'." msgstr "Corruption d'iTunesDB : longueur 0 à %ld du fichier « %s »." -#: ../src/itdb_itunesdb.c:1702 +#: ../src/itdb_itunesdb.c:1959 #, c-format -msgid "iTunesDB corrupt: no section '%s' found in section '%s' starting at %ld." +msgid "" +"iTunesDB corrupt: no section '%s' found in section '%s' starting at %ld." msgstr "" -"Corruption d'iTunesDB : pas de section « %s » dans la section « %s » débutant " -"à l'offset %ld." +"Corruption d'iTunesDB : pas de section « %s » dans la section « %s » " +"débutant à l'offset %ld." -#: ../src/itdb_itunesdb.c:1716 +#: ../src/itdb_itunesdb.c:1973 #, c-format msgid "" "header length of '%s' smaller than expected (%d < %d) at offset %ld in file " @@ -399,97 +455,92 @@ msgstr "" "longueur de l'entête « %s » plus petite que prévue (%d < %d) à l'offset %ld " "du fichier « %s »." -#: ../src/itdb_itunesdb.c:1801 -#, c-format -msgid "Not a iTunesDB: '%s' (missing mhdb header)." -msgstr "« %s » n'est pas un fichier iTunesDB (entête mhdb manquante)." - -#: ../src/itdb_itunesdb.c:1818 +#: ../src/itdb_itunesdb.c:2058 #, c-format msgid "" "iTunesDB ('%s'): header length of mhsd hunk smaller than expected (%d<32). " "Aborting." msgstr "" -"iTunesDB (« %s ») : longueur de l'entête mhsd plus petite que prévue (%" -"d < 32). Interruption." +"iTunesDB (« %s ») : longueur de l'entête mhsd plus petite que prévue " +"(%d < 32). Interruption." -#: ../src/itdb_itunesdb.c:1839 +#: ../src/itdb_itunesdb.c:2079 #, c-format msgid "iTunesDB '%s' corrupt: mhsd expected at %ld." msgstr "Corruption d'iTunesDB « %s » : mhsd attendu à l'offset %ld." -#: ../src/itdb_itunesdb.c:1944 +#: ../src/itdb_itunesdb.c:2184 #, c-format msgid "Number of MHODs in mhip at %ld inconsistent in file '%s'." msgstr "" "Nombre de MHODs dans mhip à l'offset %ld incohérent dans le fichier « %s »." -#: ../src/itdb_itunesdb.c:2121 +#: ../src/itdb_itunesdb.c:2367 #, c-format msgid "Number of MHODs in mhyp at %ld inconsistent in file '%s'." msgstr "" "Nombre de MHODs dans mhyp à l'offset %ld incohérent dans le fichier « %s »." -#: ../src/itdb_itunesdb.c:2131 +#: ../src/itdb_itunesdb.c:2377 msgid "Master-PL" msgstr "Liste principale" -#: ../src/itdb_itunesdb.c:2135 +#: ../src/itdb_itunesdb.c:2381 msgid "Podcasts" msgstr "Podcasts" -#: ../src/itdb_itunesdb.c:2137 +#: ../src/itdb_itunesdb.c:2383 msgid "Playlist" msgstr "Liste de lecture" -#: ../src/itdb_itunesdb.c:2159 +#: ../src/itdb_itunesdb.c:2409 #, c-format msgid "" -"iTunesDB corrupt: number of mhip sections inconsistent in mhyp starting at %" -"ld in file '%s'." +"iTunesDB corrupt: number of mhip sections inconsistent in mhyp starting at " +"%ld in file '%s'." msgstr "" "Corruption d'iTunesDB : nombre de sections mhip incohérent dans mhyp à " "l'offset %ld du fichier « %s »." -#: ../src/itdb_itunesdb.c:2180 +#: ../src/itdb_itunesdb.c:2430 #, c-format msgid "Itdb_Track ID '%d' not found.\n" msgstr "Itdb_Track ID « %d » introuvable.\n" -#: ../src/itdb_itunesdb.c:2524 +#: ../src/itdb_itunesdb.c:2781 msgid "OTG Playlist" msgstr "Liste de lecture OTG" -#: ../src/itdb_itunesdb.c:2542 +#: ../src/itdb_itunesdb.c:2799 #, c-format msgid "Not a OTG playlist file: '%s' (missing mhpo header)." msgstr "" "Le fichier « %s » n'est pas un fichier de liste OTG (entête mhpo manquant)." -#: ../src/itdb_itunesdb.c:2556 +#: ../src/itdb_itunesdb.c:2813 #, c-format msgid "OTG playlist file ('%s'): header length smaller than expected (%d<20)." msgstr "Fichier de liste OTG (« %s ») : entête plus petit que prévu (%d < 20)." -#: ../src/itdb_itunesdb.c:2568 +#: ../src/itdb_itunesdb.c:2825 #, c-format msgid "OTG playlist file ('%s'): entry length smaller than expected (%d<4)." msgstr "" -"Fichier de liste OTG ('%s') : longueur de données plus petite que prévue (%" -"d<4)." +"Fichier de liste OTG ('%s') : longueur de données plus petite que prévue " +"(%d<4)." -#: ../src/itdb_itunesdb.c:2603 +#: ../src/itdb_itunesdb.c:2860 #, c-format msgid "OTG playlist file '%s': reference to non-existent track (%d)." msgstr "Fichier de liste OTG « %s » : référence à un morceau inexistant (%d)." -#: ../src/itdb_itunesdb.c:2648 +#: ../src/itdb_itunesdb.c:2895 #, c-format msgid "OTG Playlist %d" msgstr "Liste de lecture OTG %d" #. this should not be -- issue warning -#: ../src/itdb_itunesdb.c:2716 +#: ../src/itdb_itunesdb.c:2964 msgid "" "iTunesDB corrupt: number of tracks (mhit hunks) inconsistent. Trying to " "continue.\n" @@ -498,7 +549,7 @@ msgstr "" "continuer quand même.\n" #. this should not be -- issue warning -#: ../src/itdb_itunesdb.c:2779 +#: ../src/itdb_itunesdb.c:3032 msgid "" "iTunesDB possibly corrupt: number of playlists (mhyp hunks) inconsistent. " "Trying to continue.\n" @@ -506,16 +557,26 @@ msgstr "" "Corruption possible d'iTunesDB : nombre de listes (mhyp) incohérent. " "Tentative pour continuer quand même.\n" -#: ../src/itdb_itunesdb.c:2826 +#: ../src/itdb_itunesdb.c:3070 +#, c-format +msgid "%s: Unexpected length %d for genius_cuid!\n" +msgstr "" + +#: ../src/itdb_itunesdb.c:3102 +#, c-format +msgid "Not a iTunesDB: '%s' (missing mhdb header)." +msgstr "« %s » n'est pas un fichier iTunesDB (entête mhdb manquante)." + +#: ../src/itdb_itunesdb.c:3192 #, c-format msgid "" "iTunesDB '%s' corrupt: Could not find tracklist (no mhsd type 1 section " "found)" msgstr "" -"Corruption de iTunesDB (« %s ») : impossible de trouver la liste des morceaux " -"(pas de section mhsd de type 1)" +"Corruption de iTunesDB (« %s ») : impossible de trouver la liste des " +"morceaux (pas de section mhsd de type 1)" -#: ../src/itdb_itunesdb.c:2855 +#: ../src/itdb_itunesdb.c:3221 #, c-format msgid "" "iTunesDB '%s' corrupt: Could not find playlists (no mhsd type 2 or type 3 " @@ -524,134 +585,192 @@ msgstr "" "Corruption de iTunesDB (« %s ») : impossible de trouver les listes de " "lecture (pas de section mhsd de type 1 ou 3)" -#: ../src/itdb_itunesdb.c:2877 +#: ../src/itdb_itunesdb.c:3251 #, c-format msgid "iTunes directory not found: '%s' (or similar)." msgstr "Répertoire iTunes introuvable : « %s » (ou similaire)." -#: ../src/itdb_itunesdb.c:2894 +#: ../src/itdb_itunesdb.c:3268 #, c-format msgid "Music directory not found: '%s' (or similar)." msgstr "Répertoire « Music » introuvable : « %s » (ou similaire)." -#: ../src/itdb_itunesdb.c:2912 +#: ../src/itdb_itunesdb.c:3286 #, c-format msgid "Control directory not found: '%s' (or similar)." msgstr "Répertoire de contrôle introuvable : « %s » (ou similaire)." -#: ../src/itdb_itunesdb.c:3033 +#: ../src/itdb_itunesdb.c:3404 +#, c-format +msgid "Couldn't find an iPod database on %s." +msgstr "Impossible de trouver une base de données iPod sur « %s »." + +#: ../src/itdb_itunesdb.c:6040 #, c-format -msgid "File not found: '%s'." -msgstr "Fichier introuvable : « %s »." +msgid "Error writing list of tracks (mhsd type 1)" +msgstr "Erreur lors de l'écriture de la liste des morceaux (mhsd de type 1)" -#: ../src/itdb_itunesdb.c:5533 +#: ../src/itdb_itunesdb.c:6049 +#, c-format +msgid "Error writing special podcast playlists (mhsd type 3)" +msgstr "" +"Erreur lors de l'écriture des listes de lectures podcasts (mhsd de type 3)" + +#: ../src/itdb_itunesdb.c:6057 +#, c-format +msgid "Error writing standard playlists (mhsd type 2)" +msgstr "" +"Erreur lors de l'écriture des listes de lectures standards (mhsd de type 2)" + +#: ../src/itdb_itunesdb.c:6066 +#, c-format +msgid "Error writing list of albums (mhsd type 4)" +msgstr "Erreur lors de l'écriture de la liste des albums (mhsd de type 4)" + +#: ../src/itdb_itunesdb.c:6074 +#, c-format +msgid "Error writing list of artists (mhsd type 8)" +msgstr "Erreur lors de l'écriture de la liste des artistes (mhsd de type 8)" + +#: ../src/itdb_itunesdb.c:6083 +#, c-format +msgid "Error writing mhsd type 6" +msgstr "Erreur lors de l'écriture mhsd de type 6" + +#: ../src/itdb_itunesdb.c:6092 +#, fuzzy, c-format +msgid "Error writing mhsd type 10" +msgstr "Erreur lors de l'écriture mhsd de type 6" + +#: ../src/itdb_itunesdb.c:6101 +#, c-format +msgid "Error writing mhsd5 playlists" +msgstr "Erreur lors de l'écriture des listes de lecture mhsd de type 6" + +#: ../src/itdb_itunesdb.c:6111 +#, fuzzy, c-format +msgid "Error writing mhsd type 9" +msgstr "Erreur lors de l'écriture mhsd de type 6" + +#: ../src/itdb_itunesdb.c:6494 #, c-format msgid "Path not found: '%s' (or similar)." msgstr "Chemin introuvable : « %s » (ou similaire)." -#: ../src/itdb_itunesdb.c:5742 +#: ../src/itdb_itunesdb.c:6983 +#, c-format +msgid "Error writing list of tracks (hths)" +msgstr "Erreur lors de l'écriture de la liste des morceaux (hths)" + +#: ../src/itdb_itunesdb.c:6992 +#, c-format +msgid "Error writing playlists (hphs)" +msgstr "Erreur lors de l'écriture des listes de lectures (hphs)" + +#: ../src/itdb_itunesdb.c:7074 #, c-format msgid "Error renaming '%s' to '%s' (%s)." msgstr "Impossible de renommer « %s » en « %s » (%s)." -#: ../src/itdb_itunesdb.c:5759 ../src/itdb_itunesdb.c:5776 -#: ../src/itdb_itunesdb.c:5793 +#: ../src/itdb_itunesdb.c:7091 ../src/itdb_itunesdb.c:7108 +#: ../src/itdb_itunesdb.c:7125 #, c-format msgid "Error removing '%s' (%s)." msgstr "Erreur de suppression du fichier « %s » (%s)." -#: ../src/itdb_itunesdb.c:5960 ../src/itdb_itunesdb.c:6133 +#: ../src/itdb_itunesdb.c:7292 ../src/itdb_itunesdb.c:7465 #, c-format msgid "Mountpoint not set." msgstr "Point de montage non défini." -#: ../src/itdb_itunesdb.c:6000 +#: ../src/itdb_itunesdb.c:7332 #, c-format msgid "No 'F..' directories found in '%s'." msgstr "Répertoires « F.. » introuvables dans « %s »." -#: ../src/itdb_itunesdb.c:6021 +#: ../src/itdb_itunesdb.c:7353 #, c-format msgid "Path not found: '%s'." msgstr "Chemin introuvable : « %s »." -#: ../src/itdb_itunesdb.c:6142 +#: ../src/itdb_itunesdb.c:7474 #, c-format msgid "'%s' could not be accessed (%s)." msgstr "Impossible d'accéder à « %s » (%s)." -#: ../src/itdb_itunesdb.c:6152 +#: ../src/itdb_itunesdb.c:7484 #, c-format -msgid "Destination file '%s' does not appear to be on the iPod mounted at '%s'." +msgid "" +"Destination file '%s' does not appear to be on the iPod mounted at '%s'." msgstr "" -"Le fichier de destination « %s » ne semble pas être présent dans l'iPod monté " -"sur « %s »." +"Le fichier de destination « %s » ne semble pas être présent dans l'iPod " +"monté sur « %s »." -#: ../src/itdb_itunesdb.c:6360 +#: ../src/itdb_itunesdb.c:7692 #, c-format msgid "Error opening '%s' for reading (%s)." msgstr "Échec de l'ouverture de « %s » en lecture (%s)." -#: ../src/itdb_itunesdb.c:6372 +#: ../src/itdb_itunesdb.c:7703 #, c-format msgid "Error opening '%s' for writing (%s)." msgstr "Échec de l'ouverture de « %s » en écriture (%s)." -#: ../src/itdb_itunesdb.c:6388 +#: ../src/itdb_itunesdb.c:7719 #, c-format msgid "Error while reading from '%s' (%s)." msgstr "Erreur lors de la lecture à partir de « %s » (%s)." -#: ../src/itdb_itunesdb.c:6403 +#: ../src/itdb_itunesdb.c:7734 #, c-format msgid "Error while writing to '%s' (%s)." msgstr "Erreur lors de l'écriture dans « %s » (%s)." -#: ../src/itdb_itunesdb.c:6416 ../src/itdb_itunesdb.c:6426 +#: ../src/itdb_itunesdb.c:7747 ../src/itdb_itunesdb.c:7757 #, c-format msgid "Error when closing '%s' (%s)." msgstr "Erreur à la fermeture de « %s » (%s)." -#: ../src/itdb_itunesdb.c:6856 +#: ../src/itdb_itunesdb.c:8182 msgid "iPod" msgstr "iPod" -#: ../src/itdb_itunesdb.c:7178 +#: ../src/itdb_itunesdb.c:8526 #, c-format msgid "Problem creating iPod directory or file: '%s'." msgstr "Problème à la création du répertoire ou du fichier iPod : « %s »." -#: ../src/itdb_photoalbum.c:111 +#: ../src/itdb_photoalbum.c:109 #, c-format msgid "Photos directory not found: '%s' (or similar)." msgstr "Répertoire « Photos » introuvable : « %s » (ou similaire)." -#: ../src/itdb_photoalbum.c:266 ../src/itdb_photoalbum.c:460 +#: ../src/itdb_photoalbum.c:264 ../src/itdb_photoalbum.c:464 msgid "Photo Library" msgstr "Bibliothèque Photos" -#: ../src/itdb_photoalbum.c:386 +#: ../src/itdb_photoalbum.c:390 #, c-format msgid "You need to specify the iPod model used before photos can be added." msgstr "" "Vous devez préciser le modèle de l'iPod avant de pouvoir ajouter des photos." -#: ../src/itdb_photoalbum.c:407 +#: ../src/itdb_photoalbum.c:411 #, c-format msgid "" "Your iPod does not seem to support photos. Maybe you need to specify the " "correct iPod model number? It is currently set to 'x%s' (%s/%s)." msgstr "" -"Votre iPod ne semble pas prendre en charge les photos. Peut-être devriez-vous " -"spécifier le modèle correct d'iPod ? Il est actuellement configuré à « x%" -"s » (%s/%s)." +"Votre iPod ne semble pas prendre en charge les photos. Peut-être devriez-" +"vous spécifier le modèle correct d'iPod ? Il est actuellement configuré à « x" +"%s » (%s/%s)." -#: ../src/itdb_photoalbum.c:419 +#: ../src/itdb_photoalbum.c:423 #, c-format msgid "Could not access file '%s'. Photo not added." msgstr "Impossible d'accéder au fichier « %s ». Photo non ajoutée." -#: ../src/itdb_photoalbum.c:448 +#: ../src/itdb_photoalbum.c:452 #, c-format msgid "" "Unexpected error in itdb_photodb_add_photo_internal() while adding photo, " @@ -660,20 +779,19 @@ msgstr "" "Erreur inattendue dans « itdb_photodb_add_photo_internal() » pendant l'ajout " "d'une photo, pensez à le signaler." -#: ../src/itdb_photoalbum.c:468 +#: ../src/itdb_photoalbum.c:472 #, c-format msgid "" "Library compiled without gdk-pixbuf support. Picture support is disabled." msgstr "" "Bibliothèque compilée sans la prise en charge gdk-pixbuf. La gestion des " -"photos est " -"désactivée." +"photos est désactivée." #. New action! -#: ../src/itdb_playlist.c:78 +#: ../src/itdb_playlist.c:81 #, c-format -msgid "Unknown action (%d) in smart playlist will be ignored.\n" -msgstr "L'action inconnue (%d) dans la liste intelligente sera ignorée.\n" +msgid "Unknown action (0x%x) in smart playlist will be ignored.\n" +msgstr "L'action inconnue (0x%x) dans la liste intelligente sera ignorée.\n" #: ../src/itdb_thumb.c:326 #, c-format @@ -685,7 +803,22 @@ msgstr "Nom de fichier illégal : « %s ».\n" msgid "Mountpoint not set.\n" msgstr "Point de montage non défini.\n" -#: ../tests/test-photos.c:41 +#: ../src/itdb_zlib.c:123 ../src/itdb_zlib.c:179 +#, c-format +msgid "Header is too small for iTunesCDB!\n" +msgstr "En-tête trop petit pour le fichier iTunesCDB !\n" + +#: ../src/itdb_zlib.c:151 +#, c-format +msgid "iTunesCDB '%s' could not be decompressed" +msgstr "iTunesCDB « %s » ne peut pas être décompressé" + +#: ../src/itdb_zlib.c:201 +#, c-format +msgid "Error compressing iTunesCDB file!\n" +msgstr "Erreur de décompression du fichier iTunesCDB !\n" + +#: ../tests/test-photos.c:39 #, c-format msgid "" "Usage to add photos:\n" @@ -702,7 +835,7 @@ msgstr "" " dans l'album photo principal.\n" " Si vous ne précisez pas de nom de fichier un album vide sera créé.\n" -#: ../tests/test-photos.c:42 +#: ../tests/test-photos.c:40 #, c-format msgid "" "Usage to dump all photos to <output_dir>:\n" @@ -711,7 +844,7 @@ msgstr "" "Utilisation pour copier toutes les photos dans <répertoire_de_copie> :\n" " %s dump <point_de_montage> <répertoire_de_copie>\n" -#: ../tests/test-photos.c:43 +#: ../tests/test-photos.c:41 #, c-format msgid "" "Usage to list all photos IDs to stdout:\n" @@ -720,7 +853,7 @@ msgstr "" "Utilisation pour afficher tous les identifiants des photos :\n" " %s list <point_de_montage>\n" -#: ../tests/test-photos.c:44 +#: ../tests/test-photos.c:42 #, c-format msgid "" "Usage to remove photo IDs from Photo Library:\n" @@ -738,49 +871,49 @@ msgstr "" " Attention : les identifiants peuvent changer lors de l'écriture\n" " du fichier « PhotoDB ».\n" -#: ../tests/test-photos.c:119 +#: ../tests/test-photos.c:117 #, c-format msgid "Wrong number of command line arguments.\n" msgstr "Nombre d'arguments incorrect pour la ligne de commande.\n" -#: ../tests/test-photos.c:128 +#: ../tests/test-photos.c:126 #, c-format msgid "Error creating '%s' (mkdir)\n" msgstr "Erreur à la création de « %s » (mkdir)\n" -#: ../tests/test-photos.c:134 +#: ../tests/test-photos.c:132 #, c-format msgid "Error: '%s' is not a directory\n" msgstr "Erreur : « %s » n'est pas un répertoire\n" -#: ../tests/test-photos.c:143 ../tests/test-photos.c:177 -#: ../tests/test-photos.c:306 +#: ../tests/test-photos.c:141 ../tests/test-photos.c:175 +#: ../tests/test-photos.c:304 #, c-format msgid "Error reading iPod photo database (%s).\n" msgstr "Erreur à la lecture de la base de données des photos iPod (%s).\n" -#: ../tests/test-photos.c:149 ../tests/test-photos.c:183 -#: ../tests/test-photos.c:313 +#: ../tests/test-photos.c:147 ../tests/test-photos.c:181 +#: ../tests/test-photos.c:311 #, c-format msgid "Error reading iPod photo database.\n" msgstr "Erreur à la lecture de la base de données des photos iPod.\n" -#: ../tests/test-photos.c:167 ../tests/test-photos.c:226 -#: ../tests/test-photos.c:296 ../tests/test-photos.c:379 +#: ../tests/test-photos.c:165 ../tests/test-photos.c:224 +#: ../tests/test-photos.c:294 ../tests/test-photos.c:377 #, c-format msgid "Insufficient number of command line arguments.\n" msgstr "Nombre d'arguments insuffisant pour la ligne de commande.\n" -#: ../tests/test-photos.c:194 +#: ../tests/test-photos.c:192 msgid "<Unnamed>" msgstr "<sans_nom>" -#: ../tests/test-photos.c:209 +#: ../tests/test-photos.c:207 #, c-format msgid "<No members>\n" msgstr "<sans membre>\n" -#: ../tests/test-photos.c:236 +#: ../tests/test-photos.c:234 #, c-format msgid "" "Error reading iPod photo database (%s).\n" @@ -789,7 +922,7 @@ msgstr "" "Erreur à la lecture de la base de données des photos iPod (%s).\n" "Tentative de créer une nouvelle base de données.\n" -#: ../tests/test-photos.c:242 +#: ../tests/test-photos.c:240 #, c-format msgid "" "Error reading iPod photo database, will attempt to create a new database\n" @@ -797,31 +930,31 @@ msgstr "" "Erreur à la lecture de la base de données des photos iPod, Tentative de " "créer une nouvelle base de données.\n" -#: ../tests/test-photos.c:267 +#: ../tests/test-photos.c:265 #, c-format msgid "Error adding photo (%s) to photo database: %s\n" msgstr "" -"Erreur à l'ajout de la photo (%s) dans la base de données des photos iPod : %" -"s\n" +"Erreur à l'ajout de la photo (%s) dans la base de données des photos iPod : " +"%s\n" -#: ../tests/test-photos.c:324 +#: ../tests/test-photos.c:322 #, c-format msgid "Specified album '%s' not found. Aborting.\n" msgstr "Album « %s » non trouvé. Abandon.\n" -#: ../tests/test-photos.c:336 +#: ../tests/test-photos.c:334 #, c-format msgid "Cannot remove Photo Library playlist. Aborting.\n" msgstr "Impossible de supprimer la liste de la bibliothèque Photo. Abandon.\n" -#: ../tests/test-photos.c:357 +#: ../tests/test-photos.c:355 #, c-format msgid "Warning: could not find photo with ID <%d>. Skipping...\n" msgstr "" "Attention : impossible de trouver la photo avec l'identifiant <%d>. On passe " "à la suivante…\n" -#: ../tests/test-photos.c:403 +#: ../tests/test-photos.c:401 #, c-format msgid "Unknown command '%s'\n" msgstr "Commande inconnue « %s »\n" @@ -839,33 +972,20 @@ msgstr "Erreur d'initialisation de l'iPod : erreur inconnue\n" #: ../tools/ipod-time-sync.c:37 #, c-format msgid "usage: %s <device> [timezone]\n" -msgstr "utilisation : %s <périphérique> <fuseau_horaire>\n" +msgstr "utilisation : %s <périphérique> [<fuseau_horaire>]\n" -#: ../tools/read-sysinfoextended-sgutils.c:39 +#: ../tools/read-sysinfoextended.c:81 #, c-format -msgid "usage: %s <device> <mountpoint>\n" -msgstr "utilisation : %s <périphérique> <point_de_montage>\n" +msgid "usage: %s <device|uuid|bus device> <mountpoint>\n" +msgstr "" +"utilisation : %s <périphérique|uuid|périphérique bus> <point_de_montage>\n" -#: ../tools/read-sysinfoextended-sgutils.c:45 +#: ../tools/read-sysinfoextended.c:119 #, c-format msgid "Couldn't read xml sysinfo from %s\n" msgstr "Impossible de lire les « sysinfo xml » depuis %s\n" -#: ../tools/read-sysinfoextended-sgutils.c:56 -#, c-format -msgid "Couldn't resolve Device directory path on %s" -msgstr "Impossible de trouver le répertoire « Device » dans %s" - -#: ../tools/read-sysinfoextended-sgutils.c:64 -#, c-format -msgid "Couldn't resolve SysInfoExtended path on %s" -msgstr "Impossible de trouver le chemin de « SysInfoExtended » dans %s" - -#: ../tools/read-sysinfoextended-sgutils.c:74 +#: ../tools/read-sysinfoextended.c:128 #, c-format msgid "Couldn't write SysInfoExtended to %s" msgstr "Impossible d'écrire « SysInfoExtended » dans %s" - -#~ msgid "Could not find artwork entry (mhii id: %u) for track (dbid: %s).\n" -#~ msgstr "" -#~ "Impossible de trouver l'image (mhii id : %u) pour la piste (dbid : %s).\n" |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:21
|
commit 5ebb477a5097a0ed7ca77e9cec2d515f3b76f781 Author: Christophe Fergeau <te...@gn...> Date: Tue Jul 19 23:03:52 2011 +0200 add optional g_checksum_reset implementation g_checksum_reset was introduced in glib 2.18 but we only depend on glib 2.16. Add our own g_checksum_reset implementation if it's not available in the glib we're building against. configure.ac | 1 + src/itdb_hash58.c | 8 ++++++++ 2 files changed, 9 insertions(+), 0 deletions(-) --- diff --git a/configure.ac b/configure.ac index 66cc889..4049a09 100644 --- a/configure.ac +++ b/configure.ac @@ -53,6 +53,7 @@ saved_LIBS="$LIBS" CFLAGS="$LIBGPOD_CFLAGS $CFLAGS" LIBS="$LIBGPOD_LIBS $LIBS" AC_CHECK_FUNCS([g_int64_hash g_int64_equal]) +AC_CHECK_FUNCS([g_checksum_reset]) CFLAGS="$saved_CFLAGS" LIBS="$saved_LIBS" diff --git a/src/itdb_hash58.c b/src/itdb_hash58.c index 4931f1f..af9832b 100644 --- a/src/itdb_hash58.c +++ b/src/itdb_hash58.c @@ -117,6 +117,14 @@ static const unsigned char fixed[18] = { 0x21, 0x07, 0xC1, 0xD0, 0x12, 0xB2, 0xA1, 0x07, 0x81 }; +#ifndef HAVE_G_CHECKSUM_RESET +#define g_checksum_reset(checksum) \ +G_STMT_START { \ + g_checksum_free(checksum); \ + (checksum) = g_checksum_new (G_CHECKSUM_SHA1); \ +} G_STMT_END +#endif + static int gcd(int a, int b){ while (TRUE) { |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:14
|
commit 3fae61944af3c4aa2bce4e94f5699232066f81f0 Author: Christophe Fergeau <te...@gn...> Date: Tue Jul 19 22:42:51 2011 +0200 optionally provide g_int64_{hash,equal} These functions appeared in glib 2.22, but libgpod only depends on glib 2.16, so check if these functions are available before using them, and provide a fallback implementation if they are not available. Bug reported by Eric Lassauge configure.ac | 12 ++++++++++++ src/itdb_itunesdb.c | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-) --- diff --git a/configure.ac b/configure.ac index a6f7c9c..66cc889 100644 --- a/configure.ac +++ b/configure.ac @@ -44,6 +44,18 @@ dnl sqlite3 is needed for newer ipod models (nano5g), and libplist is needed dnl by libgpod sqlite code PKG_CHECK_MODULES(LIBGPOD, glib-2.0 >= 2.16.0 gobject-2.0 sqlite3 libplist >= 1.0 gmodule-2.0) +dnl *************************************************** +dnl g_gint64_hash and g_gint64_equal are only available +dnl starting from glib 2.22. +dnl *************************************************** +saved_CFLAGS="$CFLAGS" +saved_LIBS="$LIBS" +CFLAGS="$LIBGPOD_CFLAGS $CFLAGS" +LIBS="$LIBGPOD_LIBS $LIBS" +AC_CHECK_FUNCS([g_int64_hash g_int64_equal]) +CFLAGS="$saved_CFLAGS" +LIBS="$saved_LIBS" + dnl ************************************************** dnl * sgutils is necessary to get the xml device file dnl * from older ipods diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c index 78d087f..34d5b80 100644 --- a/src/itdb_itunesdb.c +++ b/src/itdb_itunesdb.c @@ -1132,6 +1132,20 @@ static gint64 playcounts_plist_get_gint64 (GHashTable *track_dict, return 0; } +#ifndef HAVE_G_INT64_EQUAL +static gboolean g_int64_equal (gconstpointer v1, gconstpointer v2) +{ + return *((const gint64*) v1) == *((const gint64*) v2); +} +#endif + +#ifndef HAVE_G_INT64_HASH +static guint g_int64_hash (gconstpointer v) +{ + return (guint) *(const gint64*) v; +} +#endif + /* called by playcounts_init */ static gboolean playcounts_plist_read (FImport *fimp, GValue *plist_data) { |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:08
|
commit 0c53fbbc913c98b15c5f654d8abe10270dc1ee05 Author: Christophe Fergeau <te...@gn...> Date: Tue Jul 19 22:31:40 2011 +0200 remove internal GChecksum copy GLib 2.16 has been out for more than 3 years now, we should no longer need this workaround. configure.ac | 19 +- src/Makefile.am | 5 - src/db-artwork-writer.c | 4 - src/gchecksum.c | 1411 ----------------------------------------------- src/gchecksum.h | 72 --- 5 files changed, 1 insertions(+), 1510 deletions(-) --- diff --git a/configure.ac b/configure.ac index 5c59a8c..a6f7c9c 100644 --- a/configure.ac +++ b/configure.ac @@ -42,24 +42,7 @@ AC_CHECK_FUNCS([localtime_r]) AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include <time.h>]) dnl sqlite3 is needed for newer ipod models (nano5g), and libplist is needed dnl by libgpod sqlite code -PKG_CHECK_MODULES(LIBGPOD, glib-2.0 >= 2.8.0 gobject-2.0 sqlite3 libplist >= 1.0 gmodule-2.0) - -dnl ************************************************** -dnl we've copied gchecksum from glib 2.16. Only use the -dnl copy if the version of glib on the system does not -dnl provide it. -dnl ************************************************** - -AC_ARG_WITH(internal-gchecksum, - AS_HELP_STRING([--with-internal-gchecksum],[Build using internal copy of gchecksum]),, - with_internal_gchecksum=no) - -if test "x$with_internal_gchecksum" = "xno"; then - PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16.0, with_internal_gchecksum=no, - with_internal_gchecksum=yes) -fi - -AM_CONDITIONAL(WITH_INTERNAL_GCHECKSUM, test "x$with_internal_gchecksum" = "xyes") +PKG_CHECK_MODULES(LIBGPOD, glib-2.0 >= 2.16.0 gobject-2.0 sqlite3 libplist >= 1.0 gmodule-2.0) dnl ************************************************** dnl * sgutils is necessary to get the xml device file diff --git a/src/Makefile.am b/src/Makefile.am index 59ae346..26fd515 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -28,11 +28,6 @@ libgpod_la_SOURCES = \ rijndael.c libgpod_la_CFLAGS = -if WITH_INTERNAL_GCHECKSUM -libgpod_la_SOURCES += gchecksum.c gchecksum.h -libgpod_la_CFLAGS += -DWITH_INTERNAL_GCHECKSUM -endif - libgpod_la_LDFLAGS = -version-info $(LIBGPOD_SO_VERSION) -no-undefined libgpod_la_CPPFLAGS = -DLIBGPOD_BLOB_DIR=\"$(LIBGPOD_BLOB_DIR)\" diff --git a/src/db-artwork-writer.c b/src/db-artwork-writer.c index c19f481..824b502 100644 --- a/src/db-artwork-writer.c +++ b/src/db-artwork-writer.c @@ -48,10 +48,6 @@ #include <stdio.h> #include <sys/types.h> -#ifdef WITH_INTERNAL_GCHECKSUM -#include "gchecksum.h" -#endif - #define DEFAULT_GSTRING_SIZE 128*1024 struct iPodSharedDataBuffer { |
From: Christophe F. <te...@us...> - 2011-07-23 17:08:01
|
commit 9c932b8908671e2618430ebc48841a64e86467b9 Author: Christophe Fergeau <te...@gn...> Date: Tue Jul 19 21:45:11 2011 +0200 python: make mountpoint arg optional in examples If no mountpoint is passed, we will fallback to the default path which is /mnt/ipod bindings/python/examples/play_with_ipod_api.py | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) --- diff --git a/bindings/python/examples/play_with_ipod_api.py b/bindings/python/examples/play_with_ipod_api.py index 8bc367c..4bf532b 100755 --- a/bindings/python/examples/play_with_ipod_api.py +++ b/bindings/python/examples/play_with_ipod_api.py @@ -3,7 +3,11 @@ import gpod import sys -db = gpod.Database(sys.argv[1]) +if len(sys.argv) > 1: + db = gpod.Database(sys.argv[1]) +else: + db = gpod.Database() + print db |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:55
|
commit f7503d3099b46f11d7470789b7ad93ecd178a3b4 Author: Adeodato Simó <da...@ne...> Date: Tue May 31 04:12:15 2011 +0100 python: add Itdb_Device::timezone_shift to the binding This is done by including device->timezone_shift in sw_ipod_device_to_dict() bindings/python/gpod.i.in | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) --- diff --git a/bindings/python/gpod.i.in b/bindings/python/gpod.i.in index 6d62e84..b000af7 100644 --- a/bindings/python/gpod.i.in +++ b/bindings/python/gpod.i.in @@ -267,7 +267,7 @@ PyObject* sw_get_photo(GList *list, gint index) { g_hash_table_foreach(device->sysinfo, hash_table_to_pydict, (gpointer) sysinfo); - return Py_BuildValue("{s:s,s:i,s:i,s:O}", + return Py_BuildValue("{s:s,s:i,s:i,s:O,s:i}", "mountpoint", device->mountpoint, "musicdirs", @@ -275,7 +275,9 @@ PyObject* sw_get_photo(GList *list, gint index) { "byte_order", device->byte_order, "sysinfo", - sysinfo); + sysinfo, + "timezone_shift", + device->timezone_shift); } } |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:48
|
commit a580a03e27429d1b2e9ec5ea544361438a163dd8 Author: Christophe Fergeau <te...@gn...> Date: Tue Jul 19 20:44:53 2011 +0200 sqlite: don't leak 'composer' statement The sqlite3 statetement stmt_composer in mk_Library was never finalized, which prevented closing of the sqlite DB, and caused a resource leak. Bug diagnosed by wuda_ <wu_...@ho...> src/itdb_sqlite.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) --- diff --git a/src/itdb_sqlite.c b/src/itdb_sqlite.c index 4b64710..b5b2975 100644 --- a/src/itdb_sqlite.c +++ b/src/itdb_sqlite.c @@ -1359,6 +1359,9 @@ leave: if (stmt_artist) { sqlite3_finalize(stmt_artist); } + if (stmt_composer) { + sqlite3_finalize(stmt_composer); + } if (stmt_video_info) { sqlite3_finalize(stmt_video_info); } |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:42
|
commit 5025c1038f81abbc5a1b783690798fc66be33810 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 09:27:14 2011 +0200 fix (again) creation of non-existing Device dirs Recent iPods (Shuffle, iOS devices, ...) don't have a Device/ subdirectory in their control dir, so we need to create it ourselves before trying to write a SysInfoExtended file to it. However, due to a "typo", we were creating iPod_Control/iTunes/Device/ instead of iPod_Control/Device. This commit fixes this, even though in the long run we should stop using the iphone-set-info callout for iOS devices and read the needed information directly from the device. tools/generic-callout.c | 10 +++++----- tools/read-sysinfoextended.c | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) --- diff --git a/tools/generic-callout.c b/tools/generic-callout.c index dff5fc0..62bd08c 100644 --- a/tools/generic-callout.c +++ b/tools/generic-callout.c @@ -626,16 +626,16 @@ static gboolean write_sysinfo_extended (const char *mountpoint, /* Make sure the device dir exists (not necessarily true on * Shuffles */ if (devdirpath == NULL) { - gchar *itunesdirpath; + gchar *controldirpath; - itunesdirpath = itdb_get_itunes_dir (mountpoint); - if (itunesdirpath == NULL) { + controldirpath = itdb_get_control_dir (mountpoint); + if (controldirpath == NULL) { g_debug("failed to build path for control dir at %s", mountpoint); return FALSE; } - devdirpath = g_build_filename (itunesdirpath, "Device", NULL); - g_free (itunesdirpath); + devdirpath = g_build_filename (controldirpath, "Device", NULL); + g_free (controldirpath); g_mkdir (devdirpath, 0777); g_debug("creating %s", devdirpath); } diff --git a/tools/read-sysinfoextended.c b/tools/read-sysinfoextended.c index bf789ce..b3afd2c 100644 --- a/tools/read-sysinfoextended.c +++ b/tools/read-sysinfoextended.c @@ -50,14 +50,14 @@ static gboolean write_sysinfo_extended (const char *mountpoint, /* Make sure the device dir exists (not necessarily true on * Shuffles */ if (devdirpath == NULL) { - gchar *itunesdirpath; + gchar *controldirpath; - itunesdirpath = itdb_get_itunes_dir (mountpoint); - if (itunesdirpath == NULL) { + controldirpath = itdb_get_control_dir (mountpoint); + if (controldirpath == NULL) { return FALSE; } - devdirpath = g_build_filename (itunesdirpath, "Device", NULL); - g_free (itunesdirpath); + devdirpath = g_build_filename (controldirpath, "Device", NULL); + g_free (controldirpath); g_mkdir (devdirpath, 0777); } filename = g_build_filename (devdirpath, "SysInfoExtended", NULL); |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:36
|
commit 99938096229ec6259e7586bfb94a371db5381887 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 09:20:06 2011 +0200 udev: rework udev rule to handle Shuffle 4g Some iPod Shuffle (4G) don't have a partition, only a filesystem on the block device. The current rule won't match for such iPods because it wants a partition. Given that some Nano5g have been seen as reporting a filesystem on the block device while they have a partition, we don't want to run the rule unconditionally on any block device or partition. So we add an additional rule which matches devices with a partition, but with a check for ID_PART_TABLE_TYPE. if it's empty, it means we only have a block device, in which case we can run the callout. This bug was fixed thanks to eshat's investigations on IRC. tools/90-libgpod.rules.in | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) --- diff --git a/tools/90-libgpod.rules.in b/tools/90-libgpod.rules.in index 2c312bb..a1c8e16 100644 --- a/tools/90-libgpod.rules.in +++ b/tools/90-libgpod.rules.in @@ -3,7 +3,17 @@ # because the nano5g have data on the block device making it look like a # FAT32 filesystem while it's not (ie can't be mounted). The first # partition on the iPod is what should be mounted. -ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", ENV{DEVTYPE}=="partition", ATTRS{idVendor}=="05ac", ENV{ID_MODEL}=="iPod", IMPORT{program}="@udevdir@/ipod-set-info $tempnode $attr{busnum} $attr{devnum}" +ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", ENV{DEVTYPE}=="partition", ATTRS{idVendor}=="05ac", ENV{ID_MODEL}=="iPod", IMPORT{program}="@udevdir@/ipod-set-info $tempnode $attr{busnum} $attr{devnum}", GOTO="libgpod_end" + +# Some iPod Shuffle (4G) don't have a partition, only a filesystem on the +# block device. The rule above won't match for such iPods because it wants +# a partition. And given that some Nano5g have been seen as reporting a +# filesystem on the block device while they have a partition, we don't want +# to run the rule below unconditionally. So we add a check for +# ID_PART_TABLE_TYPE, if it's empty, it means we only have a block device, +# in which case we can run the callout +ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", ENV{DEVTYPE}=="disk", ENV{ID_PART_TABLE_TYPE}!="?*", ATTRS{idVendor}=="05ac", ENV{ID_MODEL}=="iPod", IMPORT{program}="@udevdir@/ipod-set-info $tempnode $attr{busnum} $attr{devnum}", GOTO="libgpod_end" + # "iPods" using the afc protocol (iPhone, iPod Touch, ...) ACTION=="add|change", ENV{USBMUX_SUPPORTED}=="1", IMPORT{program}+="@udevdir@/iphone-set-info", GOTO="libgpod_end" |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:29
|
commit a2b14f1ea2724704fb8dcd7ef6b064877da49835 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 09:17:35 2011 +0200 udev: set log domain for udev helpers Now that the generic callout code uses g_debug, setting a custom G_LOG_DOMAIN will help identify where these messages come from. tools/Makefile.am | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) --- diff --git a/tools/Makefile.am b/tools/Makefile.am index 68ec7db..e3d690d 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -56,9 +56,10 @@ endif # HAVE_HAL if USE_UDEV libudevdir=@udevdir@ libudev_PROGRAMS=ipod-set-info -ipod_set_info_SOURCES = $(COMMON_SOURCES) udev-backend.c -ipod_set_info_CFLAGS = $(COMMON_CFLAGS) -ipod_set_info_LDADD = $(COMMON_LIBS) +ipod_set_info_SOURCES = $(COMMON_SOURCES) udev-backend.c +ipod_set_info_CFLAGS = $(COMMON_CFLAGS) +ipod_set_info_CPPFLAGS = -DG_LOG_DOMAIN=\"ipod-set-info\" +ipod_set_info_LDADD = $(COMMON_LIBS) rulesdir=${libudevdir}/rules.d rules_DATA= 90-libgpod.rules @@ -74,10 +75,10 @@ endif if USE_UDEV libudev_PROGRAMS+=iphone-set-info -iphone_set_info_SOURCES = iphone-callout.c ipod-lockdown.c -iphone_set_info_CFLAGS = $(COMMON_CFLAGS) $(LIBIMOBILEDEVICE_CFLAGS) -iphone_set_info_LDADD = $(COMMON_LIBS) $(LIBIMOBILEDEVICE_LIBS) -iphone_set_info_CPPFLAGS = -DUSE_UDEV +iphone_set_info_SOURCES = iphone-callout.c ipod-lockdown.c +iphone_set_info_CFLAGS = $(COMMON_CFLAGS) $(LIBIMOBILEDEVICE_CFLAGS) +iphone_set_info_LDADD = $(COMMON_LIBS) $(LIBIMOBILEDEVICE_LIBS) +iphone_set_info_CPPFLAGS = -DUSE_UDEV -DG_LOG_DOMAIN=\"iphone-set-info\" endif endif # HAVE_LIBIPHONE |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:23
|
commit fc0112179d61031203cc340e34bdef03e9fefe75 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 09:00:29 2011 +0200 udev: add g_debug to help diagosing bugs Figuring out what the udev callout is doing has generally been hard. Add g_debug logs to help trace the callout execution. tools/generic-callout.c | 56 ++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 48 insertions(+), 8 deletions(-) --- diff --git a/tools/generic-callout.c b/tools/generic-callout.c index 73b016f..dff5fc0 100644 --- a/tools/generic-callout.c +++ b/tools/generic-callout.c @@ -474,6 +474,7 @@ static gboolean ipod_set_properties (ItdbBackend *backend, if ((info == NULL) || (info->ipod_generation == ITDB_IPOD_GENERATION_UNKNOWN)) { backend->set_is_unknown (backend, TRUE); + g_debug("unknown ipod generation"); return TRUE; } else { backend->set_is_unknown (backend, FALSE); @@ -555,6 +556,7 @@ static gboolean mounted_ipod_set_properties (ItdbBackend *backend, itdb = itdb_parse (ipod_mountpoint, NULL); if (itdb == NULL) { + g_debug("failed to parse iTunesDB at %s", ipod_mountpoint); return FALSE; } control_path = itdb_get_control_dir (ipod_mountpoint); @@ -568,6 +570,8 @@ static gboolean mounted_ipod_set_properties (ItdbBackend *backend, mpl = itdb_playlist_mpl (itdb); if (mpl == NULL) { + g_debug("corrupted iTunesDB (no master playlist) at %s", + ipod_mountpoint); return FALSE; } if (mpl->name != NULL) { @@ -586,30 +590,37 @@ static char *mount_ipod (const char *dev_path, const char *fstype) filename = g_build_filename (TMPMOUNTDIR, "ipodXXXXXX", NULL); if (filename == NULL) { + g_debug("failed to build temporary template at "TMPMOUNTDIR); return NULL; } tmpname = mkdtemp (filename); if (tmpname == NULL) { + g_debug("failed to build temporary filename using template %s", + filename); g_free (filename); return NULL; } g_assert (tmpname == filename); result = mount (dev_path, tmpname, fstype, 0, NULL); if (result != 0) { + g_debug("failed to mount device %s at %s: %s", + dev_path, tmpname, strerror(errno)); g_rmdir (filename); g_free (filename); return NULL; } + g_debug("device successfully mounted at %s", tmpname); return tmpname; } -static gboolean write_sysinfo_extended (const char *mountpoint, +static gboolean write_sysinfo_extended (const char *mountpoint, const char *data) { char *filename; char *devdirpath; - gboolean result; + gboolean success; + GError *error = { 0, }; devdirpath = itdb_get_device_dir (mountpoint); /* Make sure the device dir exists (not necessarily true on @@ -619,22 +630,33 @@ static gboolean write_sysinfo_extended (const char *mountpoint, itunesdirpath = itdb_get_itunes_dir (mountpoint); if (itunesdirpath == NULL) { + g_debug("failed to build path for control dir at %s", + mountpoint); return FALSE; } devdirpath = g_build_filename (itunesdirpath, "Device", NULL); g_free (itunesdirpath); g_mkdir (devdirpath, 0777); + g_debug("creating %s", devdirpath); } filename = g_build_filename (devdirpath, "SysInfoExtended", NULL); g_free (devdirpath); if (filename == NULL) { + g_debug("failed to build path for SysInfoExtended at %s", + mountpoint); return FALSE; } - result = g_file_set_contents (filename, data, -1, NULL); + success = g_file_set_contents (filename, data, -1, &error); + if (!success) { + g_debug("failed to write %s: %s", filename, error->message); + g_clear_error(&error); + } else { + g_debug("successfully written SysInfoExtended at %s", filename); + } g_free (filename); - return result; + return success; } @@ -644,6 +666,8 @@ static char *get_info_from_usb (usb_bus_number, usb_device_number) return read_sysinfo_extended_from_usb (usb_bus_number, usb_device_number); #else + g_debug("libgpod was compiled without USB support, " + "not trying to read SysInfoExtended from USB"); return NULL; #endif } @@ -653,6 +677,8 @@ static char *get_info_from_sg (const char *dev) #ifdef HAVE_SGUTILS return read_sysinfo_extended (dev); #else + g_debug("libgpod was compiled without sgutils support, " + "not trying to read SysInfoExtended from SCSI"); return NULL; #endif } @@ -665,19 +691,33 @@ int itdb_callout_set_ipod_properties (ItdbBackend *backend, const char *dev, char *ipod_mountpoint = NULL; char *xml = NULL; SysInfoIpodProperties *props; + GError *error = { 0, }; if (usb_bus_number != 0) { + g_debug("trying to read info from USB device %d:%d", + usb_bus_number, usb_device_number); xml = get_info_from_usb (usb_bus_number, usb_device_number); } - if (xml == NULL) { + if (xml == NULL) { + g_debug("tring to read info from SCSI device %s", dev); xml = get_info_from_sg (dev); + } else { + g_debug("iPod properties successfully read from USB"); } if (xml == NULL) { + g_debug("couldn't read SysInfoExtended from device"); return -1; - } - props = itdb_sysinfo_extended_parse_from_xml (xml, NULL); + } else { + g_debug("iPod properties successfully read from SCSI"); + } + + props = itdb_sysinfo_extended_parse_from_xml (xml, &error); if (props == NULL) { + g_debug("failed to parse SysInfoExtended: %s", + error->message); + g_clear_error(&error); + g_debug("%s", xml); return -1; } @@ -689,7 +729,7 @@ int itdb_callout_set_ipod_properties (ItdbBackend *backend, const char *dev, g_free (xml); return -1; } - write_sysinfo_extended (ipod_mountpoint, xml); + write_sysinfo_extended (ipod_mountpoint, xml); g_free (xml); /* mounted_ipod_set_properties will call itdb_parse on the ipod |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:16
|
commit 42e25fa5984d2f8b485cc50788c83fb23fa80eaa Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 09:04:06 2011 +0200 udev: handle invalid XML files read from devices The generic callout code doesn't check the return of itdb_sysinfo_extended_parse_from_xml which can be NULL if XML parsing failed. If this happens, make sure we don't blindly try to go on. tools/generic-callout.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) --- diff --git a/tools/generic-callout.c b/tools/generic-callout.c index 1408132..73b016f 100644 --- a/tools/generic-callout.c +++ b/tools/generic-callout.c @@ -677,6 +677,9 @@ int itdb_callout_set_ipod_properties (ItdbBackend *backend, const char *dev, return -1; } props = itdb_sysinfo_extended_parse_from_xml (xml, NULL); + if (props == NULL) { + return -1; + } ipod_set_properties (backend, props); itdb_sysinfo_properties_free (props); |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:10
|
commit 85c2e33de5ee8fe1facc21d5be3ac61e900c56f8 Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 08:38:33 2011 +0200 don't crash on NULL in itdb_sysinfo_properties_free If the passed in pointer is NULL, itdb_sysinfo_properties_free will attempt to dereference it which will cause a crash. This crash was triggered by the udev callout code if itdb_sysinfo_extended_parse_from_xml returned NULL. This happened for example with an iPod Shuffle 4G which returned "" in answer to the USB inquiry command. src/itdb_sysinfo_extended_parser.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) --- diff --git a/src/itdb_sysinfo_extended_parser.c b/src/itdb_sysinfo_extended_parser.c index 9ac09f3..cc09c49 100644 --- a/src/itdb_sysinfo_extended_parser.c +++ b/src/itdb_sysinfo_extended_parser.c @@ -324,6 +324,7 @@ static void free_image_format (Itdb_ArtworkFormat *format) void itdb_sysinfo_properties_free (SysInfoIpodProperties *props) { + g_return_if_fail (props != NULL); g_list_foreach (props->artwork_formats, (GFunc)free_image_format, NULL); g_list_free (props->artwork_formats); g_list_foreach (props->photo_formats, (GFunc)free_image_format, NULL); |
From: Christophe F. <te...@us...> - 2011-07-23 17:07:03
|
commit ae8a6984abe2b88c761e4815d2b09a793e4724dd Author: Christophe Fergeau <cfe...@re...> Date: Sun Jul 17 08:34:28 2011 +0200 usb: return NULL when nothing could be read from USB ipod-usb.c:get_sysinfo_extended may return an empty string if the device accepts our vendor specific command but immediatly tells us there's no data to read (ie if we read 0 bytes). This happens on the Shuffle 4g. This case was then not handled in generic-callout.c, itdb_sysinfo_extended_parse_from_xml returns NULL when trying to parse an empty string, and itdb_sysinfo_properties_free would subsequently crash trying to dereference this NULL pointer. This bug was fixed thanks to eshat's investigations on IRC. tools/ipod-usb.c | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) --- diff --git a/tools/ipod-usb.c b/tools/ipod-usb.c index 0c4ff80..fff0215 100644 --- a/tools/ipod-usb.c +++ b/tools/ipod-usb.c @@ -73,6 +73,13 @@ static gchar *get_sysinfo_extended (libusb_device_handle *handle) } } /*hexdump ((guchar *)sysinfo_extended->str, sysinfo_extended->len);*/ + + if (sysinfo_extended->len == 0) { + /* Nothing could be read from USB */ + g_string_free(sysinfo_extended, TRUE); + return NULL; + } + return g_string_free (sysinfo_extended, FALSE); } |
From: Christophe F. <te...@us...> - 2011-07-23 17:06:57
|
commit 7205833542678660d322ee97b2a4b7dec7e4e1dc Author: Adeodato Simó <da...@ne...> Date: Thu Jul 7 22:49:19 2011 +0200 fix parsing of timezone on some Classic Some iPod Classic have a Preferences file which 4 bytes bigger than what we expect, which prevented libgpod from parsing these files. src/itdb_tzinfo.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) --- diff --git a/src/itdb_tzinfo.c b/src/itdb_tzinfo.c index ded4dd2..3c29947 100644 --- a/src/itdb_tzinfo.c +++ b/src/itdb_tzinfo.c @@ -272,6 +272,7 @@ G_GNUC_INTERNAL void itdb_device_set_timezone_info (Itdb_Device *device) raw_timezone_converter = raw_timezone_to_utc_shift_5g; break; case 2952: /* seen on nano 3g and iPod classic */ + case 2956: /* seen on iPod classic */ case 2960: /* seen on nano 4g */ offset = 0xb70; raw_timezone_converter = raw_timezone_to_utc_shift_6g; |
From: Christophe F. <te...@us...> - 2011-07-23 17:06:50
|
commit b35c72da7e3a73d031cdf4200eadc3145436336b Author: Christophe Fergeau <te...@gn...> Date: Thu Jul 7 22:21:48 2011 +0200 make smart playlist string comparisons case-insensitive Bring behaviour in line with iTunes by making smart playlist string comparisons case-insensitive. Based on a patch from James Burton <bur...@go...>. src/itdb_playlist.c | 62 +++++++++++++++++++++++++++++--------------------- 1 files changed, 36 insertions(+), 26 deletions(-) --- diff --git a/src/itdb_playlist.c b/src/itdb_playlist.c index fbb4aac..33ae6c8 100644 --- a/src/itdb_playlist.c +++ b/src/itdb_playlist.c @@ -382,35 +382,35 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) switch (splr->field) { case ITDB_SPLFIELD_SONG_NAME: - strcomp = track->title; + strcomp = g_utf8_casefold(track->title, -1); handled = TRUE; break; case ITDB_SPLFIELD_ALBUM: - strcomp = track->album; + strcomp = g_utf8_casefold(track->album, -1); handled = TRUE; break; case ITDB_SPLFIELD_ARTIST: - strcomp = track->artist; + strcomp = g_utf8_casefold(track->artist, -1); handled = TRUE; break; case ITDB_SPLFIELD_GENRE: - strcomp = track->genre; + strcomp = g_utf8_casefold(track->genre, -1); handled = TRUE; break; case ITDB_SPLFIELD_KIND: - strcomp = track->filetype; + strcomp = g_utf8_casefold(track->filetype, -1); handled = TRUE; break; case ITDB_SPLFIELD_COMMENT: - strcomp = track->comment; + strcomp = g_utf8_casefold(track->comment, -1); handled = TRUE; break; case ITDB_SPLFIELD_COMPOSER: - strcomp = track->composer; + strcomp = g_utf8_casefold(track->composer, -1); handled = TRUE; break; case ITDB_SPLFIELD_GROUPING: - strcomp = track->grouping; + strcomp = g_utf8_casefold(track->grouping, -1); handled = TRUE; break; case ITDB_SPLFIELD_BITRATE: @@ -474,11 +474,11 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) handled = TRUE; break; case ITDB_SPLFIELD_ALBUMARTIST: - strcomp = track->albumartist; + strcomp = g_utf8_casefold(track->albumartist, -1); handled = TRUE; break; case ITDB_SPLFIELD_TVSHOW: - strcomp = track->tvshow; + strcomp = g_utf8_casefold(track->tvshow, -1); handled = TRUE; break; case ITDB_SPLFIELD_LAST_SKIPPED: @@ -509,33 +509,43 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) case ITDB_SPLFT_STRING: if(strcomp && splr->string) { - gint len1 = strlen (strcomp); - gint len2 = strlen (splr->string); + gchar *casefolded_str; + gboolean cmp_result; + + casefolded_str = g_utf8_casefold(splr->string, -1); + cmp_result = FALSE; switch (splr->action) { case ITDB_SPLACTION_IS_STRING: - return (strcmp (strcomp, splr->string) == 0); + cmp_result = (strcmp (strcomp, casefolded_str) == 0); + break; case ITDB_SPLACTION_IS_NOT: - return (strcmp (strcomp, splr->string) != 0); + cmp_result = (strcmp (strcomp, casefolded_str) != 0); + break; case ITDB_SPLACTION_CONTAINS: - return (strstr (strcomp, splr->string) != NULL); + cmp_result = (strstr (strcomp, casefolded_str) != NULL); + break; case ITDB_SPLACTION_DOES_NOT_CONTAIN: - return (strstr (strcomp, splr->string) == NULL); + cmp_result = (strstr (strcomp, casefolded_str) == NULL); + break; case ITDB_SPLACTION_STARTS_WITH: - return (strncmp (strcomp, splr->string, len2) == 0); + cmp_result = g_str_has_prefix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_ENDS_WITH: - if (len2 > len1) return FALSE; - return (strncmp (strcomp+len1-len2, - splr->string, len2) == 0); + cmp_result = g_str_has_suffix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_DOES_NOT_START_WITH: - return (strncmp (strcomp, splr->string, - strlen (splr->string)) != 0); + cmp_result = !g_str_has_prefix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_DOES_NOT_END_WITH: - if (len2 > len1) return TRUE; - return (strncmp (strcomp+len1-len2, - splr->string, len2) != 0); - }; + cmp_result = !g_str_has_suffix(strcomp, casefolded_str); + break; + } + g_free(casefolded_str); + g_free(strcomp); + return cmp_result; } + g_free(strcomp); return FALSE; case ITDB_SPLFT_INT: switch(splr->action) |