# HG changeset patch
# User rosfran
# Date 1171293748 0
# Node ID ce009d76ffb5f80c60764129f77fd731eece9ad9
# Parent  f3b8627a51e45a9ec3941f388dfec5aaf0fe2246
[svn r356] Solved bug on read method callback.

diff -r f3b8627a51e4 -r ce009d76ffb5 libgnomevfs2-mythtv/modules/mythtv-method.c
--- a/libgnomevfs2-mythtv/modules/mythtv-method.c	Mon Feb 12 14:52:45 2007 +0000
+++ b/libgnomevfs2-mythtv/modules/mythtv-method.c	Mon Feb 12 15:22:28 2007 +0000
@@ -40,7 +40,9 @@
 #define MYTHTV_VERSION_DEFAULT          30
 #define MYTHTV_TRANSFER_MAX_WAITS       100
 
-#define MYTHTV_BUFFER_SIZE							1024*64
+#define MYTHTV_BUFFER_SIZE							1024*80
+#define MYTHTV_MAX_VFS_BUFFER_SIZE			4096
+#define MYTHTV_MAX_REQUEST_SIZE					1024*64
 
 static GnomeVFSResult do_read (GnomeVFSMethod *method,
                                GnomeVFSMethodHandle *method_handle,
@@ -211,6 +213,8 @@
   GnomeVFSFileSize bytes_to_read;
 
   *bytes_read = 0;
+  
+  g_debug ("XXXXXXXXXX Requested %llu bytes...\n", (guint64)num_bytes);
 
   if ( !myth_handle->is_livetv && ( myth_handle->bytes_read >= myth_handle->content_size ) )
       return GNOME_VFS_ERROR_EOF;
@@ -225,17 +229,23 @@
   /* Loop sending the Myth File Transfer request:
   * Retry whilst authentication fails and we supply it. */
   //if (myth_handle->buffer_remain  < MYTHTV_BUFFER_SIZE) {
-  if ( ( myth_handle->buffer_remain = myth_handle->buffer->len ) < MYTHTV_BUFFER_SIZE ) {
+  if ( ( myth_handle->buffer_remain = myth_handle->buffer->len ) < MYTHTV_MAX_VFS_BUFFER_SIZE ) {
+  	gint buffer_size = MYTHTV_BUFFER_SIZE - myth_handle->buffer_remain;
+  	
+  	/* resize buffer length request to no more than MYTHTV_MAX_REQUEST_SIZE */
+  	if ( buffer_size > MYTHTV_MAX_REQUEST_SIZE )
+  		buffer_size = MYTHTV_MAX_REQUEST_SIZE;
+
   	GByteArray *tmp_buffer = g_byte_array_new();
 
-		printf ("XXXXXXXXXXXXXX Pedindo %d %d\n", MYTHTV_BUFFER_SIZE, myth_handle->buffer_remain);
+		g_debug ("XXXXXXXXXX Pedindo %d (restam apenas %d no buffer)\n", buffer_size, myth_handle->buffer_remain);
 
     gint len = gmyth_file_transfer_read (myth_handle->file_transfer,
-          tmp_buffer, MYTHTV_BUFFER_SIZE - myth_handle->buffer_remain, TRUE);
+          tmp_buffer, buffer_size, TRUE);
 
 		if (!myth_handle->is_livetv && len < 0) {
 	    g_byte_array_free (tmp_buffer, TRUE);
-	    g_print ("Fail to read bytes");
+	    g_debug ("Fail to read bytes");
 	    return GNOME_VFS_ERROR_IO;
 	  } /*else if (len == 0) {
 		    g_byte_array_free (tmp_buffer, TRUE);
@@ -248,9 +258,12 @@
 	
 			myth_handle->buffer_remain += len;
 
-      g_byte_array_free (tmp_buffer, TRUE);
-    	tmp_buffer = NULL;
-    }
+			if ( tmp_buffer != NULL )
+			{
+	      g_byte_array_free (tmp_buffer, TRUE);
+	    	tmp_buffer = NULL;
+			}
+    } /* if - got from the network, or not */
     
     bytes_to_read = (bytes_to_read > myth_handle->buffer_remain) ? myth_handle->buffer_remain : bytes_to_read;
     /* gets the first buffer_size bytes from the byte array buffer variable */ 
@@ -276,7 +289,6 @@
     MythtvHandle *myth_handle = (MythtvHandle *) method_handle;
 
     if (myth_handle->file_transfer != NULL) {
-	    //gmyth_file_transfer_close (myth_handle->file_transfer);
       g_object_unref (myth_handle->file_transfer);
     	myth_handle->file_transfer = NULL;
     }