[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?
From: |
Richard van den Berg |
Subject: |
Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ? |
Date: |
Thu, 18 Jun 2009 06:46:42 +0200 |
User-agent: |
Thunderbird 2.0.0.21 (Macintosh/20090302) |
Patch 2 bound the iTunesDB and GNUtunes.xml on id. Since gnupod
regenerates the id field on every mktunes run, other software might do
the same. So I figured binding them on the path attribute would be a
better idea.
Cheers,
Richard
? .gnupod_version
? Makefile
? autom4te.cache
? config.log
? config.status
? configure
Index: doc/gnupodrc.example
===================================================================
RCS file: /sources/gnupod/gnupod/doc/gnupodrc.example,v
retrieving revision 1.7
diff -u -r1.7 gnupodrc.example
--- doc/gnupodrc.example 5 Jun 2009 12:55:56 -0000 1.7
+++ doc/gnupodrc.example 18 Jun 2009 04:44:09 -0000
@@ -51,6 +51,14 @@
# mktunes.volume = +10
## Enforce iPod serial number:
# mktunes.fwguid = 000ba3100310abcf
+## Only keep some attributes to make the iTunesDB fit inside small RAM
+## The minimum attributes needed by the iPod are path and title
+## Valid attributes are:
+## title path album artist genre fdesc eq comment category composer group
+## desc podcastguid podcastrss chapterdata subtitle tvshow tvepisode
+## tvnetwork albumartist artistthe keywords sorttitle sortalbum
+## sortalbumartist sortcomposer sorttvshow
+# low_ram_attr = path title artist album
# *** gnupod_search.pl ***
Index: src/mktunes.pl
===================================================================
RCS file: /sources/gnupod/gnupod/src/mktunes.pl,v
retrieving revision 1.86
diff -u -r1.86 mktunes.pl
--- src/mktunes.pl 8 Dec 2007 10:26:08 -0000 1.86
+++ src/mktunes.pl 18 Jun 2009 04:44:09 -0000
@@ -41,7 +41,7 @@
$opts{mount} = $ENV{IPOD_MOUNTPOINT};
GetOptions(\%opts, "version", "help|h", "ipod-name|n=s", "mount|m=s",
"volume|v=i", "energy|e", "fwguid|g=s");
-GNUpod::FooBar::GetConfig(\%opts, {'ipod-name'=>'s', mount=>'s', volume=>'i',
energy=>'b', fwguid=>'s', model=>'s'}, "mktunes");
+GNUpod::FooBar::GetConfig(\%opts, {'ipod-name'=>'s', mount=>'s', volume=>'i',
energy=>'b', fwguid=>'s', model=>'s', low_ram_attr=>'s'}, "mktunes");
$opts{'ipod-name'} ||= "GNUpod ###__VERSION__###";
@@ -69,7 +69,12 @@
GNUpod::XMLhelper::doxml($con->{xml}) or usage("Could not read
$con->{xml}, did you run gnupod_INIT.pl ?");
print "\r> ".$mktunes->GetFileCount." files parsed, assembling
iTunesDB...\n";
- $mktunes->WriteItunesDB;
+
+ my $keep = {};
+ foreach(split(/[ ,]+/,$opts{'low_ram_attr'})) {
+ $keep->{$_}++;
+ }
+ $mktunes->WriteItunesDB(keep=>$keep);
if($fwguid) {
my $k = GNUpod::Hash58::HashItunesDB(FirewireId=>$fwguid,
iTunesDB=>$con->{itunesdb});
Index: src/tunes2pod.pl
===================================================================
RCS file: /sources/gnupod/gnupod/src/tunes2pod.pl,v
retrieving revision 1.49
diff -u -r1.49 tunes2pod.pl
--- src/tunes2pod.pl 2 Feb 2008 11:42:58 -0000 1.49
+++ src/tunes2pod.pl 18 Jun 2009 04:44:09 -0000
@@ -35,6 +35,8 @@
use vars qw(%opts);
$| = 1;
+my $xml_files_parsed=0;
+my $gtdb = {};
print "tunes2pod.pl Version ###__VERSION__### (C) Adrian Ulrich\n";
@@ -65,6 +67,11 @@
exit(1);
}
+ print "> Parsing XML document...\n";
+ GNUpod::XMLhelper::doxml($con->{xml}) or usage("Could not read
$con->{xml}, did you run gnupod_INIT.pl ?");
+ GNUpod::XMLhelper::resetxml;
+ print "\r> ".$xml_files_parsed." files parsed, converting
iTunesDB...\n";
+
open(ITUNES, $con->{itunesdb}) or usage("Could not open
$con->{itunesdb}");
while(<ITUNES>) {}; sysseek(ITUNES,0,0); # the iPod is a sloooow
mass-storage device, slurp it into the fs-cache
@@ -197,7 +204,7 @@
sub MhitEnd {
my($self, %args) = @_;
if($self->{mode} == MODE_SONGS) {
- GNUpod::XMLhelper::mkfile({file=>$self->{ctx}});
# Add <file element to xml
+ GNUpod::XMLhelper::mkfile({file=>MergeGtdbCtx($self->{ctx})});
# Add <file element to xml
$self->{ctx} = ();
# And drop this buffer
my $i = ++$self->{count_songs_done};
if($i % 32 == 0) {
@@ -344,11 +351,35 @@
$self->ResetPlaylists; # Resets podcast and normal playlist data
}
-
-
-
-
-
+#########################################################################
+# Merge GNUtunesDB with ctx
+sub MergeGtdbCtx {
+ my($Ctx) = @_;
+ return $Ctx unless $Ctx->{path} && $gtdb->{$Ctx->{path}};
+ return {%{$gtdb->{$Ctx->{path}}}, %$Ctx};
+}
+
+#########################################################################
+# Called by doxml if it finds a new <file tag
+sub newfile {
+ my($item) = @_;
+ my $file = $item->{file};
+ my $path = $file->{path};
+
+ $xml_files_parsed++;
+ print "\r> ".$xml_files_parsed." files parsed" if $xml_files_parsed %
96 == 0;
+
+ return unless $path;
+ $gtdb->{$path} = {};
+ foreach(keys(%$file)){
+ $gtdb->{$path}->{$_}=$file->{$_};
+ }
+}
+
+#########################################################################
+# Called by doxml if it a new <playlist.. has been found
+ sub newpl {
+}
sub usage {
my($rtxt) = @_;
Index: src/ext/Mktunes.pm
===================================================================
RCS file: /sources/gnupod/gnupod/src/ext/Mktunes.pm,v
retrieving revision 1.6
diff -u -r1.6 Mktunes.pm
--- src/ext/Mktunes.pm 6 Oct 2007 07:26:52 -0000 1.6
+++ src/ext/Mktunes.pm 18 Jun 2009 04:44:09 -0000
@@ -34,7 +34,7 @@
#########################################################################
# Create and write the iTunesDB file
sub WriteItunesDB {
- my($self) = @_;
+ my($self,%args) = @_;
my $mhbd_size = 0;
my $mhsd_size = 0;
@@ -52,7 +52,7 @@
$mhsd_size = tell(ITUNES);
print ITUNES
GNUpod::iTunesDB::mk_mhlt({songs=>$self->GetFileCount});
foreach my $item (@{$self->GetFiles}) {
- print ITUNES $self->AssembleMhit($item);
+ print ITUNES $self->AssembleMhit(object=>$item,
keep=>$args{keep});
print "\r> $i files assembled " if ($i++ % 96 == 0);
}
$mhsd_size = tell(ITUNES)-$mhsd_size;
@@ -267,7 +267,9 @@
#########################################################################
# Builds a single mhit with mhod childs
sub AssembleMhit {
- my($self, $object) = @_;
+ my($self, %args) = @_;
+ my $object = $args{object};
+ my $keep = $args{keep};
my $mhit = ''; # Buffer for the new mhit
my $mhod_chunks = ''; # Buffer for the childs (mhods)
my $mhod_count = 0; # Child counter
@@ -275,6 +277,7 @@
foreach my $key (sort keys(%$object)) {
my $value = $object->{$key};
next unless $value; # Do not write empty values
+ next if (scalar keys %$keep && !$keep->{$key}); # Only
keep specific mhods
my $new_mhod = GNUpod::iTunesDB::mk_mhod({stype=>$key,
string=>$value});
next unless $new_mhod; # Something went wrong
$mhod_chunks .= $new_mhod;
Index: src/ext/XMLhelper.pm
===================================================================
RCS file: /sources/gnupod/gnupod/src/ext/XMLhelper.pm,v
retrieving revision 1.69
diff -u -r1.69 XMLhelper.pm
--- src/ext/XMLhelper.pm 16 Jun 2009 08:35:27 -0000 1.69
+++ src/ext/XMLhelper.pm 18 Jun 2009 04:44:09 -0000
@@ -301,19 +301,23 @@
}
-
#############################################################
-# Parses the XML File and do events
-sub doxml {
- my($xmlin, %opts) = @_;
- return undef unless (-r $xmlin);
- ### reset some stuff if we do a second run
+# Reset some stuff if we do a second run
+sub resetxml {
$cpn = undef; #Current PlaylistName
@idpub = ();
@plorder = ();
$xid = 1;
$XDAT = undef;
- ###
+}
+
+
+#############################################################
+# Parses the XML File and do events
+sub doxml {
+ my($xmlin, %opts) = @_;
+ return undef unless (-r $xmlin);
+ &resetxml;
my $p;
my $ref = eval {
$p = new XML::Parser(ErrorContext => 0,
Handlers=>{Start=>\&eventer});
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, (continued)
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/13
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/15
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/15
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/16
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/16
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/16
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/17
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/17
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/17
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/17
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?,
Richard van den Berg <=
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/18
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/18
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/19
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/19
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, H. Langos, 2009/06/19
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/19
- Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/19
Re: [Bug-gnupod] mktunes.pl creates corrupt iTunesDB ?, Richard van den Berg, 2009/06/12