libgnomevfs2-mythtv/modules/mythtv-method.c
author morphbr
Wed Apr 04 18:05:44 2007 +0100 (2007-04-04)
branchtrunk
changeset 498 7a0c3906dce2
parent 461 0683ea324deb
child 502 aa932d8bf85b
permissions -rwxr-xr-x
[svn r503] GMyth-Streamer: Chenca's bug fix
melunko@38
     1
/*
melunko@38
     2
 * @author Hallyson Melo <hallyson.melo@indt.org.br>
melunko@38
     3
 *
melunko@38
     4
 * This program is free software; you can redistribute it and/or modify
melunko@38
     5
 * it under the terms of the GNU Lesser General Public License as published by
melunko@38
     6
 * the Free Software Foundation; either version 2 of the License, or
melunko@38
     7
 * (at your option) any later version.
melunko@38
     8
 *
melunko@38
     9
 * This program is distributed in the hope that it will be useful,
melunko@38
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
melunko@38
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
melunko@38
    12
 * GNU General Public License for more details.
melunko@38
    13
 *
melunko@38
    14
 * You should have received a copy of the GNU Lesser General Public License
melunko@38
    15
 * along with this program; if not, write to the Free Software
melunko@38
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
melunko@38
    17
 */
melunko@38
    18
melunko@38
    19
#ifdef HAVE_CONFIG_H
melunko@38
    20
#include <config.h>
melunko@38
    21
#endif
melunko@38
    22
melunko@38
    23
#include <string.h>
melunko@38
    24
#include <glib.h>
leo_sobral@441
    25
#include <glib/gprintf.h>
leo_sobral@441
    26
#include <glib/gstdio.h>
melunko@38
    27
#include <math.h>
melunko@38
    28
melunko@38
    29
#include <libgnomevfs/gnome-vfs-module.h>
melunko@38
    30
#include <libgnomevfs/gnome-vfs-utils.h>
melunko@38
    31
rosfran@277
    32
#include <gmyth/gmyth_file_transfer.h>
rosfran@277
    33
#include <gmyth/gmyth_livetv.h>
rosfran@277
    34
#include <gmyth/gmyth_uri.h>
rosfran@277
    35
#include <gmyth/gmyth_recorder.h>
rosfran@277
    36
#include <gmyth/gmyth_backendinfo.h>
rosfran@277
    37
#include <gmyth/gmyth_util.h>
rosfran@332
    38
#include <gmyth/gmyth_remote_util.h>
rosfran@332
    39
#include <gmyth/gmyth_tvchain.h>
rosfran@357
    40
#include <gmyth/gmyth_programinfo.h>
melunko@38
    41
melunko@38
    42
#define GST_MYTHTV_ID_NUM               1
melunko@38
    43
#define MYTHTV_VERSION_DEFAULT          30
rosfran@277
    44
#define MYTHTV_TRANSFER_MAX_WAITS       100
melunko@38
    45
rosfran@361
    46
/* internal GnomeVFS plug-in buffer size ( 120 Kbytes ) */
leo_sobral@441
    47
#define MYTHTV_BUFFER_SIZE                          80*1024
rosfran@361
    48
/* internally sized GnomeVFS plug-in buffer ( 4 Kbytes ) */
leo_sobral@441
    49
#define MYTHTV_MAX_VFS_BUFFER_SIZE                  4096
rosfran@361
    50
/* maximum number of bytes to be requested to the MythTV backend ( 64 Kbytes ) */
leo_sobral@441
    51
#define MYTHTV_MAX_REQUEST_SIZE                     64*1024
melunko@111
    52
renatofilho@456
    53
typedef struct {
renatofilho@456
    54
	GMythFileTransfer *file_transfer;
renatofilho@456
    55
	GMythLiveTV *livetv;
renatofilho@456
    56
    GMythBackendInfo *backend_info;
renatofilho@456
    57
    GMythURI *gmyth_uri;
renatofilho@456
    58
    GMythRecorder *live_recorder;
renatofilho@456
    59
    gint64 offset;
renatofilho@456
    60
renatofilho@456
    61
	gchar *channel_name;
renatofilho@456
    62
renatofilho@456
    63
	gint mythtv_version;
renatofilho@456
    64
	gboolean configured;
renatofilho@456
    65
} MythtvHandle;
renatofilho@456
    66
renatofilho@456
    67
renatofilho@367
    68
static GnomeVFSResult do_read (GnomeVFSMethod * method,
renatofilho@367
    69
			       GnomeVFSMethodHandle * method_handle,
renatofilho@367
    70
			       gpointer buffer,
renatofilho@367
    71
			       GnomeVFSFileSize num_bytes,
renatofilho@367
    72
			       GnomeVFSFileSize * bytes_read,
renatofilho@367
    73
			       GnomeVFSContext * context);
melunko@38
    74
renatofilho@456
    75
static GnomeVFSResult   myth_connection_start   (MythtvHandle * method_handle);
renatofilho@456
    76
static void             myth_destroy_handle     (MythtvHandle * method_handle);
renatofilho@456
    77
static GnomeVFSResult   myth_handle_new         (GnomeVFSURI * uri,
renatofilho@456
    78
                                                 MythtvHandle ** method_handle);
renatofilho@456
    79
static GnomeVFSResult   myth_get_file_info      (MythtvHandle * myth_handle,
renatofilho@456
    80
                                                 GnomeVFSURI * uri,
renatofilho@456
    81
                                                 GnomeVFSFileInfo * info);
melunko@111
    82
renatofilho@456
    83
static GnomeVFSResult 
renatofilho@456
    84
myth_handle_new (GnomeVFSURI * uri,
renatofilho@456
    85
                 MythtvHandle ** method_handle)
renatofilho@456
    86
{   
renatofilho@456
    87
    gchar *tmp_str1;
renatofilho@456
    88
    gchar *tmp_str2;
renatofilho@456
    89
renatofilho@456
    90
    _GNOME_VFS_METHOD_PARAM_CHECK (*method_handle == NULL);
renatofilho@456
    91
    
renatofilho@456
    92
	if (gnome_vfs_uri_get_host_name (uri) == NULL) {
renatofilho@456
    93
		return GNOME_VFS_ERROR_INVALID_HOST_NAME;
renatofilho@456
    94
	}
renatofilho@456
    95
renatofilho@456
    96
    *method_handle = g_new0 (MythtvHandle, 1);
renatofilho@456
    97
    (*method_handle)->mythtv_version = MYTHTV_VERSION_DEFAULT;
renatofilho@456
    98
        
renatofilho@456
    99
    tmp_str1 = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
renatofilho@456
   100
    tmp_str2 = gnome_vfs_unescape_string (tmp_str1, "");
renatofilho@456
   101
renatofilho@456
   102
    (*method_handle)->backend_info = gmyth_backend_info_new_with_uri (tmp_str2);
renatofilho@456
   103
    (*method_handle)->gmyth_uri = gmyth_uri_new_with_value (tmp_str2);
renatofilho@456
   104
    g_free (tmp_str1);
renatofilho@456
   105
    g_free (tmp_str2);
renatofilho@456
   106
renatofilho@456
   107
    return GNOME_VFS_OK;
renatofilho@456
   108
}   
renatofilho@456
   109
renatofilho@456
   110
static void
renatofilho@456
   111
myth_destroy_handle (MythtvHandle * method_handle)
renatofilho@456
   112
{
renatofilho@456
   113
    //TODO: abort if in tranfer state
renatofilho@456
   114
    
renatofilho@456
   115
    if (method_handle->backend_info != NULL) {
renatofilho@456
   116
        g_object_unref (method_handle->backend_info);
renatofilho@456
   117
        method_handle->backend_info = NULL;
renatofilho@456
   118
    }
renatofilho@456
   119
    
renatofilho@456
   120
    if (method_handle->channel_name != NULL) {
renatofilho@456
   121
        g_free (method_handle->channel_name);
renatofilho@456
   122
        method_handle->channel_name = NULL;
renatofilho@456
   123
    }
renatofilho@456
   124
renatofilho@456
   125
    if (method_handle->livetv != NULL) {
renatofilho@456
   126
        g_object_unref (method_handle->livetv);
renatofilho@456
   127
        method_handle->livetv = NULL;
renatofilho@456
   128
    }
renatofilho@456
   129
renatofilho@456
   130
    if (method_handle->file_transfer != NULL) {
renatofilho@456
   131
        g_object_unref (method_handle->file_transfer);
renatofilho@456
   132
        method_handle->file_transfer = NULL;
renatofilho@456
   133
    }
renatofilho@456
   134
renatofilho@456
   135
    if (method_handle->gmyth_uri != NULL) {
renatofilho@456
   136
        g_object_unref (method_handle->gmyth_uri);
renatofilho@456
   137
        method_handle->gmyth_uri = NULL;
renatofilho@456
   138
    }
renatofilho@456
   139
renatofilho@456
   140
    g_free (method_handle);
renatofilho@456
   141
}
renatofilho@456
   142
renatofilho@456
   143
static GnomeVFSResult
renatofilho@456
   144
myth_get_file_info (MythtvHandle * myth_handle,
renatofilho@456
   145
                    GnomeVFSURI * uri,
renatofilho@456
   146
                    GnomeVFSFileInfo * info)
renatofilho@456
   147
{
renatofilho@456
   148
    GMythURI *gmyth_uri;
renatofilho@456
   149
    GMythBackendInfo *backend_info;
renatofilho@456
   150
    
renatofilho@456
   151
    _GNOME_VFS_METHOD_PARAM_CHECK (info != NULL);
renatofilho@461
   152
    
renatofilho@456
   153
renatofilho@456
   154
    if (myth_handle == NULL) {
renatofilho@456
   155
        gchar *tmp_str1;
renatofilho@456
   156
        gchar *tmp_str2;
renatofilho@456
   157
        
renatofilho@456
   158
        tmp_str1 = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
renatofilho@456
   159
        tmp_str2 = gnome_vfs_unescape_string (tmp_str1, "");
renatofilho@456
   160
renatofilho@456
   161
        backend_info = gmyth_backend_info_new_with_uri (tmp_str2);
renatofilho@456
   162
        gmyth_uri = gmyth_uri_new_with_value (tmp_str2);
renatofilho@456
   163
        
renatofilho@456
   164
        g_free (tmp_str1);
renatofilho@456
   165
        g_free (tmp_str2);
renatofilho@456
   166
    } else {
renatofilho@456
   167
        backend_info = g_object_ref (myth_handle->backend_info);
renatofilho@456
   168
        gmyth_uri = g_object_ref (myth_handle->gmyth_uri);
renatofilho@456
   169
    }
renatofilho@456
   170
renatofilho@456
   171
    info->valid_fields = 0;
renatofilho@456
   172
	info->valid_fields = GNOME_VFS_FILE_INFO_FIELDS_TYPE | 
renatofilho@456
   173
        GNOME_VFS_FILE_INFO_FIELDS_MIME_TYPE | 
renatofilho@456
   174
        GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS;
renatofilho@456
   175
    
renatofilho@456
   176
	info->type = GNOME_VFS_FILE_TYPE_REGULAR;
renatofilho@456
   177
    
renatofilho@456
   178
	/* fixme: get from file extension? */
renatofilho@456
   179
	info->mime_type = g_strdup ("video/x-nuv");
renatofilho@456
   180
	info->permissions = GNOME_VFS_PERM_USER_READ | 
renatofilho@456
   181
        GNOME_VFS_PERM_OTHER_READ | 
renatofilho@456
   182
        GNOME_VFS_PERM_GROUP_READ;
renatofilho@456
   183
renatofilho@456
   184
   
renatofilho@456
   185
	info->name = g_strdup (gmyth_uri_get_path (gmyth_uri));
renatofilho@456
   186
renatofilho@456
   187
    /* file size for remote files */
renatofilho@456
   188
    if (gmyth_uri_is_livetv (gmyth_uri) == FALSE) {
renatofilho@456
   189
        GMythFileTransfer *file_transfer = gmyth_file_transfer_new (backend_info);
renatofilho@456
   190
        
renatofilho@456
   191
        /* Verifies if the file exists */
renatofilho@456
   192
        if (!gmyth_util_file_exists (backend_info, 
renatofilho@456
   193
                    gmyth_uri_get_path (gmyth_uri))) {
renatofilho@461
   194
            g_object_unref (file_transfer);
renatofilho@456
   195
            g_object_unref (backend_info);
renatofilho@456
   196
            g_debug ("NOT FOUND %s/%d", __FUNCTION__, __LINE__);
renatofilho@456
   197
            return GNOME_VFS_ERROR_NOT_FOUND;
renatofilho@456
   198
		}
renatofilho@461
   199
renatofilho@461
   200
        if (!gmyth_file_transfer_open (file_transfer, gmyth_uri_get_path (gmyth_uri))) {
renatofilho@461
   201
            g_object_unref (file_transfer);
renatofilho@461
   202
            g_object_unref (backend_info);
renatofilho@461
   203
            g_debug ("NOT FOUND %s/%d", __FUNCTION__, __LINE__);
renatofilho@461
   204
            return GNOME_VFS_ERROR_NOT_FOUND;
renatofilho@461
   205
        }
renatofilho@456
   206
	
renatofilho@456
   207
		info->size = gmyth_file_transfer_get_filesize (file_transfer);
renatofilho@456
   208
        info->valid_fields |= GNOME_VFS_FILE_INFO_FIELDS_SIZE;
renatofilho@456
   209
		g_object_unref (file_transfer);
renatofilho@456
   210
	}
renatofilho@456
   211
renatofilho@456
   212
    g_object_unref (backend_info);
renatofilho@456
   213
    g_object_unref (gmyth_uri);
renatofilho@456
   214
    
renatofilho@456
   215
    return GNOME_VFS_OK;
renatofilho@456
   216
}
renatofilho@456
   217
renatofilho@456
   218
static GnomeVFSResult
renatofilho@456
   219
myth_connection_start (MythtvHandle * method_handle)
renatofilho@456
   220
{
renatofilho@456
   221
    GnomeVFSResult result = GNOME_VFS_OK;
renatofilho@456
   222
renatofilho@456
   223
    _GNOME_VFS_METHOD_PARAM_CHECK (method_handle != NULL);
renatofilho@456
   224
    _GNOME_VFS_METHOD_PARAM_CHECK (method_handle->backend_info != NULL);
renatofilho@456
   225
renatofilho@456
   226
	/* Connect to the backend */
renatofilho@456
   227
	if (gmyth_uri_is_livetv (method_handle->gmyth_uri) == TRUE) {
renatofilho@456
   228
		method_handle->livetv = gmyth_livetv_new (method_handle->backend_info);
renatofilho@456
   229
		method_handle->channel_name = gmyth_uri_get_channel_name (method_handle->gmyth_uri);
renatofilho@456
   230
        
renatofilho@456
   231
		if (method_handle->channel_name != NULL) {
renatofilho@456
   232
		    if (gmyth_livetv_channel_name_setup (method_handle->livetv, 
renatofilho@456
   233
                    method_handle->channel_name) == FALSE) {
renatofilho@456
   234
                result = GNOME_VFS_ERROR_INVALID_URI;
renatofilho@456
   235
    			goto error;
renatofilho@456
   236
			}
renatofilho@456
   237
		} else if (gmyth_livetv_setup (method_handle->livetv) == FALSE) {
renatofilho@456
   238
                result = GNOME_VFS_ERROR_INVALID_URI;
renatofilho@456
   239
                goto error;
renatofilho@456
   240
		}
renatofilho@456
   241
        
renatofilho@456
   242
renatofilho@456
   243
    	method_handle->file_transfer = 
renatofilho@456
   244
            gmyth_livetv_create_file_transfer (method_handle->livetv);
renatofilho@456
   245
renatofilho@456
   246
        if (method_handle->file_transfer == NULL) {
renatofilho@456
   247
            result = GNOME_VFS_ERROR_INVALID_URI;
renatofilho@456
   248
    		g_debug ("MythTV FileTransfer is NULL!\n");
renatofilho@456
   249
            goto error;
renatofilho@456
   250
        }
renatofilho@456
   251
renatofilho@456
   252
	    if (!gmyth_file_transfer_open (method_handle->file_transfer,
renatofilho@456
   253
                                        method_handle->livetv->uri != NULL ? 
renatofilho@456
   254
                                        gmyth_uri_get_path (method_handle->livetv->uri) :
renatofilho@456
   255
                                        method_handle->livetv->proginfo->pathname->str)) {
renatofilho@456
   256
        
renatofilho@456
   257
            g_debug ("Couldn't open MythTV FileTransfer is NULL!\n");
renatofilho@456
   258
            result = GNOME_VFS_ERROR_NOT_OPEN;
renatofilho@456
   259
            goto error;
renatofilho@456
   260
        }
renatofilho@456
   261
    }
renatofilho@456
   262
    else {
renatofilho@456
   263
        method_handle->file_transfer = 
renatofilho@456
   264
            gmyth_file_transfer_new (method_handle->backend_info);
renatofilho@456
   265
renatofilho@456
   266
		/* Verifies if the file exists */
renatofilho@456
   267
		if (!gmyth_util_file_exists (method_handle->backend_info, 
renatofilho@456
   268
                    gmyth_uri_get_path (method_handle->gmyth_uri))) {
renatofilho@456
   269
renatofilho@456
   270
            g_debug ("NOT FOUND %s/%d", __FUNCTION__, __LINE__);
renatofilho@456
   271
            goto error;
renatofilho@456
   272
		}
renatofilho@456
   273
renatofilho@456
   274
		/* sets the Playback monitor connection */
renatofilho@461
   275
		if (!gmyth_file_transfer_open (method_handle->file_transfer,
renatofilho@461
   276
                  					    gmyth_uri_get_path (method_handle->gmyth_uri))) {
renatofilho@461
   277
renatofilho@461
   278
            g_debug ("NOT FOUND %s/%d", __FUNCTION__, __LINE__);
renatofilho@461
   279
		    result = GNOME_VFS_ERROR_NOT_FOUND;
renatofilho@461
   280
            goto error;
renatofilho@461
   281
        }
renatofilho@456
   282
	} /* if - LiveTV or not? */
renatofilho@456
   283
renatofilho@456
   284
	method_handle->configured = TRUE;    
renatofilho@456
   285
renatofilho@456
   286
    if (method_handle->file_transfer == NULL) {
renatofilho@456
   287
        result = GNOME_VFS_ERROR_NOT_OPEN;
renatofilho@456
   288
    }
renatofilho@456
   289
renatofilho@456
   290
error:
renatofilho@456
   291
    
renatofilho@456
   292
    return result; 
renatofilho@456
   293
}
renatofilho@456
   294
melunko@38
   295
static GnomeVFSResult
renatofilho@367
   296
do_open (GnomeVFSMethod * method,
renatofilho@367
   297
	 GnomeVFSMethodHandle ** method_handle,
renatofilho@367
   298
	 GnomeVFSURI * uri,
renatofilho@367
   299
	 GnomeVFSOpenMode mode, GnomeVFSContext * context)
renatofilho@367
   300
{
renatofilho@367
   301
	MythtvHandle *myth_handle = NULL;
renatofilho@456
   302
    GnomeVFSResult result = GNOME_VFS_OK;
renatofilho@456
   303
renatofilho@367
   304
	_GNOME_VFS_METHOD_PARAM_CHECK (method_handle != NULL);
renatofilho@367
   305
	_GNOME_VFS_METHOD_PARAM_CHECK (uri != NULL);
melunko@38
   306
renatofilho@367
   307
	if (mode & GNOME_VFS_OPEN_WRITE) {
renatofilho@456
   308
		return GNOME_VFS_ERROR_INVALID_OPEN_MODE;
renatofilho@367
   309
	}
melunko@38
   310
renatofilho@456
   311
    result = myth_handle_new (uri, &myth_handle);
renatofilho@456
   312
    if (result != GNOME_VFS_OK) 
renatofilho@456
   313
        return result;
renatofilho@367
   314
renatofilho@456
   315
    result = myth_connection_start (myth_handle);
renatofilho@456
   316
    if (result != GNOME_VFS_OK) {
renatofilho@456
   317
        myth_destroy_handle (myth_handle);
renatofilho@456
   318
        myth_handle = NULL;
renatofilho@456
   319
        return result;
renatofilho@456
   320
    }
renatofilho@461
   321
renatofilho@456
   322
    *method_handle = (GnomeVFSMethodHandle *) myth_handle;
renatofilho@456
   323
    
renatofilho@456
   324
    return result;
renatofilho@456
   325
}
renatofilho@367
   326
renatofilho@456
   327
static GnomeVFSResult
renatofilho@456
   328
do_create (GnomeVFSMethod	 *method,
renatofilho@456
   329
	   GnomeVFSMethodHandle **method_handle,
renatofilho@456
   330
	   GnomeVFSURI 		 *uri,
renatofilho@456
   331
	   GnomeVFSOpenMode 	  mode,
renatofilho@456
   332
	   gboolean 		  exclusive,
renatofilho@456
   333
	   guint 		  perm,
renatofilho@456
   334
	   GnomeVFSContext 	 *context)
renatofilho@456
   335
{
renatofilho@456
   336
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   337
}
renatofilho@367
   338
renatofilho@456
   339
static GnomeVFSResult
renatofilho@456
   340
do_close (GnomeVFSMethod * method,
renatofilho@456
   341
        GnomeVFSMethodHandle * method_handle, 
renatofilho@456
   342
        GnomeVFSContext * context)
renatofilho@456
   343
{
renatofilho@456
   344
	MythtvHandle *myth_handle = (MythtvHandle *) method_handle;
leo_sobral@447
   345
renatofilho@456
   346
    myth_destroy_handle (myth_handle);
renatofilho@456
   347
    
renatofilho@367
   348
	return GNOME_VFS_OK;
melunko@38
   349
}
melunko@38
   350
renatofilho@456
   351
melunko@38
   352
static GnomeVFSResult
renatofilho@367
   353
do_read (GnomeVFSMethod * method,
renatofilho@367
   354
	 GnomeVFSMethodHandle * method_handle,
renatofilho@367
   355
	 gpointer buffer,
renatofilho@367
   356
	 GnomeVFSFileSize num_bytes,
leo_sobral@441
   357
	 GnomeVFSFileSize * bytes_read, 
renatofilho@456
   358
         GnomeVFSContext * context)
melunko@38
   359
{
renatofilho@456
   360
    GnomeVFSResult result;
renatofilho@456
   361
    MythtvHandle *myth_handle;
renatofilho@456
   362
    gint64 total_read = 0;
renatofilho@456
   363
    GByteArray *myth_buffer = g_byte_array_new ();
melunko@38
   364
renatofilho@456
   365
    _GNOME_VFS_METHOD_PARAM_CHECK (method_handle != NULL);
melunko@38
   366
renatofilho@456
   367
    myth_handle = (MythtvHandle *) method_handle;
renatofilho@456
   368
    result = GNOME_VFS_OK;
melunko@38
   369
renatofilho@456
   370
    total_read = gmyth_file_transfer_read (myth_handle->file_transfer,
renatofilho@456
   371
                              		   myth_buffer,
renatofilho@456
   372
                         		   num_bytes, gmyth_uri_is_livetv (myth_handle->gmyth_uri));
renatofilho@367
   373
renatofilho@367
   374
renatofilho@456
   375
    if (total_read == -1) {
renatofilho@456
   376
        result = GNOME_VFS_ERROR_IO;
renatofilho@456
   377
        total_read = 0;
renatofilho@456
   378
    }
renatofilho@367
   379
renatofilho@456
   380
    if (total_read < num_bytes) {
renatofilho@456
   381
        result = GNOME_VFS_ERROR_EOF;
renatofilho@456
   382
    }
renatofilho@367
   383
renatofilho@456
   384
    if (total_read > 0) {
renatofilho@456
   385
	g_memmove (buffer, myth_buffer->data, total_read);
renatofilho@456
   386
        g_byte_array_free (myth_buffer, TRUE);
renatofilho@456
   387
        myth_handle->offset += total_read;
renatofilho@459
   388
    } 
renatofilho@461
   389
    
renatofilho@456
   390
    *bytes_read = (GnomeVFSFileSize) total_read;
renatofilho@367
   391
renatofilho@456
   392
	return result;
melunko@38
   393
}
melunko@38
   394
melunko@38
   395
static GnomeVFSResult
renatofilho@456
   396
do_write (GnomeVFSMethod 	*method,
renatofilho@456
   397
	  GnomeVFSMethodHandle  *method_handle,
renatofilho@456
   398
	  gconstpointer 	 buffer,
renatofilho@456
   399
	  GnomeVFSFileSize 	 num_bytes,
renatofilho@456
   400
	  GnomeVFSFileSize 	*bytes_written,
renatofilho@456
   401
	  GnomeVFSContext 	*context)
melunko@38
   402
{
renatofilho@456
   403
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   404
}
melunko@111
   405
renatofilho@456
   406
static GnomeVFSResult
renatofilho@456
   407
do_seek (GnomeVFSMethod	      *method,
renatofilho@456
   408
	 GnomeVFSMethodHandle *method_handle,
renatofilho@456
   409
	 GnomeVFSSeekPosition  whence,
renatofilho@456
   410
	 GnomeVFSFileOffset    offset,
renatofilho@456
   411
	 GnomeVFSContext      *context)
renatofilho@456
   412
{
renatofilho@456
   413
	MythtvHandle *myth_handle;
renatofilho@460
   414
    //guint64 whence_p = 0;
renatofilho@460
   415
    //gint64 new_offset =0;
renatofilho@367
   416
renatofilho@456
   417
     _GNOME_VFS_METHOD_PARAM_CHECK (method_handle != NULL);
renatofilho@367
   418
renatofilho@456
   419
     myth_handle = (MythtvHandle *) method_handle;    
renatofilho@456
   420
    
renatofilho@456
   421
    g_debug ("seek offset%"G_GINT64_FORMAT" whence %d", offset, whence);
renatofilho@367
   422
renatofilho@460
   423
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@460
   424
    /*
renatofilho@456
   425
    if (gmyth_uri_is_livetv (myth_handle->gmyth_uri))
renatofilho@456
   426
    
renatofilho@456
   427
    switch (whence)
renatofilho@456
   428
    {
renatofilho@456
   429
        case GNOME_VFS_SEEK_START:
renatofilho@456
   430
            whence_p = 0;
renatofilho@456
   431
            break;
renatofilho@456
   432
        case GNOME_VFS_SEEK_CURRENT:
renatofilho@456
   433
            whence_p = myth_handle->offset;
renatofilho@456
   434
            break;
renatofilho@456
   435
        case GNOME_VFS_SEEK_END:
renatofilho@456
   436
            return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   437
    }
renatofilho@456
   438
    
renatofilho@456
   439
    new_offset = gmyth_file_transfer_seek (myth_handle->file_transfer, offset, whence_p);
renatofilho@456
   440
    if (new_offset != 0) {
renatofilho@456
   441
        myth_handle->offset = new_offset;
renatofilho@456
   442
        return GNOME_VFS_OK;
renatofilho@456
   443
    }
renatofilho@367
   444
renatofilho@456
   445
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@460
   446
    */
renatofilho@456
   447
}
renatofilho@367
   448
renatofilho@456
   449
static GnomeVFSResult
renatofilho@456
   450
do_tell (GnomeVFSMethod       *method,
renatofilho@456
   451
	 GnomeVFSMethodHandle *method_handle,
renatofilho@456
   452
	 GnomeVFSFileSize   *offset_return)
renatofilho@456
   453
{
renatofilho@456
   454
	MythtvHandle *myth_handle = NULL;
leo_sobral@441
   455
    
renatofilho@456
   456
     _GNOME_VFS_METHOD_PARAM_CHECK (method_handle != NULL);
renatofilho@456
   457
     
renatofilho@456
   458
    myth_handle = (MythtvHandle *) method_handle;
renatofilho@456
   459
    *offset_return = myth_handle->offset;
renatofilho@367
   460
renatofilho@456
   461
    return GNOME_VFS_OK;
renatofilho@456
   462
}
renatofilho@367
   463
renatofilho@456
   464
static GnomeVFSResult
renatofilho@456
   465
do_truncate_handle (GnomeVFSMethod *method,
renatofilho@456
   466
		    GnomeVFSMethodHandle *method_handle,
renatofilho@456
   467
		    GnomeVFSFileSize where,
renatofilho@456
   468
		    GnomeVFSContext *context)
renatofilho@456
   469
{
renatofilho@456
   470
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   471
}
renatofilho@367
   472
renatofilho@456
   473
static GnomeVFSResult
renatofilho@456
   474
do_open_directory (GnomeVFSMethod 	    *method,
renatofilho@456
   475
		   GnomeVFSMethodHandle    **method_handle,
renatofilho@456
   476
		   GnomeVFSURI 		    *uri,
renatofilho@456
   477
		   GnomeVFSFileInfoOptions   options,
renatofilho@456
   478
		   GnomeVFSContext 	    *context) 
renatofilho@456
   479
{
renatofilho@456
   480
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
melunko@38
   481
}
melunko@38
   482
melunko@38
   483
static GnomeVFSResult
renatofilho@456
   484
do_close_directory (GnomeVFSMethod 	 *method,
renatofilho@456
   485
		    GnomeVFSMethodHandle *method_handle,
renatofilho@456
   486
		    GnomeVFSContext 	 *context) 
renatofilho@456
   487
{
renatofilho@456
   488
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   489
}
renatofilho@456
   490
renatofilho@456
   491
static GnomeVFSResult
renatofilho@456
   492
do_read_directory (GnomeVFSMethod 	*method,
renatofilho@456
   493
       		   GnomeVFSMethodHandle *method_handle,
renatofilho@456
   494
       		   GnomeVFSFileInfo 	*file_info,
renatofilho@456
   495
		   GnomeVFSContext 	*context)
renatofilho@456
   496
{
renatofilho@456
   497
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   498
}
renatofilho@456
   499
renatofilho@456
   500
renatofilho@456
   501
static GnomeVFSResult
renatofilho@367
   502
do_get_file_info (GnomeVFSMethod * method,
renatofilho@367
   503
		  GnomeVFSURI * uri,
renatofilho@367
   504
		  GnomeVFSFileInfo * file_info,
renatofilho@367
   505
		  GnomeVFSFileInfoOptions options,
renatofilho@367
   506
		  GnomeVFSContext * context)
melunko@38
   507
{
renatofilho@456
   508
    return myth_get_file_info (NULL, uri, file_info);
renatofilho@456
   509
}
leo_sobral@447
   510
renatofilho@456
   511
static GnomeVFSResult
renatofilho@456
   512
do_get_file_info_from_handle (GnomeVFSMethod 		*method,
renatofilho@456
   513
            			      GnomeVFSMethodHandle 	*method_handle,
renatofilho@456
   514
			                  GnomeVFSFileInfo 		*file_info,
renatofilho@456
   515
            			      GnomeVFSFileInfoOptions    options,
renatofilho@456
   516
			                  GnomeVFSContext 		*context)
renatofilho@456
   517
{
renatofilho@456
   518
	MythtvHandle *myth_handle = (MythtvHandle *) method_handle;
renatofilho@188
   519
renatofilho@456
   520
    return myth_get_file_info (myth_handle, NULL, file_info);
melunko@38
   521
}
melunko@38
   522
melunko@38
   523
static gboolean
renatofilho@367
   524
do_is_local (GnomeVFSMethod * method, const GnomeVFSURI * uri)
melunko@38
   525
{
melunko@38
   526
	return FALSE;
melunko@38
   527
}
melunko@38
   528
renatofilho@456
   529
static GnomeVFSResult
renatofilho@456
   530
do_make_directory (GnomeVFSMethod  *method, 
renatofilho@456
   531
		            GnomeVFSURI     *uri,
renatofilho@456
   532
                    guint 	    perm, 
renatofilho@456
   533
		            GnomeVFSContext *context) 
renatofilho@456
   534
{
renatofilho@456
   535
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   536
}
renatofilho@456
   537
renatofilho@456
   538
static GnomeVFSResult 
renatofilho@456
   539
do_remove_directory (GnomeVFSMethod  *method, 
renatofilho@456
   540
		             GnomeVFSURI     *uri, 
renatofilho@456
   541
		             GnomeVFSContext *context) 
renatofilho@456
   542
{
renatofilho@456
   543
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   544
}
renatofilho@456
   545
renatofilho@456
   546
static GnomeVFSResult
renatofilho@456
   547
do_move (GnomeVFSMethod  *method,
renatofilho@456
   548
	 GnomeVFSURI 	 *old_uri,
renatofilho@456
   549
	 GnomeVFSURI 	 *new_uri,
renatofilho@456
   550
	 gboolean         force_replace,
renatofilho@456
   551
	 GnomeVFSContext *context)
renatofilho@456
   552
{
renatofilho@456
   553
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   554
}
renatofilho@456
   555
renatofilho@456
   556
static GnomeVFSResult 
renatofilho@456
   557
do_unlink (GnomeVFSMethod  *method,
renatofilho@456
   558
	   GnomeVFSURI 	   *uri,
renatofilho@456
   559
	   GnomeVFSContext *context)
renatofilho@456
   560
{
renatofilho@456
   561
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   562
}
renatofilho@456
   563
renatofilho@456
   564
static GnomeVFSResult 
renatofilho@456
   565
do_check_same_fs (GnomeVFSMethod  *method,
renatofilho@456
   566
		  GnomeVFSURI 	  *a,
renatofilho@456
   567
		  GnomeVFSURI 	  *b,
renatofilho@456
   568
		  gboolean 	  *same_fs_return,
renatofilho@456
   569
		  GnomeVFSContext *context)
renatofilho@456
   570
{
renatofilho@456
   571
    return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   572
}
renatofilho@456
   573
renatofilho@456
   574
static GnomeVFSResult
renatofilho@456
   575
do_set_file_info (GnomeVFSMethod 		*method,
renatofilho@456
   576
		  GnomeVFSURI 			*uri,
renatofilho@456
   577
		  const GnomeVFSFileInfo 	*info,
renatofilho@456
   578
		  GnomeVFSSetFileInfoMask 	 mask,
renatofilho@456
   579
		  GnomeVFSContext 		*context)
renatofilho@456
   580
{
renatofilho@456
   581
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   582
}
renatofilho@456
   583
renatofilho@456
   584
static GnomeVFSResult
renatofilho@456
   585
do_truncate (GnomeVFSMethod *method,
renatofilho@456
   586
	     GnomeVFSURI *uri,
renatofilho@456
   587
	     GnomeVFSFileSize where,
renatofilho@456
   588
	     GnomeVFSContext *context)
renatofilho@456
   589
{
renatofilho@456
   590
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   591
}
renatofilho@456
   592
renatofilho@456
   593
static GnomeVFSResult
renatofilho@456
   594
do_find_directory (GnomeVFSMethod *method,
renatofilho@456
   595
		   GnomeVFSURI *near_uri,
renatofilho@456
   596
		   GnomeVFSFindDirectoryKind kind,
renatofilho@456
   597
		   GnomeVFSURI **result_uri,
renatofilho@456
   598
		   gboolean create_if_needed,
renatofilho@456
   599
		   gboolean find_if_needed,
renatofilho@456
   600
		   guint permissions,
renatofilho@456
   601
		   GnomeVFSContext *context)
renatofilho@456
   602
{
renatofilho@456
   603
	return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   604
}
renatofilho@456
   605
renatofilho@456
   606
static GnomeVFSResult
renatofilho@456
   607
do_create_symbolic_link (GnomeVFSMethod *method,
renatofilho@456
   608
			 GnomeVFSURI *uri,
renatofilho@456
   609
			 const char *target_reference,
renatofilho@456
   610
			 GnomeVFSContext *context)
renatofilho@456
   611
{
renatofilho@456
   612
    return GNOME_VFS_ERROR_READ_ONLY;
renatofilho@456
   613
}
renatofilho@456
   614
renatofilho@456
   615
static GnomeVFSResult
renatofilho@456
   616
do_monitor_add (GnomeVFSMethod *method,
renatofilho@456
   617
		GnomeVFSMethodHandle **method_handle_return,
renatofilho@456
   618
		GnomeVFSURI *uri,
renatofilho@456
   619
		GnomeVFSMonitorType monitor_type)
renatofilho@456
   620
{
renatofilho@456
   621
	return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   622
}
renatofilho@456
   623
renatofilho@456
   624
static GnomeVFSResult
renatofilho@456
   625
do_monitor_cancel (GnomeVFSMethod *method,
renatofilho@456
   626
		   GnomeVFSMethodHandle *method_handle)
renatofilho@456
   627
{
renatofilho@456
   628
	return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   629
}
renatofilho@456
   630
renatofilho@456
   631
static GnomeVFSResult
renatofilho@456
   632
do_file_control (GnomeVFSMethod *method,
renatofilho@456
   633
		 GnomeVFSMethodHandle *method_handle,
renatofilho@456
   634
		 const char *operation,
renatofilho@456
   635
		 gpointer operation_data,
renatofilho@456
   636
		 GnomeVFSContext *context)
renatofilho@456
   637
{
renatofilho@456
   638
	return GNOME_VFS_ERROR_NOT_SUPPORTED;
renatofilho@456
   639
}
renatofilho@456
   640
melunko@38
   641
static GnomeVFSMethod method = {
melunko@38
   642
	sizeof (GnomeVFSMethod),
renatofilho@456
   643
	do_open, 
renatofilho@456
   644
	do_create,
melunko@38
   645
	do_close,
renatofilho@456
   646
	do_read, 
renatofilho@456
   647
	do_write,
renatofilho@456
   648
	do_seek,
renatofilho@456
   649
	do_tell,
renatofilho@456
   650
	do_truncate_handle, 
renatofilho@456
   651
	do_open_directory,
renatofilho@456
   652
	do_close_directory,
renatofilho@456
   653
	do_read_directory,
melunko@38
   654
	do_get_file_info,
renatofilho@456
   655
	do_get_file_info_from_handle,
renatofilho@456
   656
	do_is_local, 
renatofilho@456
   657
	do_make_directory, 
renatofilho@456
   658
	do_remove_directory,
renatofilho@456
   659
	do_move,
renatofilho@456
   660
	do_unlink,
renatofilho@456
   661
	do_check_same_fs,
renatofilho@456
   662
	do_set_file_info,
renatofilho@456
   663
	do_truncate, 
renatofilho@456
   664
	do_find_directory, 
renatofilho@456
   665
	do_create_symbolic_link,  
renatofilho@456
   666
	do_monitor_add,  
renatofilho@456
   667
	do_monitor_cancel,  
renatofilho@456
   668
	do_file_control 	
melunko@38
   669
};
melunko@38
   670
melunko@38
   671
melunko@38
   672
GnomeVFSMethod *
melunko@38
   673
vfs_module_init (const char *method_name, const char *args)
melunko@38
   674
{
melunko@38
   675
	return &method;
melunko@38
   676
}
melunko@38
   677
melunko@38
   678
void
renatofilho@367
   679
vfs_module_shutdown (GnomeVFSMethod * method)
melunko@38
   680
{
melunko@38
   681
}