@@ -544,13 +544,10 @@ struct chime_im {
544544 ChimeContact * peer ;
545545};
546546
547- static void chime_send_init (PurpleXfer * xfer )
547+ static void init_upload (PurpleXfer * xfer , struct purple_chime * pc , ChimeObject * obj )
548548{
549549 purple_debug_info ("chime" , "Starting to handle upload of file '%s'\n" , xfer -> local_filename );
550550
551- struct purple_chime * pc = purple_connection_get_protocol_data (xfer -> account -> gc );
552- struct chime_im * im = g_hash_table_lookup (pc -> ims_by_email , xfer -> who );
553-
554551 g_return_if_fail (CHIME_IS_CONNECTION (pc -> cxn ));
555552 ChimeConnectionPrivate * priv = CHIME_CONNECTION_GET_PRIVATE (pc -> cxn );
556553
@@ -566,7 +563,7 @@ static void chime_send_init(PurpleXfer *xfer)
566563 }
567564 AttachmentUpload * data = g_new0 (AttachmentUpload , 1 );
568565 data -> conn = pc -> cxn ;
569- data -> obj = im -> m . obj ;
566+ data -> obj = obj ;
570567 data -> content = file_contents ;
571568 data -> content_length = length ;
572569 get_mime_type (xfer -> local_filename , & data -> content_type );
@@ -578,6 +575,25 @@ static void chime_send_init(PurpleXfer *xfer)
578575 request_upload_url (pc -> cxn , priv -> messaging_url , xfer );
579576}
580577
578+ static void chime_send_init (PurpleXfer * xfer )
579+ {
580+ purple_debug_info ("chime" , "Starting to handle upload of file '%s'\n" , xfer -> local_filename );
581+
582+ struct purple_chime * pc = purple_connection_get_protocol_data (xfer -> account -> gc );
583+ struct chime_im * im = g_hash_table_lookup (pc -> ims_by_email , xfer -> who );
584+
585+ init_upload (xfer , pc , im -> m .obj );
586+ }
587+
588+ static void chime_send_init_chat (PurpleXfer * xfer )
589+ {
590+ purple_debug_info ("chime" , "Starting to handle upload of file '%s'\n" , xfer -> local_filename );
591+ ChimeObject * obj = (ChimeObject * )xfer -> data ;
592+ struct purple_chime * pc = purple_connection_get_protocol_data (xfer -> account -> gc );
593+
594+ init_upload (xfer , pc , obj );
595+ }
596+
581597static void chime_send_start (PurpleXfer * xfer )
582598{
583599 purple_debug_info ("chime" , "chime_send_start\n" );
@@ -615,3 +631,24 @@ void chime_send_file(PurpleConnection *gc, const char *who, const char *filename
615631 purple_xfer_request (xfer );
616632 }
617633}
634+
635+ void chime_send_file_chat (PurpleConnection * gc , ChimeObject * obj , const char * who , const char * filename )
636+ {
637+ purple_debug_info ("chime" , "chime_send_file_chat(who=%s, file=%s\n" , who , filename );
638+
639+ PurpleXfer * xfer ;
640+ xfer = purple_xfer_new (gc -> account , PURPLE_XFER_SEND , who );
641+ if (xfer ) {
642+ purple_xfer_set_init_fnc (xfer , chime_send_init_chat );
643+ purple_xfer_set_start_fnc (xfer , chime_send_start );
644+ purple_xfer_set_cancel_send_fnc (xfer , chime_send_cancel );
645+ }
646+
647+ xfer -> data = obj ;
648+
649+ if (filename ) {
650+ purple_xfer_request_accepted (xfer , filename );
651+ } else {
652+ purple_xfer_request (xfer );
653+ }
654+ }
0 commit comments