branches/gmyth-0.1b/src/gmyth_backendinfo.c
author rosfran
Tue Feb 06 00:33:35 2007 +0000 (2007-02-06)
branchtrunk
changeset 326 81b1f3006eb2
permissions -rw-r--r--
[svn r328] Some fixes on program info, and some memory clean ups.
renatofilho@320
     1
renatofilho@320
     2
/**
renatofilho@320
     3
 * GMyth Library
renatofilho@320
     4
 *
renatofilho@320
     5
 * @file gmyth/gmyth_backend_info.c
renatofilho@320
     6
 * 
renatofilho@320
     7
 * Copyright (C) 2006 INdT - Instituto Nokia de Tecnologia.
renatofilho@320
     8
 * @author Hallyson Melo <hallyson.melo@indt.org.br>
renatofilho@320
     9
 *
renatofilho@320
    10
 *//*
renatofilho@320
    11
 * 
renatofilho@320
    12
 * This program is free software; you can redistribute it and/or modify
renatofilho@320
    13
 * it under the terms of the GNU Lesser General Public License as published by
renatofilho@320
    14
 * the Free Software Foundation; either version 2 of the License, or
renatofilho@320
    15
 * (at your option) any later version.
renatofilho@320
    16
 *
renatofilho@320
    17
 * This program is distributed in the hope that it will be useful,
renatofilho@320
    18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
renatofilho@320
    19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
renatofilho@320
    20
 * GNU General Public License for more details.
renatofilho@320
    21
 *
renatofilho@320
    22
 * You should have received a copy of the GNU Lesser General Public License
renatofilho@320
    23
 * along with this program; if not, write to the Free Software
renatofilho@320
    24
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
renatofilho@320
    25
 */
renatofilho@320
    26
 
renatofilho@320
    27
#ifdef HAVE_CONFIG_H
renatofilho@320
    28
#include "config.h"
renatofilho@320
    29
#endif
renatofilho@320
    30
renatofilho@320
    31
#include "gmyth_backendinfo.h"
renatofilho@320
    32
#include "gmyth_uri.h"
renatofilho@320
    33
#include "gmyth_debug.h"
renatofilho@320
    34
renatofilho@320
    35
static void gmyth_backend_info_class_init  (GMythBackendInfoClass *klass);
renatofilho@320
    36
static void gmyth_backend_info_init        (GMythBackendInfo *object);
renatofilho@320
    37
renatofilho@320
    38
static void gmyth_backend_info_dispose  (GObject *object);
renatofilho@320
    39
static void gmyth_backend_info_finalize (GObject *object);
renatofilho@320
    40
renatofilho@320
    41
G_DEFINE_TYPE(GMythBackendInfo, gmyth_backend_info, G_TYPE_OBJECT)
renatofilho@320
    42
    
renatofilho@320
    43
static void
renatofilho@320
    44
gmyth_backend_info_class_init (GMythBackendInfoClass *klass)
renatofilho@320
    45
{
renatofilho@320
    46
    GObjectClass *gobject_class;
renatofilho@320
    47
renatofilho@320
    48
    gobject_class = (GObjectClass *) klass;
renatofilho@320
    49
renatofilho@320
    50
    gobject_class->dispose  = gmyth_backend_info_dispose;
renatofilho@320
    51
    gobject_class->finalize = gmyth_backend_info_finalize;	
renatofilho@320
    52
}
renatofilho@320
    53
renatofilho@320
    54
static void
renatofilho@320
    55
gmyth_backend_info_init (GMythBackendInfo *backend_info)
renatofilho@320
    56
{
renatofilho@320
    57
    backend_info->hostname = NULL;
renatofilho@320
    58
    backend_info->username = NULL;
renatofilho@320
    59
    backend_info->password = NULL;    
renatofilho@320
    60
    backend_info->db_name  = NULL;
renatofilho@320
    61
    backend_info->port = -1;
renatofilho@320
    62
    backend_info->uri		   = NULL;
renatofilho@320
    63
}
renatofilho@320
    64
renatofilho@320
    65
static void
renatofilho@320
    66
gmyth_backend_info_dispose  (GObject *object)
renatofilho@320
    67
{
renatofilho@320
    68
    GMythBackendInfo *backend_info = GMYTH_BACKEND_INFO (object);
renatofilho@320
    69
renatofilho@320
    70
    g_free (backend_info->hostname);
renatofilho@320
    71
    g_free (backend_info->username);
renatofilho@320
    72
    g_free (backend_info->password);
renatofilho@320
    73
    g_free (backend_info->db_name);
renatofilho@320
    74
renatofilho@320
    75
    backend_info->hostname = NULL;
renatofilho@320
    76
    backend_info->username = NULL;
renatofilho@320
    77
    backend_info->password = NULL;
renatofilho@320
    78
    backend_info->db_name  = NULL;
renatofilho@320
    79
    backend_info->port = -1;
renatofilho@320
    80
renatofilho@320
    81
    if ( backend_info->uri != NULL )
renatofilho@320
    82
    {
renatofilho@320
    83
    	g_object_unref(backend_info->uri);
renatofilho@320
    84
    	backend_info->uri = NULL;
renatofilho@320
    85
    }
renatofilho@320
    86
renatofilho@320
    87
    G_OBJECT_CLASS (gmyth_backend_info_parent_class)->dispose (object);
renatofilho@320
    88
}
renatofilho@320
    89
renatofilho@320
    90
static void
renatofilho@320
    91
gmyth_backend_info_finalize (GObject *object)
renatofilho@320
    92
{
renatofilho@320
    93
    g_signal_handlers_destroy (object);
renatofilho@320
    94
renatofilho@320
    95
    G_OBJECT_CLASS (gmyth_backend_info_parent_class)->finalize (object);
renatofilho@320
    96
}
renatofilho@320
    97
renatofilho@320
    98
/** Creates a new instance of GMythBackendInfo.
renatofilho@320
    99
 * 
renatofilho@320
   100
 * @return a new instance of GMythBackendInfo.
renatofilho@320
   101
 */
renatofilho@320
   102
GMythBackendInfo*
renatofilho@320
   103
gmyth_backend_info_new ()
renatofilho@320
   104
{
renatofilho@320
   105
    GMythBackendInfo *backend_info = 
renatofilho@320
   106
        GMYTH_BACKEND_INFO (g_object_new(GMYTH_BACKEND_INFO_TYPE, NULL));
renatofilho@320
   107
    
renatofilho@320
   108
    return backend_info;
renatofilho@320
   109
}
renatofilho@320
   110
renatofilho@320
   111
GMythBackendInfo*
renatofilho@320
   112
gmyth_backend_info_new_full (const gchar *hostname, const gchar *username,
renatofilho@320
   113
	const gchar *password, const gchar *db_name, gint port)
renatofilho@320
   114
{
renatofilho@320
   115
    GMythBackendInfo *backend_info = 
renatofilho@320
   116
        GMYTH_BACKEND_INFO (g_object_new(GMYTH_BACKEND_INFO_TYPE, NULL));
renatofilho@320
   117
    
renatofilho@320
   118
    backend_info->uri = gmyth_uri_new_with_value( 
renatofilho@320
   119
    				g_strdup_printf( "myth://%s:%s@%s:%d/?%s", username, password, hostname, port, db_name ) );
renatofilho@320
   120
renatofilho@320
   121
    gmyth_backend_info_set_hostname (backend_info, hostname);
renatofilho@320
   122
    gmyth_backend_info_set_username (backend_info, username);
renatofilho@320
   123
    gmyth_backend_info_set_password (backend_info, password);
renatofilho@320
   124
    gmyth_backend_info_set_db_name (backend_info, db_name);
renatofilho@320
   125
    gmyth_backend_info_set_port (backend_info, port);
renatofilho@320
   126
renatofilho@320
   127
    return backend_info;
renatofilho@320
   128
}
renatofilho@320
   129
renatofilho@320
   130
GMythBackendInfo*
renatofilho@320
   131
gmyth_backend_info_new_with_uri ( const gchar *uri_str )
renatofilho@320
   132
{
renatofilho@320
   133
    GMythBackendInfo *backend_info = 
renatofilho@320
   134
        GMYTH_BACKEND_INFO (g_object_new(GMYTH_BACKEND_INFO_TYPE, NULL));
renatofilho@320
   135
        
renatofilho@320
   136
    backend_info->uri = gmyth_uri_new_with_value( uri_str );
renatofilho@320
   137
    
renatofilho@320
   138
    gchar** path_parts = g_strsplit( gmyth_uri_get_path( backend_info->uri ), "&", -1 );
renatofilho@320
   139
    
renatofilho@320
   140
    gmyth_backend_info_set_hostname (backend_info, gmyth_uri_get_host ( backend_info->uri ) );
renatofilho@320
   141
    gmyth_backend_info_set_username (backend_info, gmyth_uri_get_user( backend_info->uri ) );
renatofilho@320
   142
    gmyth_backend_info_set_password (backend_info, gmyth_uri_get_password( backend_info->uri ) );
renatofilho@320
   143
    /* gets the path info to database name, from the URI, and removes the trash chars */
renatofilho@320
   144
    gmyth_backend_info_set_db_name (backend_info, path_parts != NULL && path_parts[0] != NULL 
renatofilho@320
   145
    				&& strlen( path_parts[0] ) > 0 ? g_strstrip( g_strdup( g_strdelimit( path_parts[0], "/?", ' ' ) ) ) 
renatofilho@320
   146
    						: gmyth_uri_get_path( backend_info->uri ) );
renatofilho@320
   147
    gmyth_backend_info_set_port (backend_info, gmyth_uri_get_port( backend_info->uri ) );
renatofilho@320
   148
    
renatofilho@320
   149
    g_strfreev( path_parts );
renatofilho@320
   150
		
renatofilho@320
   151
    return backend_info;
renatofilho@320
   152
}
renatofilho@320
   153
renatofilho@320
   154
void
renatofilho@320
   155
gmyth_backend_info_set_hostname (GMythBackendInfo *backend_info, const gchar *hostname)
renatofilho@320
   156
{
renatofilho@320
   157
    g_return_if_fail (backend_info != NULL);
renatofilho@320
   158
    
renatofilho@320
   159
    if ( NULL == hostname || strlen(hostname) <= 0 )
renatofilho@320
   160
    { 
renatofilho@320
   161
	  	gmyth_debug ( "Error trying to set a hostname equals to NULL." );
renatofilho@320
   162
    } else {    	
renatofilho@320
   163
    	backend_info->hostname = g_strdup (hostname);
renatofilho@320
   164
    }
renatofilho@320
   165
}
renatofilho@320
   166
renatofilho@320
   167
void
renatofilho@320
   168
gmyth_backend_info_set_username (GMythBackendInfo *backend_info, const gchar *username)
renatofilho@320
   169
{
renatofilho@320
   170
    g_return_if_fail (backend_info != NULL);
renatofilho@320
   171
renatofilho@320
   172
    backend_info->username = g_strdup (username);
renatofilho@320
   173
}
renatofilho@320
   174
renatofilho@320
   175
void
renatofilho@320
   176
gmyth_backend_info_set_password (GMythBackendInfo *backend_info, const gchar *password)
renatofilho@320
   177
{
renatofilho@320
   178
    g_return_if_fail (backend_info != NULL);
renatofilho@320
   179
renatofilho@320
   180
    backend_info->password = g_strdup (password);
renatofilho@320
   181
}
renatofilho@320
   182
renatofilho@320
   183
void
renatofilho@320
   184
gmyth_backend_info_set_db_name (GMythBackendInfo *backend_info, const gchar *db_name)
renatofilho@320
   185
{
renatofilho@320
   186
    g_return_if_fail (backend_info != NULL);
renatofilho@320
   187
renatofilho@320
   188
    backend_info->db_name = g_strdup (db_name);
renatofilho@320
   189
}
renatofilho@320
   190
renatofilho@320
   191
void
renatofilho@320
   192
gmyth_backend_info_set_port (GMythBackendInfo *backend_info, const gint port )
renatofilho@320
   193
{
renatofilho@320
   194
    g_return_if_fail (backend_info != NULL);
renatofilho@320
   195
renatofilho@320
   196
    if ( port <= 0 )
renatofilho@320
   197
    { 
renatofilho@320
   198
	  	gmyth_debug ( "Error trying to set a hostname equals to NULL (it doesn't using UPnP)." );
renatofilho@320
   199
    } else {    	
renatofilho@320
   200
    	backend_info->port = port;
renatofilho@320
   201
    }
renatofilho@320
   202
}
renatofilho@320
   203
renatofilho@320
   204
const gchar*
renatofilho@320
   205
gmyth_backend_info_get_hostname (GMythBackendInfo *backend_info)
renatofilho@320
   206
{
renatofilho@320
   207
    g_return_val_if_fail (backend_info != NULL, NULL);
renatofilho@320
   208
renatofilho@320
   209
    return backend_info->hostname;
renatofilho@320
   210
}
renatofilho@320
   211
renatofilho@320
   212
const gchar*
renatofilho@320
   213
gmyth_backend_info_get_username (GMythBackendInfo *backend_info)
renatofilho@320
   214
{
renatofilho@320
   215
    g_return_val_if_fail (backend_info != NULL, NULL);
renatofilho@320
   216
renatofilho@320
   217
    return backend_info->username;
renatofilho@320
   218
}
renatofilho@320
   219
renatofilho@320
   220
const gchar*
renatofilho@320
   221
gmyth_backend_info_get_password (GMythBackendInfo *backend_info)
renatofilho@320
   222
{
renatofilho@320
   223
    g_return_val_if_fail (backend_info != NULL, NULL);
renatofilho@320
   224
renatofilho@320
   225
    return backend_info->password;
renatofilho@320
   226
}
renatofilho@320
   227
renatofilho@320
   228
const gchar*
renatofilho@320
   229
gmyth_backend_info_get_db_name (GMythBackendInfo *backend_info)
renatofilho@320
   230
{
renatofilho@320
   231
    g_return_val_if_fail (backend_info != NULL, NULL);
renatofilho@320
   232
renatofilho@320
   233
    return backend_info->db_name;
renatofilho@320
   234
}
renatofilho@320
   235
renatofilho@320
   236
gint
renatofilho@320
   237
gmyth_backend_info_get_port (GMythBackendInfo *backend_info)
renatofilho@320
   238
{
renatofilho@320
   239
    g_return_val_if_fail (backend_info != NULL, -1);
renatofilho@320
   240
renatofilho@320
   241
    return backend_info->port;
renatofilho@320
   242
}
renatofilho@320
   243
renatofilho@320
   244
const GMythURI*
renatofilho@320
   245
gmyth_backend_info_get_uri (GMythBackendInfo *backend_info)
renatofilho@320
   246
{
renatofilho@320
   247
	
renatofilho@320
   248
	if ( NULL == backend_info->uri )
renatofilho@320
   249
	{
renatofilho@320
   250
		backend_info->uri = gmyth_uri_new_with_value( 
renatofilho@320
   251
	    				g_strdup_printf( "myth://%s:%s@%s:%d/?%s", backend_info->username, backend_info->password, 
renatofilho@320
   252
	    				backend_info->hostname, backend_info->port, backend_info->db_name ) );
renatofilho@320
   253
	}
renatofilho@320
   254
	
renatofilho@320
   255
	return backend_info->uri;	
renatofilho@320
   256
}
renatofilho@320
   257
renatofilho@320
   258