Changeset 6115


Ignore:
Timestamp:
Jun 10, 2008, 2:36:52 AM (13 years ago)
Author:
charles
Message:

more webseed work.

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/details.c

    r6020 r6115  
    235235enum
    236236{
     237  WEBSEED_COL_URL,
     238  WEBSEED_COL_DOWNLOAD_RATE,
     239  N_WEBSEED_COLS
     240};
     241
     242static const char * webseed_column_names[N_WEBSEED_COLS] =
     243{
     244    N_( "Web Seeds" ),
     245    /* 'download speed' column header. terse to keep the column narrow. */
     246    N_( "Down" )
     247};
     248
     249static GtkTreeModel*
     250webseed_model_new( const tr_torrent * tor )
     251{
     252    int i;
     253    const tr_info * inf = tr_torrentInfo( tor );
     254    float * speeds = tr_torrentWebSpeeds( tor );
     255    GtkListStore * store = gtk_list_store_new( N_WEBSEED_COLS,
     256                                               G_TYPE_STRING,
     257                                               G_TYPE_FLOAT );
     258    for( i=0; i<inf->webseedCount; ++i )
     259    {
     260        GtkTreeIter iter;
     261        gtk_list_store_append( store, &iter );
     262        gtk_list_store_set( store, &iter, WEBSEED_COL_URL, inf->webseeds[i],
     263                                          WEBSEED_COL_DOWNLOAD_RATE, speeds[i],
     264                                          -1 );
     265    }
     266
     267    tr_free( speeds );
     268    return GTK_TREE_MODEL( store );
     269}
     270
     271enum
     272{
    237273  PEER_COL_ADDRESS,
     274  PEER_COL_DOWNLOAD_RATE,
     275  PEER_COL_UPLOAD_RATE,
    238276  PEER_COL_CLIENT,
    239277  PEER_COL_PROGRESS,
    240278  PEER_COL_IS_ENCRYPTED,
    241   PEER_COL_DOWNLOAD_RATE,
    242   PEER_COL_UPLOAD_RATE,
    243279  PEER_COL_STATUS,
    244280  N_PEER_COLS
     
    273309
    274310static void
    275 peer_row_set (GtkTreeStore        * store,
     311peer_row_set (GtkListStore        * store,
    276312              GtkTreeIter         * iter,
    277313              const tr_peer_stat  * peer)
     
    282318    client = " ";
    283319
    284   gtk_tree_store_set (store, iter,
     320  gtk_list_store_set( store, iter,
    285321                      PEER_COL_ADDRESS, peer->addr,
    286322                      PEER_COL_CLIENT, client,
     
    294330
    295331static void
    296 append_peers_to_model (GtkTreeStore        * store,
     332append_peers_to_model (GtkListStore        * store,
    297333                       const tr_peer_stat  * peers,
    298334                       int                   n_peers)
     
    301337  for (i=0; i<n_peers; ++i) {
    302338    GtkTreeIter iter;
    303     gtk_tree_store_append (store, &iter, NULL);
     339    gtk_list_store_append( store, &iter );
    304340    peer_row_set (store, &iter, &peers[i]);
    305341  }
     
    309345peer_model_new (tr_torrent * tor)
    310346{
    311   GtkTreeStore * m = gtk_tree_store_new (N_PEER_COLS,
     347  GtkListStore * m = gtk_list_store_new (N_PEER_COLS,
    312348                                         G_TYPE_STRING,   /* addr */
     349                                         G_TYPE_FLOAT,    /* downloadFromRate */
     350                                         G_TYPE_FLOAT,    /* uploadToRate */
    313351                                         G_TYPE_STRING,   /* client */
    314352                                         G_TYPE_INT,      /* progress [0..100] */
    315353                                         G_TYPE_BOOLEAN,  /* isEncrypted */
    316                                          G_TYPE_FLOAT,    /* downloadFromRate */
    317                                          G_TYPE_FLOAT,    /* uploadToRate */
    318354                                         G_TYPE_STRING ); /* flagString */
    319355
     
    396432  TrTorrent * gtor;
    397433  GtkTreeModel * model; /* same object as store, but recast */
    398   GtkTreeStore * store; /* same object as model, but recast */
     434  GtkListStore * store; /* same object as model, but recast */
     435  GtkListStore * webseeds;
    399436  GtkWidget * completeness;
    400437  GtkWidget * seeders_lb;
     
    425462  tr_torrent * tor = tr_torrent_handle ( p->gtor );
    426463  GtkTreeModel * model = p->model;
    427   GtkTreeStore * store = p->store;
     464  GtkListStore * store = p->store;
    428465  tr_peer_stat * peers;
    429466  const tr_stat * stat = tr_torrent_stat( p->gtor );
     467  const tr_info * inf = tr_torrent_info( p->gtor );
     468
     469  if( inf->webseedCount )
     470  {
     471    float * speeds = tr_torrentWebSpeeds( tor );
     472    for( i=0; i<inf->webseedCount; ++i )
     473    {
     474        GtkTreeIter iter;
     475        gtk_tree_model_iter_nth_child( GTK_TREE_MODEL( p->webseeds ), &iter, NULL, i );
     476        gtk_list_store_set( p->webseeds, &iter, WEBSEED_COL_DOWNLOAD_RATE, speeds[i],
     477                                                -1 );
     478    }
     479    tr_free( speeds );
     480  }
    430481
    431482  /**
     
    463514      --n_peers;
    464515    }
    465     else if (!gtk_tree_store_remove (store, &iter))
     516    else if (!gtk_list_store_remove (store, &iter))
    466517      break; /* we removed the model's last item */
    467518  }
     
    538589  guint i;
    539590  GtkTreeModel *m;
    540   GtkWidget *h, *v, *w, *ret, *sw, *l, *vbox, *hbox;
     591  GtkWidget *v, *w, *ret, *sw, *l, *vbox, *hbox;
     592  GtkWidget *webtree = NULL;
    541593  tr_torrent * tor = tr_torrent_handle (gtor);
    542594  PeerData * p = g_new (PeerData, 1);
     595  const tr_info * inf = tr_torrent_info( gtor );
    543596
    544597  /* TODO: make this configurable? */
     
    550603                         PEER_COL_ADDRESS,
    551604                         PEER_COL_CLIENT };
     605
     606 
     607  if( inf->webseedCount )
     608  {
     609    GtkTreeViewColumn * c;
     610    GtkCellRenderer * r;
     611    const char * t;
     612    GtkWidget * fr;
     613
     614    m = webseed_model_new( tr_torrent_handle( gtor ) );
     615    webtree = gtk_tree_view_new_with_model( m );
     616    gtk_tree_view_set_rules_hint( GTK_TREE_VIEW( webtree ), TRUE );
     617    p->webseeds = GTK_LIST_STORE( m );
     618    g_object_unref( G_OBJECT( m ) );
     619
     620    t = _( webseed_column_names[WEBSEED_COL_URL] );
     621    r = gtk_cell_renderer_text_new ();
     622    g_object_set( G_OBJECT( r ), "ellipsize", PANGO_ELLIPSIZE_END, NULL );
     623    c = gtk_tree_view_column_new_with_attributes( t, r, "text", WEBSEED_COL_URL, NULL);
     624    g_object_set( G_OBJECT( c ), "expand", TRUE, NULL );
     625    gtk_tree_view_column_set_sort_column_id( c, WEBSEED_COL_URL );
     626    gtk_tree_view_append_column( GTK_TREE_VIEW( webtree ), c );
     627
     628    t = _( webseed_column_names[WEBSEED_COL_DOWNLOAD_RATE] );
     629    r = gtk_cell_renderer_text_new ();
     630    c = gtk_tree_view_column_new_with_attributes (t, r, "text", WEBSEED_COL_DOWNLOAD_RATE, NULL);
     631    gtk_tree_view_column_set_cell_data_func (c, r, render_dl_rate,
     632                                                   NULL, NULL);
     633    gtk_tree_view_column_set_sort_column_id( c, WEBSEED_COL_DOWNLOAD_RATE );
     634    gtk_tree_view_append_column( GTK_TREE_VIEW( webtree ), c );
     635
     636    fr = gtk_frame_new( NULL );
     637    gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_IN );
     638    gtk_container_add( GTK_CONTAINER( fr ), webtree );
     639    webtree = fr;
     640  }
    552641
    553642  m  = peer_model_new (tor);
     
    654743  gtk_container_set_border_width (GTK_CONTAINER(vbox), GUI_PAD_BIG);
    655744
    656 #ifdef SHOW_PIECES
    657     l = gtk_label_new (NULL);
    658     gtk_misc_set_alignment (GTK_MISC(l), 0.0f, 0.5f);
    659     gtk_label_set_markup (GTK_LABEL(l), _( "<b>Availability</b>" ) );
    660     gtk_box_pack_start (GTK_BOX(vbox), l, FALSE, FALSE, 0);
    661 
    662     w = da = p->completeness = gtk_drawing_area_new ();
    663     gtk_widget_set_size_request (w, 0u, 100u);
    664     g_object_set_data (G_OBJECT(w), "draw-mode", GINT_TO_POINTER(DRAW_AVAIL));
    665     g_signal_connect (w, "expose-event", G_CALLBACK(refresh_pieces), gtor);
    666 
    667     h = gtk_hbox_new (FALSE, GUI_PAD);
    668     w = gtk_alignment_new (0.0f, 0.0f, 0.0f, 0.0f);
    669     gtk_widget_set_size_request (w, GUI_PAD_BIG, 0);
    670     gtk_box_pack_start (GTK_BOX(h), w, FALSE, FALSE, 0);
    671     gtk_box_pack_start_defaults (GTK_BOX(h), da);
    672     gtk_box_pack_start (GTK_BOX(vbox), h, FALSE, FALSE, 0);
    673 
    674     /* a small vertical spacer */
    675     w = gtk_alignment_new (0.0f, 0.0f, 0.0f, 0.0f);
    676     gtk_widget_set_size_request (w, 0u, GUI_PAD);
    677     gtk_box_pack_start (GTK_BOX(vbox), w, FALSE, FALSE, 0);
    678 
    679     l = gtk_label_new (NULL);
    680     gtk_misc_set_alignment (GTK_MISC(l), 0.0f, 0.5f);
    681     gtk_label_set_markup (GTK_LABEL(l), _( "<b>Connected Peers</b>" ) );
    682     gtk_box_pack_start (GTK_BOX(vbox), l, FALSE, FALSE, 0);
    683 #endif
    684 
    685     h = gtk_hbox_new (FALSE, GUI_PAD);
    686     gtk_box_pack_start_defaults (GTK_BOX(h), sw);
    687     gtk_box_pack_start_defaults (GTK_BOX(vbox), h);
     745    if( webtree )
     746        gtk_box_pack_start( GTK_BOX( vbox ), webtree, FALSE, FALSE, 0 );
     747
     748    //h = gtk_hbox_new (FALSE, GUI_PAD);
     749    //gtk_box_pack_start_defaults (GTK_BOX(h), sw);
     750    gtk_box_pack_start_defaults( GTK_BOX( vbox ), sw );
    688751
    689752    hbox = gtk_hbox_new (FALSE, GUI_PAD);
     
    712775  p->gtor = gtor;
    713776  p->model = m;
    714   p->store = GTK_TREE_STORE(m);
     777  p->store = GTK_LIST_STORE(m);
    715778  g_object_set_data_full (G_OBJECT(ret), "peer-data", p, g_free);
    716779  return ret;
  • trunk/gtk/torrent-cell-renderer.c

    r6104 r6115  
    200200                          "Downloading from %1$'d of %2$'d connected peers",
    201201                          torStat->peersConnected ),
    202                 torStat->peersSendingToUs,
    203                 torStat->peersConnected );
     202                torStat->peersSendingToUs + torStat->webseedsSendingToUs,
     203                torStat->peersConnected + torStat->webseedsSendingToUs );
    204204            break;
    205205
  • trunk/libtransmission/peer-mgr.c

    r6113 r6115  
    13611361                        int              * setmePeersConnected,
    13621362                        int              * setmeSeedsConnected,
     1363                        int              * setmeWebseedsSendingToUs,
    13631364                        int              * setmePeersSendingToUs,
    13641365                        int              * setmePeersGettingFromUs,
     
    13681369    const Torrent * t;
    13691370    const tr_peer ** peers;
     1371    const tr_webseed ** webseeds;
    13701372
    13711373    managerLock( manager );
     
    13741376    peers = (const tr_peer **) tr_ptrArrayPeek( t->peers, &size );
    13751377
    1376     *setmePeersKnown          = tr_ptrArraySize( t->pool );
    1377     *setmePeersConnected      = 0;
    1378     *setmeSeedsConnected      = 0;
    1379     *setmePeersSendingToUs    = 0;
    1380     *setmePeersGettingFromUs  = 0;
     1378    *setmePeersKnown           = tr_ptrArraySize( t->pool );
     1379    *setmePeersConnected       = 0;
     1380    *setmeSeedsConnected       = 0;
     1381    *setmePeersGettingFromUs   = 0;
     1382    *setmePeersSendingToUs     = 0;
     1383    *setmeWebseedsSendingToUs  = 0;
    13811384
    13821385    for( i=0; i<TR_PEER_FROM__MAX; ++i )
     
    14031406        if( atom->flags & ADDED_F_SEED_FLAG )
    14041407            ++*setmeSeedsConnected;
     1408    }
     1409
     1410    webseeds = (const tr_webseed **) tr_ptrArrayPeek( t->peers, &size );
     1411    for( i=0; i<size; ++i )
     1412    {
     1413        if( tr_webseedIsActive( webseeds[i] ) )
     1414            ++setmeWebseedsSendingToUs;
    14051415    }
    14061416
  • trunk/libtransmission/peer-mgr.h

    r6112 r6115  
    107107                             int              * setmePeersConnected,
    108108                             int              * setmeSeedsConnected,
     109                             int              * setmeWebseedsSendingToUs,
    109110                             int              * setmePeersSendingToUs,
    110111                             int              * setmePeersGettingFromUs,
  • trunk/libtransmission/torrent.c

    r6112 r6115  
    721721                            &s->peersConnected,
    722722                               &usableSeeds,
     723                            &s->webseedsSendingToUs,
    723724                            &s->peersSendingToUs,
    724725                            &s->peersGettingFromUs,
  • trunk/libtransmission/transmission.h

    r6113 r6115  
    11981198    int peersGettingFromUs;
    11991199
     1200    /** Number of webseeds that are sending data to us. */
     1201    int webseedsSendingToUs;
     1202
    12001203    /** Number of seeders that the tracker says this torrent has */
    12011204    int seeders;
  • trunk/libtransmission/webseed.c

    r6112 r6115  
    254254
    255255int
     256tr_webseedIsActive( const tr_webseed * w )
     257{
     258    return w->queueSize > 0;
     259}
     260
     261int
    256262tr_webseedGetSpeed( const tr_webseed * w ,
    257263                    float            * setme_KiBs )
    258264{
    259     const int isBusy = w->queueSize > 0;
    260     *setme_KiBs = isBusy ? tr_rcRate( w->rateDown ) : 0.0f;
    261     return isBusy;
     265    const int isActive = tr_webseedIsActive( w );
     266    *setme_KiBs = isActive ? tr_rcRate( w->rateDown ) : 0.0f;
     267    return isActive;
    262268}
    263269
  • trunk/libtransmission/webseed.h

    r6112 r6115  
    3131int tr_webseedGetSpeed( const tr_webseed * w ,
    3232                        float            * setme_KiBs );
     33
     34/** @return true if a request is being processed, or false if idle */
     35int tr_webseedIsActive( const tr_webseed * w );
    3336             
    3437
Note: See TracChangeset for help on using the changeset viewer.