[Pidgin] #9841: non seekable stream and file transfer.

Pidgin trac at pidgin.im
Fri Aug 28 18:32:56 EDT 2009


#9841: non seekable stream and file transfer.
---------------------+------------------------------------------------------
 Reporter:  kenshin  |        Owner:           
     Type:  patch    |       Status:  new      
Milestone:  2.7.0    |    Component:  libpurple
  Version:           |   Resolution:           
 Keywords:  ft       |  
---------------------+------------------------------------------------------

Comment(by darkrain42):

 Replying to [comment:12 kenshin]:
 > cool. I will.
 > But :
 > what becomes of  ui_ops->data_not_sent?
 > should libepurple delegate to the ui if the ui wants to ?

 Those three UI ops (read/write/data_not_sent) are for delegating to the
 UI.

 I would suggest (I'm not sure if this will work or not; ideally it could
 be made simplier) doing something like:
 {{{
 if (priv->byte_array) {
     append bytes to priv->byte_array;
     r = purple_xfer_write(xfer, priv->byte_array);
 } else
     r = purple_xfer_write(xfer, bytes);

 if (r == -1) {
     ...
 } else if (priv->byte_array == NULL && r < result && ui_ops &&
 ui_ops->data_not_sent) {
     /* that check is ugly */
     ui_ops->data_not_sent(...);
 } else if ((priv->byte_array && priv->byte_array->len == r) || (result ==
 r)) {
     /* do that buffer size increasing stuff */
 }

 >
 > freeing the GbyteArray in _xfer_destroy  -- at first glance _xfer_end is
 never called when the transfer is canceled either locally or remotely

 Hmm, you're right. It looks like purple_xfer_cancel_(local|remote) contain
 the same logic. I guess what you have is fine (although I think I'm going
 to refactor those three functions to reduce code duplication...)

 You also should remove the GLIB_CHECK_VERSION; Pidgin 2.7.0 will require
 glib 2.12, so g_byte_array_remove_range is fine.

-- 
Ticket URL: <http://developer.pidgin.im/ticket/9841#comment:13>
Pidgin <http://pidgin.im>
Pidgin


More information about the Tracker mailing list