Changeset 10512


Ignore:
Timestamp:
Apr 23, 2010, 1:46:02 AM (11 years ago)
Author:
charles
Message:

(trunk gtk) #3166 "Add Tracker Favicons to Tracker Tab in Properties Window." -- implemented in trunk for 2.00

Location:
trunk/gtk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/details.c

    r10458 r10512  
    2424#include "actions.h"
    2525#include "details.h"
     26#include "favicon.h" /* gtr_get_favicon() */
    2627#include "file-list.h"
    2728#include "hig.h"
     
    18861887  TRACKER_COL_TORRENT_NAME,
    18871888  TRACKER_COL_TRACKER_NAME,
     1889  TRACKER_COL_FAVICON,
    18881890  TRACKER_N_COLS
    18891891};
     
    19281930
    19291931static void
     1932favicon_ready_cb( gpointer pixbuf, gpointer vreference )
     1933{
     1934    GtkTreeIter iter;
     1935    GtkTreeRowReference * reference = vreference;
     1936
     1937    if( pixbuf != NULL )
     1938    {
     1939        GtkTreePath * path = gtk_tree_row_reference_get_path( reference );
     1940        GtkTreeModel * model = gtk_tree_row_reference_get_model( reference );
     1941
     1942        if( gtk_tree_model_get_iter( model, &iter, path ) )
     1943            gtk_list_store_set( GTK_LIST_STORE( model ), &iter,
     1944                                TRACKER_COL_FAVICON, pixbuf,
     1945                                -1 );
     1946
     1947        gtk_tree_path_free( path );
     1948
     1949        g_object_unref( pixbuf );
     1950    }
     1951
     1952    gtk_tree_row_reference_free( reference );
     1953}
     1954
     1955static void
    19301956refreshTracker( struct DetailsImpl * di, tr_torrent ** torrents, int n )
    19311957{
     
    19581984                                                    G_TYPE_BOOLEAN,
    19591985                                                    G_TYPE_STRING,
    1960                                                     G_TYPE_STRING );
     1986                                                    G_TYPE_STRING,
     1987                                                    GDK_TYPE_PIXBUF );
    19611988
    19621989        filter = gtk_tree_model_filter_new( GTK_TREE_MODEL( store ), NULL );
     
    19802007    if( n && !gtk_tree_model_get_iter_first( model, &iter ) )
    19812008    {
     2009        tr_session * session = tr_core_session( di->core );
     2010
    19822011        for( i=0; i<n; ++i )
    19832012        {
     
    19882017
    19892018            for( j=0; j<statCount[i]; ++j )
     2019            {
     2020                GtkTreePath * path;
     2021                GtkTreeRowReference * reference;
     2022                const tr_tracker_stat * st = &stats[i][j];
     2023
    19902024                gtk_list_store_insert_with_values( store, &iter, -1,
    19912025                    TRACKER_COL_TORRENT_ID, torrentId,
    19922026                    TRACKER_COL_TRACKER_INDEX, j,
    19932027                    TRACKER_COL_TORRENT_NAME, inf->name,
    1994                     TRACKER_COL_TRACKER_NAME, stats[i][j].host,
     2028                    TRACKER_COL_TRACKER_NAME, st->host,
    19952029                    -1 );
     2030
     2031                path = gtk_tree_model_get_path( model, &iter );
     2032                reference = gtk_tree_row_reference_new( model, path );
     2033                gtr_get_favicon_from_url( session, st->announce, favicon_ready_cb, reference );
     2034                gtk_tree_path_free( path );
     2035            }
    19962036        }
    19972037    }
     
    21712211{
    21722212    gboolean b;
    2173     GtkWidget *vbox, *sw, *w, *v, *hbox;
    21742213    GtkCellRenderer *r;
    21752214    GtkTreeViewColumn *c;
     2215    GtkWidget *vbox, *sw, *w, *v, *hbox;
     2216    const int pad = ( GUI_PAD + GUI_PAD_BIG ) / 2;
    21762217
    21772218    vbox = gtk_vbox_new( FALSE, GUI_PAD );
     
    21842225                      G_CALLBACK( on_tree_view_button_released ), NULL );
    21852226    gtk_tree_view_set_rules_hint( GTK_TREE_VIEW( v ), TRUE );
     2227
     2228    c = gtk_tree_view_column_new( );
     2229    gtk_tree_view_column_set_title( c, _( "Trackers" ) );
     2230    gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
     2231
     2232    r = gtk_cell_renderer_pixbuf_new( );
     2233    g_object_set( r, "width", 20 + (GUI_PAD_SMALL*2), "xpad", GUI_PAD_SMALL, "ypad", pad, "yalign", 0.0f, NULL );
     2234    gtk_tree_view_column_pack_start( c, r, FALSE );
     2235    gtk_tree_view_column_add_attribute( c, r, "pixbuf", TRACKER_COL_FAVICON );
     2236
    21862237    r = gtk_cell_renderer_text_new( );
    2187     g_object_set( r, "ellipsize", PANGO_ELLIPSIZE_END, NULL );
    2188     c = gtk_tree_view_column_new_with_attributes( _( "Trackers" ), r, "markup", TRACKER_COL_TEXT, NULL );
    2189     gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
    2190     g_object_set( G_OBJECT( r ), "ypad", (GUI_PAD+GUI_PAD_BIG)/2,
    2191                                  "xpad", (GUI_PAD+GUI_PAD_BIG)/2,
    2192                                  NULL );
     2238    g_object_set( G_OBJECT( r ), "ellipsize", PANGO_ELLIPSIZE_END, "xpad", GUI_PAD_SMALL, "ypad", pad, NULL );
     2239    gtk_tree_view_column_pack_start( c, r, TRUE );
     2240    gtk_tree_view_column_add_attribute( c, r, "markup", TRACKER_COL_TEXT );
    21932241
    21942242    sw = gtk_scrolled_window_new( NULL, NULL );
  • trunk/gtk/favicon.c

    r10392 r10512  
    170170    }
    171171}
     172
     173void
     174gtr_get_favicon_from_url( tr_session  * session,
     175                          const char  * url,
     176                          GFunc         pixbuf_ready_func,
     177                          gpointer      pixbuf_ready_func_data )
     178{
     179    char * host = gtr_get_host_from_url( url );
     180    gtr_get_favicon( session, host, pixbuf_ready_func, pixbuf_ready_func_data );
     181    g_free( host );
     182}
  • trunk/gtk/favicon.h

    r10388 r10512  
    1717#include <libtransmission/transmission.h>
    1818
    19 void gtr_get_favicon( tr_session * session,
    20                       const char * host,
    21                       GFunc pixbuf_ready_func,
    22                       gpointer pixbuf_ready_func_data );
     19void gtr_get_favicon( tr_session  * session,
     20                      const char  * host,
     21                      GFunc         pixbuf_ready_func,
     22                      gpointer      pixbuf_ready_func_data );
     23
     24void gtr_get_favicon_from_url( tr_session  * session,
     25                               const char  * url,
     26                               GFunc         pixbuf_ready_func,
     27                               gpointer      pixbuf_ready_func_data );
     28
    2329
    2430#endif
  • trunk/gtk/filter.c

    r10425 r10512  
    7070{
    7171    return strcmp( *(const char**)a, *(const char**)b );
    72 }
    73 
    74 /* pattern-matching text; ie, legaltorrents.com */
    75 static char*
    76 get_host_from_url( const char * url )
    77 {
    78     char * h = NULL;
    79     char * name;
    80     const char * first_dot;
    81     const char * last_dot;
    82 
    83     tr_urlParse( url, -1, NULL, &h, NULL, NULL );
    84     first_dot = strchr( h, '.' );
    85     last_dot = strrchr( h, '.' );
    86 
    87     if( ( first_dot ) && ( last_dot ) && ( first_dot != last_dot ) )
    88         name = g_strdup( first_dot + 1 );
    89     else
    90         name = g_strdup( h );
    91 
    92     tr_free( h );
    93     return name;
    9472}
    9573
     
    186164        {
    187165            int k;
    188             char * key = get_host_from_url( inf->trackers[i].announce );
     166            char * key = gtr_get_host_from_url( inf->trackers[i].announce );
    189167            int * count = g_hash_table_lookup( hosts_hash, key );
    190168            if( count == NULL )
     
    581559            gtk_tree_model_get( model, &iter, CAT_FILTER_COL_HOST, &host, -1 );
    582560            for( i=0; i<inf->trackerCount; ++i ) {
    583                 char * tmp = get_host_from_url( inf->trackers[i].announce );
     561                char * tmp = gtr_get_host_from_url( inf->trackers[i].announce );
    584562                const gboolean hit = !strcmp( tmp, host );
    585563                g_free( tmp );
  • trunk/gtk/util.c

    r10505 r10512  
    332332}
    333333
     334/* pattern-matching text; ie, legaltorrents.com */
     335char*
     336gtr_get_host_from_url( const char * url )
     337{
     338    char * h = NULL;
     339    char * name;
     340    const char * first_dot;
     341    const char * last_dot;
     342
     343    tr_urlParse( url, -1, NULL, &h, NULL, NULL );
     344    first_dot = strchr( h, '.' );
     345    last_dot = strrchr( h, '.' );
     346
     347    if( ( first_dot ) && ( last_dot ) && ( first_dot != last_dot ) )
     348        name = g_strdup( first_dot + 1 );
     349    else
     350        name = g_strdup( h );
     351
     352    tr_free( h );
     353    return name;
     354}
    334355
    335356gboolean
  • trunk/gtk/util.h

    r10507 r10512  
    6262****
    6363***/
     64
     65/* http://www.legaltorrents.com/some/announce/url --> legaltorrents.com */
     66char* gtr_get_host_from_url( const char * url );
    6467
    6568gboolean gtr_is_supported_url( const char * str );
Note: See TracChangeset for help on using the changeset viewer.