2009-07-22 15:55:48 +00:00
|
|
|
/*
|
2010-01-04 21:00:47 +00:00
|
|
|
* This file Copyright (C) 2008-2010 Mnemosyne LLC
|
2006-08-13 00:26:52 +00:00
|
|
|
*
|
2009-07-22 15:55:48 +00:00
|
|
|
* This file is licensed by the GPL version 2. Works owned by the
|
|
|
|
* Transmission project are granted a special exemption to clause 2(b)
|
2009-08-10 20:04:08 +00:00
|
|
|
* so that the bulk of its code can remain under the MIT license.
|
2009-07-22 15:55:48 +00:00
|
|
|
* This exemption does not extend to derived works not owned by
|
|
|
|
* the Transmission project.
|
2006-08-13 00:26:52 +00:00
|
|
|
*
|
2009-07-22 20:39:12 +00:00
|
|
|
* $Id$
|
2009-07-22 15:55:48 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef GTR_UTIL_H
|
|
|
|
#define GTR_UTIL_H
|
2006-07-16 19:39:23 +00:00
|
|
|
|
|
|
|
#include <sys/types.h>
|
2010-04-21 19:23:27 +00:00
|
|
|
#include <glib.h>
|
2009-08-14 12:53:08 +00:00
|
|
|
#include <gtk/gtk.h>
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2010-07-03 00:25:22 +00:00
|
|
|
#include <libtransmission/transmission.h>
|
|
|
|
|
|
|
|
extern const int mem_K;
|
|
|
|
extern const char * mem_K_str;
|
|
|
|
extern const char * mem_M_str;
|
|
|
|
extern const char * mem_G_str;
|
2010-07-06 20:25:54 +00:00
|
|
|
extern const char * mem_T_str;
|
2010-07-03 00:25:22 +00:00
|
|
|
|
|
|
|
extern const int disk_K;
|
|
|
|
extern const char * disk_K_str;
|
|
|
|
extern const char * disk_M_str;
|
|
|
|
extern const char * disk_G_str;
|
2010-07-06 20:25:54 +00:00
|
|
|
extern const char * disk_T_str;
|
2010-07-03 00:25:22 +00:00
|
|
|
|
|
|
|
extern const int speed_K;
|
|
|
|
extern const char * speed_K_str;
|
|
|
|
extern const char * speed_M_str;
|
|
|
|
extern const char * speed_G_str;
|
2010-07-06 20:25:54 +00:00
|
|
|
extern const char * speed_T_str;
|
2010-07-03 00:25:22 +00:00
|
|
|
|
2010-04-21 19:23:27 +00:00
|
|
|
/* portability wrapper around g_warn_if_fail() for older versions of glib */
|
|
|
|
#ifdef g_warn_if_fail
|
|
|
|
#define gtr_warn_if_fail(expr) g_warn_if_fail(expr)
|
|
|
|
#else
|
|
|
|
#define gtr_warn_if_fail(expr) do { if G_LIKELY (expr) ; else \
|
|
|
|
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, "%s:%d func(): %s: invariant failed: %s", \
|
|
|
|
__FILE__, __LINE__, G_STRFUNC, #expr ); } while(0)
|
|
|
|
#endif
|
|
|
|
|
2006-07-16 19:39:23 +00:00
|
|
|
/* macro to shut up "unused parameter" warnings */
|
2008-05-18 16:44:30 +00:00
|
|
|
#ifndef UNUSED
|
2008-09-23 19:11:04 +00:00
|
|
|
#define UNUSED G_GNUC_UNUSED
|
2008-05-18 16:44:30 +00:00
|
|
|
#endif
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2010-03-20 14:53:08 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
GTR_UNICODE_UP,
|
|
|
|
GTR_UNICODE_DOWN,
|
|
|
|
GTR_UNICODE_INF
|
|
|
|
};
|
|
|
|
const char * gtr_get_unicode_string( int );
|
|
|
|
|
2010-06-22 22:30:58 +00:00
|
|
|
/* return a percent formatted string of either x.xx, xx.x or xxx */
|
|
|
|
char* tr_strlpercent( char * buf, double x, size_t buflen );
|
2010-03-20 14:53:08 +00:00
|
|
|
|
2007-12-19 02:46:30 +00:00
|
|
|
/* return a human-readable string for the size given in bytes. */
|
2009-07-22 15:55:48 +00:00
|
|
|
char* tr_strlsize( char * buf, guint64 size, size_t buflen );
|
2007-06-06 00:30:13 +00:00
|
|
|
|
2008-01-04 18:52:39 +00:00
|
|
|
/* return a human-readable string for the given ratio. */
|
2009-07-22 15:55:48 +00:00
|
|
|
char* tr_strlratio( char * buf, double ratio, size_t buflen );
|
2008-01-04 18:52:39 +00:00
|
|
|
|
2007-12-26 06:38:33 +00:00
|
|
|
/* return a human-readable string for the time given in seconds. */
|
2009-07-22 15:55:48 +00:00
|
|
|
char* tr_strltime( char * buf, int secs, size_t buflen );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* similar to asctime, but is utf8-clean */
|
|
|
|
char* gtr_localtime( time_t time );
|
2007-06-06 00:30:13 +00:00
|
|
|
|
2010-07-04 06:07:21 +00:00
|
|
|
|
|
|
|
int gtr_compare_double( const double a, const double b, int decimal_places );
|
|
|
|
|
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2010-04-23 01:46:02 +00:00
|
|
|
/* http://www.legaltorrents.com/some/announce/url --> legaltorrents.com */
|
|
|
|
char* gtr_get_host_from_url( const char * url );
|
|
|
|
|
2009-11-22 16:20:22 +00:00
|
|
|
gboolean gtr_is_supported_url( const char * str );
|
|
|
|
|
|
|
|
gboolean gtr_is_magnet_link( const char * str );
|
|
|
|
|
2009-11-29 07:42:39 +00:00
|
|
|
gboolean gtr_is_hex_hashcode( const char * str );
|
|
|
|
|
|
|
|
|
2008-03-18 01:22:11 +00:00
|
|
|
/* create a copy of a GSList of strings, this dups the actual strings too */
|
2009-07-22 15:55:48 +00:00
|
|
|
GSList * dupstrlist( GSList * list );
|
2007-02-07 02:59:25 +00:00
|
|
|
|
2008-03-18 01:22:11 +00:00
|
|
|
/* joins a GSList of strings into one string using an optional separator */
|
2009-07-22 15:55:48 +00:00
|
|
|
char * joinstrlist( GSList *list, char * sep );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2008-03-18 01:22:11 +00:00
|
|
|
/* free a GSList of strings */
|
2009-07-22 15:55:48 +00:00
|
|
|
void freestrlist( GSList *list );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
|
|
|
/* decodes a string that has been urlencoded */
|
2009-07-22 15:55:48 +00:00
|
|
|
char * decode_uri( const char * uri );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2009-08-14 12:53:08 +00:00
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
GTR_LOCKFILE_SUCCESS = 0,
|
|
|
|
GTR_LOCKFILE_EOPEN,
|
|
|
|
GTR_LOCKFILE_ELOCK
|
|
|
|
}
|
|
|
|
gtr_lockfile_state_t;
|
|
|
|
|
|
|
|
gtr_lockfile_state_t gtr_lockfile( const char * filename );
|
|
|
|
|
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
|
|
|
|
2008-09-23 19:11:04 +00:00
|
|
|
void gtr_open_file( const char * path );
|
2008-04-11 02:21:33 +00:00
|
|
|
|
2008-09-23 19:11:04 +00:00
|
|
|
gboolean gtr_dbus_add_torrent( const char * filename );
|
2008-05-18 16:44:30 +00:00
|
|
|
|
2008-09-23 19:11:04 +00:00
|
|
|
gboolean gtr_dbus_present_window( void );
|
|
|
|
|
|
|
|
char* gtr_get_help_url( void );
|
2008-05-18 16:44:30 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
|
|
|
|
2009-07-22 20:39:12 +00:00
|
|
|
/* backwards-compatible wrapper around g_mkdir_with_parents() */
|
|
|
|
int gtr_mkdir_with_parents( const char *name, int mode );
|
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* backwards-compatible wrapper around gdk_threads_add_timeout_seconds() */
|
|
|
|
guint gtr_timeout_add_seconds( guint seconds, GSourceFunc func, gpointer data );
|
2009-06-29 17:22:35 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* backwards-compatible wrapper around gdk_threads_add_idle() */
|
|
|
|
void gtr_idle_add( GSourceFunc func, gpointer data );
|
2009-06-29 17:22:35 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* backwards-compatible wrapper around gtk_orientable_set_orientation() */
|
|
|
|
void gtr_toolbar_set_orientation( GtkToolbar * tb, GtkOrientation orientation );
|
2009-06-20 23:55:36 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* backwards-compatible wrapper around gtk_widget_set_tooltip_text() */
|
|
|
|
void gtr_widget_set_tooltip_text( GtkWidget * w, const char * tip );
|
2009-03-28 16:47:01 +00:00
|
|
|
|
2010-06-26 16:07:15 +00:00
|
|
|
/* backwards-compatible wrapper around gtk_widget_get_realized() */
|
|
|
|
gboolean gtr_widget_get_realized( GtkWidget * w );
|
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* backwards-compatible wrapper around g_object_ref_sink() */
|
2010-04-21 04:38:54 +00:00
|
|
|
gpointer gtr_object_ref_sink( gpointer object );
|
2008-06-01 15:46:20 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
2008-07-08 21:08:20 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* create a button with the specified mnemonic and stock icon */
|
|
|
|
GtkWidget * gtr_button_new_from_stock( const char * stock,
|
|
|
|
const char * mnemonic );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2010-02-02 07:51:45 +00:00
|
|
|
|
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
|
|
|
|
|
|
|
void gtr_priority_combo_set_value( GtkWidget * w, tr_priority_t );
|
|
|
|
|
|
|
|
tr_priority_t gtr_priority_combo_get_value( GtkWidget * w );
|
|
|
|
|
|
|
|
GtkWidget * gtr_priority_combo_new( void );
|
|
|
|
|
|
|
|
/***
|
|
|
|
****
|
|
|
|
***/
|
|
|
|
|
2010-02-05 13:59:44 +00:00
|
|
|
void gtr_unrecognized_url_dialog( GtkWidget * parent, const char * url );
|
|
|
|
|
2010-06-25 17:40:55 +00:00
|
|
|
void gtr_http_failure_dialog( GtkWidget * parent, const char * url, long response_code );
|
2010-02-05 13:59:44 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
void addTorrentErrorDialog( GtkWidget * window_or_child,
|
|
|
|
int err,
|
|
|
|
const char * filename );
|
2006-07-16 19:39:23 +00:00
|
|
|
|
2007-06-18 03:40:41 +00:00
|
|
|
/* pop up the context menu if a user right-clicks.
|
|
|
|
if the row they right-click on isn't selected, select it. */
|
2009-07-22 15:55:48 +00:00
|
|
|
gboolean on_tree_view_button_pressed( GtkWidget * view,
|
|
|
|
GdkEventButton * event,
|
|
|
|
gpointer unused );
|
2007-06-18 03:40:41 +00:00
|
|
|
|
2008-09-27 18:01:31 +00:00
|
|
|
/* if the click didn't specify a row, clear the selection */
|
2009-07-22 15:55:48 +00:00
|
|
|
gboolean on_tree_view_button_released( GtkWidget * view,
|
|
|
|
GdkEventButton * event,
|
|
|
|
gpointer unused );
|
2008-09-27 18:01:31 +00:00
|
|
|
|
2008-01-15 17:55:09 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
/* move a file to the trashcan if GIO is available; otherwise, delete it */
|
2010-04-21 04:38:54 +00:00
|
|
|
int gtr_file_trash_or_remove( const char * filename );
|
2008-03-09 15:27:08 +00:00
|
|
|
|
2009-07-22 15:55:48 +00:00
|
|
|
#endif /* GTR_UTIL_H */
|