Update of /cvsroot/gtkpod/gtkpod/src
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv6786/src

Modified Files:
        display_itdb.h file.c file.h file_convert.c file_convert.h 
        file_itunesdb.c flacfile.c oggfile.c 
Log Message:
        * src/display_itdb.h
          src/file.c
          src/file.h
          src/file_convert.c
          src/file_convert.h
          src/file_itunesdb.c
          src/flacfile.c
          src/oggfile.c: changes in conversion engine. Whether
          conversion is necessary will be determined at the time of
          copying, not at the time of adding to ensure that drag and
          drops from the Local repository work as expected.



Index: display_itdb.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/display_itdb.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- display_itdb.h      16 Jan 2007 09:44:59 -0000      1.37
+++ display_itdb.h      18 Jan 2007 16:16:43 -0000      1.38
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-01-16 14:08:07 jcs>
+/* Time-stamp: <2007-01-19 00:55:02 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -64,17 +64,6 @@
 
 typedef struct
 {
-    gchar   *converted_file;        /* PC filename of the "mp3" file 
-                                       != NULL if the file exists   */
-    gint32   old_size;              /* size of the original file    */
-    FileType type;                  /* type of the original file    */
-    GPid     child_pid;             /* PID of conversion process    */
-    gint     child_stdout;          /* STDOUT of conversion process */
-    gchar   *command_line;          /* used for conversion */
-} TrackConv;
-
-typedef struct
-{
   gint32  oldsize;        /* used when updating tracks: size on iPod */
   gchar   *year_str;      /* year as string -- always identical to year */
   gchar   *pc_path_locale;/* path on PC (local encoding)             */
@@ -87,7 +76,6 @@
   gchar   *charset;       /* charset used for ID3 tags               */
   gint32  sortindex;      /* used for stable sorting (current order) */
   gboolean tchanged;      /* temporary use, e.g. in detail.c         */
-  TrackConv *conv;        /* to convert file */
 } ExtraTrackData;
 
 /* types for iTunesDB */

Index: file.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.c,v
retrieving revision 1.195
retrieving revision 1.196
diff -u -d -r1.195 -r1.196
--- file.c      16 Jan 2007 14:08:55 -0000      1.195
+++ file.c      18 Jan 2007 16:16:43 -0000      1.196
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-01-16 22:05:01 jcs>
+/* Time-stamp: <2007-01-19 00:59:20 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -114,7 +114,7 @@
  * -jlt
  */
 
-FileType determine_file_type (gchar *path)
+FileType determine_file_type (const gchar *path)
 {
     gchar *path_utf8, *suf;
     FileType type = FILE_TYPE_UNKNOWN;

Index: file.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file.h,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -d -r1.56 -r1.57
--- file.h      16 Jan 2007 09:44:59 -0000      1.56
+++ file.h      18 Jan 2007 16:16:43 -0000      1.57
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-09-01 22:00:03 jcs>
+/* Time-stamp: <2007-01-19 00:59:21 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -71,7 +71,7 @@
 
 typedef void (*AddTrackFunc)(Playlist *plitem, Track *track, gpointer data);
 
-FileType determine_file_type(gchar *path);
+FileType determine_file_type (const gchar *path);
 gboolean add_track_by_filename (iTunesDB *itdb, gchar *name,
                                Playlist *plitem, gboolean descend,
                                AddTrackFunc addtrackfunc, gpointer data);

Index: file_convert.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_convert.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- file_convert.c      16 Jan 2007 09:44:59 -0000      1.1
+++ file_convert.c      18 Jan 2007 16:16:43 -0000      1.2
@@ -53,9 +53,9 @@
 
 
 /* Internal functions */
-static GError *execute_conv(gchar **argv,Track *track);
+static GError *execute_conv (gchar **argv, TrackConv *converter);
 static gchar *get_filename_from_stdout(TrackConv *converter);
-static gchar *checking_converted_file (TrackConv *converter, Track *track);
+static gchar *checking_converted_file (TrackConv *converter);
 #if 0
 static gchar **cmdline_to_argv(const gchar *cmdline, Track *track); /* TODO: 
could be extern for other needs */
 #endif
@@ -68,23 +68,19 @@
  * converts a track by launching the external command given in the prefs 
  *
  */
-extern GError *file_convert_pre_copy(Track *track)
+extern GError *file_convert_pre_copy (TrackConv *converter)
 {   
     ExtraTrackData *etr=NULL;
-    TrackConv *converter=NULL;          /* the converter struct */
     GError *error=NULL;                 /* error if any */
     const gchar *type=NULL;             /* xxx (ogg) */
-    gchar *conv_str=NULL;               /* path_conv_xxx or ext_conv_xxx */
     gchar *convert_command=NULL;        /* from prefs */
     gchar **argv;                       /* for conversion external process */
 
-    /* sanity checks */ 
-    g_return_val_if_fail (track,NULL);
-    etr=track->userdata;
-    g_return_val_if_fail (etr,NULL);
-    converter=etr->conv;
-    g_return_val_if_fail (converter,NULL);
-
+    /* sanity checks */
+    g_return_val_if_fail (converter, NULL);
+    g_return_val_if_fail (converter->track, NULL);
+    etr=converter->track->userdata;
+    g_return_val_if_fail (etr, NULL);
 
     /* Find the correct script for conversion */
     switch (converter->type) {
@@ -105,15 +101,12 @@
             return NULL; /*FIXME: error? */
             break;
         case FILE_TYPE_OGG:
-            type="ogg";/*FIXME: get it directly for type. */
+           convert_command = prefs_get_string ("path_conv_ogg");
             break;
         case FILE_TYPE_FLAC:
-            type="flac";/*FIXME: get it directly for type. */
+           convert_command = prefs_get_string ("path_conv_flac");
             break;
     }
-    conv_str=g_strdup_printf("path_conv_%s",type);
-    convert_command=prefs_get_string (conv_str);
-    g_free(conv_str);
  
     debug("convert_command:%s\n",convert_command);
     /* Check that everything is ok before continuing */
@@ -133,7 +126,7 @@
 
     /* Convert the file */
 
-    error=execute_conv (argv, track); /* frees all cmdline strings */
+    error=execute_conv (argv, converter); /* frees all cmdline strings */
 
     return error;
 }
@@ -145,22 +138,19 @@
  * FIXME: check converted file extension sounds good. 
  *
  */
-extern GError *file_convert_wait_for_conversion(Track *track)
+GError *file_convert_wait_for_conversion (TrackConv *converter)
 {
     ExtraTrackData *etr=NULL;
-    TrackConv *converter=NULL;
     gint exit_status;
     GPid wait;
     gchar *error_msg=NULL;
     GError *error=NULL;
 
     /* sanity checks */ 
-    g_return_val_if_fail (track,NULL);
-    etr=track->userdata;
-    g_return_val_if_fail (etr,NULL);
-    converter=etr->conv;
-    g_return_val_if_fail (converter,NULL);
-    g_return_val_if_fail (converter->child_pid>0, NULL);
+    g_return_val_if_fail (converter, NULL);
+    g_return_val_if_fail (converter->track, NULL);
+    etr = converter->track->userdata;
+    g_return_val_if_fail (etr, NULL);
 
     debug("Waiting for child (PID=%d)\n",converter->child_pid);
 
@@ -208,7 +198,7 @@
 
     /* Checking file exists */
     if (!error_msg)
-        error_msg = checking_converted_file (converter, track);
+        error_msg = checking_converted_file (converter);
 
     /* Checking errors */
     if (error_msg){
@@ -237,25 +227,25 @@
  * Remove files created by file_convert_pre_copy() if necessary (TODO).
  *
  */
-extern GError * file_convert_post_copy(Track *track)
+GError * file_convert_post_copy (TrackConv *converter)
 {
     GError *error=NULL;
-    ExtraTrackData *etr=NULL;
-    TrackConv *converter=NULL;
+    ExtraTrackData *etr;
+    Track *track;
 
     /* sanity checks */ 
-    g_return_val_if_fail (track,NULL);
-    etr=track->userdata;
-    g_return_val_if_fail (etr,NULL);
-    converter=etr->conv;
     g_return_val_if_fail (converter,NULL);
-    g_return_val_if_fail (converter->converted_file, NULL);
+    track = converter->track;
+    g_return_val_if_fail (track, NULL);
+    etr = track->userdata;
+    g_return_val_if_fail (etr, NULL);
 
     debug("file_convert_post_copy(%s)\n",converter->converted_file);
     /*TODO: check prefs to not remove file */
-    g_unlink (converter->converted_file);
+    if (converter->converted_file)
+       g_unlink (converter->converted_file);
     g_free (converter->converted_file);
-    converter->converted_file=NULL;
+    converter->converted_file = NULL;
     /*FIXME: restore track->size ????? */
     return error; 
 }
@@ -281,10 +271,9 @@
 /*
  * Call the external command given in @tokens for the given @track
  */
-static GError *execute_conv(gchar **argv,Track *track)
+static GError *execute_conv (gchar **argv, TrackConv *converter)
 {
     ExtraTrackData *etr=NULL;
-    TrackConv *converter=NULL;
     GError *error=NULL;
     gchar *command_line=NULL;
     GError *spawn_error=NULL;
@@ -293,13 +282,12 @@
     gint child_stdout;
 
     /* sanity checks */ 
-    g_return_val_if_fail (track,NULL);
-    etr=track->userdata;
-    g_return_val_if_fail (etr,NULL);
-    converter=etr->conv;
-    g_return_val_if_fail (converter,NULL);
+    g_return_val_if_fail (converter, NULL);
+    g_return_val_if_fail (converter->track, NULL);
+    etr = converter->track->userdata;
+    g_return_val_if_fail (etr, NULL);
 
-    g_return_val_if_fail (argv!=NULL, NULL);
+    g_return_val_if_fail (argv, NULL);
 
     /* Building command_line string (for output only) */
     for(i=0; argv[i]!=NULL; ++i) 
@@ -391,10 +379,16 @@
 /*
  *  checking_converted_file()
  */
-static gchar *checking_converted_file (TrackConv *converter, Track *track)
+static gchar *checking_converted_file (TrackConv *converter)
 {
+    Track *track;
     gchar *error=NULL;
-    struct stat stat_file;             
+    struct stat stat_file;
+
+    g_return_val_if_fail (converter, NULL);
+    track = converter->track;
+    g_return_val_if_fail (track, NULL);
+      
     /* Fix some stuff for the iPod */
     if (g_file_test(converter->converted_file,G_FILE_TEST_EXISTS) &&
         stat(converter->converted_file,&stat_file)==0){

Index: file_convert.h
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_convert.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- file_convert.h      16 Jan 2007 09:44:59 -0000      1.1
+++ file_convert.h      18 Jan 2007 16:16:43 -0000      1.2
@@ -8,10 +8,22 @@
 #include <gtk/gtk.h>
 #include "display_itdb.h"
 
+typedef struct
+{
+    Track   *track;                 /* Track to convert */
+    gchar   *converted_file;        /* PC filename of the "mp3" file 
+                                       != NULL if the file exists   */
+    gint32   old_size;              /* size of the original file    */
+    FileType type;                  /* type of the original file    */
+    GPid     child_pid;             /* PID of conversion process    */
+    gint     child_stdout;          /* STDOUT of conversion process */
+    gchar   *command_line;          /* used for conversion */
+} TrackConv;
 
-extern GError *file_convert_pre_copy(Track *track);
-extern GError *file_convert_post_copy(Track *track);
-extern GError *file_convert_wait_for_conversion(Track *track);
+
+GError *file_convert_pre_copy (TrackConv *converter);
+GError *file_convert_post_copy (TrackConv *converter);
+GError *file_convert_wait_for_conversion (TrackConv *converter);
 
 /* extern gchar **cmdline_to_argv(const gchar *cmdline, Track *track); */
 

Index: file_itunesdb.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/file_itunesdb.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -d -r1.104 -r1.105
--- file_itunesdb.c     16 Jan 2007 09:44:59 -0000      1.104
+++ file_itunesdb.c     18 Jan 2007 16:16:43 -0000      1.105
@@ -1,4 +1,4 @@
-/* Time-stamp: <2006-11-23 00:45:42 jcs>
+/* Time-stamp: <2007-01-19 00:56:32 jcs>
 |
 |  Copyright (C) 2002-2005 Jorg Schuler <jcsjcs at users sourceforge net>
 |  Part of the gtkpod project.
@@ -1179,30 +1179,58 @@
 {
     Track *track = data;
     ExtraTrackData *etr;
+    FileType type;
+    TrackConv *converter = NULL;
     GError *error = NULL;
     g_return_val_if_fail (track, NULL);
     etr = track->userdata;
     g_return_val_if_fail (etr, NULL);
-    gchar *file_to_transfer=etr->pc_path_locale;
-
+    const gchar *file_to_transfer=etr->pc_path_locale;
 
-    if (etr->conv!=NULL)
+    /* check if we need to convert the file */
+    type = determine_file_type (file_to_transfer);
+    switch (type)
     {
-        error = file_convert_pre_copy(track);
+    case FILE_TYPE_UNKNOWN:
+    case FILE_TYPE_MP3:
+    case FILE_TYPE_M4A:
+    case FILE_TYPE_M4P:
+    case FILE_TYPE_M4B:
+    case FILE_TYPE_WAV:
+    case FILE_TYPE_M4V:
+    case FILE_TYPE_MP4:
+    case FILE_TYPE_MOV:
+    case FILE_TYPE_MPG:
+    case FILE_TYPE_M3U:
+    case FILE_TYPE_PLS:
+    case FILE_TYPE_IMAGE:
+    case FILE_TYPE_DIRECTORY:
+       converter = NULL;
+       break;
+    case FILE_TYPE_OGG:
+    case FILE_TYPE_FLAC:
+       converter = g_new0 (TrackConv, 1);
+       converter->type = type;
+       converter->track = track;
+       error = file_convert_pre_copy (converter);
         if (!error) 
         {
-            error= file_convert_wait_for_conversion(track);
+            error = file_convert_wait_for_conversion (converter);
             if (!error)
-                file_to_transfer=etr->conv->converted_file;
+                file_to_transfer = converter->converted_file;
         }
+       break;
     }
 
     if (error == NULL)
     {
-        fprintf(stderr,"Trying to copy: %s\n",file_to_transfer);
+        fprintf (stderr, "Trying to copy: %s\n", file_to_transfer);
         itdb_cp_track_to_ipod (track, file_to_transfer, &error);
-        if (etr->conv != NULL)
-            file_convert_post_copy(track);
+        if (converter)
+       {
+            file_convert_post_copy (converter);
+           g_free (converter);
+       }
     }
 
     /* delete old size */

Index: flacfile.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/flacfile.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- flacfile.c  16 Jan 2007 09:44:59 -0000      1.1
+++ flacfile.c  18 Jan 2007 16:16:43 -0000      1.2
@@ -36,8 +36,6 @@
     }
     else
     {
-        ExtraTrackData *etr = NULL;
-
         track = gp_track_new ();
        track->description = g_strdup ("FLAC audio file");
 
@@ -101,9 +99,6 @@
 
             FLAC__metadata_object_delete (tags);
        }
-        etr = track->userdata;
-        etr->conv = g_new0(TrackConv, 1);
-        etr->conv->type = FILE_TYPE_FLAC; /* FIXME: is it useful? */
         /* TODO: immediate conversion if thread ? */
     }
 

Index: oggfile.c
===================================================================
RCS file: /cvsroot/gtkpod/gtkpod/src/oggfile.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- oggfile.c   16 Jan 2007 09:45:00 -0000      1.1
+++ oggfile.c   18 Jan 2007 16:16:43 -0000      1.2
@@ -1,4 +1,4 @@
-/* Time-stamp: <2007-01-16 14:08:05 jcs>
+/* Time-stamp: <2007-01-19 00:56:31 jcs>
 |
 |  Copyright (C) 2007 Marc d[r]eadlock <m.dreadlock at gmail com>
 |  Part of the gtkpod project.
@@ -77,8 +77,6 @@
        }
         else
         {
-            TrackConv *aConv=NULL;
-            ExtraTrackData *etr=NULL;
            track = gp_track_new ();
            track->description = g_strdup ("OGG audio file");
             vorbis_info *vi=ov_info(&oggFile,-1);
@@ -128,10 +126,6 @@
                     
             }
             ov_clear(&oggFile); /* performs the fclose(file); */
-            etr=track->userdata;
-            aConv=g_new0(TrackConv, 1);
-            etr->conv=aConv;
-            aConv->type=FILE_TYPE_OGG;/* track->type; FIXME: is it usefull ?*/
             /* TODO: immediate conversion if thread ? */
        }
     }


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to