summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Lundblad <malu@pidgin.im>2008-09-17 19:09:43 +0000
committerMarcus Lundblad <malu@pidgin.im>2008-09-17 19:09:43 +0000
commit24347d18d225196a809b10bb1f4724db82163bf2 (patch)
tree4ab77502d7cdfaa292d86c024848fed4b2542375
parent9bf4028fa2efdf179525988a62bc3cd19a4a0a01 (diff)
parenta39b9aeb506b82ca36e0eab0bc25f7c0c7531cc7 (diff)
downloadpidgin-24347d18d225196a809b10bb1f4724db82163bf2.tar.gz
merge of '538a72dda9c11907fd17a7c7a59b07bdd0edee63'
and '051021d40b222ded31fb22e7b845a17549f2672f'
-rw-r--r--.mtn-ignore1
-rw-r--r--ChangeLog11
-rw-r--r--finch/gntpounce.c7
-rw-r--r--finch/libgnt/gntmenu.c8
-rw-r--r--libpurple/buddyicon.c10
-rw-r--r--libpurple/buddyicon.h5
-rw-r--r--libpurple/dnsquery.c29
-rw-r--r--libpurple/plugins/ssl/ssl-nss.c6
-rw-r--r--libpurple/protocols/msn/msn.c3
-rw-r--r--libpurple/protocols/msn/soap.c7
-rw-r--r--libpurple/protocols/oscar/flap_connection.c4
-rw-r--r--libpurple/protocols/qq/AUTHORS57
-rw-r--r--libpurple/protocols/qq/ChangeLog30
-rw-r--r--libpurple/protocols/qq/buddy_info.c81
-rw-r--r--libpurple/protocols/qq/buddy_info.h20
-rw-r--r--libpurple/protocols/qq/buddy_list.c145
-rw-r--r--libpurple/protocols/qq/buddy_list.h16
-rw-r--r--libpurple/protocols/qq/buddy_opt.c99
-rw-r--r--libpurple/protocols/qq/char_conv.c17
-rw-r--r--libpurple/protocols/qq/file_trans.c64
-rw-r--r--libpurple/protocols/qq/group.c39
-rw-r--r--libpurple/protocols/qq/group.h24
-rw-r--r--libpurple/protocols/qq/group_conv.c33
-rw-r--r--libpurple/protocols/qq/group_conv.h3
-rw-r--r--libpurple/protocols/qq/group_find.c84
-rw-r--r--libpurple/protocols/qq/group_find.h4
-rw-r--r--libpurple/protocols/qq/group_free.c18
-rw-r--r--libpurple/protocols/qq/group_im.c62
-rw-r--r--libpurple/protocols/qq/group_im.h25
-rw-r--r--libpurple/protocols/qq/group_info.c134
-rw-r--r--libpurple/protocols/qq/group_info.h7
-rw-r--r--libpurple/protocols/qq/group_internal.c172
-rw-r--r--libpurple/protocols/qq/group_internal.h26
-rw-r--r--libpurple/protocols/qq/group_join.c100
-rw-r--r--libpurple/protocols/qq/group_join.h14
-rw-r--r--libpurple/protocols/qq/group_opt.c49
-rw-r--r--libpurple/protocols/qq/group_opt.h8
-rw-r--r--libpurple/protocols/qq/group_search.c28
-rw-r--r--libpurple/protocols/qq/header_info.c22
-rw-r--r--libpurple/protocols/qq/header_info.h10
-rw-r--r--libpurple/protocols/qq/im.c197
-rw-r--r--libpurple/protocols/qq/im.h5
-rw-r--r--libpurple/protocols/qq/packet_parse.c34
-rw-r--r--libpurple/protocols/qq/qq.c220
-rw-r--r--libpurple/protocols/qq/qq.h75
-rw-r--r--libpurple/protocols/qq/qq_base.c163
-rw-r--r--libpurple/protocols/qq/qq_base.h4
-rw-r--r--libpurple/protocols/qq/qq_network.c1038
-rw-r--r--libpurple/protocols/qq/qq_network.h20
-rw-r--r--libpurple/protocols/qq/qq_process.c500
-rw-r--r--libpurple/protocols/qq/qq_process.h26
-rw-r--r--libpurple/protocols/qq/qq_trans.c372
-rw-r--r--libpurple/protocols/qq/qq_trans.h50
-rw-r--r--libpurple/protocols/qq/send_file.c78
-rw-r--r--libpurple/protocols/qq/sys_msg.c52
-rw-r--r--libpurple/protocols/qq/utils.c42
-rw-r--r--libpurple/protocols/yahoo/yahoo_auth.c17
-rw-r--r--[-rwxr-xr-x]libpurple/protocols/yahoo/yahoo_auth.h15
-rw-r--r--libpurple/proxy.c182
-rw-r--r--libpurple/util.c4
-rw-r--r--pidgin/artwork/art-tools/clean-svg-definitions.sh7
-rwxr-xr-xpidgin/artwork/art-tools/render-pidgin-emotes.rb48
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-change-bgcolor.pngbin618 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-change-fgcolor.pngbin472 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-drag-down.pngbin603 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-drag-left.pngbin638 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-drag-right.pngbin653 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-drag-up.pngbin658 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-emote-select.pngbin974 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-font-face.pngbin461 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-down.pngbin503 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-up.pngbin500 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-get-attention.pngbin908 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-insert-image.pngbin673 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-insert-link.pngbin739 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-insert.pngbin336 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-message-new.pngbin742 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-send-file.pngbin479 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-unblock.pngbin510 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-view-plugins.pngbin654 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/actions/pidgin-view-transfers.pngbin548 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working0.pngbin444 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working1.pngbin444 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working10.pngbin436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working11.pngbin437 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working12.pngbin437 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working13.pngbin426 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working14.pngbin426 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working15.pngbin421 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working16.pngbin417 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working17.pngbin428 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working18.pngbin437 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working19.pngbin434 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working2.pngbin449 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working20.pngbin436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working21.pngbin431 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working22.pngbin437 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working23.pngbin433 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working24.pngbin425 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working25.pngbin435 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working26.pngbin444 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working27.pngbin439 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working28.pngbin438 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working29.pngbin436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working3.pngbin449 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working30.pngbin441 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working4.pngbin439 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working5.pngbin438 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working6.pngbin441 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working7.pngbin440 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working8.pngbin421 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/process-working9.pngbin437 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing0.pngbin461 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing1.pngbin533 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing2.pngbin482 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing3.pngbin453 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing4.pngbin537 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/animations/typing5.pngbin450 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-aim.pngbin816 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-bonjour.pngbin703 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-facebook.pngbin670 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-gadu-gadu.pngbin855 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-google-talk.pngbin664 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-icq.pngbin966 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-irc.pngbin618 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-jabber.pngbin908 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-meanwhile.pngbin938 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-msn.pngbin835 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-myspace.pngbin745 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-novell.pngbin538 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-qq.pngbin986 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-silc.pngbin492 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-simple.pngbin845 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-yahoo.pngbin543 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin-zephyr.pngbin607 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/apps/pidgin.pngbin931 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/devices/pidgin-hiptop.pngbin606 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/devices/pidgin-mobile.pngbin535 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-aol-client.pngbin498 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-birthday.pngbin1055 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-blocked.pngbin455 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-bot.pngbin649 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-external.pngbin880 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-female.pngbin558 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-founder.pngbin628 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-free-for-chat.pngbin901 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-game.pngbin473 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-half-operator.pngbin695 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-male.pngbin569 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-music.pngbin571 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-not-authorized.pngbin940 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-operator.pngbin732 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-qq-member.pngbin907 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-secure.pngbin661 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-unavailable.pngbin571 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-video.pngbin268 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/emblems/pidgin-voice.pngbin707 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-available.pngbin919 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-away.pngbin901 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-busy.pngbin832 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-chatroom.pngbin946 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-contact.pngbin753 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-dialog-auth.pngbin589 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-dialog-error.pngbin790 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-dialog-info.pngbin810 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-dialog-mail.pngbin617 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-dialog-question.pngbin586 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-extended-away.pngbin909 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-invisible.pngbin861 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-offline.pngbin990 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-available.pngbin829 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-away.pngbin800 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-busy.pngbin804 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-extended-away.pngbin824 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-invisible.pngbin794 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-message-pending.pngbin719 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-new-im.pngbin839 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/16x16/status/pidgin-tray-offline.pngbin853 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/apps/pidgin.pngbin1367 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-available.pngbin1459 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-away.pngbin1412 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-busy.pngbin1292 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-chatroom.pngbin1381 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-contact.pngbin1054 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-extended-away.pngbin1427 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-invisible.pngbin1370 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-offline.pngbin1578 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-available.pngbin1159 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-away.pngbin1176 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-busy.pngbin1122 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-extended-away.pngbin1157 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-invisible.pngbin1107 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-message-pending.pngbin1003 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-new-im.pngbin1210 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/22x22/status/pidgin-tray-offline.pngbin1198 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-aim.pngbin1277 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-bonjour.pngbin1638 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-facebook.pngbin969 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-gadu-gadu.pngbin1127 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-google-talk.pngbin1125 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-icq.pngbin1458 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-irc.pngbin558 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-jabber.pngbin1472 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-meanwhile.pngbin1538 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-msn.pngbin1281 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-myspace.pngbin1103 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-novell.pngbin745 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-qq.pngbin1436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-silc.pngbin796 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-simple.pngbin611 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-yahoo.pngbin860 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin-zephyr.pngbin627 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/apps/pidgin.pngbin1406 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/Makefile.am209
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/Makefile.mingw27
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/default.theme.in394
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/none/Makefile.am17
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/none/Makefile.mingw27
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/none/none.theme.in3
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/none/theme3
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-act-up.pngbin1523 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-airplane.pngbin1058 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-alien.pngbin1591 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-angel.pngbin1628 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-angry.pngbin1497 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-arrogant.pngbin1481 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-at-wits-end.pngbin1506 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bad.pngbin1232 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bashful.pngbin1460 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-beat-up.pngbin1578 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-beauty.pngbin1569 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-beer.pngbin1532 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-blowkiss.pngbin1436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bomb.pngbin1228 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bowl.pngbin1565 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-boy.pngbin1250 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-brb.pngbin879 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bulgy-eyes.pngbin1500 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bunny.pngbin1694 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-bye.pngbin1561 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cake.pngbin1660 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-call-me.pngbin1538 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-camera.pngbin1064 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-can.pngbin1028 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-car.pngbin1338 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cat.pngbin1470 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-chicken.pngbin1293 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cigarette.pngbin1491 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-clap.pngbin1531 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-clock.pngbin1485 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cloudy.pngbin1119 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-clover.pngbin1578 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-clown.pngbin1467 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-coffee.pngbin1643 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-coins.pngbin1492 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-computer.pngbin933 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-confused.pngbin1518 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-console.pngbin1102 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cow.pngbin1146 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cowboy.pngbin1640 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-crying.pngbin1575 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-curl-lip.pngbin1514 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-curse.pngbin1552 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cute.pngbin1430 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-cyclops.pngbin1542 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-dance.pngbin1506 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-dazed.pngbin1445 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-desire.pngbin1564 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-devil.pngbin1622 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-disappointed.pngbin1491 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-disdain.pngbin1527 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-doctor.pngbin1301 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-dog.pngbin1520 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-doh.pngbin1489 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-dont-know.pngbin1484 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-drink.pngbin1215 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-drool.pngbin1546 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-eat.pngbin1598 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-embarrassed.pngbin1527 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-excruciating.pngbin1512 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-eyeroll.pngbin1465 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-female-fighter.pngbin1517 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-film.pngbin1720 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-fingers-crossed.pngbin1598 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-flag.pngbin540 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-foot-in-mouth.pngbin1522 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-freaked-out.pngbin1513 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-ghost.pngbin1277 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-giggle.pngbin1479 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-girl.pngbin1170 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-cool.pngbin1538 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-nerdy.pngbin1655 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-go-away.pngbin1532 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-goat.pngbin1464 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-good.pngbin1153 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-hammer.pngbin1004 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-handcuffs.pngbin1674 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-handshake.pngbin1589 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-highfive.pngbin1638 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-left.pngbin1514 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-right.pngbin1488 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-hypnotized.pngbin1524 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-in-love.pngbin1636 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-island.pngbin1463 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-jump.pngbin1556 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-kiss.pngbin1567 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-kissed.pngbin1518 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-kissing.pngbin1420 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-knife.pngbin1093 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-lamp.pngbin1349 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-lashes.pngbin1521 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-laugh.pngbin1562 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-liquor.pngbin762 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-loser.pngbin1667 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-love-over.pngbin1413 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-love.pngbin1339 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-lying.pngbin1495 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-mad-tongue.pngbin1536 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-mail.pngbin932 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter1.pngbin1604 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter2.pngbin1537 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-mean.pngbin1521 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-meeting.pngbin1461 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-messed.pngbin1515 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-mobile.pngbin735 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-mohawk.pngbin1573 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-moneymouth.pngbin1543 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-monkey.pngbin1347 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-moon.pngbin1358 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-away.pngbin1422 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-busy.pngbin1327 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-msn.pngbin1407 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-msn_online.pngbin1322 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-music.pngbin1702 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-musical-note.pngbin1173 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-nailbiting.pngbin1514 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-neutral.pngbin1450 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-on-the-phone.pngbin1583 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-party.pngbin1594 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-peace.pngbin1426 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-phone.pngbin1247 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pig.pngbin1383 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pill.pngbin1085 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pirate.pngbin1563 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pissed-off.pngbin1509 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pizza.pngbin1020 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-plate.pngbin1492 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-poop.pngbin1218 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pray.pngbin1542 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-present.pngbin1242 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-pumpkin.pngbin1453 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-qq.pngbin1436 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-question.pngbin1644 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-quiet.pngbin1508 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-rain.pngbin1385 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-rainbow.pngbin767 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-rose-dead.pngbin1133 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-rose.pngbin928 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-rotfl.pngbin1626 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sad.pngbin1515 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sarcastic.pngbin1480 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-search.pngbin1060 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-secret.pngbin1533 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-shame.pngbin1526 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sheep.pngbin1486 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-shock.pngbin1507 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-shout.pngbin1578 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-shut-mouth.pngbin1545 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sick.pngbin1501 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sidefrown.pngbin1506 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-silly.pngbin1498 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sinister.pngbin1414 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-skeleton.pngbin1299 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-skywalker.pngbin1602 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sleepy.pngbin1542 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-smile-big.pngbin1420 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-smile.pngbin1509 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-smirk.pngbin1482 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-snail.pngbin1367 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-snicker.pngbin1579 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-snowman.pngbin1323 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-soccerball.pngbin1435 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-soldier.pngbin1571 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-star.pngbin1317 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-starving.pngbin1593 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-stop.pngbin1528 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-struggle.pngbin1483 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sun.pngbin1584 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-sweat.pngbin1513 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-talktohand.pngbin1571 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-teeth.pngbin1550 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-terror.pngbin1503 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-thinking.pngbin1515 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-thunder.pngbin1336 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-time-out.pngbin1469 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-tongue.pngbin1542 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-tremble.pngbin1493 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-turtle.pngbin1415 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-tv.pngbin665 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-umbrella.pngbin1241 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-vampire.pngbin1558 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-victory.pngbin1523 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-waiting.pngbin1500 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-watermelon.pngbin1189 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-waving.pngbin1488 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-weep.pngbin1482 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-wilt.pngbin1446 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-wink.pngbin1509 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-worship.pngbin1504 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-yawn.pngbin1506 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/pidgin-yin-yang.pngbin1262 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/emotes/theme394
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-available.pngbin1518 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-away.pngbin1415 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-busy.pngbin1331 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-chatroom.pngbin1387 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-contact.pngbin1083 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-extended-away.pngbin1458 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-invisible.pngbin1401 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-offline.pngbin1620 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-available.pngbin1131 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-away.pngbin1123 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-busy.pngbin1091 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-extended-away.pngbin1126 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-invisible.pngbin1079 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-message-pending.pngbin949 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-new-im.pngbin1186 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/24x24/status/pidgin-tray-offline.pngbin1175 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/actions/pidgin-select-avatar.pngbin1824 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/apps/pidgin.pngbin2151 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-available.pngbin2310 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-away.pngbin2354 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-busy.pngbin1951 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-extended-away.pngbin2154 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-invisible.pngbin2004 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-offline.pngbin2478 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-available.pngbin1510 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-away.pngbin1476 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-busy.pngbin1394 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-extended-away.pngbin1488 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-invisible.pngbin1426 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-message-pending.pngbin1273 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-new-im.pngbin1563 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/32x32/status/pidgin-tray-offline.pngbin1546 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-aim.pngbin2878 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-bonjour.pngbin4349 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-facebook.pngbin2049 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-gadu-gadu.pngbin3175 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-icq.pngbin3342 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-irc.pngbin1003 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-jabber.pngbin3853 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-meanwhile.pngbin3647 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-msn.pngbin2778 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-myspace.pngbin2112 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-novell.pngbin1873 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-qq.pngbin3649 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-silc.pngbin1979 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-simple.pngbin1400 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-yahoo.pngbin2439 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin-zephyr.pngbin1244 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/apps/pidgin.pngbin3564 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-available.pngbin4009 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-away.pngbin3866 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-busy.pngbin3252 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-auth.pngbin4716 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-cool.pngbin4940 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-dialog.pngbin3935 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-error.pngbin4295 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-info.pngbin4651 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-dialog-mail.pngbin4646 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-extended-away.pngbin3712 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-invisible.pngbin3435 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-offline.pngbin4136 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-available.pngbin2222 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-away.pngbin2304 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-busy.pngbin2008 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-extended-away.pngbin2151 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-invisible.pngbin2138 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-message-pending.pngbin1859 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-new-im.pngbin2360 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/pidgin-tray-offline.pngbin2327 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/question.pngbin5094 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/48x48/status/warning.pngbin4596 -> 0 bytes
-rw-r--r--pidgin/artwork/hicolor/scalable/apps/pidgin.svg610
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-auth.svg850
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-cool.svg704
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-dialog.svg609
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-error.svg327
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-info.svg569
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-mail.svg976
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-question.svg655
-rw-r--r--pidgin/artwork/hicolor/scalable/status/pidgin-warning.svg558
-rw-r--r--pidgin/artwork/pixmaps/logo.pngbin33189 -> 0 bytes
-rw-r--r--pidgin/artwork/pixmaps/pidgin.icobin25214 -> 0 bytes
-rw-r--r--pidgin/gtkblist.c46
-rw-r--r--pidgin/gtkimhtmltoolbar.c2
-rw-r--r--pidgin/gtkstatusbox.c1
-rw-r--r--pidgin/pixmaps/icons/hicolor/48x48/apps/scalable/pidgin.svg585
-rw-r--r--po/POTFILES.in3
499 files changed, 2774 insertions, 9426 deletions
diff --git a/.mtn-ignore b/.mtn-ignore
index ae4a3660fa..186a871a06 100644
--- a/.mtn-ignore
+++ b/.mtn-ignore
@@ -58,6 +58,7 @@ libpurple/purple-client-bindings.c
libpurple/purple-client-bindings.h
libpurple/purple-client-example
libpurple/tests/check_libpurple
+libpurple/tests/libpurple..
libpurple/version.h$
libpurple/win32/libpurplerc.rc$
libtool
diff --git a/ChangeLog b/ChangeLog
index c433bd70c9..9a879a85ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,17 @@
Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
version 2.5.2 (??/??/????):
+ libpurple:
+ * Restored the "Has You" feature to the MSN protocol tooltips.
+ * Fixed a crash on removing a custom buddy icon on a buddy.
+ * Fixed a crash caused by certain self-signed SSL certificates.
+
+ Pidgin:
+ * The status selector now saves your message when changing status.
+ * Fix a case where a conversation window could close unexpectedly.
+ * A mute sounds option has been added to the preferences window to
+ help with discoverability. CTRL+S is no longer bound to mute.
+
Finch:
* A new 'Nested Grouping' option in the 'Grouping' plugin. Group
hierarchies are defined by the '/' character in the group names
diff --git a/finch/gntpounce.c b/finch/gntpounce.c
index 29500d78a2..e17e1616ac 100644
--- a/finch/gntpounce.c
+++ b/finch/gntpounce.c
@@ -979,15 +979,10 @@ finch_pounces_init(void)
PURPLE_CALLBACK(signed_on_off_cb), NULL);
}
-static void
-dummy_pounce_cb(PurplePounce *pounce, PurplePounceEvent events, void *data)
-{
-}
-
/* XXX: There's no such thing in pidgin. Perhaps there should be? */
void finch_pounces_uninit()
{
- purple_pounces_register_handler(FINCH_UI, dummy_pounce_cb, NULL, NULL);
+ purple_pounces_unregister_handler(FINCH_UI);
purple_signals_disconnect_by_handle(finch_pounces_get_handle());
}
diff --git a/finch/libgnt/gntmenu.c b/finch/libgnt/gntmenu.c
index 0d4ab0181c..aaa71ece7a 100644
--- a/finch/libgnt/gntmenu.c
+++ b/finch/libgnt/gntmenu.c
@@ -399,9 +399,11 @@ gnt_menu_hide(GntWidget *widget)
static gboolean
gnt_menu_clicked(GntWidget *widget, GntMouseEvent event, int x, int y)
{
- if (!org_clicked || !org_clicked(widget, event, x, y) ||
- !GNT_MENU(widget)->type == GNT_MENU_TOPLEVEL)
- return FALSE;
+ if (GNT_MENU(widget)->type != GNT_MENU_POPUP)
+ return FALSE;
+
+ if (org_clicked && org_clicked(widget, event, x, y))
+ return TRUE;
gnt_widget_activate(widget);
return TRUE;
}
diff --git a/libpurple/buddyicon.c b/libpurple/buddyicon.c
index 3125592d43..617d01944a 100644
--- a/libpurple/buddyicon.c
+++ b/libpurple/buddyicon.c
@@ -934,8 +934,8 @@ PurpleStoredImage *
purple_buddy_icons_node_set_custom_icon_from_file(PurpleBlistNode *node,
const gchar *filename)
{
- size_t len;
- guchar *data;
+ size_t len = 0;
+ guchar *data = NULL;
g_return_val_if_fail(node != NULL, NULL);
@@ -945,8 +945,10 @@ purple_buddy_icons_node_set_custom_icon_from_file(PurpleBlistNode *node,
return NULL;
}
- if (!read_icon_file(filename, &data, &len)) {
- return NULL;
+ if (filename != NULL) {
+ if (!read_icon_file(filename, &data, &len)) {
+ return NULL;
+ }
}
return purple_buddy_icons_node_set_custom_icon(node, data, len);
diff --git a/libpurple/buddyicon.h b/libpurple/buddyicon.h
index 581f31e879..4800d3c9fe 100644
--- a/libpurple/buddyicon.h
+++ b/libpurple/buddyicon.h
@@ -308,7 +308,7 @@ purple_buddy_icons_node_find_custom_icon(PurpleBlistNode *node);
*
* @param node The blist node for which to set a custom icon.
* @param icon_data The image data of the icon, which the buddy icon code will
- * free.
+ * free. Use NULL to unset the icon.
* @param icon_len The length of the data in @a icon_data.
*
* @return The icon that was set. The caller does NOT own a reference to this,
@@ -326,7 +326,8 @@ purple_buddy_icons_node_set_custom_icon(PurpleBlistNode *node,
* @see purple_buddy_icons_node_set_custom_icon()
*
* @param node The blist node for which to set a custom icon.
- * @param filename The path to the icon to set for the blist node.
+ * @param filename The path to the icon to set for the blist node. Use NULL
+ * to unset the custom icon.
*
* @return The icon that was set. The caller does NOT own a reference to this,
* and must call purple_imgstore_ref() if it wants one.
diff --git a/libpurple/dnsquery.c b/libpurple/dnsquery.c
index 8a3ee84409..0a9d5955b0 100644
--- a/libpurple/dnsquery.c
+++ b/libpurple/dnsquery.c
@@ -108,6 +108,13 @@ purple_dnsquery_resolved(PurpleDnsQueryData *query_data, GSList *hosts)
}
}
+ /*
+ * Set the resolver to NULL so that it doesn't get killed so that
+ * it sits around waiting for additional DNS requests for a few
+ * seconds longer.
+ */
+ query_data->resolver = NULL;
+
purple_dnsquery_destroy(query_data);
}
@@ -209,9 +216,8 @@ purple_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug)
* the result back to our parent, when finished.
*/
while (1) {
- const char ch = 'Y';
fd_set fds;
- struct timeval tv = { .tv_sec = 40 , .tv_usec = 0 };
+ struct timeval tv = { .tv_sec = 20, .tv_usec = 0 };
FD_ZERO(&fds);
FD_SET(child_in, &fds);
rc = select(child_in + 1, &fds, NULL, NULL, &tv);
@@ -237,8 +243,6 @@ purple_dnsquery_resolver_run(int child_out, int child_in, gboolean show_debug)
dns_params.port);
_exit(1);
}
- /* Tell our parent that we read the data successfully */
- write_to_parent(child_out, &ch, sizeof(ch));
/* We have the hostname and port, now resolve the IP */
@@ -425,8 +429,7 @@ send_dns_request_to_child(PurpleDnsQueryData *query_data,
{
pid_t pid;
dns_params_t dns_params;
- int rc;
- char ch;
+ ssize_t rc;
/* This waitpid might return the child's PID if it has recently
* exited, or it might return an error if it exited "long
@@ -458,16 +461,10 @@ send_dns_request_to_child(PurpleDnsQueryData *query_data,
purple_dnsquery_resolver_destroy(resolver);
return FALSE;
}
-
- g_return_val_if_fail(rc == sizeof(dns_params), -1);
-
- /* Did you hear me? (This avoids some race conditions) */
- rc = read(resolver->fd_out, &ch, sizeof(ch));
- if (rc != 1 || ch != 'Y')
- {
- purple_debug_warning("dns",
- "DNS child %d not responding. Killing it!\n",
- resolver->dns_pid);
+ if (rc < sizeof(dns_params)) {
+ purple_debug_error("dns", "Tried to read %" G_GSSIZE_FORMAT
+ " bytes from child but only read %" G_GSSIZE_FORMAT "\n",
+ sizeof(dns_params), rc);
purple_dnsquery_resolver_destroy(resolver);
return FALSE;
}
diff --git a/libpurple/plugins/ssl/ssl-nss.c b/libpurple/plugins/ssl/ssl-nss.c
index a62f6b9f8f..ad552811ab 100644
--- a/libpurple/plugins/ssl/ssl-nss.c
+++ b/libpurple/plugins/ssl/ssl-nss.c
@@ -285,7 +285,8 @@ ssl_nss_get_peer_certificates(PRFileDesc *socket, PurpleSslConnection * gsc)
}
for (count = 0 ; count < CERT_MAX_CERT_CHAIN ; count++) {
- purple_debug_info("nss", "subject=%s issuer=%s\n", curcert->subjectName, curcert->issuerName);
+ purple_debug_info("nss", "subject=%s issuer=%s\n", curcert->subjectName,
+ curcert->issuerName ? curcert->issuerName : "(null)");
newcrt = x509_import_from_nss(curcert);
peer_certs = g_list_append(peer_certs, newcrt);
@@ -676,7 +677,8 @@ x509_signed_by(PurpleCertificate * crt,
subjectCert = X509_NSS_DATA(crt);
g_return_val_if_fail(subjectCert, FALSE);
- if ( PORT_Strcmp(subjectCert->issuerName, issuerCert->subjectName) != 0 )
+ if (subjectCert->issuerName == NULL
+ || PORT_Strcmp(subjectCert->issuerName, issuerCert->subjectName) != 0)
return FALSE;
st = CERT_VerifySignedData(&subjectCert->signatureWrap, issuerCert, PR_Now(), NULL);
return st == SECSuccess;
diff --git a/libpurple/protocols/msn/msn.c b/libpurple/protocols/msn/msn.c
index c0eade9e84..1863687884 100644
--- a/libpurple/protocols/msn/msn.c
+++ b/libpurple/protocols/msn/msn.c
@@ -769,6 +769,9 @@ msn_tooltip_text(PurpleBuddy *buddy, PurpleNotifyUserInfo *user_info, gboolean f
{
const char *phone;
+ purple_notify_user_info_add_pair(user_info, _("Has you"),
+ ((user->list_op & (1 << MSN_LIST_RL)) ? _("Yes") : _("No")));
+
purple_notify_user_info_add_pair(user_info, _("Blocked"),
((user->list_op & (1 << MSN_LIST_BL)) ? _("Yes") : _("No")));
diff --git a/libpurple/protocols/msn/soap.c b/libpurple/protocols/msn/soap.c
index 208bdc7251..55384c060c 100644
--- a/libpurple/protocols/msn/soap.c
+++ b/libpurple/protocols/msn/soap.c
@@ -284,6 +284,11 @@ msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
count += cnt;
g_string_append_len(conn->buf, buf, cnt);
}
+
+ perrno = errno;
+ if (cnt < 0 && perrno != EAGAIN)
+ purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
+
#ifndef MSN_UNSAFE_DEBUG
if (conn->current_request->secure)
purple_debug_misc("soap", "Received secure request.\n");
@@ -299,11 +304,9 @@ msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond)
return;
/* msn_soap_process could alter errno */
- perrno = errno;
msn_soap_process(conn);
if (cnt < 0 && perrno != EAGAIN) {
- purple_debug_info("soap", "read: %s\n", g_strerror(perrno));
/* It's possible msn_soap_process closed the ssl connection */
if (conn->ssl) {
purple_ssl_close(conn->ssl);
diff --git a/libpurple/protocols/oscar/flap_connection.c b/libpurple/protocols/oscar/flap_connection.c
index 3e8ffeaa49..74054bd55e 100644
--- a/libpurple/protocols/oscar/flap_connection.c
+++ b/libpurple/protocols/oscar/flap_connection.c
@@ -158,8 +158,8 @@ static gboolean flap_connection_send_queued(gpointer data)
gettimeofday(&now, NULL);
purple_debug_info("oscar", "Attempting to send %u queued SNACs and %u queued low-priority SNACs for %p\n",
- (conn->queued_snacs ? g_queue_get_length(conn->queued_snacs) : 0),
- (conn->queued_lowpriority_snacs ? g_queue_get_length(conn->queued_lowpriority_snacs) : 0),
+ (conn->queued_snacs ? conn->queued_snacs->length : 0),
+ (conn->queued_lowpriority_snacs ? conn->queued_lowpriority_snacs->length : 0),
conn);
if (!conn->queued_snacs || flap_connection_send_snac_queue(conn, now, conn->queued_snacs)) {
if (!conn->queued_lowpriority_snacs || flap_connection_send_snac_queue(conn, now, conn->queued_lowpriority_snacs)) {
diff --git a/libpurple/protocols/qq/AUTHORS b/libpurple/protocols/qq/AUTHORS
index 5cb48830dd..0ec81447b9 100644
--- a/libpurple/protocols/qq/AUTHORS
+++ b/libpurple/protocols/qq/AUTHORS
@@ -1,35 +1,38 @@
Code Contributors
-=====
-puzzlebird : original author
-gfhuang : patches for libpurple 2.0.0beta2, maintainer
-henryouly : file transfer, udp sock5 proxy and qq_show, maintainer
-hzhr : maintainer
-joymarquis : maintainer
-arfankai : fixed bugs in char_conv.c
-rakescar : provided filter for HTML tag
-yyw : improved performance on PPC linux
-lvxiang : provided ip to location original code
-markhuetsch : OpenQ merge into libpurple, maintainer 2006-2007
-ccpaging : maintainer since 2007
-icesky : maintainer since 2007
-csyfek : faces, maintainer since 2007
+=========
+puzzlebird : original author
+gfhuang : patches for libpurple 2.0.0beta2, maintainer
+Yuan Qingyun : patches for libpurple 1.5.0, maintainer
+henryouly : file transfer, udp sock5 proxy and qq_show, maintainer
+hzhr : maintainer
+joymarquis : maintainer
+arfankai : fixed bugs in char_conv.c
+rakescar : provided filter for HTML tag
+yyw : improved performance on PPC linux
+lvxiang : provided ip to location original code
+markhuetsch : OpenQ merge into libpurple, maintainer 2006-2007
+ccpaging : maintainer since 2007
+icesky : maintainer since 2007
+csyfek : faces, maintainer since 2007
Lovely Patch Writers
-=====
-gnap : message displaying, documentation
-manphiz : qun processing
-moo : qun processing
-Coly Li : qun processing
+=========
+gnap : message displaying, documentation
+manphiz : qun processing
+moo : qun processing
+Coly Li : qun processing
+Emil Alexiev : captcha verification on login based on LumaQQ for MAC (2007),
+ login, add buddy, remove buddy, message exchange and logout
Acknowledgement
-=====
-Shufeng Tan : http://sf.net/projects/perl-oicq
-Jeff Ye : http://www.sinomac.com
-Hu Zheng : http://forlinux.yeah.net
-yunfan : http://www.myswear.net
+=========
+Shufeng Tan : http://sf.net/projects/perl-oicq
+Jeff Ye : http://www.sinomac.com
+Hu Zheng : http://forlinux.yeah.net
+yunfan : http://www.myswear.net
+OpenQ Team : http://openq.linuxsir.org
+LumaQQ Team : http://lumaqq.linuxsir.org
khc@pidgin.im
qulogic@pidgin.im
rlaager@pidgin.im
-OpenQ Team
-LumaQQ Team
-OpenQ Google Group
+OpenQ Google Group : http://groups.google.com/group/openq
diff --git a/libpurple/protocols/qq/ChangeLog b/libpurple/protocols/qq/ChangeLog
index b60517a9b1..4b97d0aed6 100644
--- a/libpurple/protocols/qq/ChangeLog
+++ b/libpurple/protocols/qq/ChangeLog
@@ -1,6 +1,36 @@
+2008.09.05 - ccpaging <ccpaging(at)gmail.com>
+ * Filter chars 0x01-0x20 in nickname
+
+2008.09.05 - ccpaging <ccpaging(at)gmail.com>
+ * Fixed compilation even pidgin-udp-patch not applied
+ * Place and analysis 'before login packet' after login. packages will be updated slowly and server may send lots of 'server command packet', while 'before login packet' is placed after 'finished update'
+
+2008.09.02 - ccpaging <ccpaging(at)gmail.com>
+ * Bugfix: can not send message to the QUN blocked adding
+ * Tickets:
+ Fixes #6957
+
+2008.09.02 - ccpaging <ccpaging(at)gmail.com>
+ * Use new tactics of information update:
+ 1. send next package till the previous package received
+ 2. fix duplicated get_room_info and get_room_buddies commands
+
+2008.08.16 - ccpaging <ecc_hy(at)hotmail.com>
+ * Rename group to room. If you used pidginqq before, this may create a new room with same title, you may delete old one
+ * Replace purple_debug with purple_debug_info, purple_debug_warning, purple_debug_error
+ * Add server notice and server new, and two options to turn on/off
+ * Minor modify for reducing transaction's debug infor
+ * Minor modifies for system notice and QQ news.
+ * Add 4 new strings need translate compare with p10.
+ * Tickets:
+ Fixes #6990
+
2008.08.10 - csyfek <csyfek(at)gmail.com>
* Commit to Pidgin
+2008.08.07 - ccpaging <ecc_hy(at)hotmail.com>
+ * Support managing multi-connections according to simple.c
+
2008.08.06 - ccpaging <ecc_hy(at)hotmail.com>
* Rename names of variables, Group, to Room
* Functions of group_network merged into qq_network and qq_process
diff --git a/libpurple/protocols/qq/buddy_info.c b/libpurple/protocols/qq/buddy_info.c
index 0f0092ef58..40071df7cc 100644
--- a/libpurple/protocols/qq/buddy_info.c
+++ b/libpurple/protocols/qq/buddy_info.c
@@ -284,7 +284,7 @@ void qq_send_packet_get_info(PurpleConnection *gc, guint32 uid, gboolean show_wi
qd = (qq_data *) gc->proto_data;
g_snprintf(uid_str, sizeof(uid_str), "%d", uid);
- qq_send_cmd(qd, QQ_CMD_GET_USER_INFO, (guint8 *) uid_str, strlen(uid_str));
+ qq_send_cmd(gc, QQ_CMD_GET_BUDDY_INFO, (guint8 *) uid_str, strlen(uid_str));
query = g_new0(qq_info_query, 1);
query->uid = uid;
@@ -293,6 +293,20 @@ void qq_send_packet_get_info(PurpleConnection *gc, guint32 uid, gboolean show_wi
qd->info_query = g_list_append(qd->info_query, query);
}
+void qq_request_buddy_info(PurpleConnection *gc, guint32 uid,
+ gint update_class, guint32 ship32)
+{
+ qq_data *qd;
+ gchar raw_data[16] = {0};
+
+ g_return_if_fail(uid != 0);
+
+ qd = (qq_data *) gc->proto_data;
+ g_snprintf(raw_data, sizeof(raw_data), "%d", uid);
+ qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDY_INFO, (guint8 *) raw_data, strlen(raw_data),
+ update_class, ship32);
+}
+
/* set up the fields requesting personal information and send a get_info packet
* for myself */
void qq_prepare_modify_info(PurpleConnection *gc)
@@ -314,7 +328,6 @@ void qq_prepare_modify_info(PurpleConnection *gc)
/* send packet to modify personal information */
static void qq_send_packet_modify_info(PurpleConnection *gc, contact_info *info)
{
- qq_data *qd = (qq_data *) gc->proto_data;
gint bytes = 0;
guint8 raw_data[MAX_PACKET_SIZE - 128] = {0};
guint8 bar;
@@ -446,7 +459,7 @@ static void qq_send_packet_modify_info(PurpleConnection *gc, contact_info *info)
bytes += qq_put8(raw_data + bytes, bar);
- qq_send_cmd(qd, QQ_CMD_UPDATE_INFO, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_UPDATE_INFO, raw_data, bytes);
}
@@ -677,9 +690,9 @@ static void create_modify_info_dialogue(PurpleConnection *gc, const contact_info
mid->info->qq_show = g_strdup(info->qq_show);
mid->info->unknown6 = g_strdup(info->unknown6);
- purple_request_fields(gc, _("Modify my information"),
- _("Modify my information"), NULL, fields,
- _("Update my information"), G_CALLBACK(modify_info_ok_cb),
+ purple_request_fields(gc, _("Modify information"),
+ _("Modify information"), NULL, fields,
+ _("Update information"), G_CALLBACK(modify_info_ok_cb),
_("Cancel"), G_CALLBACK(modify_info_cancel_cb),
purple_connection_get_account(gc), NULL, NULL,
mid);
@@ -697,8 +710,8 @@ void qq_process_modify_info_reply(guint8 *data, gint data_len, PurpleConnection
data[data_len] = '\0';
if (qd->uid == atoi((gchar *) data)) { /* return should be my uid */
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Update info ACK OK\n");
- purple_notify_info(gc, NULL, _("Your information has been updated"), NULL);
+ purple_debug_info("QQ", "Update info ACK OK\n");
+ purple_notify_info(gc, _("QQ Buddy"), _("Successed:"), _("Change buddy information."));
}
}
@@ -762,7 +775,7 @@ void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
&& g_ascii_strncasecmp(icon_path + dir_len + 1 + prefix_len + icon_len, QQ_ICON_SUFFIX, suffix_len) == 0
&& icon_len <= 3)) {
if (icon_global)
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "%s\n", errmsg);
+ purple_debug_error("QQ", "%s\n", errmsg);
else
purple_notify_error(gc, _("Invalid QQ Face"), errmsg, NULL);
g_free(errmsg);
@@ -775,7 +788,7 @@ void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img)
/* ensure face number in proper range */
if (icon_num > QQ_FACES) {
if (icon_global)
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "%s\n", errmsg);
+ purple_debug_error("QQ", "%s\n", errmsg);
else
purple_notify_error(gc, _("Invalid QQ Face"), errmsg, NULL);
g_free(errmsg);
@@ -849,7 +862,7 @@ static void qq_refresh_buddy_and_myself(contact_info *info, PurpleConnection *gc
}
/* process reply to get_info packet */
-void qq_process_get_info_reply(guint8 *data, gint data_len, PurpleConnection *gc)
+void qq_process_get_buddy_info(guint8 *data, gint data_len, PurpleConnection *gc)
{
gchar **segments;
qq_info_query *query;
@@ -902,22 +915,24 @@ void qq_process_get_info_reply(guint8 *data, gint data_len, PurpleConnection *gc
void qq_info_query_free(qq_data *qd)
{
- gint i;
+ gint count;
qq_info_query *p;
g_return_if_fail(qd != NULL);
- i = 0;
+ count = 0;
while (qd->info_query != NULL) {
p = (qq_info_query *) (qd->info_query->data);
qd->info_query = g_list_remove(qd->info_query, p);
g_free(p);
- i++;
+ count++;
+ }
+ if (count > 0) {
+ purple_debug_info("QQ", "%d info queries are freed!\n", count);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d info queries are freed!\n", i);
}
-void qq_send_packet_get_level(PurpleConnection *gc, guint32 uid)
+void qq_request_get_level(PurpleConnection *gc, guint32 uid)
{
qq_data *qd = (qq_data *) gc->proto_data;
guint8 buf[16] = {0};
@@ -927,10 +942,10 @@ void qq_send_packet_get_level(PurpleConnection *gc, guint32 uid)
bytes += qq_put32(buf + bytes, uid);
qd = (qq_data *) gc->proto_data;
- qq_send_cmd(qd, QQ_CMD_GET_LEVEL, buf, bytes);
+ qq_send_cmd(gc, QQ_CMD_GET_LEVEL, buf, bytes);
}
-void qq_send_packet_get_buddies_levels(PurpleConnection *gc)
+void qq_request_get_buddies_level(PurpleConnection *gc, gint update_class)
{
guint8 *buf;
guint16 size;
@@ -942,12 +957,11 @@ void qq_send_packet_get_buddies_levels(PurpleConnection *gc)
if ( qd->buddies == NULL) {
return;
}
- /* server only sends back levels for online buddies, no point
- * in asking for anyone else */
- size = 4 * g_list_length(qd->buddies) + 1;
+ /* server only reply levels for online buddies */
+ size = 4 * g_list_length(qd->buddies) + 1 + 4;
buf = g_newa(guint8, size);
bytes += qq_put8(buf + bytes, 0x00);
-
+
while (NULL != node) {
q_bud = (qq_buddy *) node->data;
if (NULL != q_bud) {
@@ -955,7 +969,10 @@ void qq_send_packet_get_buddies_levels(PurpleConnection *gc)
}
node = node->next;
}
- qq_send_cmd(qd, QQ_CMD_GET_LEVEL, buf, size);
+
+ /* my id should be the end if included */
+ bytes += qq_put32(buf + bytes, qd->uid);
+ qq_send_cmd_mess(gc, QQ_CMD_GET_LEVEL, buf, size, update_class, 0);
}
void qq_process_get_level_reply(guint8 *decr_buf, gint decr_len, PurpleConnection *gc)
@@ -970,9 +987,9 @@ void qq_process_get_level_reply(guint8 *decr_buf, gint decr_len, PurpleConnectio
qq_data *qd = (qq_data *) gc->proto_data;
gint bytes = 0;
- decr_len--;
+ decr_len--;
if (decr_len % 12 != 0) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Get levels list of abnormal length. Truncating last %d bytes.\n", decr_len % 12);
decr_len -= (decr_len % 12);
}
@@ -980,19 +997,18 @@ void qq_process_get_level_reply(guint8 *decr_buf, gint decr_len, PurpleConnectio
bytes += 1;
/* this byte seems random */
/*
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Byte one of get_level packet: %d\n", buf[0]);
+ purple_debug_info("QQ", "Byte one of get_level packet: %d\n", buf[0]);
*/
for (i = 0; i < decr_len; i += 12) {
bytes += qq_get32(&uid, decr_buf + bytes);
bytes += qq_get32(&onlineTime, decr_buf + bytes);
bytes += qq_get16(&level, decr_buf + bytes);
bytes += qq_get16(&timeRemainder, decr_buf + bytes);
- purple_debug(PURPLE_DEBUG_INFO, "QQ_LEVEL",
- "%d, tmOnline: %d, level: %d, tmRemainder: %d\n",
+ purple_debug_info("QQ_LEVEL", "%d, tmOnline: %d, level: %d, tmRemainder: %d\n",
uid, onlineTime, level, timeRemainder);
if (uid == qd->uid) {
qd->my_level = level;
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Got my levels as %d\n", qd->my_level);
+ purple_debug_warning("QQ", "Got my levels as %d\n", qd->my_level);
continue;
}
@@ -1000,7 +1016,7 @@ void qq_process_get_level_reply(guint8 *decr_buf, gint decr_len, PurpleConnectio
if (purple_name == NULL) {
continue;
}
-
+
b = purple_find_buddy(account, purple_name);
g_free(purple_name);
@@ -1008,10 +1024,9 @@ void qq_process_get_level_reply(guint8 *decr_buf, gint decr_len, PurpleConnectio
if (b != NULL) {
q_bud = (qq_buddy *) b->proto_data;
}
-
+
if (q_bud == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "Got levels of %d not in my buddy list\n", uid);
+ purple_debug_error("QQ", "Got levels of %d not in my buddy list\n", uid);
continue;
}
diff --git a/libpurple/protocols/qq/buddy_info.h b/libpurple/protocols/qq/buddy_info.h
index 853741fc0d..8fd4edafe1 100644
--- a/libpurple/protocols/qq/buddy_info.h
+++ b/libpurple/protocols/qq/buddy_info.h
@@ -51,14 +51,14 @@
#define QQ_FRIEND_FLAG_MOBILE 0x10
#define QQ_FRIEND_FLAG_BIND_MOBILE 0x20
*/
-#define QQ_COMM_FLAG_QQ_MEMBER 0x02
-#define QQ_COMM_FLAG_QQ_VIP 0x04
+#define QQ_COMM_FLAG_QQ_VIP 0x02
+#define QQ_COMM_FLAG_QQ_MEMBER 0x04
#define QQ_COMM_FLAG_TCP_MODE 0x10
#define QQ_COMM_FLAG_MOBILE 0x20
#define QQ_COMM_FLAG_BIND_MOBILE 0x40
#define QQ_COMM_FLAG_VIDEO 0x80
-#define QQ_EXT_FLAG_SPACE 0x02
+#define QQ_EXT_FLAG_ZONE 0x02
#define QQ_BUDDY_GENDER_GG 0x00
#define QQ_BUDDY_GENDER_MM 0x01
@@ -67,14 +67,22 @@
#define QQ_ICON_PREFIX "qq_"
#define QQ_ICON_SUFFIX ".png"
+enum {
+ QQ_BUDDY_INFO_UPDATE_ONLY = 0,
+ QQ_BUDDY_INFO_DISPLAY,
+ QQ_BUDDY_INFO_MODIFY,
+};
+
void qq_send_packet_get_info(PurpleConnection *gc, guint32 uid, gboolean show_window);
+void qq_request_buddy_info(PurpleConnection *gc, guint32 uid,
+ gint update_class, guint32 ship32);
void qq_set_my_buddy_icon(PurpleConnection *gc, PurpleStoredImage *img);
void qq_set_buddy_icon_for_user(PurpleAccount *account, const gchar *who, const gchar *icon_num, const gchar *iconfile);
void qq_prepare_modify_info(PurpleConnection *gc);
void qq_process_modify_info_reply(guint8 *data, gint data_len, PurpleConnection *gc);
-void qq_process_get_info_reply(guint8 *data, gint data_len, PurpleConnection *gc);
+void qq_process_get_buddy_info(guint8 *data, gint data_len, PurpleConnection *gc);
void qq_info_query_free(qq_data *qd);
-void qq_send_packet_get_level(PurpleConnection *gc, guint32 uid);
-void qq_send_packet_get_buddies_levels(PurpleConnection *gc);
+void qq_request_get_level(PurpleConnection *gc, guint32 uid);
+void qq_request_get_buddies_level(PurpleConnection *gc, gint update_class);
void qq_process_get_level_reply(guint8 *buf, gint buf_len, PurpleConnection *gc);
#endif
diff --git a/libpurple/protocols/qq/buddy_list.c b/libpurple/protocols/qq/buddy_list.c
index 437fd1bff9..8a41970f81 100644
--- a/libpurple/protocols/qq/buddy_list.c
+++ b/libpurple/protocols/qq/buddy_list.c
@@ -56,7 +56,7 @@ typedef struct _qq_buddy_online {
} qq_buddy_online;
/* get a list of online_buddies */
-void qq_send_packet_get_buddies_online(PurpleConnection *gc, guint8 position)
+void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, gint update_class)
{
qq_data *qd;
guint8 *raw_data;
@@ -77,15 +77,14 @@ void qq_send_packet_get_buddies_online(PurpleConnection *gc, guint8 position)
/* 003-004 */
bytes += qq_put16(raw_data + bytes, 0x0000);
- qq_send_cmd(qd, QQ_CMD_GET_BUDDIES_ONLINE, raw_data, 5);
+ qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_ONLINE, raw_data, 5, update_class, 0);
qd->last_get_online = time(NULL);
}
-/* position starts with 0x0000,
+/* position starts with 0x0000,
* server may return a position tag if list is too long for one packet */
-void qq_send_packet_get_buddies_list(PurpleConnection *gc, guint16 position)
+void qq_request_get_buddies_list(PurpleConnection *gc, guint16 position, gint update_class)
{
- qq_data *qd = (qq_data *) gc->proto_data;
guint8 raw_data[16] = {0};
gint bytes = 0;
@@ -98,13 +97,12 @@ void qq_send_packet_get_buddies_list(PurpleConnection *gc, guint16 position)
* March 22, found the 00,00,00 starts to work as well */
bytes += qq_put8(raw_data + bytes, 0x00);
- qq_send_cmd(qd, QQ_CMD_GET_BUDDIES_LIST, raw_data, bytes);
+ qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_LIST, raw_data, bytes, update_class, 0);
}
/* get all list, buddies & Quns with groupsid support */
-void qq_send_packet_get_buddies_and_rooms(PurpleConnection *gc, guint32 position)
+void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, gint update_class)
{
- qq_data *qd = (qq_data *) gc->proto_data;
guint8 raw_data[16] = {0};
gint bytes = 0;
@@ -116,7 +114,7 @@ void qq_send_packet_get_buddies_and_rooms(PurpleConnection *gc, guint32 position
bytes += qq_put32(raw_data + bytes, 0x00000000);
bytes += qq_put32(raw_data + bytes, position);
- qq_send_cmd(qd, QQ_CMD_GET_BUDDIES_AND_ROOMS, raw_data, bytes);
+ qq_send_cmd_mess(gc, QQ_CMD_GET_BUDDIES_AND_ROOMS, raw_data, bytes, update_class, 0);
}
/* parse the data into qq_buddy_status */
@@ -146,8 +144,8 @@ static gint get_buddy_status(qq_buddy_status *bs, guint8 *data)
/* 015-030: unknown key */
bytes += qq_getdata(&(bs->unknown_key[0]), QQ_KEY_LENGTH, data + bytes);
- purple_debug(PURPLE_DEBUG_INFO, "QQ_STATUS",
- "uid: %d, U1: %d, ip: %s:%d, U2:%d, status:%d, U3:%04X\n",
+ purple_debug_info("QQ_STATUS",
+ "uid: %d, U1: %d, ip: %s:%d, U2:%d, status:%d, U3:%04X\n",
bs->uid, bs->unknown1, inet_ntoa(bs->ip), bs->port,
bs->unknown2, bs->status, bs->unknown3);
@@ -180,13 +178,12 @@ guint8 qq_process_get_buddies_online_reply(guint8 *data, gint data_len, PurpleCo
count = 0;
while (bytes < data_len) {
if (data_len - bytes < QQ_ONLINE_BUDDY_ENTRY_LEN) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "[buddies online] only %d, need %d",
+ purple_debug_error("QQ", "[buddies online] only %d, need %d",
(data_len - bytes), QQ_ONLINE_BUDDY_ENTRY_LEN);
break;
}
memset(&bo, 0 ,sizeof(bo));
-
+
/* set flag */
bytes_buddy = bytes;
/* based on one online buddy entry */
@@ -204,31 +201,29 @@ guint8 qq_process_get_buddies_online_reply(guint8 *data, gint data_len, PurpleCo
bytes += qq_get8(&bo.ending, data + bytes); /* 0x00 */
if (bo.bs.uid == 0 || (bytes - bytes_buddy) != QQ_ONLINE_BUDDY_ENTRY_LEN) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "uid=0 or entry complete len(%d) != %d",
+ purple_debug_error("QQ", "uid=0 or entry complete len(%d) != %d",
(bytes - bytes_buddy), QQ_ONLINE_BUDDY_ENTRY_LEN);
continue;
} /* check if it is a valid entry */
if (bo.bs.uid == qd->uid) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "I am in online list %d\n", bo.bs.uid);
+ purple_debug_warning("QQ", "I am in online list %d\n", bo.bs.uid);
continue;
}
/* update buddy information */
purple_name = uid_to_purple_name(bo.bs.uid);
if (purple_name == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Got an online buddy %d, but not find purple name\n", bo.bs.uid);
continue;
}
b = purple_find_buddy(purple_connection_get_account(gc), purple_name);
g_free(purple_name);
-
+
q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
if (q_bud == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Got an online buddy %d, but not in my buddy list\n", bo.bs.uid);
continue;
}
@@ -247,11 +242,11 @@ guint8 qq_process_get_buddies_online_reply(guint8 *data, gint data_len, PurpleCo
}
if(bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"qq_process_get_buddies_online_reply: Dangerous error! maybe protocol changed, notify developers!\n");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d online buddies, nextposition=%u\n",
+ purple_debug_info("QQ", "Received %d online buddies, nextposition=%u\n",
count, (guint) position);
return position;
}
@@ -274,7 +269,7 @@ guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleCon
qd = (qq_data *) gc->proto_data;
if (data_len <= 2) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "empty buddies list");
+ purple_debug_error("QQ", "empty buddies list");
return -1;
}
/* qq_show_packet("QQ get buddies list", data, data_len); */
@@ -297,6 +292,7 @@ guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleCon
pascal_len = convert_as_pascal_string(data + bytes, &q_bud->nickname, QQ_CHARSET_DEFAULT);
bytes += pascal_len;
+ qq_filter_str(q_bud->nickname);
bytes += qq_get16(&unknown, data + bytes);
bytes += qq_get8(&q_bud->ext_flag, data + bytes);
@@ -305,7 +301,7 @@ guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleCon
bytes_expected = 12 + pascal_len;
if (q_bud->uid == 0 || (bytes - buddy_bytes) != bytes_expected) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"Buddy entry, expect %d bytes, read %d bytes\n", bytes_expected, bytes - buddy_bytes);
g_free(q_bud->nickname);
g_free(q_bud);
@@ -315,7 +311,7 @@ guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleCon
}
#if 1
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"buddy [%09d]: ext_flag=0x%02x, comm_flag=0x%02x, nick=%s\n",
q_bud->uid, q_bud->ext_flag, q_bud->comm_flag, q_bud->nickname);
#endif
@@ -334,11 +330,11 @@ guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleCon
}
if(bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"qq_process_get_buddies_list_reply: Dangerous error! maybe protocol changed, notify developers!");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d buddies, nextposition=%u\n",
+ purple_debug_info("QQ", "Received %d buddies, nextposition=%u\n",
count, (guint) position);
return position;
}
@@ -364,8 +360,7 @@ guint32 qq_process_get_buddies_and_rooms(guint8 *data, gint data_len, PurpleConn
bytes += qq_get8(&reply_code, data + bytes);
if(0 != reply_code) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "qq_process_get_buddies_and_rooms, %d", reply_code);
+ purple_debug_warning("QQ", "qq_process_get_buddies_and_rooms, %d", reply_code);
}
bytes += qq_get32(&unknown, data + bytes);
@@ -381,48 +376,45 @@ guint32 qq_process_get_buddies_and_rooms(guint8 *data, gint data_len, PurpleConn
/* 05: groupid*4 */ /* seems to always be 0 */
bytes += qq_get8(&groupid, data + bytes);
/*
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "groupid: %i\n", groupid);
+ purple_debug_info("QQ", "groupid: %i\n", groupid);
groupid >>= 2;
*/
if (uid == 0 || (type != 0x1 && type != 0x4)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Buddy entry, uid=%d, type=%d", uid, type);
+ purple_debug_info("QQ", "Buddy entry, uid=%d, type=%d", uid, type);
continue;
- }
+ }
if(0x1 == type) { /* a buddy */
- /* don't do anything but count - buddies are handled by
- * qq_send_packet_get_buddies_list */
+ /* don't do anything but count - buddies are handled by
+ * qq_request_get_buddies_list */
++i;
} else { /* a group */
group = qq_room_search_id(gc, uid);
if(group == NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"Not find room id %d in qq_process_get_buddies_and_rooms\n", uid);
qq_set_pending_id(&qd->adding_groups_from_server, uid, TRUE);
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, uid);
} else {
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_YES;
qq_group_refresh(gc, group);
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
}
++j;
}
}
if(bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"qq_process_get_buddies_and_rooms: Dangerous error! maybe protocol changed, notify developers!");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Received %d buddies and %d groups, nextposition=%u\n", i, j, (guint) position);
+ purple_debug_info("QQ", "Received %d buddies and %d groups, nextposition=%u\n", i, j, (guint) position);
return position;
}
#define QQ_MISC_STATUS_HAVING_VIIDEO 0x00000001
#define QQ_CHANGE_ONLINE_STATUS_REPLY_OK 0x30 /* ASCII value of "0" */
-/* TODO: figure out what's going on with the IP region. Sometimes I get valid IP addresses,
- * but the port number's weird, other times I get 0s. I get these simultaneously on the same buddy,
+/* TODO: figure out what's going on with the IP region. Sometimes I get valid IP addresses,
+ * but the port number's weird, other times I get 0s. I get these simultaneously on the same buddy,
* using different accounts to get info. */
/* check if status means online or offline */
@@ -433,7 +425,7 @@ gboolean is_online(guint8 status)
case QQ_BUDDY_ONLINE_AWAY:
case QQ_BUDDY_ONLINE_INVISIBLE:
return TRUE;
- case QQ_BUDDY_ONLINE_OFFLINE:
+ case QQ_BUDDY_CHANGE_TO_OFFLINE:
return FALSE;
}
return FALSE;
@@ -441,9 +433,9 @@ gboolean is_online(guint8 status)
/* Help calculate the correct icon index to tell the server. */
gint get_icon_offset(PurpleConnection *gc)
-{
+{
PurpleAccount *account;
- PurplePresence *presence;
+ PurplePresence *presence;
account = purple_connection_get_account(gc);
presence = purple_account_get_presence(account);
@@ -460,7 +452,7 @@ gint get_icon_offset(PurpleConnection *gc)
}
/* send a packet to change my online status */
-void qq_send_packet_change_status(PurpleConnection *gc)
+void qq_request_change_status(PurpleConnection *gc, gint update_class)
{
qq_data *qd;
guint8 raw_data[16] = {0};
@@ -469,13 +461,13 @@ void qq_send_packet_change_status(PurpleConnection *gc)
guint32 misc_status;
gboolean fake_video;
PurpleAccount *account;
- PurplePresence *presence;
+ PurplePresence *presence;
account = purple_connection_get_account(gc);
presence = purple_account_get_presence(account);
qd = (qq_data *) gc->proto_data;
- if (!qd->logged_in)
+ if (!qd->is_login)
return;
if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_INVISIBLE)) {
@@ -497,7 +489,7 @@ void qq_send_packet_change_status(PurpleConnection *gc)
bytes += qq_put8(raw_data + bytes, away_cmd);
bytes += qq_put32(raw_data + bytes, misc_status);
- qq_send_cmd(qd, QQ_CMD_CHANGE_ONLINE_STATUS, raw_data, bytes);
+ qq_send_cmd_mess(gc, QQ_CMD_CHANGE_STATUS, raw_data, bytes, update_class, 0);
}
/* parse the reply packet for change_status */
@@ -513,15 +505,15 @@ void qq_process_change_status_reply(guint8 *data, gint data_len, PurpleConnectio
g_return_if_fail(data != NULL && data_len != 0);
qd = (qq_data *) gc->proto_data;
-
+
bytes = 0;
bytes = qq_get8(&reply, data + bytes);
if (reply != QQ_CHANGE_ONLINE_STATUS_REPLY_OK) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Change status fail 0x%02X\n", reply);
+ purple_debug_warning("QQ", "Change status fail 0x%02X\n", reply);
return;
}
- /* purple_debug(PURPLE_DEBUG_INFO, "QQ", "Change status OK\n"); */
+ /* purple_debug_info("QQ", "Change status OK\n"); */
name = uid_to_purple_name(qd->uid);
b = purple_find_buddy(gc->account, name);
g_free(name);
@@ -532,7 +524,7 @@ void qq_process_change_status_reply(guint8 *data, gint data_len, PurpleConnectio
}
/* it is a server message indicating that one of my buddies has changed its status */
-void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnection *gc)
+void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnection *gc)
{
qq_data *qd;
gint bytes;
@@ -547,16 +539,16 @@ void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnectio
qd = (qq_data *) gc->proto_data;
if (data_len < 35) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "[buddy status change] only %d, need 35 bytes\n", data_len);
+ purple_debug_error("QQ", "[buddy status change] only %d, need 35 bytes\n", data_len);
return;
}
-
+
memset(&bs, 0, sizeof(bs));
bytes = 0;
/* 000-030: qq_buddy_status */
bytes += get_buddy_status(&bs, data + bytes);
- /* 031-034: Unknow, maybe my uid */
- /* This has a value of 0 when we've changed our status to
+ /* 031-034: Unknow, maybe my uid */
+ /* This has a value of 0 when we've changed our status to
* QQ_BUDDY_ONLINE_INVISIBLE */
bytes += qq_get32(&my_uid, data + bytes);
@@ -565,20 +557,18 @@ void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnectio
g_free(name);
q_bud = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
if (q_bud == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "got information of unknown buddy %d\n", bs.uid);
+ purple_debug_warning("QQ", "Get status of unknown buddy %d\n", bs.uid);
return;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "status:.uid = %d, q_bud->uid = %d\n", bs.uid , q_bud->uid);
- if(bs.ip.s_addr != 0) {
+ if(bs.ip.s_addr != 0) {
q_bud->ip.s_addr = bs.ip.s_addr;
q_bud->port = bs.port;
}
q_bud->status =bs.status;
- if (q_bud->status == QQ_BUDDY_ONLINE_NORMAL) {
- qq_send_packet_get_level(gc, q_bud->uid);
+ if (q_bud->status == QQ_BUDDY_ONLINE_NORMAL && q_bud->level <= 0) {
+ qq_request_get_level(gc, q_bud->uid);
}
qq_update_buddy_contact(gc, q_bud);
}
@@ -589,24 +579,24 @@ void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud)
gchar *purple_name;
PurpleBuddy *bud;
gchar *status_id;
-
+
g_return_if_fail(q_bud != NULL);
purple_name = uid_to_purple_name(q_bud->uid);
if (purple_name == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Not find purple name: %d\n", q_bud->uid);
+ purple_debug_error("QQ", "Not find purple name: %d\n", q_bud->uid);
return;
}
bud = purple_find_buddy(gc->account, purple_name);
if (bud == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Not find buddy: %d\n", q_bud->uid);
+ purple_debug_error("QQ", "Not find buddy: %d\n", q_bud->uid);
g_free(purple_name);
return;
}
-
+
purple_blist_server_alias_buddy(bud, q_bud->nickname); /* server */
- q_bud->last_refresh = time(NULL);
+ q_bud->last_update = time(NULL);
/* purple supports signon and idle time
* but it is not much use for QQ, I do not use them */
@@ -619,7 +609,7 @@ void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud)
case QQ_BUDDY_ONLINE_NORMAL:
status_id = "available";
break;
- case QQ_BUDDY_ONLINE_OFFLINE:
+ case QQ_BUDDY_CHANGE_TO_OFFLINE:
status_id = "offline";
break;
case QQ_BUDDY_ONLINE_AWAY:
@@ -630,10 +620,10 @@ void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud)
break;
default:
status_id = "invisible";
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "unknown status: %x\n", q_bud->status);
+ purple_debug_error("QQ", "unknown status: %x\n", q_bud->status);
break;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "buddy %d %s\n", q_bud->uid, status_id);
+ purple_debug_info("QQ", "buddy %d %s\n", q_bud->uid, status_id);
purple_prpl_got_user_status(gc->account, purple_name, status_id, NULL);
if (q_bud->comm_flag & QQ_COMM_FLAG_MOBILE && q_bud->status != QQ_BUDDY_OFFLINE)
@@ -641,11 +631,6 @@ void qq_update_buddy_contact(PurpleConnection *gc, qq_buddy *q_bud)
else
purple_prpl_got_user_status_deactive(gc->account, purple_name, "mobile");
- if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO && q_bud->status != QQ_BUDDY_OFFLINE)
- purple_prpl_got_user_status(gc->account, purple_name, "video", NULL);
- else
- purple_prpl_got_user_status_deactive(gc->account, purple_name, "video");
-
g_free(purple_name);
}
@@ -664,9 +649,9 @@ void qq_refresh_all_buddy_status(PurpleConnection *gc)
while (list != NULL) {
q_bud = (qq_buddy *) list->data;
- if (q_bud != NULL && now > q_bud->last_refresh + QQ_UPDATE_ONLINE_INTERVAL
+ if (q_bud != NULL && now > q_bud->last_update + QQ_UPDATE_ONLINE_INTERVAL
&& q_bud->status != QQ_BUDDY_ONLINE_INVISIBLE) {
- q_bud->status = QQ_BUDDY_ONLINE_OFFLINE;
+ q_bud->status = QQ_BUDDY_CHANGE_TO_OFFLINE;
qq_update_buddy_contact(gc, q_bud);
}
list = list->next;
diff --git a/libpurple/protocols/qq/buddy_list.h b/libpurple/protocols/qq/buddy_list.h
index e1655757f0..8226bacf74 100644
--- a/libpurple/protocols/qq/buddy_list.h
+++ b/libpurple/protocols/qq/buddy_list.h
@@ -42,19 +42,19 @@ typedef struct _qq_buddy_status {
enum {
QQ_BUDDY_OFFLINE = 0x00,
- QQ_BUDDY_ONLINE_NORMAL = 0x0a,
- QQ_BUDDY_ONLINE_OFFLINE = 0x14,
- QQ_BUDDY_ONLINE_AWAY = 0x1e,
- QQ_BUDDY_ONLINE_INVISIBLE = 0x28
+ QQ_BUDDY_ONLINE_NORMAL = 10,
+ QQ_BUDDY_CHANGE_TO_OFFLINE = 20,
+ QQ_BUDDY_ONLINE_AWAY = 30,
+ QQ_BUDDY_ONLINE_INVISIBLE = 40
};
-void qq_send_packet_get_buddies_online(PurpleConnection *gc, guint8 position);
+void qq_request_get_buddies_online(PurpleConnection *gc, guint8 position, gint update_class);
guint8 qq_process_get_buddies_online_reply(guint8 *data, gint data_len, PurpleConnection *gc);
-void qq_send_packet_get_buddies_list(PurpleConnection *gc, guint16 position);
+void qq_request_get_buddies_list(PurpleConnection *gc, guint16 position, gint update_class);
guint16 qq_process_get_buddies_list_reply(guint8 *data, gint data_len, PurpleConnection *gc);
-void qq_send_packet_get_buddies_and_rooms(PurpleConnection *gc, guint32 position);
+void qq_request_get_buddies_and_rooms(PurpleConnection *gc, guint32 position, gint update_class);
guint32 qq_process_get_buddies_and_rooms(guint8 *data, gint data_len, PurpleConnection *gc);
void qq_refresh_all_buddy_status(PurpleConnection *gc);
@@ -63,7 +63,7 @@ gboolean is_online(guint8 status);
gint get_icon_offset(PurpleConnection *gc);
-void qq_send_packet_change_status(PurpleConnection *gc);
+void qq_request_change_status(PurpleConnection *gc, gint update_class);
void qq_process_change_status_reply(guint8 *data, gint data_len, PurpleConnection *gc);
void qq_process_buddy_change_status(guint8 *data, gint data_len, PurpleConnection *gc);
diff --git a/libpurple/protocols/qq/buddy_opt.c b/libpurple/protocols/qq/buddy_opt.c
index 85356ca187..b77081b821 100644
--- a/libpurple/protocols/qq/buddy_opt.c
+++ b/libpurple/protocols/qq/buddy_opt.c
@@ -60,19 +60,17 @@ typedef struct _qq_add_buddy_request {
/* send packet to remove a buddy from my buddy list */
static void _qq_send_packet_remove_buddy(PurpleConnection *gc, guint32 uid)
{
- qq_data *qd = (qq_data *) gc->proto_data;
gchar uid_str[11];
g_return_if_fail(uid > 0);
g_snprintf(uid_str, sizeof(uid_str), "%d", uid);
- qq_send_cmd(qd, QQ_CMD_DEL_BUDDY, (guint8 *) uid_str, strlen(uid_str));
+ qq_send_cmd(gc, QQ_CMD_DEL_BUDDY, (guint8 *) uid_str, strlen(uid_str));
}
/* try to remove myself from someone's buddy list */
static void _qq_send_packet_remove_self_from(PurpleConnection *gc, guint32 uid)
{
- qq_data *qd = (qq_data *) gc->proto_data;
guint8 raw_data[16] = {0};
gint bytes = 0;
@@ -80,7 +78,7 @@ static void _qq_send_packet_remove_self_from(PurpleConnection *gc, guint32 uid)
bytes += qq_put32(raw_data + bytes, uid);
- qq_send_cmd(qd, QQ_CMD_REMOVE_SELF, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_REMOVE_SELF, raw_data, bytes);
}
/* try to add a buddy without authentication */
@@ -94,7 +92,7 @@ static void _qq_send_packet_add_buddy(PurpleConnection *gc, guint32 uid)
/* we need to send the ascii code of this uid to qq server */
g_snprintf(uid_str, sizeof(uid_str), "%d", uid);
- qq_send_cmd(qd, QQ_CMD_ADD_BUDDY_WO_AUTH, (guint8 *) uid_str, strlen(uid_str));
+ qq_send_cmd(gc, QQ_CMD_ADD_BUDDY_WO_AUTH, (guint8 *) uid_str, strlen(uid_str));
/* must be set after sending packet to get the correct send_seq */
req = g_new0(qq_add_buddy_request, 1);
@@ -106,7 +104,6 @@ static void _qq_send_packet_add_buddy(PurpleConnection *gc, guint32 uid)
/* this buddy needs authentication, text conversion is done at lowest level */
static void _qq_send_packet_buddy_auth(PurpleConnection *gc, guint32 uid, const gchar response, const gchar *text)
{
- qq_data *qd = (qq_data *) gc->proto_data;
gchar *text_qq, uid_str[11];
guint8 bar, *raw_data;
gint bytes = 0;
@@ -128,7 +125,7 @@ static void _qq_send_packet_buddy_auth(PurpleConnection *gc, guint32 uid, const
g_free(text_qq);
}
- qq_send_cmd(qd, QQ_CMD_BUDDY_AUTH, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_BUDDY_AUTH, raw_data, bytes);
}
static void _qq_send_packet_add_buddy_auth_with_gc_and_uid(gc_and_uid *g, const gchar *text)
@@ -204,11 +201,11 @@ void qq_reject_add_request_with_gc_and_uid(gc_and_uid *g)
g2->uid = uid;
msg1 = g_strdup_printf(_("You rejected %d's request"), uid);
- msg2 = g_strdup(_("Input your reason:"));
+ msg2 = g_strdup(_("Message:"));
nombre = uid_to_purple_name(uid);
purple_request_input(gc, _("Reject request"), msg1, msg2,
- _("Sorry, you are not my type..."), TRUE, FALSE,
+ _("Sorry, you are not my style..."), TRUE, FALSE,
NULL, _("Reject"), G_CALLBACK(_qq_reject_add_request_real), _("Cancel"), NULL,
purple_connection_get_account(gc), nombre, NULL,
g2);
@@ -261,7 +258,7 @@ void qq_process_add_buddy_auth_reply(guint8 *data, gint data_len, PurpleConnecti
qd = (qq_data *) gc->proto_data;
if (data[0] != QQ_ADD_BUDDY_AUTH_REPLY_OK) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add buddy with auth request failed\n");
+ purple_debug_warning("QQ", "Add buddy with auth request failed\n");
if (NULL == (segments = split_data(data, data_len, "\x1f", 2))) {
return;
}
@@ -269,7 +266,7 @@ void qq_process_add_buddy_auth_reply(guint8 *data, gint data_len, PurpleConnecti
purple_notify_error(gc, NULL, _("Add buddy with auth request failed"), msg_utf8);
g_free(msg_utf8);
} else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Add buddy with auth request OK\n");
+ purple_debug_info("QQ", "Add buddy with auth request OK\n");
}
}
@@ -284,16 +281,17 @@ void qq_process_remove_buddy_reply(guint8 *data, gint data_len, PurpleConnection
if (data[0] != QQ_REMOVE_BUDDY_REPLY_OK) {
/* there is no reason return from server */
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Remove buddy fails\n");
+ purple_debug_warning("QQ", "Remove buddy fails\n");
+ purple_notify_info(gc, _("QQ Buddy"), _("Failed:"), _("Remove buddy"));
} else { /* if reply */
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Remove buddy OK\n");
+ purple_debug_info("QQ", "Remove buddy OK\n");
/* TODO: We don't really need to notify the user about this, do we? */
- purple_notify_info(gc, NULL, _("You have successfully removed a buddy"), NULL);
+ purple_notify_info(gc, _("QQ Buddy"), _("Successed:"), _("Remove buddy"));
}
}
/* process the server reply for my request to remove myself from a buddy */
-void qq_process_remove_self_reply(guint8 *data, gint data_len, PurpleConnection *gc)
+void qq_process_remove_self_reply(guint8 *data, gint data_len, PurpleConnection *gc)
{
qq_data *qd;
@@ -303,11 +301,12 @@ void qq_process_remove_self_reply(guint8 *data, gint data_len, PurpleConnection
if (data[0] != QQ_REMOVE_SELF_REPLY_OK) {
/* there is no reason return from server */
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Remove self fails\n");
+ purple_debug_warning("QQ", "Remove self fails\n");
+ purple_notify_info(gc, _("QQ Buddy"), _("Failed:"), _("Remove from other's buddy list"));
} else { /* if reply */
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Remove self from a buddy OK\n");
+ purple_debug_info("QQ", "Remove from a buddy OK\n");
/* TODO: Does the user really need to be notified about this? */
- purple_notify_info(gc, NULL, _("You have successfully removed yourself from your friend's buddy list"), NULL);
+ purple_notify_info(gc, _("QQ Buddy"), _("Successed:"), _("Remove from other's buddy list"));
}
}
@@ -340,25 +339,25 @@ void qq_process_add_buddy_reply(guint8 *data, gint data_len, guint16 seq, Purple
}
if (for_uid == 0) { /* we have no record for this */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "We have no record for add buddy reply [%d], discard\n", seq);
+ purple_debug_error("QQ", "We have no record for add buddy reply [%d], discard\n", seq);
return;
} else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Add buddy reply [%d] is for id [%d]\n", seq, for_uid);
+ purple_debug_info("QQ", "Add buddy reply [%d] is for id [%d]\n", seq, for_uid);
}
if (NULL == (segments = split_data(data, data_len, "\x1f", 2)))
return;
-
+
uid = segments[0];
reply = segments[1];
if (strtol(uid, NULL, 10) != qd->uid) { /* should not happen */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Add buddy reply is to [%s], not me!", uid);
+ purple_debug_error("QQ", "Add buddy reply is to [%s], not me!", uid);
g_strfreev(segments);
return;
}
if (strtol(reply, NULL, 10) > 0) { /* need auth */
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add buddy attempt fails, need authentication\n");
+ purple_debug_warning("QQ", "Add buddy attempt fails, need authentication\n");
nombre = uid_to_purple_name(for_uid);
b = purple_find_buddy(gc->account, nombre);
if (b != NULL)
@@ -366,7 +365,7 @@ void qq_process_add_buddy_reply(guint8 *data, gint data_len, guint16 seq, Purple
g = g_new0(gc_and_uid, 1);
g->gc = gc;
g->uid = for_uid;
- msg = g_strdup_printf(_("User %d needs authentication"), for_uid);
+ msg = g_strdup_printf(_("%d needs authentication"), for_uid);
purple_request_input(gc, NULL, msg,
_("Input request here"), /* TODO: Awkward string to fix post string freeze - standardize auth dialogues? -evands */
_("Would you be my friend?"),
@@ -380,8 +379,8 @@ void qq_process_add_buddy_reply(guint8 *data, gint data_len, guint16 seq, Purple
g_free(nombre);
} else { /* add OK */
qq_add_buddy_by_recv_packet(gc, for_uid, TRUE, TRUE);
- msg = g_strdup_printf(_("You have added %d to buddy list"), for_uid);
- purple_notify_info(gc, NULL, msg, NULL);
+ msg = g_strdup_printf(_("Add into %d's buddy list"), for_uid);
+ purple_notify_info(gc, _("QQ Buddy"), _("Successed:"), msg);
g_free(msg);
}
g_strfreev(segments);
@@ -397,7 +396,7 @@ PurpleGroup *qq_get_purple_group(const gchar *group_name)
if (g == NULL) {
g = purple_group_new(group_name);
purple_blist_add_group(g, NULL);
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add new group: %s\n", group_name);
+ purple_debug_warning("QQ", "Add new group: %s\n", group_name);
}
return g;
@@ -440,11 +439,11 @@ PurpleBuddy *qq_add_buddy_by_recv_packet(PurpleConnection *gc, guint32 uid, gboo
b->proto_data = q_bud;
qd->buddies = g_list_append(qd->buddies, q_bud);
qq_send_packet_get_info(gc, q_bud->uid, FALSE);
- qq_send_packet_get_buddies_online(gc, 0);
+ qq_request_get_buddies_online(gc, 0, 0);
}
purple_blist_add_buddy(b, NULL, g, NULL);
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Add new buddy: [%s]\n", name);
+ purple_debug_warning("QQ", "Add new buddy: [%s]\n", name);
g_free(name);
g_free(group_name);
@@ -454,8 +453,8 @@ PurpleBuddy *qq_add_buddy_by_recv_packet(PurpleConnection *gc, guint32 uid, gboo
/* add a buddy and send packet to QQ server
* note that when purple load local cached buddy list into its blist
- * it also calls this funtion, so we have to
- * define qd->logged_in=TRUE AFTER serv_finish_login(gc) */
+ * it also calls this funtion, so we have to
+ * define qd->is_login=TRUE AFTER serv_finish_login(gc) */
void qq_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
{
qq_data *qd;
@@ -463,7 +462,7 @@ void qq_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
PurpleBuddy *b;
qd = (qq_data *) gc->proto_data;
- if (!qd->logged_in)
+ if (!qd->is_login)
return; /* IMPORTANT ! */
uid = purple_name_to_uid(buddy->name);
@@ -474,8 +473,8 @@ void qq_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
if (b != NULL)
purple_blist_remove_buddy(b);
purple_notify_error(gc, NULL,
- _("QQid Error"),
- _("Invalid QQid"));
+ _("QQ Number Error"),
+ _("Invalid QQ Number"));
}
}
@@ -490,7 +489,7 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *grou
qd = (qq_data *) gc->proto_data;
uid = purple_name_to_uid(buddy->name);
- if (!qd->logged_in)
+ if (!qd->is_login)
return;
if (uid > 0)
@@ -502,7 +501,7 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *grou
if (q_bud != NULL)
qd->buddies = g_list_remove(qd->buddies, q_bud);
else
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "We have no qq_buddy record for %s\n", buddy->name);
+ purple_debug_warning("QQ", "We have no qq_buddy record for %s\n", buddy->name);
/* remove buddy on blist, this does not trigger qq_remove_buddy again
* do this only if the request comes from block request,
* otherwise purple segmentation fault */
@@ -514,41 +513,45 @@ void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *grou
/* free add buddy request queue */
void qq_add_buddy_request_free(qq_data *qd)
{
- gint i;
+ gint count;
qq_add_buddy_request *p;
- i = 0;
- while (qd->add_buddy_request) {
+ count = 0;
+ while (qd->add_buddy_request != NULL) {
p = (qq_add_buddy_request *) (qd->add_buddy_request->data);
qd->add_buddy_request = g_list_remove(qd->add_buddy_request, p);
g_free(p);
- i++;
+ count++;
+ }
+ if (count > 0) {
+ purple_debug_info("QQ", "%d add buddy requests are freed!\n", count);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d add buddy requests are freed!\n", i);
}
/* free up all qq_buddy */
void qq_buddies_list_free(PurpleAccount *account, qq_data *qd)
{
- gint i;
+ gint count;
qq_buddy *p;
gchar *name;
PurpleBuddy *b;
- i = 0;
+ count = 0;
while (qd->buddies) {
p = (qq_buddy *) (qd->buddies->data);
qd->buddies = g_list_remove(qd->buddies, p);
name = uid_to_purple_name(p->uid);
- b = purple_find_buddy(account, name);
- if(b != NULL)
+ b = purple_find_buddy(account, name);
+ if(b != NULL)
b->proto_data = NULL;
else
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "qq_buddy %s not found in purple proto_data\n", name);
+ purple_debug_info("QQ", "qq_buddy %s not found in purple proto_data\n", name);
g_free(name);
g_free(p);
- i++;
+ count++;
+ }
+ if (count > 0) {
+ purple_debug_info("QQ", "%d qq_buddy structures are freed!\n", count);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d qq_buddy structures are freed!\n", i);
}
diff --git a/libpurple/protocols/qq/char_conv.c b/libpurple/protocols/qq/char_conv.c
index 4c0d0a451f..c29a273a5e 100644
--- a/libpurple/protocols/qq/char_conv.c
+++ b/libpurple/protocols/qq/char_conv.c
@@ -98,7 +98,7 @@ static gboolean _check_underline(gchar font_attr)
}
/* convert a string from from_charset to to_charset, using g_convert */
-static gchar *_my_convert(const gchar *str, gssize len, const gchar *to_charset, const gchar *from_charset)
+static gchar *_my_convert(const gchar *str, gssize len, const gchar *to_charset, const gchar *from_charset)
{
GError *error = NULL;
gchar *ret;
@@ -111,9 +111,9 @@ static gchar *_my_convert(const gchar *str, gssize len, const gchar *to_charset,
if (error == NULL) {
return ret; /* conversion is OK */
}
-
+
/* conversion error */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_CONVERT", "%s\n", error->message);
+ purple_debug_error("QQ_CONVERT", "%s\n", error->message);
qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ_CONVERT",
(guint8 *) str, (len == -1) ? strlen(str) : len,
@@ -127,8 +127,8 @@ static gchar *_my_convert(const gchar *str, gssize len, const gchar *to_charset,
* take the input as a pascal string and return a converted c-string in UTF-8
* returns the number of bytes read, return -1 if fatal error
* the converted UTF-8 will be saved in ret
- */
-gint convert_as_pascal_string(guint8 *data, gchar **ret, const gchar *from_charset)
+ */
+gint convert_as_pascal_string(guint8 *data, gchar **ret, const gchar *from_charset)
{
guint8 len;
@@ -182,7 +182,7 @@ gchar *qq_encode_to_purple(guint8 *data, gint len, const gchar *msg)
g_string_append_printf(encoded,
"<font color=\"%s\"><font face=\"%s\"><font size=\"%d\">",
color_code, font_name, font_size / 3);
- purple_debug(PURPLE_DEBUG_INFO, "QQ_MESG",
+ purple_debug_info("QQ_MESG",
"recv <font color=\"%s\"><font face=\"%s\"><font size=\"%d\">\n",
color_code, font_name, font_size / 3);
g_string_append(encoded, msg_utf8);
@@ -222,7 +222,7 @@ gchar *qq_to_utf8(const gchar *str, const gchar *from_charset)
return _my_convert(str, -1, UTF8, from_charset);
}
-/* QQ uses binary code for smiley, while purple uses strings.
+/* QQ uses binary code for smiley, while purple uses strings.
* There is a mapping relation between these two. */
gchar *qq_smiley_to_purple(gchar *text)
{
@@ -286,7 +286,8 @@ void qq_filter_str(gchar *str) {
}
for (temp = str; *temp != 0; temp++) {
- if (*temp == '\r' || *temp == '\n') *temp = ' ';
+ /*if (*temp == '\r' || *temp == '\n') *temp = ' ';*/
+ if (*temp > 0 && *temp < 0x20) *temp = ' ';
}
g_strstrip(str);
}
diff --git a/libpurple/protocols/qq/file_trans.c b/libpurple/protocols/qq/file_trans.c
index 1a08e25522..5f0993ca5c 100644
--- a/libpurple/protocols/qq/file_trans.c
+++ b/libpurple/protocols/qq/file_trans.c
@@ -22,10 +22,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*/
-#ifdef _WIN32
-#define random rand
-#endif
-
#include "internal.h"
#include "debug.h"
@@ -62,7 +58,7 @@ static guint32 _gen_file_key(void)
{
guint8 seed;
- seed = random();
+ seed = rand() & 0xFF;
return _get_file_key(seed);
}
@@ -261,7 +257,7 @@ static gint _qq_send_file(PurpleConnection *gc, guint8 *data, gint len, guint16
if (bytes == len + 12) {
_qq_xfer_write(raw_data, bytes, qd->xfer);
} else
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "send_file: want %d but got %d\n", len + 12, bytes);
+ purple_debug_info("QQ", "send_file: want %d but got %d\n", len + 12, bytes);
return bytes;
}
@@ -323,13 +319,13 @@ void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, guint32
bytes_expected = 61;
break;
default:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "qq_send_file_ctl_packet: Unknown packet type[%d]\n",
+ purple_debug_info("QQ", "qq_send_file_ctl_packet: Unknown packet type[%d]\n",
packet_type);
bytes_expected = 0;
}
if (bytes != bytes_expected) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "qq_send_file_ctl_packet: Expected to get %d bytes, but get %d",
+ purple_debug_error("QQ", "qq_send_file_ctl_packet: Expected to get %d bytes, but get %d",
bytes_expected, bytes);
return;
}
@@ -346,24 +342,24 @@ void qq_send_file_ctl_packet(PurpleConnection *gc, guint16 packet_type, guint32
guint8 *buf;
int buflen;
hex_dump = hex_dump_to_str(encrypted_data, encrypted_len);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "encrypted packet: \n%s", hex_dump);
+ purple_debug_info("QQ", "encrypted packet: \n%s", hex_dump);
g_free(hex_dump);
buf = g_newa(guint8, MAX_PACKET_SIZE);
buflen = encrypted_len;
if (qq_crypt(DECRYPT, encrypted_data, encrypted_len, info->file_session_key, buf, &buflen)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "decrypt success\n");
+ purple_debug_info("QQ", "decrypt success\n");
if (buflen == bytes && memcmp(raw_data, buf, buflen) == 0)
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "checksum ok\n");
+ purple_debug_info("QQ", "checksum ok\n");
hex_dump = hex_dump_to_str(buf, buflen);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "decrypted packet: \n%s", hex_dump);
+ purple_debug_info("QQ", "decrypted packet: \n%s", hex_dump);
g_free(hex_dump);
} else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "decrypt fail\n");
+ purple_debug_info("QQ", "decrypt fail\n");
}
#endif
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "<== send %s packet\n", qq_get_file_cmd_desc(packet_type));
+ purple_debug_info("QQ", "<== send %s packet\n", qq_get_file_cmd_desc(packet_type));
_qq_send_file(gc, encrypted_data, encrypted_len, QQ_FILE_CONTROL_PACKET_TAG, info->to_uid);
}
@@ -410,7 +406,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
info->fragment_num = (filesize - 1) / QQ_FILE_FRAGMENT_MAXLEN + 1;
info->fragment_len = QQ_FILE_FRAGMENT_MAXLEN;
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"start transfering data, %d fragments with %d length each\n",
info->fragment_num, info->fragment_len);
/* Unknown */
@@ -435,7 +431,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
filename_len);
break;
case QQ_FILE_DATA_INFO:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"sending %dth fragment with length %d, offset %d\n",
fragment_index, len, (fragment_index-1)*fragment_size);
/* bytes += qq_put16(raw_data + bytes, ++(qd->send_seq)); */
@@ -448,7 +444,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
bytes += qq_putdata(raw_data + bytes, data, len);
break;
case QQ_FILE_EOF:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "end of sending data\n");
+ purple_debug_info("QQ", "end of sending data\n");
/* bytes += qq_put16(raw_data + bytes, info->fragment_num + 1); */
bytes += qq_put16(raw_data + bytes, info->fragment_num);
bytes += qq_put8(raw_data + bytes, sub_type);
@@ -474,7 +470,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
break;
}
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "<== send %s packet\n", qq_get_file_cmd_desc(packet_type));
+ purple_debug_info("QQ", "<== send %s packet\n", qq_get_file_cmd_desc(packet_type));
_qq_send_file(gc, raw_data, bytes, QQ_FILE_DATA_PACKET_TAG, info->to_uid);
}
@@ -516,7 +512,7 @@ static void _qq_process_recv_file_ctl_packet(PurpleConnection *gc, guint8 *data,
decrypted_data = g_newa(guint8, data_len);
decrypted_len = qq_decrypt(decrypted_data, data, data_len, qd->session_md5);
if ( decrypted_len <= 0 ) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Error decrypt rcv file ctrl packet\n");
+ purple_debug_error("QQ", "Error decrypt rcv file ctrl packet\n");
return;
}
@@ -526,7 +522,7 @@ static void _qq_process_recv_file_ctl_packet(PurpleConnection *gc, guint8 *data,
decryped_bytes += qq_get16(&seq, decrypted_data + decryped_bytes);
decryped_bytes += 4+1+1+19+1; /* skip something */
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "==> [%d] receive %s packet\n", seq, qq_get_file_cmd_desc(packet_type));
+ purple_debug_info("QQ", "==> [%d] receive %s packet\n", seq, qq_get_file_cmd_desc(packet_type));
qq_hex_dump(PURPLE_DEBUG_INFO, "QQ",
decrypted_data, decrypted_len,
"decrypted control packet received:");
@@ -566,7 +562,7 @@ static void _qq_process_recv_file_ctl_packet(PurpleConnection *gc, guint8 *data,
qq_send_file_ctl_packet(gc, QQ_FILE_CMD_SENDER_SAY_HELLO, fh.sender_uid, 0);
break;
default:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "unprocess file command %d\n", packet_type);
+ purple_debug_info("QQ", "unprocess file command %d\n", packet_type);
}
}
@@ -577,7 +573,7 @@ static void _qq_recv_file_progess(PurpleConnection *gc, guint8 *buffer, guint16
ft_info *info = (ft_info *) xfer->data;
guint32 mask;
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"receiving %dth fragment with length %d, slide window status %o, max_fragment_index %d\n",
index, len, info->window, info->max_fragment_index);
if (info->window == 0 && info->max_fragment_index == 0) {
@@ -585,11 +581,11 @@ static void _qq_recv_file_progess(PurpleConnection *gc, guint8 *buffer, guint16
purple_xfer_cancel_local(xfer);
return;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "object file opened for writing\n");
+ purple_debug_info("QQ", "object file opened for writing\n");
}
mask = 0x1 << (index % sizeof(info->window));
if (index < info->max_fragment_index || (info->window & mask)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "duplicate %dth fragment, drop it!\n", index+1);
+ purple_debug_info("QQ", "duplicate %dth fragment, drop it!\n", index+1);
return;
}
@@ -609,7 +605,7 @@ static void _qq_recv_file_progess(PurpleConnection *gc, guint8 *buffer, guint16
if (mask & 0x8000) mask = 0x0001;
else mask = mask << 1;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "procceed %dth fragment, slide window status %o, max_fragment_index %d\n",
+ purple_debug_info("QQ", "procceed %dth fragment, slide window status %o, max_fragment_index %d\n",
index, info->window, info->max_fragment_index);
}
@@ -654,12 +650,12 @@ static void _qq_update_send_progess(PurpleConnection *gc, guint32 fragment_index
PurpleXfer *xfer = qd->xfer;
ft_info *info = (ft_info *) xfer->data;
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"receiving %dth fragment ack, slide window status %o, max_fragment_index %d\n",
fragment_index, info->window, info->max_fragment_index);
if (fragment_index < info->max_fragment_index ||
fragment_index >= info->max_fragment_index + sizeof(info->window)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "duplicate %dth fragment, drop it!\n", fragment_index+1);
+ purple_debug_info("QQ", "duplicate %dth fragment, drop it!\n", fragment_index+1);
return;
}
mask = 0x1 << (fragment_index % sizeof(info->window));
@@ -696,7 +692,7 @@ static void _qq_update_send_progess(PurpleConnection *gc, guint32 fragment_index
else mask = mask << 1;
}
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"procceed %dth fragment ack, slide window status %o, max_fragment_index %d\n",
fragment_index, info->window, info->max_fragment_index);
}
@@ -737,7 +733,7 @@ static void _qq_process_recv_file_data(PurpleConnection *gc, guint8 *data, gint
info->max_fragment_index = 0;
info->window = 0;
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"start receiving data, %d fragments with %d length each\n",
info->fragment_num, info->fragment_len);
_qq_send_file_data_packet(gc, QQ_FILE_CMD_FILE_OP_ACK, sub_type,
@@ -747,7 +743,7 @@ static void _qq_process_recv_file_data(PurpleConnection *gc, guint8 *data, gint
bytes += qq_get32(&fragment_index, data + bytes);
bytes += qq_get32(&fragment_offset, data + bytes);
bytes += qq_get16(&fragment_len, data + bytes);
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"received %dth fragment with length %d, offset %d\n",
fragment_index, fragment_len, fragment_offset);
@@ -756,7 +752,7 @@ static void _qq_process_recv_file_data(PurpleConnection *gc, guint8 *data, gint
_qq_recv_file_progess(gc, data + bytes, fragment_len, fragment_index, fragment_offset);
break;
case QQ_FILE_EOF:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "end of receiving\n");
+ purple_debug_info("QQ", "end of receiving\n");
_qq_send_file_data_packet(gc, QQ_FILE_CMD_FILE_OP_ACK, sub_type,
0, 0, NULL, 0);
break;
@@ -795,11 +791,11 @@ static void _qq_process_recv_file_data(PurpleConnection *gc, guint8 *data, gint
purple_xfer_end(qd->xfer);
break;
case QQ_FILE_BASIC_INFO:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "here\n");
+ purple_debug_info("QQ", "here\n");
_qq_send_file_data_packet(gc, QQ_FILE_DATA_INFO, 0, 0, 0, NULL, 0);
break;
default:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "_qq_process_recv_file_data: unknown packet type [%d]\n",
+ purple_debug_info("QQ", "_qq_process_recv_file_data: unknown packet type [%d]\n",
packet_type);
break;
}
@@ -824,6 +820,6 @@ void qq_process_recv_file(PurpleConnection *gc, guint8 *data, gint len)
_qq_process_recv_file_data(gc, data + bytes, len - bytes);
break;
default:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "unknown packet tag");
+ purple_debug_info("QQ", "unknown packet tag");
}
}
diff --git a/libpurple/protocols/qq/group.c b/libpurple/protocols/qq/group.c
index bf5d9b0c09..206b86c236 100644
--- a/libpurple/protocols/qq/group.c
+++ b/libpurple/protocols/qq/group.c
@@ -64,9 +64,9 @@ GList *qq_chat_info(PurpleConnection *gc)
pce = g_new0(struct proto_chat_entry, 1);
pce->label = _("ID: ");
- pce->identifier = QQ_GROUP_KEY_EXTERNAL_ID;
+ pce->identifier = QQ_ROOM_KEY_EXTERNAL_ID;
m = g_list_append(m, pce);
-
+
return m;
}
@@ -77,7 +77,7 @@ GHashTable *qq_chat_info_defaults(PurpleConnection *gc, const gchar *chat_name)
defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
if (chat_name != NULL)
- g_hash_table_insert(defaults, QQ_GROUP_KEY_EXTERNAL_ID, g_strdup(chat_name));
+ g_hash_table_insert(defaults, QQ_ROOM_KEY_EXTERNAL_ID, g_strdup(chat_name));
return defaults;
}
@@ -96,33 +96,33 @@ PurpleRoomlist *qq_roomlist_get_list(PurpleConnection *gc)
rl = purple_roomlist_new(purple_connection_get_account(gc));
qd->roomlist = rl;
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_GROUP_KEY_EXTERNAL_ID, FALSE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Group ID"), QQ_ROOM_KEY_EXTERNAL_ID, FALSE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Creator"), QQ_GROUP_KEY_CREATOR_UID, FALSE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Creator"), QQ_ROOM_KEY_CREATOR_UID, FALSE);
fields = g_list_append(fields, f);
f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING,
- _("Group Description"), QQ_GROUP_KEY_GROUP_DESC_UTF8, FALSE);
+ _("Group Description"), QQ_ROOM_KEY_DESC_UTF8, FALSE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_INTERNAL_ID, TRUE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_ROOM_KEY_INTERNAL_ID, TRUE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_TYPE, TRUE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_ROOM_KEY_TYPE, TRUE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Auth"), QQ_GROUP_KEY_AUTH_TYPE, TRUE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Auth"), QQ_ROOM_KEY_AUTH_TYPE, TRUE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_CATEGORY, TRUE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_ROOM_KEY_CATEGORY, TRUE);
fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_GROUP_KEY_GROUP_NAME_UTF8, TRUE);
+ f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, "", QQ_ROOM_KEY_TITLE_UTF8, TRUE);
fields = g_list_append(fields, f);
purple_roomlist_set_fields(rl, fields);
purple_roomlist_set_in_progress(qd->roomlist, TRUE);
purple_request_input(gc, _("QQ Qun"),
- _("Please enter external group ID"),
- _("You can only search for permanent QQ groups\n"),
- NULL, FALSE, FALSE, NULL,
- _("Search"), G_CALLBACK(_qq_group_search_callback),
- _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback),
+ _("Please enter Qun number"),
+ _("You can only search for permanent Qun\n"),
+ NULL, FALSE, FALSE, NULL,
+ _("Search"), G_CALLBACK(_qq_group_search_callback),
+ _("Cancel"), G_CALLBACK(_qq_group_search_cancel_callback),
purple_connection_get_account(gc), NULL, NULL,
gc);
@@ -157,7 +157,7 @@ void qq_group_init(PurpleConnection *gc)
purple_group = purple_find_group(PURPLE_GROUP_QQ_QUN);
if (purple_group == NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "We have no QQ Qun\n");
+ purple_debug_info("QQ", "We have no QQ Qun\n");
return;
}
@@ -170,7 +170,7 @@ void qq_group_init(PurpleConnection *gc)
chat = (PurpleChat *) node;
if (account != chat->account) /* not qq account*/
continue;
- group = qq_group_from_hashtable(gc, chat->components);
+ group = qq_room_create_by_hashtable(gc, chat->components);
if (group == NULL)
continue;
@@ -178,8 +178,7 @@ void qq_group_init(PurpleConnection *gc)
continue;
count++;
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Load %d QQ Qun configurations\n", count);
+ purple_debug_info("QQ", "Load %d QQ Qun configurations\n", count);
}
diff --git a/libpurple/protocols/qq/group.h b/libpurple/protocols/qq/group.h
index 5fe7987118..f36aed7af1 100644
--- a/libpurple/protocols/qq/group.h
+++ b/libpurple/protocols/qq/group.h
@@ -34,27 +34,29 @@
#define PURPLE_GROUP_QQ_QUN "QQ 群"
typedef enum {
- QQ_GROUP_MEMBER_STATUS_NOT_MEMBER = 0x00, /* default 0x00 means not member */
- QQ_GROUP_MEMBER_STATUS_IS_MEMBER,
- QQ_GROUP_MEMBER_STATUS_APPLYING,
- QQ_GROUP_MEMBER_STATUS_IS_ADMIN,
-} qq_group_member_status;
+ QQ_ROOM_ROLE_NO = 0x00, /* default 0x00 means not member */
+ QQ_ROOM_ROLE_YES,
+ QQ_ROOM_ROLE_REQUESTING,
+ QQ_ROOM_ROLE_ADMIN,
+} qq_room_role;
typedef struct _qq_group {
/* all these will be saved when we exit Purple */
- qq_group_member_status my_status; /* my status for this group */
- gchar *my_status_desc; /* my status description */
+ qq_room_role my_role; /* my role for this room */
+ gchar *my_role_desc; /* my role description */
guint32 id;
guint32 ext_id;
guint8 type8; /* permanent or temporory */
guint32 creator_uid;
- guint32 group_category;
+ guint32 category;
guint8 auth_type;
- gchar *group_name_utf8;
- gchar *group_desc_utf8;
+ gchar *title_utf8;
+ gchar *desc_utf8;
/* all these will be loaded from the network */
gchar *notice_utf8; /* group notice by admin */
- GList *members;
+ GList *members;
+
+ gboolean is_got_info;
} qq_group;
GList *qq_chat_info(PurpleConnection *gc);
diff --git a/libpurple/protocols/qq/group_conv.c b/libpurple/protocols/qq/group_conv.c
index f49bd32f00..59e204a751 100644
--- a/libpurple/protocols/qq/group_conv.c
+++ b/libpurple/protocols/qq/group_conv.c
@@ -25,25 +25,40 @@
#include <glib.h>
#include "qq.h"
-#include "conversation.h"
-
#include "group_conv.h"
#include "buddy_list.h"
+#include "header_info.h"
+#include "qq_network.h"
+#include "qq_process.h"
#include "utils.h"
/* show group conversation window */
-void qq_group_conv_show_window(PurpleConnection *gc, qq_group *group)
+PurpleConversation *qq_room_conv_create(PurpleConnection *gc, qq_group *group)
{
PurpleConversation *conv;
qq_data *qd;
- g_return_if_fail(group != NULL);
+ g_return_val_if_fail(group != NULL, NULL);
qd = (qq_data *) gc->proto_data;
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
- group->group_name_utf8, purple_connection_get_account(gc));
- if (conv == NULL) /* show only one window per group */
- serv_got_joined_chat(gc, qd->channel++, group->group_name_utf8);
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
+ group->title_utf8, purple_connection_get_account(gc));
+ if (conv != NULL) {
+ /* show only one conversation per group */
+ return conv;
+ }
+
+ serv_got_joined_chat(gc, qd->channel++, group->title_utf8);
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->title_utf8, purple_connection_get_account(gc));
+ if (conv != NULL) {
+ purple_conv_chat_set_topic(PURPLE_CONV_CHAT(conv), NULL, group->notice_utf8);
+ if (group->is_got_info)
+ qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, group->id);
+ else
+ qq_update_room(gc, 0, group->id);
+ return conv;
+ }
+ return NULL;
}
/* refresh online member in group conversation window */
@@ -59,7 +74,7 @@ void qq_group_conv_refresh_online_member(PurpleConnection *gc, qq_group *group)
names = NULL;
flags = NULL;
conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
- group->group_name_utf8, purple_connection_get_account(gc));
+ group->title_utf8, purple_connection_get_account(gc));
if (conv != NULL && group->members != NULL) {
list = group->members;
while (list != NULL) {
diff --git a/libpurple/protocols/qq/group_conv.h b/libpurple/protocols/qq/group_conv.h
index ef9cfe030e..4824ad454c 100644
--- a/libpurple/protocols/qq/group_conv.h
+++ b/libpurple/protocols/qq/group_conv.h
@@ -26,9 +26,10 @@
#define _QQ_GROUP_CONV_H_
#include "connection.h"
+#include "conversation.h"
#include "group.h"
-void qq_group_conv_show_window(PurpleConnection *gc, qq_group *group);
+PurpleConversation *qq_room_conv_create(PurpleConnection *gc, qq_group *group);
void qq_group_conv_refresh_online_member(PurpleConnection *gc, qq_group *group);
#endif
diff --git a/libpurple/protocols/qq/group_find.c b/libpurple/protocols/qq/group_find.c
index 6ec1e92dcb..0e26a3d18d 100644
--- a/libpurple/protocols/qq/group_find.c
+++ b/libpurple/protocols/qq/group_find.c
@@ -110,10 +110,10 @@ qq_group *qq_group_find_by_channel(PurpleConnection *gc, gint channel)
group = NULL;
while (list != NULL) {
group = (qq_group *) list->data;
- if (group->group_name_utf8 == NULL) {
+ if (group->title_utf8 == NULL) {
continue;
}
- if (!g_ascii_strcasecmp(purple_conversation_get_name(conv), group->group_name_utf8))
+ if (!g_ascii_strcasecmp(purple_conversation_get_name(conv), group->title_utf8))
break;
list = list->next;
}
@@ -167,3 +167,83 @@ qq_group *qq_room_search_id(PurpleConnection *gc, guint32 room_id)
return NULL;
}
+
+qq_group *qq_room_get_next(PurpleConnection *gc, guint32 room_id)
+{
+ GList *list;
+ qq_group *group;
+ qq_data *qd;
+ gboolean is_find = FALSE;
+
+ qd = (qq_data *) gc->proto_data;
+
+ if (qd->groups == NULL) {
+ return NULL;
+ }
+
+ if (room_id <= 0) {
+ return (qq_group *) qd->groups->data;
+ }
+
+ list = qd->groups;
+ while (list != NULL) {
+ group = (qq_group *) list->data;
+ list = list->next;
+ if (group->id == room_id) {
+ is_find = TRUE;
+ break;
+ }
+ }
+
+ if ( !is_find || list == NULL) {
+ return NULL;
+ }
+
+ return (qq_group *)list->data;
+}
+
+qq_group *qq_room_get_next_conv(PurpleConnection *gc, guint32 room_id)
+{
+ GList *list;
+ qq_group *group;
+ qq_data *qd;
+ gboolean is_find;
+
+ qd = (qq_data *) gc->proto_data;
+
+ list = qd->groups;
+ if (room_id > 0) {
+ /* search next room */
+ is_find = FALSE;
+ while (list != NULL) {
+ group = (qq_group *) list->data;
+ list = list->next;
+ if (group->id == room_id) {
+ is_find = TRUE;
+ break;
+ }
+ }
+ if ( !is_find || list == NULL) {
+ return NULL;
+ }
+ }
+
+ is_find = FALSE;
+ while (list != NULL) {
+ group = (qq_group *) list->data;
+ if (group->my_role == QQ_ROOM_ROLE_YES || group->my_role == QQ_ROOM_ROLE_ADMIN) {
+ if (NULL != purple_find_conversation_with_account(
+ PURPLE_CONV_TYPE_CHAT,group->title_utf8, purple_connection_get_account(gc))) {
+ /* In convseration*/
+ is_find = TRUE;
+ break;
+ }
+ }
+ list = list->next;
+ }
+
+ if ( !is_find) {
+ return NULL;
+ }
+ return group;
+}
diff --git a/libpurple/protocols/qq/group_find.h b/libpurple/protocols/qq/group_find.h
index 45e0b15657..47b3b35051 100644
--- a/libpurple/protocols/qq/group_find.h
+++ b/libpurple/protocols/qq/group_find.h
@@ -32,10 +32,12 @@
qq_buddy *qq_group_find_member_by_uid(qq_group *group, guint32 uid);
void qq_group_remove_member_by_uid(qq_group *group, guint32 uid);
qq_buddy *qq_group_find_or_add_member(PurpleConnection *gc, qq_group *group, guint32 member_uid);
-gboolean qq_group_find_id_by_seq(PurpleConnection *gc, guint16 seq, guint32 *id);
qq_group *qq_group_find_by_channel(PurpleConnection *gc, gint channel);
qq_group *qq_room_search_ext_id(PurpleConnection *gc, guint32 ext_id);
qq_group *qq_room_search_id(PurpleConnection *gc, guint32 room_id);
+qq_group *qq_room_get_next(PurpleConnection *gc, guint32 room_id);
+qq_group *qq_room_get_next_conv(PurpleConnection *gc, guint32 room_id);
+
#endif
diff --git a/libpurple/protocols/qq/group_free.c b/libpurple/protocols/qq/group_free.c
index eb76ad5ae4..7417697c05 100644
--- a/libpurple/protocols/qq/group_free.c
+++ b/libpurple/protocols/qq/group_free.c
@@ -54,9 +54,9 @@ void qq_group_free(qq_group *group)
{
g_return_if_fail(group != NULL);
qq_group_free_member(group);
- g_free(group->my_status_desc);
- g_free(group->group_name_utf8);
- g_free(group->group_desc_utf8);
+ g_free(group->my_role_desc);
+ g_free(group->title_utf8);
+ g_free(group->desc_utf8);
g_free(group->notice_utf8);
g_free(group);
}
@@ -64,16 +64,18 @@ void qq_group_free(qq_group *group)
void qq_group_free_all(qq_data *qd)
{
qq_group *group;
- gint i;
- g_return_if_fail(qd != NULL);
+ gint count;
- i = 0;
+ g_return_if_fail(qd != NULL);
+ count = 0;
while (qd->groups != NULL) {
- i++;
group = (qq_group *) qd->groups->data;
qd->groups = g_list_remove(qd->groups, group);
qq_group_free(group);
+ count++;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "%d groups are freed\n", i);
+ if (count > 0) {
+ purple_debug_info("QQ", "%d rooms are freed\n", count);
+ }
}
diff --git a/libpurple/protocols/qq/group_im.c b/libpurple/protocols/qq/group_im.c
index f4b9cff90f..5848b53cc8 100644
--- a/libpurple/protocols/qq/group_im.c
+++ b/libpurple/protocols/qq/group_im.c
@@ -37,10 +37,12 @@
#include "group_info.h"
#include "group_im.h"
#include "group_opt.h"
+#include "group_conv.h"
#include "im.h"
#include "header_info.h"
#include "packet_parse.h"
#include "qq_network.h"
+#include "qq_process.h"
#include "utils.h"
typedef struct _qq_recv_group_im {
@@ -85,12 +87,12 @@ void qq_send_packet_group_im(PurpleConnection *gc, qq_group *group, const gchar
if (bytes == data_len) /* create OK */
qq_send_room_cmd(gc, QQ_ROOM_CMD_SEND_MSG, group->id, raw_data, data_len);
else
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Fail creating group_im packet, expect %d bytes, build %d bytes\n", data_len, bytes);
}
/* this is the ACK */
-void qq_process_group_cmd_im(guint8 *data, gint len, PurpleConnection *gc)
+void qq_process_group_cmd_im(guint8 *data, gint len, PurpleConnection *gc)
{
/* return should be the internal group id
* but we have nothing to do with it */
@@ -98,7 +100,7 @@ void qq_process_group_cmd_im(guint8 *data, gint len, PurpleConnection *gc)
}
/* receive an application to join the group */
-void qq_process_recv_group_im_apply_join(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
+void qq_process_room_msg_apply_join(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
{
guint32 ext_id, user_uid;
guint8 type8;
@@ -119,8 +121,8 @@ void qq_process_recv_group_im_apply_join(guint8 *data, gint len, guint32 id, Pur
bytes += convert_as_pascal_string(data + bytes, &reason_utf8, QQ_CHARSET_DEFAULT);
- msg = g_strdup_printf(_("User %d requested to join group %d"), user_uid, ext_id);
- reason = g_strdup_printf(_("Reason: %s"), reason_utf8);
+ msg = g_strdup_printf(_("%d request to join Qun %d"), user_uid, ext_id);
+ reason = g_strdup_printf(_("Message: %s"), reason_utf8);
g = g_new0(group_member_opt, 1);
g->gc = gc;
@@ -149,7 +151,7 @@ void qq_process_recv_group_im_apply_join(guint8 *data, gint len, guint32 id, Pur
}
/* the request to join a group is rejected */
-void qq_process_recv_group_im_been_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
+void qq_process_room_msg_been_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
{
guint32 ext_id, admin_uid;
guint8 type8;
@@ -170,14 +172,14 @@ void qq_process_recv_group_im_been_rejected(guint8 *data, gint len, guint32 id,
bytes += convert_as_pascal_string(data + bytes, &reason_utf8, QQ_CHARSET_DEFAULT);
msg = g_strdup_printf
- (_("Your request to join group %d has been rejected by admin %d"), ext_id, admin_uid);
- reason = g_strdup_printf(_("Reason: %s"), reason_utf8);
+ (_("Failed to join Qun %d, operated by admin %d"), ext_id, admin_uid);
+ reason = g_strdup_printf(_("Message: %s"), reason_utf8);
purple_notify_warning(gc, _("QQ Qun Operation"), msg, reason);
group = qq_room_search_id(gc, id);
if (group != NULL) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_NO;
qq_group_refresh(gc, group);
}
@@ -187,7 +189,7 @@ void qq_process_recv_group_im_been_rejected(guint8 *data, gint len, guint32 id,
}
/* the request to join a group is approved */
-void qq_process_recv_group_im_been_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
+void qq_process_room_msg_been_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
{
guint32 ext_id, admin_uid;
guint8 type8;
@@ -208,13 +210,13 @@ void qq_process_recv_group_im_been_approved(guint8 *data, gint len, guint32 id,
bytes += convert_as_pascal_string(data + bytes, &reason_utf8, QQ_CHARSET_DEFAULT);
msg = g_strdup_printf
- (_("Your request to join group %d has been approved by admin %d"), ext_id, admin_uid);
+ (_("Successed to join Qun %d, operated by admin %d"), ext_id, admin_uid);
purple_notify_warning(gc, _("QQ Qun Operation"), msg, NULL);
group = qq_room_search_id(gc, id);
if (group != NULL) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_YES;
qq_group_refresh(gc, group);
}
@@ -223,7 +225,7 @@ void qq_process_recv_group_im_been_approved(guint8 *data, gint len, guint32 id,
}
/* process the packet when removed from a group */
-void qq_process_recv_group_im_been_removed(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
+void qq_process_room_msg_been_removed(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
{
guint32 ext_id, uid;
guint8 type8;
@@ -241,12 +243,12 @@ void qq_process_recv_group_im_been_removed(guint8 *data, gint len, guint32 id, P
g_return_if_fail(ext_id > 0 && uid > 0);
- msg = g_strdup_printf(_("You [%d] have left group \"%d\""), uid, ext_id);
- purple_notify_info(gc, _("QQ Qun Operation"), msg, NULL);
+ msg = g_strdup_printf(_("[%d] removed from Qun \"%d\""), uid, ext_id);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Notice:"), msg);
group = qq_room_search_id(gc, id);
if (group != NULL) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_NO;
qq_group_refresh(gc, group);
}
@@ -254,7 +256,7 @@ void qq_process_recv_group_im_been_removed(guint8 *data, gint len, guint32 id, P
}
/* process the packet when added to a group */
-void qq_process_recv_group_im_been_added(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
+void qq_process_room_msg_been_added(guint8 *data, gint len, guint32 id, PurpleConnection *gc)
{
guint32 ext_id, uid;
guint8 type8;
@@ -272,18 +274,18 @@ void qq_process_recv_group_im_been_added(guint8 *data, gint len, guint32 id, Pur
g_return_if_fail(ext_id > 0 && uid > 0);
- msg = g_strdup_printf(_("You [%d] have been added to group \"%d\""), uid, ext_id);
- purple_notify_info(gc, _("QQ Qun Operation"), msg, _("This group has been added to your buddy list"));
+ msg = g_strdup_printf(_("[%d] added to Qun \"%d\""), uid, ext_id);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Notice:"), msg);
group = qq_room_search_id(gc, id);
if (group != NULL) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_YES;
qq_group_refresh(gc, group);
} else { /* no such group, try to create a dummy first, and then update */
group = qq_group_create_internal_record(gc, id, ext_id, NULL);
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_MEMBER;
+ group->my_role = QQ_ROOM_ROLE_YES;
qq_group_refresh(gc, group);
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
+ qq_update_room(gc, 0, group->id);
/* the return of this cmd will automatically update the group in blist */
}
@@ -291,7 +293,7 @@ void qq_process_recv_group_im_been_added(guint8 *data, gint len, guint32 id, Pur
}
/* recv an IM from a group chat */
-void qq_process_recv_group_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 im_type)
+void qq_process_room_msg_normal(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 im_type)
{
gchar *msg_with_purple_smiley, *msg_utf8_encoded, *im_src_name;
guint16 unknown;
@@ -310,7 +312,9 @@ void qq_process_recv_group_im(guint8 *data, gint data_len, guint32 id, PurpleCon
qd = (qq_data *) gc->proto_data;
- /* qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", data, data_len, "group im hex dump"); */
+#if 0
+ qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", data, data_len, "group im hex dump");
+#endif
im_group = g_newa(qq_recv_group_im, 1);
@@ -374,13 +378,9 @@ void qq_process_recv_group_im(guint8 *data, gint data_len, guint32 id, PurpleCon
group = qq_room_search_id(gc, id);
g_return_if_fail(group != NULL);
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->group_name_utf8, purple_connection_get_account(gc));
- if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/prompt_group_msg_on_recv")) {
- /* New conv should open, get group info*/
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
-
- serv_got_joined_chat(gc, qd->channel++, group->group_name_utf8);
- conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->group_name_utf8, purple_connection_get_account(gc));
+ conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, group->title_utf8, purple_connection_get_account(gc));
+ if (conv == NULL && purple_prefs_get_bool("/plugins/prpl/qq/show_room_when_newin")) {
+ conv = qq_room_conv_create(gc, group);
}
if (conv != NULL) {
diff --git a/libpurple/protocols/qq/group_im.h b/libpurple/protocols/qq/group_im.h
index 6d38cb2fc0..09bc4dad07 100644
--- a/libpurple/protocols/qq/group_im.h
+++ b/libpurple/protocols/qq/group_im.h
@@ -31,30 +31,17 @@
void qq_send_packet_group_im(PurpleConnection *gc, qq_group *group, const gchar *msg);
-/* void qq_process_group_cmd_im(guint8 *data, guint8 **cursor, gint len, PurpleConnection *gc); */
void qq_process_group_cmd_im(guint8 *data, gint len, PurpleConnection *gc);
-/* void qq_process_recv_group_im(guint8 *data, guint8 **cursor,
- * gint data_len, guint32 id, PurpleConnection *gc, guint16 im_type); */
-void qq_process_recv_group_im(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 im_type);
+void qq_process_room_msg_normal(guint8 *data, gint data_len, guint32 id, PurpleConnection *gc, guint16 im_type);
-/* void qq_process_recv_group_im_apply_join(guint8 *data, guint8 **cursor, gint len,
- * guint32 id, PurpleConnection *gc); */
-void qq_process_recv_group_im_apply_join(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
+void qq_process_room_msg_apply_join(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
-/* void qq_process_recv_group_im_been_rejected(guint8 *data, guint8 **cursor, gint len,
- * guint32 id, PurpleConnection *gc); */
-void qq_process_recv_group_im_been_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
+void qq_process_room_msg_been_rejected(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
-/* void qq_process_recv_group_im_been_approved(guint8 *data, guint8 **cursor, gint len,
- * guint32 id, PurpleConnection *gc); */
-void qq_process_recv_group_im_been_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
+void qq_process_room_msg_been_approved(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
-/* void qq_process_recv_group_im_been_removed(guint8 *data, guint8 **cursor, gint len,
- * guint32 id, PurpleConnection *gc); */
-void qq_process_recv_group_im_been_removed(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
+void qq_process_room_msg_been_removed(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
-/* void qq_process_recv_group_im_been_added(guint8 *data, guint8 **cursor, gint len,
- * guint32 id, PurpleConnection *gc); */
-void qq_process_recv_group_im_been_added(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
+void qq_process_room_msg_been_added(guint8 *data, gint len, guint32 id, PurpleConnection *gc);
#endif
diff --git a/libpurple/protocols/qq/group_info.c b/libpurple/protocols/qq/group_info.c
index ba9b1536ea..b1f3ea6fc6 100644
--- a/libpurple/protocols/qq/group_info.c
+++ b/libpurple/protocols/qq/group_info.c
@@ -41,16 +41,16 @@
* this interval determines if their member info is outdated */
#define QQ_GROUP_CHAT_REFRESH_NICKNAME_INTERNAL 180
-static gboolean _is_group_member_need_update_info(qq_buddy *member)
+static gboolean check_update_interval(qq_buddy *member)
{
g_return_val_if_fail(member != NULL, FALSE);
return (member->nickname == NULL) ||
- (time(NULL) - member->last_refresh) > QQ_GROUP_CHAT_REFRESH_NICKNAME_INTERNAL;
+ (time(NULL) - member->last_update) > QQ_GROUP_CHAT_REFRESH_NICKNAME_INTERNAL;
}
/* this is done when we receive the reply to get_online_members sub_cmd
* all member are set offline, and then only those in reply packets are online */
-static void _qq_group_set_members_all_offline(qq_group *group)
+static void set_all_offline(qq_group *group)
{
GList *list;
qq_buddy *member;
@@ -59,65 +59,29 @@ static void _qq_group_set_members_all_offline(qq_group *group)
list = group->members;
while (list != NULL) {
member = (qq_buddy *) list->data;
- member->status = QQ_BUDDY_ONLINE_OFFLINE;
+ member->status = QQ_BUDDY_CHANGE_TO_OFFLINE;
list = list->next;
}
}
-/* send packet to get online group member, called by keep_alive */
-void qq_send_cmd_group_all_get_online_members(PurpleConnection *gc)
-{
- qq_data *qd;
- qq_group *group;
- GList *list;
-
- g_return_if_fail(gc != NULL && gc->proto_data != NULL);
- qd = (qq_data *) gc->proto_data;
-
- list = qd->groups;
- while (list != NULL) {
- group = (qq_group *) list->data;
- if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER ||
- group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN)
- /* no need to get info time and time again, online members enough */
- qq_send_cmd_group_get_online_members(gc, group);
-
- list = list->next;
- }
-}
-
-void qq_send_cmd_group_get_online_members(PurpleConnection *gc, qq_group *group)
-{
- g_return_if_fail(group != NULL);
-
- /* only get online members when conversation window is on */
- if (NULL == purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,group->group_name_utf8, purple_connection_get_account(gc))) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Conversation \"%s\" is not open, ignore to get online members\n", group->group_name_utf8);
- return;
- }
-
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_ONLINES, group->id);
-}
-
/* send packet to get info for each group member */
-void qq_send_cmd_group_get_members_info(PurpleConnection *gc, qq_group *group)
+gint qq_request_room_get_buddies(PurpleConnection *gc, qq_group *group, gint update_class)
{
guint8 *raw_data;
gint bytes, num;
GList *list;
qq_buddy *member;
- g_return_if_fail(group != NULL);
+ g_return_val_if_fail(group != NULL, 0);
for (num = 0, list = group->members; list != NULL; list = list->next) {
member = (qq_buddy *) list->data;
- if (_is_group_member_need_update_info(member))
+ if (check_update_interval(member))
num++;
}
if (num <= 0) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "No group member info needs to be updated now.\n");
- return;
+ purple_debug_info("QQ", "No group member info needs to be updated now.\n");
+ return 0;
}
raw_data = g_newa(guint8, 4 * num);
@@ -127,12 +91,14 @@ void qq_send_cmd_group_get_members_info(PurpleConnection *gc, qq_group *group)
list = group->members;
while (list != NULL) {
member = (qq_buddy *) list->data;
- if (_is_group_member_need_update_info(member))
+ if (check_update_interval(member))
bytes += qq_put32(raw_data + bytes, member->uid);
list = list->next;
}
- qq_send_room_cmd(gc, QQ_ROOM_CMD_GET_MEMBER_INFO, group->id, raw_data, bytes);
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_BUDDIES, group->id, raw_data, bytes,
+ update_class, 0);
+ return num;
}
void qq_process_room_cmd_get_info(guint8 *data, gint data_len, PurpleConnection *gc)
@@ -174,8 +140,8 @@ void qq_process_room_cmd_get_info(guint8 *data, gint data_len, PurpleConnection
bytes += qq_get32(&(group->creator_uid), data + bytes);
bytes += qq_get8(&(group->auth_type), data + bytes);
bytes += qq_get32(&unknown4, data + bytes); /* oldCategory */
- bytes += qq_get16(&unknown, data + bytes);
- bytes += qq_get32(&(group->group_category), data + bytes);
+ bytes += qq_get16(&unknown, data + bytes);
+ bytes += qq_get32(&(group->category), data + bytes);
bytes += qq_get16(&max_members, data + bytes);
bytes += qq_get8(&unknown1, data + bytes);
/* the following, while Eva:
@@ -183,17 +149,17 @@ void qq_process_room_cmd_get_info(guint8 *data, gint data_len, PurpleConnection
* 2(qunNoticeLen), qunNoticeLen(qunNoticeContent, 1(qunDescLen),
* qunDestLen(qunDestcontent)) */
bytes += qq_get8(&unknown1, data + bytes);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "type=%u creatorid=%u category=%u maxmembers=%u\n",
- group->type8, group->creator_uid, group->group_category, max_members);
-
+ purple_debug_info("QQ", "type=%u creatorid=%u category=%u maxmembers=%u\n",
+ group->type8, group->creator_uid, group->category, max_members);
+
/* strlen + <str content> */
- bytes += convert_as_pascal_string(data + bytes, &(group->group_name_utf8), QQ_CHARSET_DEFAULT);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "group \"%s\"\n", group->group_name_utf8);
+ bytes += convert_as_pascal_string(data + bytes, &(group->title_utf8), QQ_CHARSET_DEFAULT);
bytes += qq_get16(&unknown, data + bytes); /* 0x0000 */
bytes += convert_as_pascal_string(data + bytes, &notice, QQ_CHARSET_DEFAULT);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "notice \"%s\"\n", notice);
- bytes += convert_as_pascal_string(data + bytes, &(group->group_desc_utf8), QQ_CHARSET_DEFAULT);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "group_desc \"%s\"\n", group->group_desc_utf8);
+ bytes += convert_as_pascal_string(data + bytes, &(group->desc_utf8), QQ_CHARSET_DEFAULT);
+
+ purple_debug_info("QQ", "room [%s] notice [%s] desc [%s] unknow 0x%04X\n",
+ group->title_utf8, notice, group->desc_utf8, unknown);
num = 0;
/* now comes the member list separated by 0x00 */
@@ -205,7 +171,7 @@ void qq_process_room_cmd_get_info(guint8 *data, gint data_len, PurpleConnection
#if 0
if(organization != 0 || role != 0) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ_GRP", "%d, organization=%d, role=%d\n", member_uid, organization, role);
+ purple_debug_info("QQ_GRP", "%d, organization=%d, role=%d\n", member_uid, organization, role);
}
#endif
@@ -214,30 +180,31 @@ void qq_process_room_cmd_get_info(guint8 *data, gint data_len, PurpleConnection
member->role = role;
}
if(bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"group_cmd_get_group_info: Dangerous error! maybe protocol changed, notify me!");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "group \"%s\" has %d members\n", group->group_name_utf8, num);
+ purple_debug_info("QQ", "group \"%s\" has %d members\n", group->title_utf8, num);
if (group->creator_uid == qd->uid)
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_ADMIN;
+ group->my_role = QQ_ROOM_ROLE_ADMIN;
+
+ /* filter \r\n in notice */
+ qq_filter_str(notice);
+ group->notice_utf8 = strdup(notice);
+ g_free(notice);
qq_group_refresh(gc, group);
- purple_conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
- group->group_name_utf8, purple_connection_get_account(gc));
+ purple_conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
+ group->title_utf8, purple_connection_get_account(gc));
if(NULL == purple_conv) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Conversation \"%s\" is not open, do not set topic\n", group->group_name_utf8);
+ purple_debug_warning("QQ",
+ "Conversation \"%s\" is not open, do not set topic\n", group->title_utf8);
return;
}
- /* filter \r\n in notice */
- qq_filter_str(notice);
- group->notice_utf8 = strdup(notice);
- g_free(notice);
-
+ purple_debug_info("QQ", "Set chat topic to %s\n", group->notice_utf8);
purple_conv_chat_set_topic(PURPLE_CONV_CHAT(purple_conv), NULL, group->notice_utf8);
}
@@ -252,7 +219,7 @@ void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *g
g_return_if_fail(data != NULL && len > 0);
if (len <= 3) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Invalid group online member reply, discard it!\n");
+ purple_debug_error("QQ", "Invalid group online member reply, discard it!\n");
return;
}
@@ -263,13 +230,12 @@ void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *g
group = qq_room_search_id(gc, id);
if (group == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "We have no group info for internal id [%d]\n", id);
+ purple_debug_error("QQ", "We have no group info for internal id [%d]\n", id);
return;
}
/* set all offline first, then update those online */
- _qq_group_set_members_all_offline(group);
+ set_all_offline(group);
num = 0;
while (bytes < len) {
bytes += qq_get32(&member_uid, data + bytes);
@@ -279,15 +245,15 @@ void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *g
member->status = QQ_BUDDY_ONLINE_NORMAL;
}
if(bytes > len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "group_cmd_get_online_members: Dangerous error! maybe protocol changed, notify developers!");
+ purple_debug_error("QQ",
+ "group_cmd_get_online_members: Dangerous error! maybe protocol changed, notify developers!");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Group \"%s\" has %d online members\n", group->group_name_utf8, num);
+ purple_debug_info("QQ", "Group \"%s\" has %d online members\n", group->title_utf8, num);
}
/* process the reply to get_members_info packet */
-void qq_process_room_cmd_get_members(guint8 *data, gint len, PurpleConnection *gc)
+void qq_process_room_cmd_get_buddies(guint8 *data, gint len, PurpleConnection *gc)
{
gint bytes;
gint num;
@@ -300,7 +266,7 @@ void qq_process_room_cmd_get_members(guint8 *data, gint len, PurpleConnection *g
g_return_if_fail(data != NULL && len > 0);
#if 0
- qq_show_packet("qq_process_room_cmd_get_members", data, len);
+ qq_show_packet("qq_process_room_cmd_get_buddies", data, len);
#endif
bytes = 0;
@@ -331,19 +297,19 @@ void qq_process_room_cmd_get_members(guint8 *data, gint len, PurpleConnection *g
qq_filter_str(nick);
member->nickname = g_strdup(nick);
g_free(nick);
-
+
#if 0
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"member [%09d]: ext_flag=0x%02x, comm_flag=0x%02x, nick=%s\n",
member_uid, member->ext_flag, member->comm_flag, member->nickname);
#endif
- member->last_refresh = time(NULL);
+ member->last_update = time(NULL);
}
if (bytes > len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"group_cmd_get_members_info: Dangerous error! maybe protocol changed, notify developers!");
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Group \"%s\" obtained %d member info\n", group->group_name_utf8, num);
+ purple_debug_info("QQ", "Group \"%s\" obtained %d member info\n", group->title_utf8, num);
}
diff --git a/libpurple/protocols/qq/group_info.h b/libpurple/protocols/qq/group_info.h
index d2ac04fe0b..cc9f1b44c6 100644
--- a/libpurple/protocols/qq/group_info.h
+++ b/libpurple/protocols/qq/group_info.h
@@ -29,12 +29,9 @@
#include "connection.h"
#include "group.h"
-void qq_send_cmd_group_get_online_members(PurpleConnection *gc, qq_group *group);
-void qq_send_cmd_group_all_get_online_members(PurpleConnection *gc);
-
-void qq_send_cmd_group_get_members_info(PurpleConnection *gc, qq_group *group);
+gint qq_request_room_get_buddies(PurpleConnection *gc, qq_group *group, gint update_class);
void qq_process_room_cmd_get_info(guint8 *data, gint len, PurpleConnection *gc);
void qq_process_room_cmd_get_onlines(guint8 *data, gint len, PurpleConnection *gc);
-void qq_process_room_cmd_get_members(guint8 *data, gint len, PurpleConnection *gc);
+void qq_process_room_cmd_get_buddies(guint8 *data, gint len, PurpleConnection *gc);
#endif
diff --git a/libpurple/protocols/qq/group_internal.c b/libpurple/protocols/qq/group_internal.c
index 997fda8a82..bf7849ac05 100644
--- a/libpurple/protocols/qq/group_internal.c
+++ b/libpurple/protocols/qq/group_internal.c
@@ -31,49 +31,49 @@
#include "group_internal.h"
#include "utils.h"
-static gchar *_qq_group_set_my_status_desc(qq_group *group)
+static gchar *get_role_desc(qq_group *group)
{
- const char *status_desc;
+ const char *role_desc;
g_return_val_if_fail(group != NULL, g_strdup(""));
- switch (group->my_status) {
- case QQ_GROUP_MEMBER_STATUS_NOT_MEMBER:
- status_desc = _("I am not a member");
+ switch (group->my_role) {
+ case QQ_ROOM_ROLE_NO:
+ role_desc = _("I am not a member");
break;
- case QQ_GROUP_MEMBER_STATUS_IS_MEMBER:
- status_desc = _("I am a member");
+ case QQ_ROOM_ROLE_YES:
+ role_desc = _("I am a member");
break;
- case QQ_GROUP_MEMBER_STATUS_APPLYING:
- status_desc = _("I am applying to join");
+ case QQ_ROOM_ROLE_REQUESTING:
+ role_desc = _("I am requesting");
break;
- case QQ_GROUP_MEMBER_STATUS_IS_ADMIN:
- status_desc = _("I am the admin");
+ case QQ_ROOM_ROLE_ADMIN:
+ role_desc = _("I am the admin");
break;
default:
- status_desc = _("Unknown status");
+ role_desc = _("Unknown status");
}
- return g_strdup(status_desc);
+ return g_strdup(role_desc);
}
-static void _qq_group_add_to_blist(PurpleConnection *gc, qq_group *group)
+static void add_room_to_blist(PurpleConnection *gc, qq_group *group)
{
GHashTable *components;
PurpleGroup *g;
PurpleChat *chat;
components = qq_group_to_hashtable(group);
- chat = purple_chat_new(purple_connection_get_account(gc), group->group_name_utf8, components);
+ chat = purple_chat_new(purple_connection_get_account(gc), group->title_utf8, components);
g = qq_get_purple_group(PURPLE_GROUP_QQ_QUN);
purple_blist_add_chat(chat, g, NULL);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "You have added group \"%s\" to blist locally\n", group->group_name_utf8);
+ purple_debug_info("QQ", "You have added group \"%s\" to blist locally\n", group->title_utf8);
}
/* Create a dummy qq_group, which includes only internal_id, ext_id,
- * and potentially group_name_utf8, in case we need to call group_conv_show_window
+ * and potentially title_utf8, in case we need to call group_conv_show_window
* right after creation. All other attributes are set to empty.
* We need to send a get_group_info to the QQ server to update it right away */
qq_group *qq_group_create_internal_record(PurpleConnection *gc,
- guint32 internal_id, guint32 ext_id, gchar *group_name_utf8)
+ guint32 internal_id, guint32 ext_id, gchar *title_utf8)
{
qq_group *group;
qq_data *qd;
@@ -82,21 +82,21 @@ qq_group *qq_group_create_internal_record(PurpleConnection *gc,
qd = (qq_data *) gc->proto_data;
group = g_new0(qq_group, 1);
- group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER;
- group->my_status_desc = _qq_group_set_my_status_desc(group);
+ group->my_role = QQ_ROOM_ROLE_NO;
+ group->my_role_desc = get_role_desc(group);
group->id = internal_id;
group->ext_id = ext_id;
group->type8 = 0x01; /* assume permanent Qun */
group->creator_uid = 10000; /* assume by QQ admin */
- group->group_category = 0x01;
+ group->category = 0x01;
group->auth_type = 0x02; /* assume need auth */
- group->group_name_utf8 = g_strdup(group_name_utf8 == NULL ? "" : group_name_utf8);
- group->group_desc_utf8 = g_strdup("");
+ group->title_utf8 = g_strdup(title_utf8 == NULL ? "" : title_utf8);
+ group->desc_utf8 = g_strdup("");
group->notice_utf8 = g_strdup("");
group->members = NULL;
qd->groups = g_list_append(qd->groups, group);
- _qq_group_add_to_blist(gc, group);
+ add_room_to_blist(gc, group);
return group;
}
@@ -124,26 +124,26 @@ GHashTable *qq_group_to_hashtable(qq_group *group)
{
GHashTable *components;
components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_MEMBER_STATUS), g_strdup_printf("%d", group->my_status));
- group->my_status_desc = _qq_group_set_my_status_desc(group);
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_ROLE), g_strdup_printf("%d", group->my_role));
+ group->my_role_desc = get_role_desc(group);
g_hash_table_insert(components,
- g_strdup(QQ_GROUP_KEY_INTERNAL_ID), g_strdup_printf("%d", group->id));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_EXTERNAL_ID),
+ g_strdup(QQ_ROOM_KEY_INTERNAL_ID), g_strdup_printf("%d", group->id));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_EXTERNAL_ID),
g_strdup_printf("%d", group->ext_id));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_TYPE), g_strdup_printf("%d", group->type8));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TYPE), g_strdup_printf("%d", group->type8));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid));
g_hash_table_insert(components,
- g_strdup(QQ_GROUP_KEY_GROUP_CATEGORY), g_strdup_printf("%d", group->group_category));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_MEMBER_STATUS_DESC), g_strdup(group->my_status_desc));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_GROUP_NAME_UTF8), g_strdup(group->group_name_utf8));
- g_hash_table_insert(components, g_strdup(QQ_GROUP_KEY_GROUP_DESC_UTF8), g_strdup(group->group_desc_utf8));
+ g_strdup(QQ_ROOM_KEY_CATEGORY), g_strdup_printf("%d", group->category));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_ROLE_DESC), g_strdup(group->my_role_desc));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(group->title_utf8));
+ g_hash_table_insert(components, g_strdup(QQ_ROOM_KEY_DESC_UTF8), g_strdup(group->desc_utf8));
return components;
}
/* create a qq_group from hashtable */
-qq_group *qq_group_from_hashtable(PurpleConnection *gc, GHashTable *data)
+qq_group *qq_room_create_by_hashtable(PurpleConnection *gc, GHashTable *data)
{
qq_data *qd;
qq_group *group;
@@ -152,25 +152,25 @@ qq_group *qq_group_from_hashtable(PurpleConnection *gc, GHashTable *data)
qd = (qq_data *) gc->proto_data;
group = g_new0(qq_group, 1);
- group->my_status =
+ group->my_role =
qq_string_to_dec_value
(NULL ==
g_hash_table_lookup(data,
- QQ_GROUP_KEY_MEMBER_STATUS) ?
- g_strdup_printf("%d", QQ_GROUP_MEMBER_STATUS_NOT_MEMBER) :
- g_hash_table_lookup(data, QQ_GROUP_KEY_MEMBER_STATUS));
- group->id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_INTERNAL_ID));
- group->ext_id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_EXTERNAL_ID));
- group->type8 = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_TYPE));
- group->creator_uid = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_CREATOR_UID));
- group->group_category = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_CATEGORY));
- group->auth_type = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_GROUP_KEY_AUTH_TYPE));
- group->group_name_utf8 = g_strdup(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_NAME_UTF8));
- group->group_desc_utf8 = g_strdup(g_hash_table_lookup(data, QQ_GROUP_KEY_GROUP_DESC_UTF8));
- group->my_status_desc = _qq_group_set_my_status_desc(group);
+ QQ_ROOM_KEY_ROLE) ?
+ g_strdup_printf("%d", QQ_ROOM_ROLE_NO) :
+ g_hash_table_lookup(data, QQ_ROOM_KEY_ROLE));
+ group->id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID));
+ group->ext_id = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_EXTERNAL_ID));
+ group->type8 = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_TYPE));
+ group->creator_uid = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_CREATOR_UID));
+ group->category = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_CATEGORY));
+ group->auth_type = qq_string_to_dec_value(g_hash_table_lookup(data, QQ_ROOM_KEY_AUTH_TYPE));
+ group->title_utf8 = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_TITLE_UTF8));
+ group->desc_utf8 = g_strdup(g_hash_table_lookup(data, QQ_ROOM_KEY_DESC_UTF8));
+ group->my_role_desc = get_role_desc(group);
+ group->is_got_info = FALSE;
qd->groups = g_list_append(qd->groups, group);
-
return group;
}
@@ -184,48 +184,54 @@ void qq_group_refresh(PurpleConnection *gc, qq_group *group)
ext_id = g_strdup_printf("%d", group->ext_id);
chat = purple_blist_find_chat(purple_connection_get_account(gc), ext_id);
g_free(ext_id);
- if (chat == NULL && group->my_status != QQ_GROUP_MEMBER_STATUS_NOT_MEMBER) {
- _qq_group_add_to_blist(gc, group);
- } else if (chat != NULL) { /* we have a local record, update its info */
- /* if there is group_name_utf8, we update the group name */
- if (group->group_name_utf8 != NULL && strlen(group->group_name_utf8) > 0)
- purple_blist_alias_chat(chat, group->group_name_utf8);
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_MEMBER_STATUS), g_strdup_printf("%d", group->my_status));
- group->my_status_desc = _qq_group_set_my_status_desc(group);
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_MEMBER_STATUS_DESC), g_strdup(group->my_status_desc));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_INTERNAL_ID),
- g_strdup_printf("%d", group->id));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_EXTERNAL_ID),
- g_strdup_printf("%d", group->ext_id));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_TYPE), g_strdup_printf("%d", group->type8));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_GROUP_CATEGORY),
- g_strdup_printf("%d", group->group_category));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_GROUP_NAME_UTF8), g_strdup(group->group_name_utf8));
- g_hash_table_replace(chat->components,
- g_strdup(QQ_GROUP_KEY_GROUP_DESC_UTF8), g_strdup(group->group_desc_utf8));
+ if (chat == NULL && group->my_role != QQ_ROOM_ROLE_NO) {
+ add_room_to_blist(gc, group);
+ return;
+ }
+
+ if (chat == NULL) {
+ return;
}
+
+ /* we have a local record, update its info */
+ /* if there is title_utf8, we update the group name */
+ if (group->title_utf8 != NULL && strlen(group->title_utf8) > 0)
+ purple_blist_alias_chat(chat, group->title_utf8);
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_ROLE), g_strdup_printf("%d", group->my_role));
+ group->my_role_desc = get_role_desc(group);
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_ROLE_DESC), g_strdup(group->my_role_desc));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_INTERNAL_ID),
+ g_strdup_printf("%d", group->id));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_EXTERNAL_ID),
+ g_strdup_printf("%d", group->ext_id));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_TYPE), g_strdup_printf("%d", group->type8));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_CREATOR_UID), g_strdup_printf("%d", group->creator_uid));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_CATEGORY),
+ g_strdup_printf("%d", group->category));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_AUTH_TYPE), g_strdup_printf("%d", group->auth_type));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_TITLE_UTF8), g_strdup(group->title_utf8));
+ g_hash_table_replace(chat->components,
+ g_strdup(QQ_ROOM_KEY_DESC_UTF8), g_strdup(group->desc_utf8));
}
-/* NOTE: If we knew how to convert between an external and internal group id, as the official
+/* NOTE: If we knew how to convert between an external and internal group id, as the official
* client seems to, the following would be unnecessary. That would be ideal. */
/* Use list to specify if id's alternate id is pending discovery. */
void qq_set_pending_id(GSList **list, guint32 id, gboolean pending)
{
- if (pending)
+ if (pending)
*list = g_slist_prepend(*list, GINT_TO_POINTER(id));
- else
+ else
*list = g_slist_remove(*list, GINT_TO_POINTER(id));
}
diff --git a/libpurple/protocols/qq/group_internal.h b/libpurple/protocols/qq/group_internal.h
index 4dc11adb28..e08d048970 100644
--- a/libpurple/protocols/qq/group_internal.h
+++ b/libpurple/protocols/qq/group_internal.h
@@ -28,23 +28,23 @@
#include <glib.h>
#include "group.h"
-#define QQ_GROUP_KEY_MEMBER_STATUS "my_status_code"
-#define QQ_GROUP_KEY_MEMBER_STATUS_DESC "my_status_desc"
-#define QQ_GROUP_KEY_INTERNAL_ID "id"
-#define QQ_GROUP_KEY_EXTERNAL_ID "ext_id"
-#define QQ_GROUP_KEY_TYPE "type"
-#define QQ_GROUP_KEY_CREATOR_UID "creator_uid"
-#define QQ_GROUP_KEY_GROUP_CATEGORY "category"
-#define QQ_GROUP_KEY_AUTH_TYPE "auth_type"
-#define QQ_GROUP_KEY_GROUP_NAME_UTF8 "name_utf8"
-#define QQ_GROUP_KEY_GROUP_DESC_UTF8 "desc_utf8"
-
-qq_group *qq_group_create_internal_record(PurpleConnection *gc,
+#define QQ_ROOM_KEY_ROLE "my_role"
+#define QQ_ROOM_KEY_ROLE_DESC "my_role_desc"
+#define QQ_ROOM_KEY_INTERNAL_ID "id"
+#define QQ_ROOM_KEY_EXTERNAL_ID "ext_id"
+#define QQ_ROOM_KEY_TYPE "type"
+#define QQ_ROOM_KEY_CREATOR_UID "creator_uid"
+#define QQ_ROOM_KEY_CATEGORY "category"
+#define QQ_ROOM_KEY_AUTH_TYPE "auth_type"
+#define QQ_ROOM_KEY_TITLE_UTF8 "title_utf8"
+#define QQ_ROOM_KEY_DESC_UTF8 "desc_utf8"
+
+qq_group *qq_group_create_internal_record(PurpleConnection *gc,
guint32 internal_id, guint32 ext_id, gchar *group_name_utf8);
void qq_group_delete_internal_record(qq_data *qd, guint32 id);
GHashTable *qq_group_to_hashtable(qq_group *group);
-qq_group *qq_group_from_hashtable(PurpleConnection *gc, GHashTable *data);
+qq_group *qq_room_create_by_hashtable(PurpleConnection *gc, GHashTable *data);
void qq_group_refresh(PurpleConnection *gc, qq_group *group);
diff --git a/libpurple/protocols/qq/group_join.c b/libpurple/protocols/qq/group_join.c
index fa85eb8266..cd552a0792 100644
--- a/libpurple/protocols/qq/group_join.c
+++ b/libpurple/protocols/qq/group_join.c
@@ -38,14 +38,17 @@
#include "group_info.h"
#include "group_join.h"
#include "group_opt.h"
+#include "group_conv.h"
#include "group_search.h"
#include "header_info.h"
#include "packet_parse.h"
#include "qq_network.h"
+#include "qq_process.h"
enum {
- QQ_GROUP_JOIN_OK = 0x01,
- QQ_GROUP_JOIN_NEED_AUTH = 0x02,
+ QQ_ROOM_JOIN_OK = 0x01,
+ QQ_ROOM_JOIN_NEED_AUTH = 0x02,
+ QQ_ROOM_JOIN_DENIED = 0x03,
};
static void _qq_group_exit_with_gc_and_id(gc_and_uid *g)
@@ -64,24 +67,28 @@ static void _qq_group_exit_with_gc_and_id(gc_and_uid *g)
}
/* send packet to join a group without auth */
-void qq_send_cmd_group_join_group(PurpleConnection *gc, qq_group *group)
+void qq_request_room_join(PurpleConnection *gc, qq_group *group)
{
g_return_if_fail(group != NULL);
- if (group->my_status == QQ_GROUP_MEMBER_STATUS_NOT_MEMBER) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_APPLYING;
+ if (group->my_role == QQ_ROOM_ROLE_NO) {
+ group->my_role = QQ_ROOM_ROLE_REQUESTING;
qq_group_refresh(gc, group);
}
switch (group->auth_type) {
- case QQ_GROUP_AUTH_TYPE_NO_AUTH:
- case QQ_GROUP_AUTH_TYPE_NEED_AUTH:
+ case QQ_ROOM_AUTH_TYPE_NO_AUTH:
+ case QQ_ROOM_AUTH_TYPE_NEED_AUTH:
+ break;
+ case QQ_ROOM_AUTH_TYPE_NO_ADD:
+ if (group->my_role == QQ_ROOM_ROLE_NO
+ && group->my_role == QQ_ROOM_ROLE_REQUESTING) {
+ purple_notify_warning(gc, NULL, _("The Qun does not allow others to join"), NULL);
+ return;
+ }
break;
- case QQ_GROUP_AUTH_TYPE_NO_ADD:
- purple_notify_warning(gc, NULL, _("This group does not allow others to join"), NULL);
- return;
default:
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown group auth type: %d\n", group->auth_type);
+ purple_debug_error("QQ", "Unknown room auth type: %d\n", group->auth_type);
break;
}
@@ -99,10 +106,10 @@ static void _qq_group_join_auth_with_gc_and_id(gc_and_uid *g, const gchar *reaso
group = qq_room_search_id(gc, id);
if (group == NULL) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Can not find qq_group by internal_id: %d\n", id);
+ purple_debug_error("QQ", "Can not find qq_group by internal_id: %d\n", id);
return;
} else { /* everything is OK */
- qq_send_cmd_group_auth(gc, group, QQ_GROUP_AUTH_REQUEST_APPLY, 0, reason_utf8);
+ qq_send_cmd_group_auth(gc, group, QQ_ROOM_AUTH_REQUEST_APPLY, 0, reason_utf8);
}
}
@@ -112,10 +119,9 @@ static void _qq_group_join_auth(PurpleConnection *gc, qq_group *group)
gc_and_uid *g;
g_return_if_fail(group != NULL);
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Group (internal id: %d) needs authentication\n", group->id);
+ purple_debug_info("QQ", "Group (internal id: %d) needs authentication\n", group->id);
- msg = g_strdup_printf("Group \"%s\" needs authentication\n", group->group_name_utf8);
+ msg = g_strdup_printf("Group \"%s\" needs authentication\n", group->title_utf8);
g = g_new0(gc_and_uid, 1);
g->gc = gc;
g->uid = group->id;
@@ -125,7 +131,7 @@ static void _qq_group_join_auth(PurpleConnection *gc, qq_group *group)
_("Send"),
G_CALLBACK(_qq_group_join_auth_with_gc_and_id),
_("Cancel"), G_CALLBACK(qq_do_nothing_with_gc_and_uid),
- purple_connection_get_account(gc), group->group_name_utf8, NULL,
+ purple_connection_get_account(gc), group->title_utf8, NULL,
g);
g_free(msg);
}
@@ -143,8 +149,8 @@ void qq_send_cmd_group_auth(PurpleConnection *gc, qq_group *group, guint8 opt, g
else
reason_qq = utf8_to_qq(reason_utf8, QQ_CHARSET_DEFAULT);
- if (opt == QQ_GROUP_AUTH_REQUEST_APPLY) {
- group->my_status = QQ_GROUP_MEMBER_STATUS_APPLYING;
+ if (opt == QQ_ROOM_AUTH_REQUEST_APPLY) {
+ group->my_role = QQ_ROOM_ROLE_REQUESTING;
qq_group_refresh(gc, group);
uid = 0;
}
@@ -173,8 +179,7 @@ void qq_process_group_cmd_exit_group(guint8 *data, gint len, PurpleConnection *g
qd = (qq_data *) gc->proto_data;
if (len < 4) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "Invalid exit group reply, expect %d bytes, read %d bytes\n", 4, len);
+ purple_debug_error("QQ", "Invalid exit group reply, expect %d bytes, read %d bytes\n", 4, len);
return;
}
@@ -189,7 +194,7 @@ void qq_process_group_cmd_exit_group(guint8 *data, gint len, PurpleConnection *g
purple_blist_remove_chat(chat);
qq_group_delete_internal_record(qd, id);
}
- purple_notify_info(gc, _("QQ Qun Operation"), _("You have successfully left the group"), NULL);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Successed:"), _("Remove from Qun"));
}
/* Process the reply to group_auth subcmd */
@@ -203,16 +208,15 @@ void qq_process_group_cmd_join_group_auth(guint8 *data, gint len, PurpleConnecti
qd = (qq_data *) gc->proto_data;
if (len < 4) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "Invalid join group reply, expect %d bytes, read %d bytes\n", 4, len);
+ purple_debug_error("QQ",
+ "Invalid join room reply, expect %d bytes, read %d bytes\n", 4, len);
return;
}
bytes = 0;
bytes += qq_get32(&id, data + bytes);
g_return_if_fail(id > 0);
- purple_notify_info(gc, _("QQ Group Auth"),
- _("Your authorization request has been accepted by the QQ server"), NULL);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Successed:"), _("Join to Qun"));
}
/* process group cmd reply "join group" */
@@ -222,15 +226,16 @@ void qq_process_group_cmd_join_group(guint8 *data, gint len, PurpleConnection *g
guint32 id;
guint8 reply;
qq_group *group;
+ gchar *msg;
g_return_if_fail(data != NULL && len > 0);
if (len < 5) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Invalid join group reply, expect %d bytes, read %d bytes\n", 5, len);
return;
}
-
+
bytes = 0;
bytes += qq_get32(&id, data + bytes);
bytes += qq_get8(&reply, data + bytes);
@@ -240,26 +245,32 @@ void qq_process_group_cmd_join_group(guint8 *data, gint len, PurpleConnection *g
/* need to check if group is NULL or not. */
g_return_if_fail(group != NULL);
switch (reply) {
- case QQ_GROUP_JOIN_OK:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Succeed joining group \"%s\"\n", group->group_name_utf8);
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_MEMBER;
+ case QQ_ROOM_JOIN_OK:
+ purple_debug_info("QQ", "Successed in joining group \"%s\"\n", group->title_utf8);
+ group->my_role = QQ_ROOM_ROLE_YES;
qq_group_refresh(gc, group);
/* this must be shown before getting online members */
- qq_group_conv_show_window(gc, group);
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, group->id);
+ qq_room_conv_create(gc, group);
break;
- case QQ_GROUP_JOIN_NEED_AUTH:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ case QQ_ROOM_JOIN_NEED_AUTH:
+ purple_debug_info("QQ",
"Fail joining group [%d] %s, needs authentication\n",
- group->ext_id, group->group_name_utf8);
- group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER;
+ group->ext_id, group->title_utf8);
+ group->my_role = QQ_ROOM_ROLE_NO;
qq_group_refresh(gc, group);
_qq_group_join_auth(gc, group);
break;
+ case QQ_ROOM_JOIN_DENIED:
+ msg = g_strdup_printf(_("Qun %d denied to join"), group->ext_id);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Failed:"), msg);
+ g_free(msg);
+ break;
default:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Error joining group [%d] %s, unknown reply: 0x%02x\n",
- group->ext_id, group->group_name_utf8, reply);
+ purple_debug_info("QQ",
+ "Failed joining group [%d] %s, unknown reply: 0x%02x\n",
+ group->ext_id, group->title_utf8, reply);
+
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Failed:"), _("Join Qun, Unknow Reply"));
}
}
@@ -274,7 +285,7 @@ void qq_group_join(PurpleConnection *gc, GHashTable *data)
g_return_if_fail(data != NULL);
qd = (qq_data *) gc->proto_data;
- ext_id_ptr = g_hash_table_lookup(data, QQ_GROUP_KEY_EXTERNAL_ID);
+ ext_id_ptr = g_hash_table_lookup(data, QQ_ROOM_KEY_EXTERNAL_ID);
g_return_if_fail(ext_id_ptr != NULL);
errno = 0;
ext_id = strtol(ext_id_ptr, NULL, 10);
@@ -286,7 +297,7 @@ void qq_group_join(PurpleConnection *gc, GHashTable *data)
group = qq_room_search_ext_id(gc, ext_id);
if (group) {
- qq_send_cmd_group_join_group(gc, group);
+ qq_request_room_join(gc, group);
} else {
qq_set_pending_id(&qd->joining_groups, ext_id, TRUE);
qq_send_cmd_group_search_group(gc, ext_id);
@@ -301,7 +312,7 @@ void qq_group_exit(PurpleConnection *gc, GHashTable *data)
g_return_if_fail(data != NULL);
- id_ptr = g_hash_table_lookup(data, QQ_GROUP_KEY_INTERNAL_ID);
+ id_ptr = g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID);
id = strtol(id_ptr, NULL, 10);
g_return_if_fail(id > 0);
@@ -312,8 +323,7 @@ void qq_group_exit(PurpleConnection *gc, GHashTable *data)
purple_request_action(gc, _("QQ Qun Operation"),
_("Are you sure you want to leave this Qun?"),
- _
- ("Note, if you are the creator, \nthis operation will eventually remove this Qun."),
+ _("Note, if you are the creator, \nthis operation will eventually remove this Qun."),
1,
purple_connection_get_account(gc), NULL, NULL,
g, 2, _("Cancel"),
diff --git a/libpurple/protocols/qq/group_join.h b/libpurple/protocols/qq/group_join.h
index 4b0483b6e3..f6b1032e2b 100644
--- a/libpurple/protocols/qq/group_join.h
+++ b/libpurple/protocols/qq/group_join.h
@@ -30,20 +30,20 @@
#include "group.h"
enum {
- QQ_GROUP_AUTH_TYPE_NO_AUTH = 0x01,
- QQ_GROUP_AUTH_TYPE_NEED_AUTH = 0x02,
- QQ_GROUP_AUTH_TYPE_NO_ADD = 0x03
+ QQ_ROOM_AUTH_TYPE_NO_AUTH = 0x01,
+ QQ_ROOM_AUTH_TYPE_NEED_AUTH = 0x02,
+ QQ_ROOM_AUTH_TYPE_NO_ADD = 0x03
};
enum {
- QQ_GROUP_AUTH_REQUEST_APPLY = 0x01,
- QQ_GROUP_AUTH_REQUEST_APPROVE = 0x02,
- QQ_GROUP_AUTH_REQUEST_REJECT = 0x03
+ QQ_ROOM_AUTH_REQUEST_APPLY = 0x01,
+ QQ_ROOM_AUTH_REQUEST_APPROVE = 0x02,
+ QQ_ROOM_AUTH_REQUEST_REJECT = 0x03
};
void qq_send_cmd_group_auth(PurpleConnection *gc, qq_group *group, guint8 opt, guint32 uid, const gchar *reason_utf8);
void qq_group_join(PurpleConnection *gc, GHashTable *data);
-void qq_send_cmd_group_join_group(PurpleConnection *gc, qq_group *group);
+void qq_request_room_join(PurpleConnection *gc, qq_group *group);
void qq_group_exit(PurpleConnection *gc, GHashTable *data);
void qq_process_group_cmd_exit_group(guint8 *data, gint len, PurpleConnection *gc);
void qq_process_group_cmd_join_group_auth(guint8 *data, gint len, PurpleConnection *gc);
diff --git a/libpurple/protocols/qq/group_opt.c b/libpurple/protocols/qq/group_opt.c
index 5f7fcabfb2..4d8002a97c 100644
--- a/libpurple/protocols/qq/group_opt.c
+++ b/libpurple/protocols/qq/group_opt.c
@@ -38,6 +38,7 @@
#include "header_info.h"
#include "packet_parse.h"
#include "qq_network.h"
+#include "qq_process.h"
#include "utils.h"
static int _compare_guint32(const void *a,
@@ -67,7 +68,7 @@ static void _qq_group_member_opt(PurpleConnection *gc, qq_group *group, gint ope
}
data_len = 6 + count * 4;
data = g_newa(guint8, data_len);
-
+
bytes = 0;
bytes += qq_put8(data + bytes, operation);
for (i = 0; i < count; i++)
@@ -88,7 +89,7 @@ static void _qq_group_reject_application_real(group_member_opt *g, gchar *msg_ut
g_return_if_fail(g != NULL && g->gc != NULL && g->id > 0 && g->member > 0);
group = qq_room_search_id(g->gc, g->id);
g_return_if_fail(group != NULL);
- qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_REJECT, g->member, msg_utf8);
+ qq_send_cmd_group_auth(g->gc, group, QQ_ROOM_AUTH_REQUEST_REJECT, g->member, msg_utf8);
g_free(g);
}
@@ -111,11 +112,11 @@ void qq_group_reject_application_with_struct(group_member_opt *g)
g_return_if_fail(g != NULL && g->gc != NULL && g->member > 0);
msg1 = g_strdup_printf(_("You rejected %d's request"), g->member);
- msg2 = g_strdup(_("Enter your reason:"));
+ msg2 = g_strdup(_("Message:"));
nombre = uid_to_purple_name(g->member);
purple_request_input(g->gc, /* title */ NULL, msg1, msg2,
- _("Sorry, you are not my type..."), /* multiline */ TRUE, /* masked */ FALSE,
+ _("Sorry, you are not my style..."), /* multiline */ TRUE, /* masked */ FALSE,
/* hint */ NULL,
_("Send"), G_CALLBACK(_qq_group_reject_application_real),
_("Cancel"), G_CALLBACK(_qq_group_do_nothing_with_struct),
@@ -133,7 +134,7 @@ void qq_group_approve_application_with_struct(group_member_opt *g)
g_return_if_fail(g != NULL && g->gc != NULL && g->id > 0 && g->member > 0);
group = qq_room_search_id(g->gc, g->id);
g_return_if_fail(group != NULL);
- qq_send_cmd_group_auth(g->gc, group, QQ_GROUP_AUTH_REQUEST_APPROVE, g->member, "");
+ qq_send_cmd_group_auth(g->gc, group, QQ_ROOM_AUTH_REQUEST_APPROVE, g->member, "");
qq_group_find_or_add_member(g->gc, group, g->member);
g_free(g);
}
@@ -189,9 +190,9 @@ void qq_group_modify_members(PurpleConnection *gc, qq_group *group, guint32 *new
qq_group_find_or_add_member(gc, group, add_members[i]);
if (del > 0)
- _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_DEL, del_members);
+ _qq_group_member_opt(gc, group, QQ_ROOM_MEMBER_DEL, del_members);
if (add > 0)
- _qq_group_member_opt(gc, group, QQ_GROUP_MEMBER_ADD, add_members);
+ _qq_group_member_opt(gc, group, QQ_ROOM_MEMBER_ADD, add_members);
}
void qq_group_process_modify_members_reply(guint8 *data, gint len, PurpleConnection *gc)
@@ -209,9 +210,9 @@ void qq_group_process_modify_members_reply(guint8 *data, gint len, PurpleConnect
group = qq_room_search_id(gc, id);
g_return_if_fail(group != NULL);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Succeed in modify members for Qun %d\n", group->ext_id);
+ purple_debug_info("QQ", "Succeed in modify members for room %d\n", group->ext_id);
- purple_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modified Qun member"), NULL);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Successed:"), _("Change Qun member"));
}
void qq_room_change_info(PurpleConnection *gc, qq_group *group)
@@ -223,8 +224,8 @@ void qq_room_change_info(PurpleConnection *gc, qq_group *group)
g_return_if_fail(group != NULL);
- group_name = group->group_name_utf8 == NULL ? "" : utf8_to_qq(group->group_name_utf8, QQ_CHARSET_DEFAULT);
- group_desc = group->group_desc_utf8 == NULL ? "" : utf8_to_qq(group->group_desc_utf8, QQ_CHARSET_DEFAULT);
+ group_name = group->title_utf8 == NULL ? "" : utf8_to_qq(group->title_utf8, QQ_CHARSET_DEFAULT);
+ group_desc = group->desc_utf8 == NULL ? "" : utf8_to_qq(group->desc_utf8, QQ_CHARSET_DEFAULT);
notice = group->notice_utf8 == NULL ? "" : utf8_to_qq(group->notice_utf8, QQ_CHARSET_DEFAULT);
data_len = 64 + strlen(group_name) + strlen(group_desc) + strlen(notice);
@@ -237,7 +238,7 @@ void qq_room_change_info(PurpleConnection *gc, qq_group *group)
/* 007-008 */
bytes += qq_put16(data + bytes, 0x0000);
/* 009-010 */
- bytes += qq_put16(data + bytes, group->group_category);
+ bytes += qq_put16(data + bytes, group->category);
bytes += qq_put8(data + bytes, strlen(group_name));
bytes += qq_putdata(data + bytes, (guint8 *) group_name, strlen(group_name));
@@ -251,7 +252,7 @@ void qq_room_change_info(PurpleConnection *gc, qq_group *group)
bytes += qq_putdata(data + bytes, (guint8 *) group_desc, strlen(group_desc));
if (bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Overflow in qq_room_change_info, max %d bytes, now %d bytes\n",
data_len, bytes);
return;
@@ -274,10 +275,10 @@ void qq_group_process_modify_info_reply(guint8 *data, gint len, PurpleConnection
group = qq_room_search_id(gc, id);
g_return_if_fail(group != NULL);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Succeed in modify info for Qun %d\n", group->ext_id);
+ purple_debug_info("QQ", "Succeed in modify info for Qun %d\n", group->ext_id);
qq_group_refresh(gc, group);
- purple_notify_info(gc, _("QQ Qun Operation"), _("You have successfully modified Qun information"), NULL);
+ purple_notify_info(gc, _("QQ Qun Operation"), _("Successed:"), _("Change Qun information"));
}
/* we create a very simple group first, and then let the user to modify */
@@ -297,9 +298,9 @@ void qq_room_create_new(PurpleConnection *gc, const gchar *name)
bytes = 0;
/* we create the simpleset group, only group name is given */
/* 001 */
- bytes += qq_put8(data + bytes, QQ_GROUP_TYPE_PERMANENT);
+ bytes += qq_put8(data + bytes, QQ_ROOM_TYPE_PERMANENT);
/* 002 */
- bytes += qq_put8(data + bytes, QQ_GROUP_AUTH_TYPE_NEED_AUTH);
+ bytes += qq_put8(data + bytes, QQ_ROOM_AUTH_TYPE_NEED_AUTH);
/* 003-004 */
bytes += qq_put16(data + bytes, 0x0000);
/* 005-006 */
@@ -313,7 +314,7 @@ void qq_room_create_new(PurpleConnection *gc, const gchar *name)
bytes += qq_put32(data + bytes, qd->uid); /* I am member of coz */
if (bytes > data_len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Overflow in qq_room_create, max %d bytes, now %d bytes\n",
data_len, bytes);
return;
@@ -352,14 +353,14 @@ void qq_group_process_create_group_reply(guint8 *data, gint len, PurpleConnectio
g_return_if_fail(id > 0 && ext_id);
group = qq_group_create_internal_record(gc, id, ext_id, NULL);
- group->my_status = QQ_GROUP_MEMBER_STATUS_IS_ADMIN;
+ group->my_role = QQ_ROOM_ROLE_ADMIN;
group->creator_uid = qd->uid;
qq_group_refresh(gc, group);
qq_send_room_cmd_only(gc, QQ_ROOM_CMD_ACTIVATE, id);
- qq_send_room_cmd_only(gc, QQ_ROOM_CMD_GET_INFO, id);
+ qq_update_room(gc, 0, group->id);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Succeed in create Qun, external ID %d\n", group->ext_id);
+ purple_debug_info("QQ", "Succeed in create Qun, external ID %d\n", group->ext_id);
g = g_new0(gc_and_uid, 1);
g->gc = gc;
@@ -368,7 +369,7 @@ void qq_group_process_create_group_reply(guint8 *data, gint len, PurpleConnectio
purple_request_action(gc, _("QQ Qun Operation"),
_("You have successfully created a Qun"),
_
- ("Would you like to set up the Qun details now?"),
+ ("Would you like to set up the detail information now?"),
1,
purple_connection_get_account(gc), NULL, NULL,
g, 2,
@@ -391,7 +392,7 @@ void qq_group_process_activate_group_reply(guint8 *data, gint len, PurpleConnect
group = qq_room_search_id(gc, id);
g_return_if_fail(group != NULL);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Succeed in activate Qun %d\n", group->ext_id);
+ purple_debug_info("QQ", "Succeed in activate Qun %d\n", group->ext_id);
}
void qq_group_manage_group(PurpleConnection *gc, GHashTable *data)
@@ -402,7 +403,7 @@ void qq_group_manage_group(PurpleConnection *gc, GHashTable *data)
g_return_if_fail(data != NULL);
- id_ptr = g_hash_table_lookup(data, QQ_GROUP_KEY_INTERNAL_ID);
+ id_ptr = g_hash_table_lookup(data, QQ_ROOM_KEY_INTERNAL_ID);
id = strtol(id_ptr, NULL, 10);
g_return_if_fail(id > 0);
diff --git a/libpurple/protocols/qq/group_opt.h b/libpurple/protocols/qq/group_opt.h
index 4a0cd43928..3946279006 100644
--- a/libpurple/protocols/qq/group_opt.h
+++ b/libpurple/protocols/qq/group_opt.h
@@ -38,13 +38,13 @@ typedef struct _group_member_opt {
} group_member_opt;
enum {
- QQ_GROUP_TYPE_PERMANENT = 0x01,
- QQ_GROUP_TYPE_TEMPORARY
+ QQ_ROOM_TYPE_PERMANENT = 0x01,
+ QQ_ROOM_TYPE_TEMPORARY
};
enum {
- QQ_GROUP_MEMBER_ADD = 0x01,
- QQ_GROUP_MEMBER_DEL
+ QQ_ROOM_MEMBER_ADD = 0x01,
+ QQ_ROOM_MEMBER_DEL
};
void qq_group_modify_members(PurpleConnection *gc, qq_group *group, guint32 *new_members);
diff --git a/libpurple/protocols/qq/group_search.c b/libpurple/protocols/qq/group_search.c
index c0ec194eb6..9996c70cfb 100644
--- a/libpurple/protocols/qq/group_search.c
+++ b/libpurple/protocols/qq/group_search.c
@@ -38,8 +38,8 @@
#include "qq_network.h"
enum {
- QQ_GROUP_SEARCH_TYPE_BY_ID = 0x01,
- QQ_GROUP_SEARCH_TYPE_DEMO = 0x02
+ QQ_ROOM_SEARCH_TYPE_BY_ID = 0x01,
+ QQ_ROOM_SEARCH_TYPE_DEMO = 0x02
};
/* send packet to search for qq_group */
@@ -49,7 +49,7 @@ void qq_send_cmd_group_search_group(PurpleConnection *gc, guint32 ext_id)
gint bytes = 0;
guint8 type;
- type = (ext_id == 0x00000000) ? QQ_GROUP_SEARCH_TYPE_DEMO : QQ_GROUP_SEARCH_TYPE_BY_ID;
+ type = (ext_id == 0x00000000) ? QQ_ROOM_SEARCH_TYPE_DEMO : QQ_ROOM_SEARCH_TYPE_BY_ID;
bytes = 0;
bytes += qq_put8(raw_data + bytes, type);
@@ -63,21 +63,21 @@ static void _qq_setup_roomlist(qq_data *qd, qq_group *group)
PurpleRoomlistRoom *room;
gchar field[11];
- room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, group->group_name_utf8, NULL);
+ room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, group->title_utf8, NULL);
g_snprintf(field, sizeof(field), "%d", group->ext_id);
purple_roomlist_room_add_field(qd->roomlist, room, field);
g_snprintf(field, sizeof(field), "%d", group->creator_uid);
purple_roomlist_room_add_field(qd->roomlist, room, field);
- purple_roomlist_room_add_field(qd->roomlist, room, group->group_desc_utf8);
+ purple_roomlist_room_add_field(qd->roomlist, room, group->desc_utf8);
g_snprintf(field, sizeof(field), "%d", group->id);
purple_roomlist_room_add_field(qd->roomlist, room, field);
g_snprintf(field, sizeof(field), "%d", group->type8);
purple_roomlist_room_add_field(qd->roomlist, room, field);
g_snprintf(field, sizeof(field), "%d", group->auth_type);
purple_roomlist_room_add_field(qd->roomlist, room, field);
- g_snprintf(field, sizeof(field), "%d", group->group_category);
+ g_snprintf(field, sizeof(field), "%d", group->category);
purple_roomlist_room_add_field(qd->roomlist, room, field);
- purple_roomlist_room_add_field(qd->roomlist, room, group->group_name_utf8);
+ purple_roomlist_room_add_field(qd->roomlist, room, group->title_utf8);
purple_roomlist_room_add(qd->roomlist, room);
purple_roomlist_set_in_progress(qd->roomlist, FALSE);
@@ -109,14 +109,14 @@ void qq_process_group_cmd_search_group(guint8 *data, gint len, PurpleConnection
bytes += qq_get16(&(unknown), data + bytes);
bytes += qq_get16(&(unknown), data + bytes);
bytes += qq_get16(&(unknown), data + bytes);
- bytes += qq_get32(&(group.group_category), data + bytes);
- bytes += convert_as_pascal_string(data + bytes, &(group.group_name_utf8), QQ_CHARSET_DEFAULT);
+ bytes += qq_get32(&(group.category), data + bytes);
+ bytes += convert_as_pascal_string(data + bytes, &(group.title_utf8), QQ_CHARSET_DEFAULT);
bytes += qq_get16(&(unknown), data + bytes);
bytes += qq_get8(&(group.auth_type), data + bytes);
- bytes += convert_as_pascal_string(data + bytes, &(group.group_desc_utf8), QQ_CHARSET_DEFAULT);
+ bytes += convert_as_pascal_string(data + bytes, &(group.desc_utf8), QQ_CHARSET_DEFAULT);
/* end of one qq_group */
if(bytes != len) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"group_cmd_search_group: Dangerous error! maybe protocol changed, notify developers!");
}
@@ -124,9 +124,9 @@ void qq_process_group_cmd_search_group(guint8 *data, gint len, PurpleConnection
if (pending_id != NULL) {
qq_set_pending_id(&qd->joining_groups, group.ext_id, FALSE);
if (qq_room_search_id(gc, group.id) == NULL)
- qq_group_create_internal_record(gc,
- group.id, group.ext_id, group.group_name_utf8);
- qq_send_cmd_group_join_group(gc, &group);
+ qq_group_create_internal_record(gc,
+ group.id, group.ext_id, group.title_utf8);
+ qq_request_room_join(gc, &group);
} else {
_qq_setup_roomlist(qd, &group);
}
diff --git a/libpurple/protocols/qq/header_info.c b/libpurple/protocols/qq/header_info.c
index d39594c128..5dfe85c54e 100644
--- a/libpurple/protocols/qq/header_info.c
+++ b/libpurple/protocols/qq/header_info.c
@@ -122,7 +122,7 @@ const gchar *qq_get_ver_desc(gint source)
case QQ_SERVER_0100:
return "QQ Server 0100";
default:
- return "Unknown";
+ return "Unknown Version";
}
}
@@ -138,16 +138,16 @@ const gchar *qq_get_cmd_desc(gint cmd)
return "QQ_CMD_UPDATE_INFO";
case QQ_CMD_SEARCH_USER:
return "QQ_CMD_SEARCH_USER";
- case QQ_CMD_GET_USER_INFO:
- return "QQ_CMD_GET_USER_INFO";
+ case QQ_CMD_GET_BUDDY_INFO:
+ return "QQ_CMD_GET_BUDDY_INFO";
case QQ_CMD_ADD_BUDDY_WO_AUTH:
return "QQ_CMD_ADD_BUDDY_WO_AUTH";
case QQ_CMD_DEL_BUDDY:
return "QQ_CMD_DEL_BUDDY";
case QQ_CMD_BUDDY_AUTH:
return "QQ_CMD_BUDDY_AUTH";
- case QQ_CMD_CHANGE_ONLINE_STATUS:
- return "QQ_CMD_CHANGE_ONLINE_STATUS";
+ case QQ_CMD_CHANGE_STATUS:
+ return "QQ_CMD_CHANGE_STATUS";
case QQ_CMD_ACK_SYS_MSG:
return "QQ_CMD_ACK_SYS_MSG";
case QQ_CMD_SEND_IM:
@@ -172,10 +172,10 @@ const gchar *qq_get_cmd_desc(gint cmd)
return "QQ_CMD_TOKEN";
case QQ_CMD_RECV_MSG_SYS:
return "QQ_CMD_RECV_MSG_SYS";
- case QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS:
- return "QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS";
+ case QQ_CMD_BUDDY_CHANGE_STATUS:
+ return "QQ_CMD_BUDDY_CHANGE_STATUS";
default:
- return "Unknown";
+ return "Unknown CMD";
}
}
@@ -204,8 +204,8 @@ const gchar *qq_get_room_cmd_desc(gint room_cmd)
return "QQ_ROOM_CMD_SEND_MSG";
case QQ_ROOM_CMD_GET_ONLINES:
return "QQ_ROOM_CMD_GET_ONLINES";
- case QQ_ROOM_CMD_GET_MEMBER_INFO:
- return "QQ_ROOM_CMD_GET_MEMBER_INFO";
+ case QQ_ROOM_CMD_GET_BUDDIES:
+ return "QQ_ROOM_CMD_GET_BUDDIES";
case QQ_ROOM_CMD_CHANGE_CARD:
return "QQ_ROOM_CMD_CHANGE_CARD";
case QQ_ROOM_CMD_GET_REALNAMES:
@@ -231,6 +231,6 @@ const gchar *qq_get_room_cmd_desc(gint room_cmd)
case QQ_ROOM_CMD_TEMP_GET_MEMBERS:
return "QQ_ROOM_CMD_TEMP_GET_MEMBERS";
default:
- return "Unknown QQ Room Command";
+ return "Unknown Room Command";
}
}
diff --git a/libpurple/protocols/qq/header_info.h b/libpurple/protocols/qq/header_info.h
index caa671e78e..6f792e0c66 100644
--- a/libpurple/protocols/qq/header_info.h
+++ b/libpurple/protocols/qq/header_info.h
@@ -43,11 +43,11 @@ enum {
QQ_CMD_KEEP_ALIVE = 0x0002, /* get onlines from tencent */
QQ_CMD_UPDATE_INFO = 0x0004, /* update information */
QQ_CMD_SEARCH_USER = 0x0005, /* search for user */
- QQ_CMD_GET_USER_INFO = 0x0006, /* get user information */
+ QQ_CMD_GET_BUDDY_INFO = 0x0006, /* get user information */
QQ_CMD_ADD_BUDDY_WO_AUTH = 0x0009, /* add buddy without auth */
QQ_CMD_DEL_BUDDY = 0x000a, /* delete a buddy */
QQ_CMD_BUDDY_AUTH = 0x000b, /* buddy authentication */
- QQ_CMD_CHANGE_ONLINE_STATUS = 0x000d, /* change my online status */
+ QQ_CMD_CHANGE_STATUS = 0x000d, /* change my online status */
QQ_CMD_ACK_SYS_MSG = 0x0012, /* ack system message */
QQ_CMD_SEND_IM = 0x0016, /* send message */
QQ_CMD_RECV_IM = 0x0017, /* receive message */
@@ -59,11 +59,11 @@ enum {
QQ_CMD_GET_BUDDIES_ONLINE = 0x0027, /* get online buddies list */
QQ_CMD_CELL_PHONE_2 = 0x0029, /* cell phone 2 */
QQ_CMD_ROOM = 0x0030, /* room command */
- QQ_CMD_GET_BUDDIES_AND_ROOMS = 0x0058,
+ QQ_CMD_GET_BUDDIES_AND_ROOMS = 0x0058,
QQ_CMD_GET_LEVEL = 0x005C, /* get level for one or more buddies */
QQ_CMD_TOKEN = 0x0062, /* get login token */
QQ_CMD_RECV_MSG_SYS = 0x0080, /* receive a system message */
- QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS = 0x0081, /* buddy change status */
+ QQ_CMD_BUDDY_CHANGE_STATUS = 0x0081, /* buddy change status */
};
const gchar *qq_get_cmd_desc(gint type);
@@ -80,7 +80,7 @@ enum {
QQ_ROOM_CMD_QUIT = 0x09,
QQ_ROOM_CMD_SEND_MSG = 0x0a,
QQ_ROOM_CMD_GET_ONLINES = 0x0b,
- QQ_ROOM_CMD_GET_MEMBER_INFO = 0x0c,
+ QQ_ROOM_CMD_GET_BUDDIES = 0x0c,
QQ_ROOM_CMD_CHANGE_CARD = 0x0E,
QQ_ROOM_CMD_GET_REALNAMES = 0x0F,
diff --git a/libpurple/protocols/qq/im.c b/libpurple/protocols/qq/im.c
index 15642528d1..845bcc6bed 100644
--- a/libpurple/protocols/qq/im.c
+++ b/libpurple/protocols/qq/im.c
@@ -209,21 +209,17 @@ static const gchar *qq_get_recv_im_type_str(gint type)
return "QQ_RECV_IM_TEMP_QUN_IM";
case QQ_RECV_IM_QUN_IM:
return "QQ_RECV_IM_QUN_IM";
+ case QQ_RECV_IM_NEWS:
+ return "QQ_RECV_IM_NEWS";
+ case QQ_RECV_IM_FROM_BUDDY_2006:
+ return "QQ_RECV_IM_FROM_BUDDY_2006";
+ case QQ_RECV_IM_FROM_UNKNOWN_2006:
+ return "QQ_RECV_IM_FROM_UNKNOWN_2006";
default:
return "QQ_RECV_IM_UNKNOWN";
}
}
-/* when we receive a message,
- * we send an ACK which is the first 16 bytes of incoming packet */
-static void _qq_send_packet_recv_im_ack(PurpleConnection *gc, guint16 seq, guint8 *data)
-{
- qq_data *qd;
-
- qd = (qq_data *) gc->proto_data;
- qq_send_cmd_detail(qd, QQ_CMD_RECV_IM, seq, FALSE, data, 16);
-}
-
/* read the common parts of the normal_im,
* returns the bytes read if succeed, or -1 if there is any error */
static gint _qq_normal_im_common_read(guint8 *data, gint len, qq_recv_normal_im_common *common)
@@ -240,13 +236,64 @@ static gint _qq_normal_im_common_read(guint8 *data, gint len, qq_recv_normal_im_
bytes += qq_get16(&(common->normal_im_type), data + bytes);
if (bytes != 28) { /* read common place fail */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Expect 28 bytes, read %d bytes\n", bytes);
+ purple_debug_error("QQ", "Expect 28 bytes, read %d bytes\n", bytes);
return -1;
}
return bytes;
}
+static void _qq_process_recv_news(guint8 *data, gint data_len, PurpleConnection *gc)
+{
+ qq_data *qd = (qq_data *) gc->proto_data;
+ gint bytes;
+ guint8 *temp;
+ guint8 temp_len;
+ gchar *title, *brief, *url;
+ gchar *title_utf8;
+ gchar *content, *content_utf8;
+
+ g_return_if_fail(data != NULL && data_len != 0);
+
+#if 0
+ qq_show_packet("Rcv news", data, data_len);
+#endif
+
+ temp = g_newa(guint8, data_len);
+ bytes = 4; /* ignore unknown 4 bytes */
+
+ bytes += qq_get8(&temp_len, data + bytes);
+ g_return_if_fail(bytes + temp_len <= data_len);
+ bytes += qq_getdata(temp, temp_len, data+bytes);
+ title = g_strndup((gchar *)temp, temp_len);
+
+ bytes += qq_get8(&temp_len, data + bytes);
+ g_return_if_fail(bytes + temp_len <= data_len);
+ bytes += qq_getdata(temp, temp_len, data+bytes);
+ brief = g_strndup((gchar *)temp, temp_len);
+
+ bytes += qq_get8(&temp_len, data + bytes);
+ g_return_if_fail(bytes + temp_len <= data_len);
+ bytes += qq_getdata(temp, temp_len, data+bytes);
+ url = g_strndup((gchar *)temp, temp_len);
+
+ title_utf8 = qq_to_utf8(title, QQ_CHARSET_DEFAULT);
+ content = g_strdup_printf(_("%s\n\n%s"), brief, url);
+ content_utf8 = qq_to_utf8(content, QQ_CHARSET_DEFAULT);
+
+ if (qd->is_show_news) {
+ purple_notify_info(gc, _("QQ Server News"), title_utf8, content_utf8);
+ } else {
+ purple_debug_info("QQ", "QQ Server news:\n%s\n%s", title_utf8, content_utf8);
+ }
+ g_free(title);
+ g_free(title_utf8);
+ g_free(brief);
+ g_free(url);
+ g_free(content);
+ g_free(content_utf8);
+}
+
/* process received normal text IM */
static void _qq_process_recv_normal_im_text(guint8 *data, gint len, qq_recv_normal_im_common *common, PurpleConnection *gc)
{
@@ -266,7 +313,7 @@ static void _qq_process_recv_normal_im_text(guint8 *data, gint len, qq_recv_norm
/* now it is QQ_NORMAL_IM_TEXT */
/*
if (*cursor >= (data + len - 1)) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Received normal IM text is empty\n");
+ purple_debug_warning("QQ", "Received normal IM text is empty\n");
return;
} else
*/
@@ -313,9 +360,9 @@ static void _qq_process_recv_normal_im_text(guint8 *data, gint len, qq_recv_norm
}
qq_b = (b == NULL) ? NULL : (qq_buddy *) b->proto_data;
if (qq_b != NULL) {
- qq_b->client_version = common->sender_ver;
+ qq_b->client_version = common->sender_ver;
}
-
+
purple_msg_type = (im_text->msg_type == QQ_IM_AUTO_REPLY) ? PURPLE_MESSAGE_AUTO_RESP : 0;
msg_with_purple_smiley = qq_smiley_to_purple(im_text->msg);
@@ -350,19 +397,18 @@ static void _qq_process_recv_normal_im(guint8 *data, gint len, PurpleConnection
bytes = _qq_normal_im_common_read(data, len, common);
if (bytes < 0) {
- purple_debug (PURPLE_DEBUG_ERROR, "QQ",
- "Fail read the common part of normal IM\n");
+ purple_debug_error("QQ", "Fail read the common part of normal IM\n");
return;
}
switch (common->normal_im_type) {
case QQ_NORMAL_IM_TEXT:
- purple_debug (PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"Normal IM, text type:\n [%d] => [%d], src: %s (%04X)\n",
common->sender_uid, common->receiver_uid,
qq_get_ver_desc (common->sender_ver), common->sender_ver);
if (bytes >= len - 1) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Received normal IM text is empty\n");
+ purple_debug_warning("QQ", "Received normal IM text is empty\n");
return;
}
_qq_process_recv_normal_im_text(data + bytes, len - bytes, common, gc);
@@ -382,16 +428,50 @@ static void _qq_process_recv_normal_im(guint8 *data, gint len, PurpleConnection
case QQ_NORMAL_IM_FILE_NOTIFY:
qq_process_recv_file_notify(data + bytes, len - bytes, common->sender_uid, gc);
break;
+ case QQ_NORMAL_IM_FILE_REQUEST_TCP:
+ /* Check ReceivedFileIM::parseContents in eva*/
+ /* some client use this function for detect invisable buddy*/
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_REQUEST_TCP\n");
+ qq_show_packet ("Not support", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_APPROVE_TCP:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_APPROVE_TCP\n");
+ qq_show_packet ("Not support", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_REJECT_TCP:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_REJECT_TCP\n");
+ qq_show_packet ("Not support", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_PASV:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_PASV\n");
+ qq_show_packet ("Not support", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_EX_REQUEST_UDP:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_REQUEST_TCP\n");
+ qq_show_packet ("QQ", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_EX_REQUEST_ACCEPT:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_EX_REQUEST_ACCEPT\n");
+ qq_show_packet ("QQ", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_EX_REQUEST_CANCEL:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_EX_REQUEST_CANCEL\n");
+ qq_show_packet ("Not support", data, len);
+ break;
+ case QQ_NORMAL_IM_FILE_EX_NOTIFY_IP:
+ purple_debug_warning("QQ", "Normal IM, not support QQ_NORMAL_IM_FILE_EX_NOTIFY_IP\n");
+ qq_show_packet ("Not support", data, len);
+ break;
default:
im_unprocessed = g_newa (qq_recv_normal_im_unprocessed, 1);
im_unprocessed->common = common;
im_unprocessed->unknown = data + bytes;
im_unprocessed->length = len - bytes;
/* a simple process here, maybe more later */
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"Normal IM, unprocessed type [0x%04x], len %d\n",
common->normal_im_type, im_unprocessed->length);
- qq_show_packet ("QQ unk-im", im_unprocessed->unknown, im_unprocessed->length);
+ qq_show_packet ("QQ", im_unprocessed->unknown, im_unprocessed->length);
return;
}
}
@@ -412,7 +492,7 @@ static void _qq_process_recv_sys_im(guint8 *data, gint data_len, PurpleConnectio
reply = strtol(segments[0], NULL, 10);
if (reply == QQ_RECV_SYS_IM_KICK_OUT)
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "We are kicked out by QQ server\n");
+ purple_debug_warning("QQ", "We are kicked out by QQ server\n");
msg_utf8 = qq_to_utf8(segments[1], QQ_CHARSET_DEFAULT);
purple_notify_warning(gc, NULL, _("System Message"), msg_utf8);
}
@@ -475,7 +555,7 @@ void qq_send_packet_im(PurpleConnection *gc, guint32 to_uid, gchar *msg, gint ty
g_datalist_clear(&attribs);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ_MESG", "send mesg: %s\n", msg);
+ purple_debug_info("QQ_MESG", "send mesg: %s\n", msg);
msg_filtered = purple_markup_strip_html(msg);
msg_len = strlen(msg_filtered);
now = time(NULL);
@@ -526,9 +606,9 @@ void qq_send_packet_im(PurpleConnection *gc, guint32 to_uid, gchar *msg, gint ty
qq_show_packet("QQ_raw_data debug", raw_data, bytes);
if (bytes == raw_len) /* create packet OK */
- qq_send_cmd(qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
else
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Fail creating send_im packet, expect %d bytes, build %d bytes\n", raw_len, bytes);
if (font_color)
@@ -549,10 +629,10 @@ void qq_process_send_im_reply(guint8 *data, gint data_len, PurpleConnection *gc)
qd = gc->proto_data;
if (data[0] != QQ_SEND_IM_REPLY_OK) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Send IM fail\n");
+ purple_debug_warning("QQ", "Send IM fail\n");
purple_notify_error(gc, _("Error"), _("Failed to send IM."), NULL);
} else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "IM ACK OK\n");
+ purple_debug_info("QQ", "IM ACK OK\n");
}
}
@@ -569,16 +649,17 @@ void qq_process_recv_im(guint8 *data, gint data_len, guint16 seq, PurpleConnecti
qd = (qq_data *) gc->proto_data;
if (data_len < 16) { /* we need to ack with the first 16 bytes */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "IM is too short\n");
+ purple_debug_error("QQ", "MSG is too short\n");
return;
} else {
- _qq_send_packet_recv_im_ack(gc, seq, data);
+ /* when we receive a message,
+ * we send an ACK which is the first 16 bytes of incoming packet */
+ qq_send_server_reply(gc, QQ_CMD_RECV_IM, seq, data, 16);
}
/* check len first */
if (data_len < 20) { /* length of im_header */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "Fail read recv IM header, len should longer than 20 bytes, read %d bytes\n", data_len);
+ purple_debug_error("QQ", "Invald MSG header, len %d < 20\n", data_len);
return;
}
@@ -594,77 +675,71 @@ void qq_process_recv_im(guint8 *data, gint data_len, guint16 seq, PurpleConnecti
/* im_header prepared */
if (im_header->receiver_uid != qd->uid) { /* should not happen */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "IM to [%d], NOT me\n", im_header->receiver_uid);
+ purple_debug_error("QQ", "MSG to [%d], NOT me\n", im_header->receiver_uid);
return;
}
/* check bytes */
if (bytes >= data_len - 1) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ", "Received IM is empty\n");
+ purple_debug_warning("QQ", "Empty MSG\n");
return;
}
switch (im_header->im_type) {
- case QQ_RECV_IM_TO_BUDDY:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from buddy [%d], I am in his/her buddy list\n", im_header->sender_uid);
- _qq_process_recv_normal_im(data + bytes, data_len - bytes, gc); /* position and rest length */
+ case QQ_RECV_IM_NEWS:
+ _qq_process_recv_news(data + bytes, data_len - bytes, gc);
break;
+ case QQ_RECV_IM_FROM_BUDDY_2006:
+ case QQ_RECV_IM_FROM_UNKNOWN_2006:
case QQ_RECV_IM_TO_UNKNOWN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from buddy [%d], I am a stranger to him/her\n", im_header->sender_uid);
+ case QQ_RECV_IM_TO_BUDDY:
+ purple_debug_info("QQ", "MSG from buddy [%d]\n", im_header->sender_uid);
_qq_process_recv_normal_im(data + bytes, data_len - bytes, gc);
break;
case QQ_RECV_IM_UNKNOWN_QUN_IM:
case QQ_RECV_IM_TEMP_QUN_IM:
case QQ_RECV_IM_QUN_IM:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "IM from group, internal_id [%d]\n", im_header->sender_uid);
+ purple_debug_info("QQ", "MSG from room [%d]\n", im_header->sender_uid);
/* sender_uid is in fact id */
- qq_process_recv_group_im(data + bytes, data_len - bytes, im_header->sender_uid, gc, im_header->im_type);
+ qq_process_room_msg_normal(data + bytes, data_len - bytes, im_header->sender_uid, gc, im_header->im_type);
break;
case QQ_RECV_IM_ADD_TO_QUN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from group, added by group internal_id [%d]\n", im_header->sender_uid);
+ purple_debug_info("QQ", "Notice from [%d], Added\n", im_header->sender_uid);
/* sender_uid is group id
* we need this to create a dummy group and add to blist */
- qq_process_recv_group_im_been_added(data + bytes, data_len - bytes, im_header->sender_uid, gc);
+ qq_process_room_msg_been_added(data + bytes, data_len - bytes, im_header->sender_uid, gc);
break;
case QQ_RECV_IM_DEL_FROM_QUN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from group, removed by group internal_ID [%d]\n", im_header->sender_uid);
+ purple_debug_info("QQ", "Notice from room [%d], Removed\n", im_header->sender_uid);
/* sender_uid is group id */
- qq_process_recv_group_im_been_removed(data + bytes, data_len - bytes, im_header->sender_uid, gc);
+ qq_process_room_msg_been_removed(data + bytes, data_len - bytes, im_header->sender_uid, gc);
break;
case QQ_RECV_IM_APPLY_ADD_TO_QUN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from group, apply to join group internal_ID [%d]\n", im_header->sender_uid);
+ purple_debug_info("QQ", "Notice from room [%d], Joined\n", im_header->sender_uid);
/* sender_uid is group id */
- qq_process_recv_group_im_apply_join(data + bytes, data_len - bytes, im_header->sender_uid, gc);
+ qq_process_room_msg_apply_join(data + bytes, data_len - bytes, im_header->sender_uid, gc);
break;
case QQ_RECV_IM_APPROVE_APPLY_ADD_TO_QUN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM for group system info, approved by group internal_id [%d]\n",
+ purple_debug_info("QQ", "Notice from room [%d], Confirm add in\n",
im_header->sender_uid);
/* sender_uid is group id */
- qq_process_recv_group_im_been_approved(data + bytes, data_len - bytes, im_header->sender_uid, gc);
+ qq_process_room_msg_been_approved(data + bytes, data_len - bytes, im_header->sender_uid, gc);
break;
case QQ_RECV_IM_REJCT_APPLY_ADD_TO_QUN:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM for group system info, rejected by group internal_id [%d]\n",
+ purple_debug_info("QQ", "Notice from room [%d], Refuse add in\n",
im_header->sender_uid);
/* sender_uid is group id */
- qq_process_recv_group_im_been_rejected(data + bytes, data_len - bytes, im_header->sender_uid, gc);
+ qq_process_room_msg_been_rejected(data + bytes, data_len - bytes, im_header->sender_uid, gc);
break;
case QQ_RECV_IM_SYS_NOTIFICATION:
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "IM from [%d], should be a system administrator\n", im_header->sender_uid);
+ purple_debug_info("QQ", "Admin notice from [%d]\n", im_header->sender_uid);
_qq_process_recv_sys_im(data + bytes, data_len - bytes, gc);
break;
default:
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "IM from [%d], [0x%02x] %s is not processed\n",
- im_header->sender_uid,
- im_header->im_type, qq_get_recv_im_type_str(im_header->im_type));
+ purple_debug_warning("QQ", "MSG from [%d], unknown type %s [0x%02x]\n",
+ im_header->sender_uid, qq_get_recv_im_type_str(im_header->im_type),
+ im_header->im_type);
+ qq_show_packet("Unknown MSG type", data, data_len);
}
}
diff --git a/libpurple/protocols/qq/im.h b/libpurple/protocols/qq/im.h
index 5e55413b23..4ada57fafd 100644
--- a/libpurple/protocols/qq/im.h
+++ b/libpurple/protocols/qq/im.h
@@ -41,6 +41,7 @@ enum {
enum {
QQ_RECV_IM_TO_BUDDY = 0x0009,
QQ_RECV_IM_TO_UNKNOWN = 0x000a,
+ QQ_RECV_IM_NEWS = 0x0018,
QQ_RECV_IM_UNKNOWN_QUN_IM = 0x0020,
QQ_RECV_IM_ADD_TO_QUN = 0x0021,
QQ_RECV_IM_DEL_FROM_QUN = 0x0022,
@@ -50,7 +51,9 @@ enum {
QQ_RECV_IM_CREATE_QUN = 0x0026,
QQ_RECV_IM_TEMP_QUN_IM = 0x002A,
QQ_RECV_IM_QUN_IM = 0x002B,
- QQ_RECV_IM_SYS_NOTIFICATION = 0x0030
+ QQ_RECV_IM_SYS_NOTIFICATION = 0x0030,
+ QQ_RECV_IM_FROM_BUDDY_2006 = 0x0084,
+ QQ_RECV_IM_FROM_UNKNOWN_2006 = 0x0085,
};
guint8 *qq_get_send_im_tail(const gchar *font_color,
diff --git a/libpurple/protocols/qq/packet_parse.c b/libpurple/protocols/qq/packet_parse.c
index 8698a78dc8..7e71960aae 100644
--- a/libpurple/protocols/qq/packet_parse.c
+++ b/libpurple/protocols/qq/packet_parse.c
@@ -46,8 +46,8 @@ gint qq_get8(guint8 *b, guint8 *buf)
memcpy(&b_dest, buf, sizeof(b_dest));
*b = b_dest;
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get8] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get8] b_dest 0x%2x, *b 0x%02x\n", b_dest, *b);
+ purple_debug_info("QQ", "[DBG][get8] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][get8] b_dest 0x%2x, *b 0x%02x\n", b_dest, *b);
#endif
return sizeof(b_dest);
}
@@ -61,8 +61,8 @@ gint qq_get16(guint16 *w, guint8 *buf)
memcpy(&w_dest, buf, sizeof(w_dest));
*w = g_ntohs(w_dest);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get16] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get16] w_dest 0x%04x, *w 0x%04x\n", w_dest, *w);
+ purple_debug_info("QQ", "[DBG][get16] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][get16] w_dest 0x%04x, *w 0x%04x\n", w_dest, *w);
#endif
return sizeof(w_dest);
}
@@ -75,8 +75,8 @@ gint qq_get32(guint32 *dw, guint8 *buf)
memcpy(&dw_dest, buf, sizeof(dw_dest));
*dw = g_ntohl(dw_dest);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get32] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][get32] dw_dest 0x%08x, *dw 0x%08x\n", dw_dest, *dw);
+ purple_debug_info("QQ", "[DBG][get32] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][get32] dw_dest 0x%08x, *dw 0x%08x\n", dw_dest, *dw);
#endif
return sizeof(dw_dest);
}
@@ -93,7 +93,7 @@ gint qq_getdata(guint8 *data, gint datalen, guint8 *buf)
{
memcpy(data, buf, datalen);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][getdata] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][getdata] buf %p\n", (void *)buf);
#endif
return datalen;
}
@@ -107,12 +107,12 @@ gint qq_getime(time_t *t, guint8 *buf)
guint32 dw_dest;
memcpy(&dw_dest, buf, sizeof(dw_dest));
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][getime] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][getime] dw_dest before 0x%08x\n", dw_dest);
+ purple_debug_info("QQ", "[DBG][getime] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][getime] dw_dest before 0x%08x\n", dw_dest);
#endif
dw_dest = g_ntohl(dw_dest);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][getime] dw_dest after 0x%08x\n", dw_dest);
+ purple_debug_info("QQ", "[DBG][getime] dw_dest after 0x%08x\n", dw_dest);
#endif
memcpy(t, &dw_dest, sizeof(dw_dest));
return sizeof(dw_dest);
@@ -125,8 +125,8 @@ gint qq_put8(guint8 *buf, guint8 b)
{
memcpy(buf, &b, sizeof(b));
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put8] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put8] b 0x%02x\n", b);
+ purple_debug_info("QQ", "[DBG][put8] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][put8] b 0x%02x\n", b);
#endif
return sizeof(b);
}
@@ -139,8 +139,8 @@ gint qq_put16(guint8 *buf, guint16 w)
guint16 w_porter;
w_porter = g_htons(w);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put16] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put16] w 0x%04x, w_porter 0x%04x\n", w, w_porter);
+ purple_debug_info("QQ", "[DBG][put16] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][put16] w 0x%04x, w_porter 0x%04x\n", w, w_porter);
#endif
memcpy(buf, &w_porter, sizeof(w_porter));
return sizeof(w_porter);
@@ -154,8 +154,8 @@ gint qq_put32(guint8 *buf, guint32 dw)
guint32 dw_porter;
dw_porter = g_htonl(dw);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put32] buf %p\n", (void *)buf);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][put32] dw 0x%08x, dw_porter 0x%08x\n", dw, dw_porter);
+ purple_debug_info("QQ", "[DBG][put32] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][put32] dw 0x%08x, dw_porter 0x%08x\n", dw, dw_porter);
#endif
memcpy(buf, &dw_porter, sizeof(dw_porter));
return sizeof(dw_porter);
@@ -173,7 +173,7 @@ gint qq_putdata(guint8 *buf, const guint8 *data, const int datalen)
{
memcpy(buf, data, datalen);
#ifdef PARSER_DEBUG
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "[DBG][putdata] buf %p\n", (void *)buf);
+ purple_debug_info("QQ", "[DBG][putdata] buf %p\n", (void *)buf);
#endif
return datalen;
}
diff --git a/libpurple/protocols/qq/qq.c b/libpurple/protocols/qq/qq.c
index 1107242bd3..58a02c8bbb 100644
--- a/libpurple/protocols/qq/qq.c
+++ b/libpurple/protocols/qq/qq.c
@@ -24,10 +24,6 @@
#include "internal.h"
-#ifdef _WIN32
-#define random rand
-#endif
-
#include "accountopt.h"
#include "debug.h"
#include "notify.h"
@@ -62,79 +58,69 @@
#define OPENQ_AUTHOR "Puzzlebird"
#define OPENQ_WEBSITE "http://openq.sourceforge.net"
-#define QQ_TCP_PORT 8000
-#define QQ_UDP_PORT 8000
+static GList *server_list_build(gchar select)
+{
+ GList *list = NULL;
+
+ if ( select == 'T' || select == 'A') {
+ list = g_list_append(list, "tcpconn.tencent.com:8000");
+ list = g_list_append(list, "tcpconn2.tencent.com:8000");
+ list = g_list_append(list, "tcpconn3.tencent.com:8000");
+ list = g_list_append(list, "tcpconn4.tencent.com:8000");
+ list = g_list_append(list, "tcpconn5.tencent.com:8000");
+ list = g_list_append(list, "tcpconn6.tencent.com:8000");
+ }
+ if ( select == 'U' || select == 'A') {
+ list = g_list_append(list, "sz.tencent.com:8000");
+ list = g_list_append(list, "sz2.tencent.com:8000");
+ list = g_list_append(list, "sz3.tencent.com:8000");
+ list = g_list_append(list, "sz4.tencent.com:8000");
+ list = g_list_append(list, "sz5.tencent.com:8000");
+ list = g_list_append(list, "sz6.tencent.com:8000");
+ list = g_list_append(list, "sz7.tencent.com:8000");
+ list = g_list_append(list, "sz8.tencent.com:8000");
+ list = g_list_append(list, "sz9.tencent.com:8000");
+ }
+ return list;
+}
-static void server_list_create(PurpleAccount *account) {
+static void server_list_create(PurpleAccount *account)
+{
PurpleConnection *gc;
qq_data *qd;
+ PurpleProxyInfo *gpi;
const gchar *user_server;
- int port;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Create server list\n");
gc = purple_account_get_connection(account);
g_return_if_fail(gc != NULL && gc->proto_data != NULL);
qd = gc->proto_data;
+ gpi = purple_proxy_get_setup(account);
+
qd->use_tcp = purple_account_get_bool(account, "use_tcp", TRUE);
- port = purple_account_get_int(account, "port", 0);
- if (port == 0) {
- if (qd->use_tcp) {
- port = QQ_TCP_PORT;
- } else {
- port = QQ_UDP_PORT;
- }
- }
- qd->user_port = port;
- g_return_if_fail(qd->user_server == NULL);
user_server = purple_account_get_string(account, "server", NULL);
- if (user_server != NULL && strlen(user_server) > 0) {
- qd->user_server = g_strdup(user_server);
- }
-
- if (qd->user_server != NULL) {
- qd->servers = g_list_append(qd->servers, qd->user_server);
+ purple_debug_info("QQ", "Select server '%s'\n", user_server);
+ if ( (user_server != NULL && strlen(user_server) > 0) && strcasecmp(user_server, "auto") != 0) {
+ qd->servers = g_list_append(qd->servers, g_strdup(user_server));
return;
}
+
if (qd->use_tcp) {
- qd->servers = g_list_append(qd->servers, "tcpconn.tencent.com");
- qd->servers = g_list_append(qd->servers, "tcpconn2.tencent.com");
- qd->servers = g_list_append(qd->servers, "tcpconn3.tencent.com");
- qd->servers = g_list_append(qd->servers, "tcpconn4.tencent.com");
- qd->servers = g_list_append(qd->servers, "tcpconn5.tencent.com");
- qd->servers = g_list_append(qd->servers, "tcpconn6.tencent.com");
+ qd->servers = server_list_build('T');
return;
}
-
- qd->servers = g_list_append(qd->servers, "sz.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz2.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz3.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz4.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz5.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz6.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz7.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz8.tencent.com");
- qd->servers = g_list_append(qd->servers, "sz9.tencent.com");
+
+ qd->servers = server_list_build('U');
}
-static void server_list_remove_all(qq_data *qd) {
+static void server_list_remove_all(qq_data *qd)
+{
g_return_if_fail(qd != NULL);
- if (qd->real_hostname) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free real_hostname\n");
- g_free(qd->real_hostname);
- qd->real_hostname = NULL;
- }
-
- if (qd->user_server != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free user_server\n");
- g_free(qd->user_server);
- qd->user_server = NULL;
- }
-
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free server list\n");
+ purple_debug_info("QQ", "free server list\n");
g_list_free(qd->servers);
+ qd->curr_server = NULL;
}
static void qq_login(PurpleAccount *account)
@@ -151,6 +137,7 @@ static void qq_login(PurpleAccount *account)
gc->flags |= PURPLE_CONNECTION_HTML | PURPLE_CONNECTION_NO_BGCOLOR | PURPLE_CONNECTION_AUTO_RESP;
qd = g_new0(qq_data, 1);
+ memset(qd, 0, sizeof(qq_data));
qd->gc = gc;
gc->proto_data = qd;
@@ -165,10 +152,36 @@ static void qq_login(PurpleAccount *account)
}
server_list_create(account);
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Server list has %d\n", g_list_length(qd->servers));
+ purple_debug_info("QQ", "Server list has %d\n", g_list_length(qd->servers));
+
+ qd->is_show_notice = purple_account_get_bool(account, "show_notice", TRUE);
+ qd->is_show_news = purple_account_get_bool(account, "show_news", TRUE);
- qq_connect(account);
+ qd->resend_times = purple_prefs_get_int("/plugins/prpl/qq/resend_times");
+ if (qd->resend_times <= 1) qd->itv_config.resend = 4;
+
+ qd->itv_config.resend = purple_prefs_get_int("/plugins/prpl/qq/resend_interval");
+ if (qd->itv_config.resend <= 0) qd->itv_config.resend = 3;
+ purple_debug_info("QQ", "Resend interval %d, retries %d\n",
+ qd->itv_config.resend, qd->resend_times);
+
+ qd->itv_config.keep_alive = purple_account_get_int(account, "keep_alive_interval", 60);
+ if (qd->itv_config.keep_alive < 30) qd->itv_config.keep_alive = 30;
+ qd->itv_config.keep_alive /= qd->itv_config.resend;
+ qd->itv_count.keep_alive = qd->itv_config.keep_alive;
+
+ qd->itv_config.update = purple_account_get_int(account, "update_interval", 300);
+ if (qd->itv_config.update > 0) {
+ if (qd->itv_config.update < qd->itv_config.keep_alive) {
+ qd->itv_config.update = qd->itv_config.keep_alive;
+ }
+ qd->itv_config.update /= qd->itv_config.resend;
+ qd->itv_count.update = qd->itv_config.update;
+ } else {
+ qd->itv_config.update = 0;
+ }
+
+ qd->connect_watcher = purple_timeout_add_seconds(0, qq_connect_later, gc);
}
/* clean up the given QQ connection and free all resources */
@@ -179,12 +192,20 @@ static void qq_close(PurpleConnection *gc)
g_return_if_fail(gc != NULL && gc->proto_data);
qd = gc->proto_data;
- qq_disconnect(gc);
+ if (qd->check_watcher > 0) {
+ purple_timeout_remove(qd->check_watcher);
+ qd->check_watcher = 0;
+ }
+
+ if (qd->connect_watcher > 0) {
+ purple_timeout_remove(qd->connect_watcher);
+ qd->connect_watcher = 0;
+ }
+ qq_disconnect(gc);
server_list_remove_all(qd);
-
- g_free(qd);
+ g_free(qd);
gc->proto_data = NULL;
}
@@ -212,10 +233,10 @@ static gchar *_qq_status_text(PurpleBuddy *b)
g_string_append(status, _("Offline"));
break;
case QQ_BUDDY_ONLINE_NORMAL:
- return NULL;
+ g_string_append(status, _("Online"));
break;
/* TODO What does this status mean? Labelling it as offline... */
- case QQ_BUDDY_ONLINE_OFFLINE:
+ case QQ_BUDDY_CHANGE_TO_OFFLINE:
g_string_append(status, _("Offline"));
break;
case QQ_BUDDY_ONLINE_AWAY:
@@ -303,8 +324,8 @@ static void _qq_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gb
g_string_append( str, _(" Video") );
}
- if (q_bud->ext_flag & QQ_EXT_FLAG_SPACE) {
- g_string_append( str, _(" Space") );
+ if (q_bud->ext_flag & QQ_EXT_FLAG_ZONE) {
+ g_string_append( str, _(" Zone") );
}
purple_notify_user_info_add_pair(user_info, _("Flag"), str->str);
@@ -329,7 +350,7 @@ static const char *_qq_list_emblem(PurpleBuddy *b)
{
/* each char** are refering to a filename in pixmaps/purple/status/default/ */
qq_buddy *q_bud;
-
+
if (!b || !(q_bud = b->proto_data)) {
return NULL;
}
@@ -374,11 +395,11 @@ static GList *_qq_away_states(PurpleAccount *ga)
}
/* initiate QQ away with proper change_status packet */
-static void _qq_set_away(PurpleAccount *account, PurpleStatus *status)
+static void _qq_change_status(PurpleAccount *account, PurpleStatus *status)
{
PurpleConnection *gc = purple_account_get_connection(account);
- qq_send_packet_change_status(gc);
+ qq_request_change_status(gc, 0);
}
/* IMPORTANT: PurpleConvImFlags -> PurpleMessageFlags */
@@ -444,12 +465,12 @@ static void _qq_get_info(PurpleConnection *gc, const gchar *who)
uid = purple_name_to_uid(who);
if (uid <= 0) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Not valid QQid: %s\n", who);
+ purple_debug_error("QQ", "Not valid QQid: %s\n", who);
purple_notify_error(gc, NULL, _("Invalid name"), NULL);
return;
}
- qq_send_packet_get_level(gc, uid);
+ qq_request_get_level(gc, uid);
qq_send_packet_get_info(gc, uid, TRUE);
}
@@ -502,7 +523,7 @@ static void _qq_menu_block_buddy(PurpleBlistNode * node)
*/
/* show a brief summary of what we get from login packet */
-static void _qq_menu_show_login_info(PurplePluginAction *action)
+static void _qq_menu_account_info(PurplePluginAction *action)
{
PurpleConnection *gc = (PurpleConnection *) action->context;
qq_data *qd;
@@ -516,10 +537,17 @@ static void _qq_menu_show_login_info(PurplePluginAction *action)
g_string_append(info, "<hr>\n");
- g_string_append_printf(info, _("<b>Server</b>: %s: %d<br>\n"), qd->server_name, qd->real_port);
+ g_string_append_printf(info, _("<b>Server</b>: %s<br>\n"), qd->curr_server);
g_string_append_printf(info, _("<b>Connection Mode</b>: %s<br>\n"), qd->use_tcp ? "TCP" : "UDP");
- g_string_append_printf(info, _("<b>Real hostname</b>: %s: %d<br>\n"), qd->real_hostname, qd->real_port);
- g_string_append_printf(info, _("<b>My Public IP</b>: %s<br>\n"), inet_ntoa(qd->my_ip));
+ g_string_append_printf(info, _("<b>My Internet Address</b>: %s<br>\n"), inet_ntoa(qd->my_ip));
+
+ g_string_append(info, "<hr>\n");
+ g_string_append(info, "<i>Network Status</i><br>\n");
+ g_string_append_printf(info, _("<b>Sent</b>: %lu<br>\n"), qd->net_stat.sent);
+ g_string_append_printf(info, _("<b>Resend</b>: %lu<br>\n"), qd->net_stat.resend);
+ g_string_append_printf(info, _("<b>Lost</b>: %lu<br>\n"), qd->net_stat.lost);
+ g_string_append_printf(info, _("<b>Received</b>: %lu<br>\n"), qd->net_stat.rcved);
+ g_string_append_printf(info, _("<b>Received Duplicate</b>: %lu<br>\n"), qd->net_stat.rcved_dup);
g_string_append(info, "<hr>\n");
g_string_append(info, "<i>Information below may not be accurate</i><br>\n");
@@ -612,7 +640,7 @@ static GList *_qq_actions(PurplePlugin *plugin, gpointer context)
act = purple_plugin_action_new(_("Change Password"), _qq_menu_change_password);
m = g_list_append(m, act);
- act = purple_plugin_action_new(_("Show Login Information"), _qq_menu_show_login_info);
+ act = purple_plugin_action_new(_("Account Information"), _qq_menu_account_info);
m = g_list_append(m, act);
/*
@@ -633,7 +661,7 @@ static GList *_qq_chat_menu(PurpleBlistNode *node)
PurpleMenuAction *act;
m = NULL;
- act = purple_menu_action_new(_("Leave this QQ Qun"), PURPLE_CALLBACK(_qq_menu_unsubscribe_group), NULL, NULL);
+ act = purple_menu_action_new(_("Leave the QQ Qun"), PURPLE_CALLBACK(_qq_menu_unsubscribe_group), NULL, NULL);
m = g_list_append(m, act);
/* TODO: enable this
@@ -708,7 +736,7 @@ static PurplePluginProtocolInfo prpl_info =
NULL, /* set_info */
NULL, /* send_typing */
_qq_get_info, /* get_info */
- _qq_set_away, /* set_away */
+ _qq_change_status, /* change status */
NULL, /* set_idle */
NULL, /* change_passwd */
qq_add_buddy, /* add_buddy */
@@ -800,17 +828,43 @@ static PurplePluginInfo info = {
static void init_plugin(PurplePlugin *plugin)
{
PurpleAccountOption *option;
+ PurpleKeyValuePair *kvp;
+ GList *list = NULL;
+ GList *kvlist = NULL;
+ GList *entry;
+
+ list = server_list_build('A');
+
+ purple_prefs_add_string_list("/plugins/prpl/qq/serverlist", list);
+ list = purple_prefs_get_string_list("/plugins/prpl/qq/serverlist");
+
+ kvlist = NULL;
+ kvp = g_new0(PurpleKeyValuePair, 1);
+ kvp->key = g_strdup(_("Auto"));
+ kvp->value = g_strdup("auto");
+ kvlist = g_list_append(kvlist, kvp);
+
+ entry = list;
+ while(entry) {
+ if (entry->data != NULL && strlen(entry->data) > 0) {
+ kvp = g_new0(PurpleKeyValuePair, 1);
+ kvp->key = g_strdup(entry->data);
+ kvp->value = g_strdup(entry->data);
+ kvlist = g_list_append(kvlist, kvp);
+ }
+ entry = entry->next;
+ }
- option = purple_account_option_string_new(_("Server"), "server", NULL);
+ option = purple_account_option_list_new(_("Server"), "server", kvlist);
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
- option = purple_account_option_int_new(_("Port"), "port", 0);
+ option = purple_account_option_bool_new(_("Connect by TCP"), "use_tcp", TRUE);
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
- option = purple_account_option_bool_new(_("Connect using TCP"), "use_tcp", TRUE);
+ option = purple_account_option_bool_new(_("Show server notice"), "show_notice", TRUE);
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
- option = purple_account_option_int_new(_("resend interval(s)"), "resend_interval", 10);
+ option = purple_account_option_bool_new(_("Show server news"), "show_news", TRUE);
prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option);
option = purple_account_option_int_new(_("Keep alive interval(s)"), "keep_alive_interval", 60);
@@ -822,7 +876,9 @@ static void init_plugin(PurplePlugin *plugin)
purple_prefs_add_none("/plugins/prpl/qq");
purple_prefs_add_bool("/plugins/prpl/qq/show_status_by_icon", TRUE);
purple_prefs_add_bool("/plugins/prpl/qq/show_fake_video", FALSE);
- purple_prefs_add_bool("/plugins/prpl/qq/prompt_group_msg_on_recv", TRUE);
+ purple_prefs_add_bool("/plugins/prpl/qq/show_room_when_newin", TRUE);
+ purple_prefs_add_int("/plugins/prpl/qq/resend_interval", 3);
+ purple_prefs_add_int("/plugins/prpl/qq/resend_times", 4);
}
PURPLE_INIT_PLUGIN(qq, init_plugin, info);
diff --git a/libpurple/protocols/qq/qq.h b/libpurple/protocols/qq/qq.h
index af23dbcaea..503dcc3ce6 100644
--- a/libpurple/protocols/qq/qq.h
+++ b/libpurple/protocols/qq/qq.h
@@ -39,11 +39,20 @@
typedef struct _qq_data qq_data;
typedef struct _qq_buddy qq_buddy;
typedef struct _qq_interval qq_interval;
+typedef struct _qq_net_stat qq_net_stat;
struct _qq_interval {
gint resend;
gint keep_alive;
- gint update;
+ gint update;
+};
+
+struct _qq_net_stat {
+ glong sent;
+ glong resend;
+ glong lost;
+ glong rcved;
+ glong rcved_dup;
};
struct _qq_buddy {
@@ -63,44 +72,51 @@ struct _qq_buddy {
guint16 timeRemainder;
time_t signon;
time_t idle;
- time_t last_refresh;
+ time_t last_update;
gint8 role; /* role in group, used only in group->members list */
};
+typedef struct _qq_connection qq_connection;
+struct _qq_connection {
+ int fd; /* socket file handler */
+ int input_handler;
+
+ /* tcp related */
+ int can_write_handler; /* use in tcp_send_out */
+ PurpleCircBuffer *tcp_txbuf;
+ guint8 *tcp_rxqueue;
+ int tcp_rxlen;
+};
+
struct _qq_data {
PurpleConnection *gc;
- /* common network resource */
- GList *servers;
- gchar *user_server;
- gint user_port;
+ GSList *openconns;
gboolean use_tcp; /* network in tcp or udp */
-
- gchar *server_name;
- gboolean is_redirect;
- gchar *real_hostname; /* from real connction */
- guint16 real_port;
- guint reconnect_timeout;
- gint reconnect_times;
-
- PurpleProxyConnectData *connect_data;
- gint fd; /* socket file handler */
- gint tx_handler; /* socket can_write handle, use in udp connecting and tcp send out */
+ PurpleProxyConnectData *conn_data;
+#ifndef purple_proxy_connect_udp
+ PurpleDnsQueryData *udp_query_data; /* udp related */
+ gint udp_can_write_handler; /* socket can_write handle, use in udp connecting and tcp send out */
+#endif
+ gint fd; /* socket file handler */
+ qq_net_stat net_stat;
+
+ GList *servers;
+ gchar *curr_server; /* point to servers->data, do not free*/
+
+ struct in_addr redirect_ip;
+ guint16 redirect_port;
+ guint check_watcher;
+ guint connect_watcher;
+ gint connect_retry;
qq_interval itv_config;
qq_interval itv_count;
- guint network_timeout;
-
- GList *transactions; /* check ack packet and resend */
+ guint network_watcher;
+ gint resend_times;
- /* tcp related */
- PurpleCircBuffer *tcp_txbuf;
- guint8 *tcp_rxqueue;
- int tcp_rxlen;
-
- /* udp related */
- PurpleDnsQueryData *udp_query_data;
+ GList *transactions; /* check ack packet and resend */
guint32 uid; /* QQ number */
guint8 *token; /* get from server*/
@@ -112,7 +128,7 @@ struct _qq_data {
guint16 send_seq; /* send sequence number */
guint8 login_mode; /* online of invisible */
- gboolean logged_in; /* used by qq-add_buddy */
+ gboolean is_login; /* used by qq-add_buddy */
PurpleXfer *xfer; /* file transfer handler */
@@ -143,6 +159,9 @@ struct _qq_data {
/* TODO pass qq_send_packet_get_info() a callback and use signals to get rid of these */
gboolean modifying_info;
gboolean modifying_face;
+
+ gboolean is_show_notice;
+ gboolean is_show_news;
};
#endif
diff --git a/libpurple/protocols/qq/qq_base.c b/libpurple/protocols/qq/qq_base.c
index b1b5ed9e9e..8517fa9200 100644
--- a/libpurple/protocols/qq/qq_base.c
+++ b/libpurple/protocols/qq/qq_base.c
@@ -48,7 +48,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xbf, 0x14, 0x11, 0x20,
0x03, 0x9d, 0xb2, 0xe6, 0xb3, 0x11, 0xb7, 0x13,
- 0x95, 0x67, 0xda, 0x2c, 0x01
+ 0x95, 0x67, 0xda, 0x2c, 0x01
}; */
/* for QQ 2003iii 0304, fixed value */
@@ -139,7 +139,7 @@ static void get_session_md5(guint8 *session_md5, guint32 uid, guint8 *session_ke
{
guint8 src[QQ_KEY_LENGTH + QQ_KEY_LENGTH];
gint bytes = 0;
-
+
bytes += qq_put32(src + bytes, uid);
bytes += qq_putdata(src + bytes, session_key, QQ_KEY_LENGTH);
@@ -161,7 +161,7 @@ static gint8 process_login_ok(PurpleConnection *gc, guint8 *data, gint len)
bytes += qq_get8(&lrop.result, data + bytes);
/* 001-016: session key */
bytes += qq_getdata(lrop.session_key, sizeof(lrop.session_key), data + bytes);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Got session_key\n");
+ purple_debug_info("QQ", "Got session_key\n");
/* 017-020: login uid */
bytes += qq_get32(&lrop.uid, data + bytes);
/* 021-024: server detected user public IP */
@@ -200,16 +200,16 @@ static gint8 process_login_ok(PurpleConnection *gc, guint8 *data, gint len)
bytes += qq_getdata((guint8 *) &lrop.unknown6, 8, data + bytes);
if (bytes != QQ_LOGIN_REPLY_OK_PACKET_LEN) { /* fail parsing login info */
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"Fail parsing login info, expect %d bytes, read %d bytes\n",
QQ_LOGIN_REPLY_OK_PACKET_LEN, bytes);
} /* but we still go on as login OK */
memcpy(qd->session_key, lrop.session_key, sizeof(qd->session_key));
get_session_md5(qd->session_md5, qd->uid, qd->session_key);
-
+
qd->my_ip.s_addr = lrop.client_ip.s_addr;
-
+
qd->my_port = lrop.client_port;
qd->login_time = lrop.login_time;
qd->last_login_time = lrop.last_login_time;
@@ -237,39 +237,19 @@ static gint8 process_login_redirect(PurpleConnection *gc, guint8 *data, gint len
bytes += qq_get16(&lrrp.new_server_port, data + bytes);
if (bytes != QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Fail parsing login redirect packet, expect %d bytes, read %d bytes\n",
QQ_LOGIN_REPLY_REDIRECT_PACKET_LEN, bytes);
return QQ_LOGIN_REPLY_ERR_MISC;
}
-
+
/* redirect to new server, do not disconnect or connect here
* those connect should be called at packet_process */
- if (qd->real_hostname) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free real_hostname\n");
- g_free(qd->real_hostname);
- qd->real_hostname = NULL;
- }
- qd->real_hostname = g_strdup( inet_ntoa(lrrp.new_server_ip) );
- qd->real_port = lrrp.new_server_port;
-
+ qd->redirect_ip.s_addr = lrrp.new_server_ip.s_addr;
+ qd->redirect_port = lrrp.new_server_port;
return QQ_LOGIN_REPLY_REDIRECT;
}
-/* process login reply which says wrong password */
-static gint8 process_login_wrong_pwd(PurpleConnection *gc, guint8 *data, gint len)
-{
- gchar *server_reply, *server_reply_utf8;
- server_reply = g_new0(gchar, len);
- g_memmove(server_reply, data + 1, len - 1);
- server_reply_utf8 = qq_to_utf8(server_reply, QQ_CHARSET_DEFAULT);
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Wrong password, server msg in UTF8: %s\n", server_reply_utf8);
- g_free(server_reply);
- g_free(server_reply_utf8);
-
- return QQ_LOGIN_REPLY_ERR_PWD;
-}
-
/* request before login */
void qq_send_packet_token(PurpleConnection *gc)
{
@@ -281,9 +261,9 @@ void qq_send_packet_token(PurpleConnection *gc)
qd = (qq_data *) gc->proto_data;
bytes += qq_put8(buf + bytes, 0);
-
+
qd->send_seq++;
- qq_send_data(qd, QQ_CMD_TOKEN, qd->send_seq, TRUE, buf, bytes);
+ qq_send_cmd_encrypted(gc, QQ_CMD_TOKEN, qd->send_seq, buf, bytes, TRUE);
}
/* send login packet to QQ server */
@@ -312,14 +292,14 @@ void qq_send_packet_login(PurpleConnection *gc)
memset(raw_data, 0, QQ_LOGIN_DATA_LENGTH);
encrypted_data = g_newa(guint8, QQ_LOGIN_DATA_LENGTH + 16); /* 16 bytes more */
-
+
bytes = 0;
/* now generate the encrypted data
* 000-015 use password_twice_md5 as key to encrypt empty string */
encrypted_len = qq_encrypt(raw_data + bytes, (guint8 *) "", 0, qd->password_twice_md5);
g_return_if_fail(encrypted_len == 16);
bytes += encrypted_len;
-
+
/* 016-016 */
bytes += qq_put8(raw_data + bytes, 0x00);
/* 017-020, used to be IP, now zero */
@@ -349,14 +329,15 @@ void qq_send_packet_login(PurpleConnection *gc)
bytes += qq_putdata(buf + bytes, encrypted_data, encrypted_len);
qd->send_seq++;
- qq_send_data(qd, QQ_CMD_LOGIN, qd->send_seq, TRUE, buf, bytes);
+ qq_send_cmd_encrypted(gc, QQ_CMD_LOGIN, qd->send_seq, buf, bytes, TRUE);
}
-guint8 qq_process_token_reply(PurpleConnection *gc, gchar *error_msg, guint8 *buf, gint buf_len)
+guint8 qq_process_token_reply(PurpleConnection *gc, guint8 *buf, gint buf_len)
{
qq_data *qd;
guint8 ret;
int token_len;
+ gchar *error_msg;
g_return_val_if_fail(buf != NULL && buf_len != 0, -1);
@@ -364,30 +345,37 @@ guint8 qq_process_token_reply(PurpleConnection *gc, gchar *error_msg, guint8 *bu
qd = (qq_data *) gc->proto_data;
ret = buf[0];
-
+
if (ret != QQ_TOKEN_REPLY_OK) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown request login token reply code : %d\n", buf[0]);
+ purple_debug_error("QQ", "Failed to request token: %d\n", buf[0]);
qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ",
buf, buf_len,
">>> [default] decrypt and dump");
error_msg = try_dump_as_gbk(buf, buf_len);
+ if (error_msg == NULL) {
+ error_msg = g_strdup_printf( _("Invalid token reply code, 0x%02X"), ret);
+ }
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg);
+ g_free(error_msg);
return ret;
}
-
+
token_len = buf_len-2;
if (token_len <= 0) {
error_msg = g_strdup_printf( _("Invalid token len, %d"), token_len);
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg);
+ g_free(error_msg);
return -1;
}
-
+
if (buf[1] != token_len) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"Invalid token len. Packet specifies length of %d, actual length is %d\n", buf[1], buf_len-2);
}
qq_hex_dump(PURPLE_DEBUG_INFO, "QQ",
buf+2, token_len,
"<<< got a token -> [default] decrypt and dump");
-
+
qd->token = g_new0(guint8, token_len);
qd->token_len = token_len;
g_memmove(qd->token, buf + 2, qd->token_len);
@@ -402,48 +390,85 @@ void qq_send_packet_logout(PurpleConnection *gc)
qd = (qq_data *) gc->proto_data;
for (i = 0; i < 4; i++)
- qq_send_cmd_detail(qd, QQ_CMD_LOGOUT, 0xffff, FALSE, qd->password_twice_md5, QQ_KEY_LENGTH);
+ qq_send_cmd(gc, QQ_CMD_LOGOUT, qd->password_twice_md5, QQ_KEY_LENGTH);
- qd->logged_in = FALSE; /* update login status AFTER sending logout packets */
+ qd->is_login = FALSE; /* update login status AFTER sending logout packets */
}
/* process the login reply packet */
-guint8 qq_process_login_reply(guint8 *data, gint data_len, PurpleConnection *gc)
+guint8 qq_process_login_reply( PurpleConnection *gc, guint8 *data, gint data_len)
{
qq_data *qd;
- gchar* error_msg;
+ guint8 ret = data[0];
+ gchar *server_reply, *server_reply_utf8;
+ gchar *error_msg;
g_return_val_if_fail(data != NULL && data_len != 0, QQ_LOGIN_REPLY_ERR_MISC);
qd = (qq_data *) gc->proto_data;
- switch (data[0]) {
+ switch (ret) {
case QQ_LOGIN_REPLY_OK:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is OK\n");
+ purple_debug_info("QQ", "Login OK\n");
return process_login_ok(gc, data, data_len);
case QQ_LOGIN_REPLY_REDIRECT:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is redirect\n");
+ purple_debug_info("QQ", "Redirect new server\n");
return process_login_redirect(gc, data, data_len);
+
+ case QQ_LOGIN_REPLY_REDIRECT_EX:
+ purple_debug_error("QQ", "Extend redirect new server, not supported yet\n");
+ error_msg = g_strdup( _("Unable login for not support Redirect_EX now") );
+ return QQ_LOGIN_REPLY_REDIRECT_EX;
+
case QQ_LOGIN_REPLY_ERR_PWD:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is error password\n");
- return process_login_wrong_pwd(gc, data, data_len);
+ server_reply = g_strndup((gchar *)data + 1, data_len - 1);
+ server_reply_utf8 = qq_to_utf8(server_reply, QQ_CHARSET_DEFAULT);
+
+ purple_debug_error("QQ", "Error password: %s\n", server_reply_utf8);
+ error_msg = g_strdup_printf( _("Error password: %s"), server_reply_utf8);
+
+ g_free(server_reply);
+ g_free(server_reply_utf8);
+
+ if (!purple_account_get_remember_password(gc->account)) {
+ purple_account_set_password(gc->account, NULL);
+ }
+
+ purple_connection_error_reason(gc,
+ PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, error_msg);
+ g_free(error_msg);
+
+ return QQ_LOGIN_REPLY_ERR_PWD;
+
case QQ_LOGIN_REPLY_NEED_REACTIVE:
- case QQ_LOGIN_REPLY_REDIRECT_EX:
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login reply is not actived or redirect extend\n");
- default:
- break;
- }
+ server_reply = g_strndup((gchar *)data + 1, data_len - 1);
+ server_reply_utf8 = qq_to_utf8(server_reply, QQ_CHARSET_DEFAULT);
+
+ purple_debug_error("QQ", "Need active: %s\n", server_reply_utf8);
+ error_msg = g_strdup_printf( _("Need active: %s"), server_reply_utf8);
+
+ g_free(server_reply);
+ g_free(server_reply_utf8);
+ break;
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Unknown reply code: 0x%02X\n", data[0]);
+ default:
+ purple_debug_error("QQ",
+ "Unable login for unknow reply code 0x%02X\n", data[0]);
qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ",
- data, data_len,
- ">>> [default] decrypt and dump");
- error_msg = try_dump_as_gbk(data, data_len);
- if (error_msg) {
- purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg);
- g_free(error_msg);
+ data, data_len,
+ ">>> [default] decrypt and dump");
+ error_msg = try_dump_as_gbk(data, data_len);
+ if (error_msg == NULL) {
+ error_msg = g_strdup_printf(
+ _("Unable login for unknow reply code 0x%02X"), data[0] );
+ }
+ break;
}
- return QQ_LOGIN_REPLY_ERR_MISC;
+
+ purple_connection_error_reason(gc,
+ PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg);
+ g_free(error_msg);
+ return ret;
}
/* send keep-alive packet to QQ server (it is a heart-beat) */
@@ -460,11 +485,11 @@ void qq_send_packet_keep_alive(PurpleConnection *gc)
* the amount of online QQ users, my ip and port */
bytes += qq_put32(raw_data + bytes, qd->uid);
- qq_send_cmd(qd, QQ_CMD_KEEP_ALIVE, raw_data, 4);
+ qq_send_cmd(gc, QQ_CMD_KEEP_ALIVE, raw_data, 4);
}
/* parse the return of keep-alive packet, it includes some system information */
-gboolean qq_process_keep_alive(guint8 *data, gint data_len, PurpleConnection *gc)
+gboolean qq_process_keep_alive(guint8 *data, gint data_len, PurpleConnection *gc)
{
qq_data *qd;
gchar **segments;
@@ -478,7 +503,7 @@ gboolean qq_process_keep_alive(guint8 *data, gint data_len, PurpleConnection *gc
/* the last one is 60, don't know what it is */
if (NULL == (segments = split_data(data, data_len, "\x1f", 6)))
return TRUE;
-
+
/* segments[0] and segment[1] are all 0x30 ("0") */
qd->total_online = strtol(segments[2], NULL, 10);
if(0 == qd->total_online) {
@@ -488,9 +513,9 @@ gboolean qq_process_keep_alive(guint8 *data, gint data_len, PurpleConnection *gc
qd->my_ip.s_addr = inet_addr(segments[3]);
qd->my_port = strtol(segments[4], NULL, 10);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "keep alive, %s:%d\n",
+ purple_debug_info("QQ", "keep alive, %s:%d\n",
inet_ntoa(qd->my_ip), qd->my_port);
-
+
g_strfreev(segments);
return TRUE;
}
diff --git a/libpurple/protocols/qq/qq_base.h b/libpurple/protocols/qq/qq_base.h
index ce5c210bca..eb2e413f04 100644
--- a/libpurple/protocols/qq/qq_base.h
+++ b/libpurple/protocols/qq/qq_base.h
@@ -44,10 +44,10 @@
#define QQ_UPDATE_ONLINE_INTERVAL 300 /* in sec */
void qq_send_packet_token(PurpleConnection *gc);
-guint8 qq_process_token_reply(PurpleConnection *gc, gchar *error_msg, guint8 *buf, gint buf_len);
+guint8 qq_process_token_reply(PurpleConnection *gc, guint8 *buf, gint buf_len);
void qq_send_packet_login(PurpleConnection *gc);
-guint8 qq_process_login_reply(guint8 *data, gint data_len, PurpleConnection *gc);
+guint8 qq_process_login_reply( PurpleConnection *gc, guint8 *data, gint data_len);
void qq_send_packet_logout(PurpleConnection *gc);
diff --git a/libpurple/protocols/qq/qq_network.c b/libpurple/protocols/qq/qq_network.c
index a1354af01b..aee961c930 100644
--- a/libpurple/protocols/qq/qq_network.c
+++ b/libpurple/protocols/qq/qq_network.c
@@ -26,11 +26,6 @@
#include "debug.h"
#include "internal.h"
-#ifdef _WIN32
-#define random rand
-#define srandom srand
-#endif
-
#include "buddy_info.h"
#include "group_info.h"
#include "group_free.h"
@@ -44,63 +39,100 @@
#include "utils.h"
#include "qq_process.h"
-/* set QQ_RECONNECT_MAX to 1, when test reconnecting */
-#define QQ_RECONNECT_MAX 4
-#define QQ_RECONNECT_INTERVAL 5000
-#define QQ_KEEP_ALIVE_INTERVAL 60000
-#define QQ_TRANS_INTERVAL 10000
+#define QQ_DEFAULT_PORT 8000
+
+/* set QQ_CONNECT_MAX to 1, when test reconnecting */
+#define QQ_CONNECT_MAX 3
+#define QQ_CONNECT_INTERVAL 2
+#define QQ_CONNECT_CHECK 5
+#define QQ_KEEP_ALIVE_INTERVAL 60
+#define QQ_TRANS_INTERVAL 10
+
+gboolean connect_to_server(PurpleConnection *gc, gchar *server, gint port);
+
+static qq_connection *connection_find(qq_data *qd, int fd) {
+ qq_connection *ret = NULL;
+ GSList *entry = qd->openconns;
+ while(entry) {
+ ret = entry->data;
+ if(ret->fd == fd) return ret;
+ entry = entry->next;
+ }
+ return NULL;
+}
+
+static qq_connection *connection_create(qq_data *qd, int fd) {
+ qq_connection *ret = g_new0(qq_connection, 1);
+ ret->fd = fd;
+ qd->openconns = g_slist_append(qd->openconns, ret);
+ return ret;
+}
+
+static void connection_remove(qq_data *qd, int fd) {
+ qq_connection *conn = connection_find(qd, fd);
+ qd->openconns = g_slist_remove(qd->openconns, conn);
+ g_return_if_fail( conn != NULL );
+
+ purple_debug_info("QQ", "Close socket %d\n", conn->fd);
+ if(conn->input_handler > 0) purple_input_remove(conn->input_handler);
+ if(conn->can_write_handler > 0) purple_input_remove(conn->can_write_handler);
+
+ if (conn->fd >= 0) close(conn->fd);
+ if(conn->tcp_txbuf != NULL) purple_circ_buffer_destroy(conn->tcp_txbuf);
+ if (conn->tcp_rxqueue != NULL) g_free(conn->tcp_rxqueue);
+
+ g_free(conn);
+}
+
+static void connection_free_all(qq_data *qd) {
+ qq_connection *ret = NULL;
+ GSList *entry = qd->openconns;
+ while(entry) {
+ ret = entry->data;
+ connection_remove(qd, ret->fd);
+ entry = qd->openconns;
+ }
+}
static gboolean set_new_server(qq_data *qd)
{
gint count;
gint index;
GList *it = NULL;
-
+
g_return_val_if_fail(qd != NULL, FALSE);
if (qd->servers == NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Server list is NULL\n");
+ purple_debug_info("QQ", "Server list is NULL\n");
return FALSE;
}
- if (qd->real_hostname) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free real_hostname\n");
- g_free(qd->real_hostname);
- qd->real_hostname = NULL;
- }
-
/* remove server used before */
- if (qd->server_name != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Remove previous server [%s]\n", qd->server_name);
- qd->servers = g_list_remove(qd->servers, qd->server_name);
- qd->server_name = NULL;
+ if (qd->curr_server != NULL) {
+ purple_debug_info("QQ",
+ "Remove current [%s] from server list\n", qd->curr_server);
+ qd->servers = g_list_remove(qd->servers, qd->curr_server);
+ qd->curr_server = NULL;
}
-
+
count = g_list_length(qd->servers);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Server list has %d\n", count);
+ purple_debug_info("QQ", "Server list has %d\n", count);
if (count <= 0) {
/* no server left, disconnect when result is false */
qd->servers = NULL;
return FALSE;
}
-
+
/* get new server */
- index = random() % count;
+ index = rand() % count;
it = g_list_nth(qd->servers, index);
- qd->server_name = it->data; /* do not free server_name */
- if (qd->server_name == NULL || strlen(qd->server_name) <= 0 ) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Server name at %d is empty\n", index);
+ qd->curr_server = it->data; /* do not free server_name */
+ if (qd->curr_server == NULL || strlen(qd->curr_server) <= 0 ) {
+ purple_debug_info("QQ", "Server name at %d is empty\n", index);
return FALSE;
}
- qd->real_hostname = g_strdup(qd->server_name);
- qd->real_port = qd->user_port;
-
- qd->reconnect_times = QQ_RECONNECT_MAX;
-
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "set new server to %s:%d\n", qd->real_hostname, qd->real_port);
+ purple_debug_info("QQ", "set new server to %s\n", qd->curr_server);
return TRUE;
}
@@ -115,152 +147,199 @@ static gint packet_get_header(guint8 *header_tag, guint16 *source_tag,
return bytes;
}
-static gboolean reconnect_later_cb(gpointer data)
+static gboolean connect_check(gpointer data)
{
- PurpleConnection *gc;
+ PurpleConnection *gc = (PurpleConnection *) data;
qq_data *qd;
- gc = (PurpleConnection *) data;
g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, FALSE);
qd = (qq_data *) gc->proto_data;
- qd->reconnect_timeout = 0;
+ if (qd->connect_watcher > 0) {
+ purple_timeout_remove(qd->connect_watcher);
+ qd->connect_watcher = 0;
+ }
- qq_connect(gc->account);
- return FALSE; /* timeout callback stops */
+ if (qd->fd >= 0 && qd->token != NULL && qd->token_len >= 0) {
+ purple_debug_info("QQ", "Connect ok\n");
+ return FALSE;
+ }
+
+ qd->connect_watcher = purple_timeout_add_seconds(0, qq_connect_later, gc);
+ return FALSE;
}
-static void reconnect_later(PurpleConnection *gc)
+/* Warning: qq_connect_later destory all connection
+ * Any function should be care of use qq_data after call this function
+ * Please conside tcp_pending and udp_pending */
+gboolean qq_connect_later(gpointer data)
{
+ PurpleConnection *gc = (PurpleConnection *) data;
qq_data *qd;
+ char *server;
+ int port;
+ gchar **segments;
- g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, FALSE);
qd = (qq_data *) gc->proto_data;
- qd->reconnect_times--;
- if (qd->reconnect_times < 0) {
+ if (qd->check_watcher > 0) {
+ purple_timeout_remove(qd->check_watcher);
+ qd->check_watcher = 0;
+ }
+ qq_disconnect(gc);
+
+ if (qd->redirect_ip.s_addr != 0) {
+ /* redirect to new server */
+ server = g_strdup_printf("%s:%d", inet_ntoa(qd->redirect_ip), qd->redirect_port);
+ qd->servers = g_list_append(qd->servers, server);
+ qd->curr_server = server;
+
+ qd->redirect_ip.s_addr = 0;
+ qd->redirect_port = 0;
+ qd->connect_retry = QQ_CONNECT_MAX;
+ }
+
+ if (qd->curr_server == NULL || strlen (qd->curr_server) == 0 || qd->connect_retry <= 0) {
if ( set_new_server(qd) != TRUE) {
purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Failed to connect server"));
- return;
+ _("Failed to connect all servers"));
+ return FALSE;
}
+ qd->connect_retry = QQ_CONNECT_MAX;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "Reconnect to server %s:%d next retries %d in %d ms\n",
- qd->real_hostname, qd->real_port,
- qd->reconnect_times, QQ_RECONNECT_INTERVAL);
+ segments = g_strsplit_set(qd->curr_server, ":", 0);
+ server = g_strdup(segments[0]);
+ port = atoi(segments[1]);
+ if (port <= 0) {
+ purple_debug_info("QQ", "Port not define in %s\n", qd->curr_server);
+ port = QQ_DEFAULT_PORT;
+ }
+ g_strfreev(segments);
- qd->reconnect_timeout = purple_timeout_add(QQ_RECONNECT_INTERVAL,
- reconnect_later_cb, gc);
+ qd->connect_retry--;
+ if ( !connect_to_server(gc, server, port) ) {
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+ _("Unable to connect."));
+ }
+
+ qd->check_watcher = purple_timeout_add_seconds(QQ_CONNECT_CHECK, connect_check, gc);
+ return FALSE; /* timeout callback stops */
}
/* process the incoming packet from qq_pending */
-static void packet_process(PurpleConnection *gc, guint8 *buf, gint buf_len)
+static gboolean packet_process(PurpleConnection *gc, guint8 *buf, gint buf_len)
{
qq_data *qd;
gint bytes, bytes_not_read;
- gboolean prev_login_status;
-
guint8 header_tag;
guint16 source_tag;
guint16 cmd;
guint16 seq; /* May be ack_seq or send_seq, depends on cmd */
-
guint8 room_cmd;
guint32 room_id;
+ gint update_class;
+ guint32 ship32;
qq_transaction *trans;
- g_return_if_fail(buf != NULL && buf_len > 0);
+ g_return_val_if_fail(buf != NULL && buf_len > 0, TRUE);
qd = (qq_data *) gc->proto_data;
- prev_login_status = qd->logged_in;
+ qd->net_stat.rcved++;
+ if (qd->net_stat.rcved <= 0) memset(&(qd->net_stat), 0, sizeof(qd->net_stat));
/* Len, header and tail tag have been checked before */
bytes = 0;
bytes += packet_get_header(&header_tag, &source_tag, &cmd, &seq, buf + bytes);
#if 1
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "==> [%05d] 0x%04X %s, from (0x%04X %s) len %d\n",
- seq, cmd, qq_get_cmd_desc(cmd), source_tag, qq_get_ver_desc(source_tag), buf_len);
-#endif
+ purple_debug_info("QQ", "==> [%05d] %s 0x%04X, source tag 0x%04X len %d\n",
+ seq, qq_get_cmd_desc(cmd), cmd, source_tag, buf_len);
+#endif
+ /* this is the length of all the encrypted data (also remove tail tag) */
bytes_not_read = buf_len - bytes - 1;
/* ack packet, we need to update send tranactions */
/* we do not check duplication for server ack */
- trans = qq_trans_find_rcved(qd, cmd, seq);
+ trans = qq_trans_find_rcved(gc, cmd, seq);
if (trans == NULL) {
/* new server command */
- qq_trans_add_server_cmd(qd, cmd, seq, buf + bytes, bytes_not_read);
- if ( qd->logged_in ) {
- qq_proc_cmd_server(gc, cmd, seq, buf + bytes, bytes_not_read);
+ if ( !qd->is_login ) {
+ qq_trans_add_remain(gc, cmd, seq, buf + bytes, bytes_not_read);
+ } else {
+ qq_trans_add_server_cmd(gc, cmd, seq, buf + bytes, bytes_not_read);
+ qq_proc_server_cmd(gc, cmd, seq, buf + bytes, bytes_not_read);
}
- return;
+ return TRUE;
}
if (qq_trans_is_dup(trans)) {
- purple_debug(PURPLE_DEBUG_WARNING,
- "QQ", "dup [%05d] %s, discard...\n", seq, qq_get_cmd_desc(cmd));
- return;
+ qd->net_stat.rcved_dup++;
+ purple_debug_info("QQ", "dup [%05d] %s, discard...\n", seq, qq_get_cmd_desc(cmd));
+ return TRUE;
}
- if (qq_trans_is_server(trans)) {
- if ( qd->logged_in ) {
- qq_proc_cmd_server(gc, cmd, seq, buf + bytes, bytes_not_read);
- }
- return;
- }
+ update_class = qq_trans_get_class(trans);
+ ship32 = qq_trans_get_ship(trans);
- /* this is the length of all the encrypted data (also remove tail tag */
- if (cmd == QQ_CMD_ROOM) {
- room_cmd = qq_trans_get_room_cmd(trans);
- room_id = qq_trans_get_room_id(trans);
+ switch (cmd) {
+ case QQ_CMD_TOKEN:
+ if (qq_process_token_reply(gc, buf + bytes, bytes_not_read) == QQ_TOKEN_REPLY_OK) {
+ qq_send_packet_login(gc);
+ }
+ break;
+ case QQ_CMD_LOGIN:
+ qq_proc_login_cmd(gc, buf + bytes, bytes_not_read);
+ /* check is redirect or not, and do it now */
+ if (qd->redirect_ip.s_addr != 0) {
+ if (qd->check_watcher > 0) {
+ purple_timeout_remove(qd->check_watcher);
+ qd->check_watcher = 0;
+ }
+ if (qd->connect_watcher > 0) purple_timeout_remove(qd->connect_watcher);
+ qd->connect_watcher = purple_timeout_add_seconds(QQ_CONNECT_INTERVAL, qq_connect_later, gc);
+ return FALSE; /* do nothing after this function and return now */
+ }
+ break;
+ case QQ_CMD_ROOM:
+ room_cmd = qq_trans_get_room_cmd(trans);
+ room_id = qq_trans_get_room_id(trans);
#if 1
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "%s (0x%02X ) for room %d, len %d\n",
- qq_get_room_cmd_desc(room_cmd), room_cmd, room_id, buf_len);
-#endif
- qq_proc_room_cmd_reply(gc, seq, room_cmd, room_id, buf + bytes, bytes_not_read);
- } else {
- qq_proc_cmd_reply(gc, cmd, seq, buf + bytes, bytes_not_read);
- }
-
- /* check is redirect or not, and do it now */
- if (qd->is_redirect) {
- /* free resource except real_hostname and port */
- qq_disconnect(gc);
- qd->reconnect_times = QQ_RECONNECT_MAX;
- reconnect_later(gc);
- return;
+ purple_debug_info("QQ", "%s (0x%02X) for room %d, len %d\n",
+ qq_get_room_cmd_desc(room_cmd), room_cmd, room_id, buf_len);
+#endif
+ qq_proc_room_cmd(gc, seq, room_cmd, room_id, buf + bytes, bytes_not_read, update_class, ship32);
+ break;
+ default:
+ qq_proc_client_cmd(gc, cmd, seq, buf + bytes, bytes_not_read, update_class, ship32);
+ break;
}
- if (prev_login_status != qd->logged_in && qd->logged_in == TRUE) {
- /* logged_in, but we have packets before login */
- qq_trans_process_before_login(qd);
- }
+ return TRUE;
}
static void tcp_pending(gpointer data, gint source, PurpleInputCondition cond)
{
- PurpleConnection *gc;
+ PurpleConnection *gc = (PurpleConnection *) data;
qq_data *qd;
+ qq_connection *conn;
guint8 buf[1024]; /* set to 16 when test tcp_rxqueue */
gint buf_len;
gint bytes;
-
+
guint8 *pkt;
guint16 pkt_len;
-
+
gchar *error_msg;
guint8 *jump;
gint jump_len;
- gc = (PurpleConnection *) data;
g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
if(cond != PURPLE_INPUT_READ) {
purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
@@ -268,8 +347,9 @@ static void tcp_pending(gpointer data, gint source, PurpleInputCondition cond)
return;
}
- qd = (qq_data *) gc->proto_data;
-
+ conn = connection_find(qd, source);
+ g_return_if_fail(conn != NULL);
+
/* test code, not using tcp_rxqueue
memset(pkt,0, sizeof(pkt));
buf_len = read(qd->fd, pkt, sizeof(pkt));
@@ -278,8 +358,8 @@ static void tcp_pending(gpointer data, gint source, PurpleInputCondition cond)
}
return;
*/
-
- buf_len = read(qd->fd, buf, sizeof(buf));
+
+ buf_len = read(source, buf, sizeof(buf));
if (buf_len < 0) {
if (errno == EAGAIN)
/* No worries */
@@ -299,93 +379,93 @@ static void tcp_pending(gpointer data, gint source, PurpleInputCondition cond)
* QQ need a keep alive packet in every 60 seconds
gc->last_received = time(NULL);
*/
- /*
- purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING",
- "Read %d bytes from socket, rxlen is %d\n", buf_len, qd->tcp_rxlen);
- */
- qd->tcp_rxqueue = g_realloc(qd->tcp_rxqueue, buf_len + qd->tcp_rxlen);
- memcpy(qd->tcp_rxqueue + qd->tcp_rxlen, buf, buf_len);
- qd->tcp_rxlen += buf_len;
-
+ /* purple_debug_info("TCP_PENDING", "Read %d bytes, rxlen is %d\n", buf_len, conn->tcp_rxlen); */
+ conn->tcp_rxqueue = g_realloc(conn->tcp_rxqueue, buf_len + conn->tcp_rxlen);
+ memcpy(conn->tcp_rxqueue + conn->tcp_rxlen, buf, buf_len);
+ conn->tcp_rxlen += buf_len;
+
pkt = g_newa(guint8, MAX_PACKET_SIZE);
- while (1) {
- if (qd->tcp_rxlen < QQ_TCP_HEADER_LENGTH) {
+ while (PURPLE_CONNECTION_IS_VALID(gc)) {
+ if (qd->openconns == NULL) {
+ break;
+ }
+ if (conn->tcp_rxqueue == NULL) {
+ conn->tcp_rxlen = 0;
+ break;
+ }
+ if (conn->tcp_rxlen < QQ_TCP_HEADER_LENGTH) {
break;
}
-
+
bytes = 0;
- bytes += qq_get16(&pkt_len, qd->tcp_rxqueue + bytes);
- if (qd->tcp_rxlen < pkt_len) {
+ bytes += qq_get16(&pkt_len, conn->tcp_rxqueue + bytes);
+ if (conn->tcp_rxlen < pkt_len) {
break;
}
- /*
- purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING",
- "Packet len is %d bytes, rxlen is %d\n", pkt_len, qd->tcp_rxlen);
- */
+ /* purple_debug_info("TCP_PENDING", "Packet len=%d, rxlen=%d\n", pkt_len, conn->tcp_rxlen); */
if ( pkt_len < QQ_TCP_HEADER_LENGTH
- || *(qd->tcp_rxqueue + bytes) != QQ_PACKET_TAG
- || *(qd->tcp_rxqueue + pkt_len - 1) != QQ_PACKET_TAIL) {
+ || *(conn->tcp_rxqueue + bytes) != QQ_PACKET_TAG
+ || *(conn->tcp_rxqueue + pkt_len - 1) != QQ_PACKET_TAIL) {
/* HEY! This isn't even a QQ. What are you trying to pull? */
+ purple_debug_warning("TCP_PENDING", "Packet error, no header or tail tag\n");
- purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING",
- "Packet error, failed to check header and tail tag\n");
-
- jump = memchr(qd->tcp_rxqueue + 1, QQ_PACKET_TAIL, qd->tcp_rxlen - 1);
+ jump = memchr(conn->tcp_rxqueue + 1, QQ_PACKET_TAIL, conn->tcp_rxlen - 1);
if ( !jump ) {
- purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING",
- "Failed to find next QQ_PACKET_TAIL, clear receive buffer\n");
- g_free(qd->tcp_rxqueue);
- qd->tcp_rxqueue = NULL;
- qd->tcp_rxlen = 0;
+ purple_debug_warning("TCP_PENDING", "Failed to find next tail, clear receive buffer\n");
+ g_free(conn->tcp_rxqueue);
+ conn->tcp_rxqueue = NULL;
+ conn->tcp_rxlen = 0;
return;
}
/* jump and over QQ_PACKET_TAIL */
- jump_len = (jump - qd->tcp_rxqueue) + 1;
- purple_debug(PURPLE_DEBUG_INFO, "TCP_PENDING",
- "Find next QQ_PACKET_TAIL at %d, jump %d bytes\n", jump_len, jump_len + 1);
- g_memmove(qd->tcp_rxqueue, jump, qd->tcp_rxlen - jump_len);
- qd->tcp_rxlen -= jump_len;
+ jump_len = (jump - conn->tcp_rxqueue) + 1;
+ purple_debug_warning("TCP_PENDING", "Find next tail at %d, jump %d\n", jump_len, jump_len + 1);
+ g_memmove(conn->tcp_rxqueue, jump, conn->tcp_rxlen - jump_len);
+ conn->tcp_rxlen -= jump_len;
continue;
}
memset(pkt, 0, MAX_PACKET_SIZE);
- g_memmove(pkt, qd->tcp_rxqueue + bytes, pkt_len - bytes);
-
+ g_memmove(pkt, conn->tcp_rxqueue + bytes, pkt_len - bytes);
+
/* jump to next packet */
- qd->tcp_rxlen -= pkt_len;
- if (qd->tcp_rxlen) {
- /*
- purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", "shrink tcp_rxqueue to %d\n", qd->tcp_rxlen);
- */
- jump = g_memdup(qd->tcp_rxqueue + pkt_len, qd->tcp_rxlen);
- g_free(qd->tcp_rxqueue);
- qd->tcp_rxqueue = jump;
+ conn->tcp_rxlen -= pkt_len;
+ if (conn->tcp_rxlen) {
+ /* purple_debug_info("TCP_PENDING", "shrink tcp_rxqueue to %d\n", conn->tcp_rxlen); */
+ jump = g_memdup(conn->tcp_rxqueue + pkt_len, conn->tcp_rxlen);
+ g_free(conn->tcp_rxqueue);
+ conn->tcp_rxqueue = jump;
} else {
- /* purple_debug(PURPLE_DEBUG_ERROR, "TCP_PENDING", "free tcp_rxqueue\n"); */
- g_free(qd->tcp_rxqueue);
- qd->tcp_rxqueue = NULL;
+ /* purple_debug_info("TCP_PENDING", "free tcp_rxqueue\n"); */
+ g_free(conn->tcp_rxqueue);
+ conn->tcp_rxqueue = NULL;
}
if (pkt == NULL) {
continue;
}
- /* do not call packet_process before jump
- * packet_process may call disconnect and destory tcp_rxqueue */
- packet_process(gc, pkt, pkt_len - bytes);
+ /* packet_process may call disconnect and destory data like conn
+ * do not call packet_process before jump,
+ * break if packet_process return FALSE */
+ if (packet_process(gc, pkt, pkt_len - bytes) == FALSE) {
+ purple_debug_info("TCP_PENDING", "Connection has been destory\n");
+ break;
+ }
}
}
static void udp_pending(gpointer data, gint source, PurpleInputCondition cond)
{
- PurpleConnection *gc;
+ PurpleConnection *gc = (PurpleConnection *) data;
qq_data *qd;
guint8 *buf;
gint buf_len;
gc = (PurpleConnection *) data;
g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
if(cond != PURPLE_INPUT_READ) {
purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
@@ -393,13 +473,10 @@ static void udp_pending(gpointer data, gint source, PurpleInputCondition cond)
return;
}
- qd = (qq_data *) gc->proto_data;
- g_return_if_fail(qd->fd >= 0);
-
buf = g_newa(guint8, MAX_PACKET_SIZE);
/* here we have UDP proxy suppport */
- buf_len = read(qd->fd, buf, MAX_PACKET_SIZE);
+ buf_len = read(source, buf, MAX_PACKET_SIZE);
if (buf_len <= 0) {
purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
_("Unable to read from socket"));
@@ -419,73 +496,95 @@ static void udp_pending(gpointer data, gint source, PurpleInputCondition cond)
return;
}
}
-
+
+ /* packet_process may call disconnect and destory data like conn
+ * do not call packet_process before jump,
+ * break if packet_process return FALSE */
packet_process(gc, buf, buf_len);
}
-static gint udp_send_out(qq_data *qd, guint8 *data, gint data_len)
+static gint udp_send_out(PurpleConnection *gc, guint8 *data, gint data_len)
{
+ qq_data *qd;
gint ret;
- g_return_val_if_fail(qd != NULL && qd->fd >= 0 && data != NULL && data_len > 0, -1);
+ g_return_val_if_fail(data != NULL && data_len > 0, -1);
+
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *) gc->proto_data;
+
+#if 0
+ purple_debug_info("UDP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd);
+#endif
- /*
- purple_debug(PURPLE_DEBUG_INFO, "UDP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd);
- */
-
errno = 0;
ret = send(qd->fd, data, data_len, 0);
if (ret < 0 && errno == EAGAIN) {
return ret;
}
-
+
if (ret < 0) {
/* TODO: what to do here - do we really have to disconnect? */
- purple_debug(PURPLE_DEBUG_ERROR, "UDP_SEND_OUT", "Send failed: %d, %s\n", errno, g_strerror(errno));
- purple_connection_error_reason(qd->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, g_strerror(errno));
+ purple_debug_error("UDP_SEND_OUT", "Send failed: %d, %s\n", errno, g_strerror(errno));
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, g_strerror(errno));
}
return ret;
}
static void tcp_can_write(gpointer data, gint source, PurpleInputCondition cond)
{
- qq_data *qd = data;
+ PurpleConnection *gc = (PurpleConnection *) data;
+ qq_data *qd;
+ qq_connection *conn;
int ret, writelen;
- writelen = purple_circ_buffer_get_max_read(qd->tcp_txbuf);
+ g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
+
+ conn = connection_find(qd, source);
+ g_return_if_fail(conn != NULL);
+
+ writelen = purple_circ_buffer_get_max_read(conn->tcp_txbuf);
if (writelen == 0) {
- purple_input_remove(qd->tx_handler);
- qd->tx_handler = 0;
+ purple_input_remove(conn->can_write_handler);
+ conn->can_write_handler = 0;
return;
}
- ret = write(qd->fd, qd->tcp_txbuf->outptr, writelen);
- purple_debug(PURPLE_DEBUG_ERROR, "TCP_CAN_WRITE",
- "total %d bytes is sent %d\n", writelen, ret);
+ ret = write(source, conn->tcp_txbuf->outptr, writelen);
+ purple_debug_info("TCP_CAN_WRITE", "total %d bytes is sent %d\n", writelen, ret);
if (ret < 0 && errno == EAGAIN)
return;
else if (ret < 0) {
/* TODO: what to do here - do we really have to disconnect? */
- purple_connection_error_reason(qd->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
_("Write Error"));
return;
}
- purple_circ_buffer_mark_read(qd->tcp_txbuf, ret);
+ purple_circ_buffer_mark_read(conn->tcp_txbuf, ret);
}
-static gint tcp_send_out(qq_data *qd, guint8 *data, gint data_len)
+static gint tcp_send_out(PurpleConnection *gc, guint8 *data, gint data_len)
{
+ qq_data *qd;
+ qq_connection *conn;
gint ret;
- g_return_val_if_fail(qd != NULL && qd->fd >= 0 && data != NULL && data_len > 0, -1);
+ g_return_val_if_fail(data != NULL && data_len > 0, -1);
- /*
- purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd);
- */
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *) gc->proto_data;
+
+ conn = connection_find(qd, qd->fd);
+ g_return_val_if_fail(conn, -1);
+
+#if 0
+ purple_debug_info("TCP_SEND_OUT", "Send %d bytes to socket %d\n", data_len, qd->fd);
+#endif
- if (qd->tx_handler == 0) {
+ if (conn->can_write_handler == 0) {
ret = write(qd->fd, data, data_len);
} else {
ret = -1;
@@ -493,28 +592,28 @@ static gint tcp_send_out(qq_data *qd, guint8 *data, gint data_len)
}
/*
- purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT",
+ purple_debug_info("TCP_SEND_OUT",
"Socket %d, total %d bytes is sent %d\n", qd->fd, data_len, ret);
*/
if (ret < 0 && errno == EAGAIN) {
/* socket is busy, send later */
- purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT", "Socket is busy and send later\n");
+ purple_debug_info("TCP_SEND_OUT", "Socket is busy and send later\n");
ret = 0;
} else if (ret <= 0) {
/* TODO: what to do here - do we really have to disconnect? */
- purple_debug(PURPLE_DEBUG_ERROR, "TCP_SEND_OUT",
+ purple_debug_error("TCP_SEND_OUT",
"Send to socket %d failed: %d, %s\n", qd->fd, errno, g_strerror(errno));
- purple_connection_error_reason(qd->gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, g_strerror(errno));
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, g_strerror(errno));
return ret;
}
if (ret < data_len) {
- purple_debug(PURPLE_DEBUG_INFO, "TCP_SEND_OUT",
+ purple_debug_info("TCP_SEND_OUT",
"Add %d bytes to buffer\n", data_len - ret);
- if (qd->tx_handler == 0) {
- qd->tx_handler = purple_input_add(qd->fd, PURPLE_INPUT_WRITE, tcp_can_write, qd);
+ if (conn->can_write_handler == 0) {
+ conn->can_write_handler = purple_input_add(qd->fd, PURPLE_INPUT_WRITE, tcp_can_write, gc);
}
- purple_circ_buffer_append(qd->tcp_txbuf, data + ret, data_len - ret);
+ purple_circ_buffer_append(conn->tcp_txbuf, data + ret, data_len - ret);
}
return ret;
}
@@ -528,17 +627,17 @@ static gboolean network_timeout(gpointer data)
g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, TRUE);
qd = (qq_data *) gc->proto_data;
- is_lost_conn = qq_trans_scan(qd);
+ is_lost_conn = qq_trans_scan(gc);
if (is_lost_conn) {
purple_connection_error_reason(gc,
PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Connection lost"));
return TRUE;
}
- if ( !qd->logged_in ) {
+ if ( !qd->is_login ) {
return TRUE;
}
-
+
qd->itv_count.keep_alive--;
if (qd->itv_count.keep_alive <= 0) {
qd->itv_count.keep_alive = qd->itv_config.keep_alive;
@@ -553,55 +652,29 @@ static gboolean network_timeout(gpointer data)
qd->itv_count.update--;
if (qd->itv_count.update <= 0) {
qd->itv_count.update = qd->itv_config.update;
- qq_send_packet_get_buddies_online(gc, 0);
-
- qq_send_cmd_group_all_get_online_members(gc);
+ qq_update_online(gc, 0);
return TRUE;
}
return TRUE; /* if return FALSE, timeout callback stops */
}
-/* the callback function after socket is built
- * we setup the qq protocol related configuration here */
-static void qq_connect_cb(gpointer data, gint source, const gchar *error_message)
+static void do_request_token(PurpleConnection *gc)
{
qq_data *qd;
- PurpleConnection *gc;
gchar *conn_msg;
const gchar *passwd;
- PurpleAccount *account ;
- gc = (PurpleConnection *) data;
-
- if (!PURPLE_CONNECTION_IS_VALID(gc)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ_CONN", "Invalid connection\n");
- close(source);
- return;
- }
+ /* _qq_show_socket("Got login socket", source); */
g_return_if_fail(gc != NULL && gc->proto_data != NULL);
-
qd = (qq_data *) gc->proto_data;
- account = purple_connection_get_account(gc);
-
- /* Connect is now complete; clear the PurpleProxyConnectData */
- qd->connect_data = NULL;
-
- if (source < 0) { /* socket returns -1 */
- purple_debug(PURPLE_DEBUG_INFO, "QQ_CONN", "Invalid connection, source is < 0\n");
- qq_disconnect(gc);
- reconnect_later(gc);
- return;
- }
-
- /* _qq_show_socket("Got login socket", source); */
/* QQ use random seq, to minimize duplicated packets */
- srandom(time(NULL));
- qd->send_seq = random() & 0x0000ffff;
- qd->fd = source;
- qd->logged_in = FALSE;
+ srand(time(NULL));
+ qd->send_seq = rand() & 0xffff;
+
+ qd->is_login = FALSE;
qd->channel = 1;
qd->uid = strtol(purple_account_get_username(purple_connection_get_account(gc)), NULL, 10);
@@ -614,41 +687,63 @@ static void qq_connect_cb(gpointer data, gint source, const gchar *error_message
qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5),
qd->password_twice_md5, sizeof(qd->password_twice_md5));
- g_return_if_fail(qd->network_timeout == 0);
- qd->itv_config.resend = purple_account_get_int(account, "resend_interval", 10);
- if (qd->itv_config.resend <= 0) qd->itv_config.resend = 10;
+ g_return_if_fail(qd->network_watcher == 0);
+ qd->network_watcher = purple_timeout_add_seconds(qd->itv_config.resend, network_timeout, gc);
- qd->itv_config.keep_alive = purple_account_get_int(account, "keep_alive_interval", 60);
- if (qd->itv_config.keep_alive < 30) qd->itv_config.keep_alive = 30;
- qd->itv_config.keep_alive /= qd->itv_config.resend;
- qd->itv_count.keep_alive = qd->itv_config.keep_alive;
+ /* Update the login progress status display */
+ conn_msg = g_strdup_printf(_("Request token"));
+ purple_connection_update_progress(gc, conn_msg, 2, QQ_CONNECT_STEPS);
+ g_free(conn_msg);
- qd->itv_config.update = purple_account_get_int(account, "update_interval", 300);
- if (qd->itv_config.update > 0) {
- if (qd->itv_config.update < qd->itv_config.keep_alive) {
- qd->itv_config.update = qd->itv_config.keep_alive;
- }
- qd->itv_config.update /= qd->itv_config.resend;
- qd->itv_count.update = qd->itv_config.update;
- } else {
- qd->itv_config.update = 0;
+ qq_send_packet_token(gc);
+}
+
+/* the callback function after socket is built
+ * we setup the qq protocol related configuration here */
+static void connect_cb(gpointer data, gint source, const gchar *error_message)
+{
+ PurpleConnection *gc;
+ qq_data *qd;
+ PurpleAccount *account ;
+ qq_connection *conn;
+
+ gc = (PurpleConnection *) data;
+ g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+
+ qd = (qq_data *) gc->proto_data;
+ account = purple_connection_get_account(gc);
+
+ /* conn_data will be destoryed */
+ qd->conn_data = NULL;
+
+ if (!PURPLE_CONNECTION_IS_VALID(gc)) {
+ purple_debug_info("QQ_CONN", "Invalid connection\n");
+ close(source);
+ return;
}
- qd->network_timeout = purple_timeout_add(qd->itv_config.resend *1000, network_timeout, gc);
-
- if (qd->use_tcp)
- gc->inpa = purple_input_add(qd->fd, PURPLE_INPUT_READ, tcp_pending, gc);
- else
- gc->inpa = purple_input_add(qd->fd, PURPLE_INPUT_READ, udp_pending, gc);
+ if (source < 0) { /* socket returns -1 */
+ purple_debug_info("QQ_CONN",
+ "Could not establish a connection with the server:\n%s\n",
+ error_message);
+ if (qd->connect_watcher > 0) purple_timeout_remove(qd->connect_watcher);
+ qd->connect_watcher = purple_timeout_add_seconds(QQ_CONNECT_INTERVAL, qq_connect_later, gc);
+ return;
+ }
- /* Update the login progress status display */
- conn_msg = g_strdup_printf("Login as %d", qd->uid);
- purple_connection_update_progress(gc, conn_msg, QQ_CONNECT_STEPS - 1, QQ_CONNECT_STEPS);
- g_free(conn_msg);
+ /* _qq_show_socket("Got login socket", source); */
+ qd->fd = source;
+ conn = connection_create(qd, source);
+ if (qd->use_tcp) {
+ conn->input_handler = purple_input_add(source, PURPLE_INPUT_READ, tcp_pending, gc);
+ } else {
+ conn->input_handler = purple_input_add(source, PURPLE_INPUT_READ, udp_pending, gc);
+ }
- qq_send_packet_token(gc);
+ do_request_token( gc );
}
+#ifndef purple_proxy_connect_udp
static void udp_can_write(gpointer data, gint source, PurpleInputCondition cond)
{
PurpleConnection *gc;
@@ -679,22 +774,22 @@ static void udp_can_write(gpointer data, gint source, PurpleInputCondition cond)
ret = getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len);
if (ret == 0 && error == EINPROGRESS)
return; /* we'll be called again later */
-
- purple_input_remove(qd->tx_handler);
- qd->tx_handler = 0;
+
+ purple_input_remove(qd->udp_can_write_handler);
+ qd->udp_can_write_handler = 0;
if (ret < 0 || error != 0) {
- if(ret != 0)
+ if(ret != 0)
error = errno;
close(source);
purple_debug_error("proxy", "getsockopt SO_ERROR check: %s\n", g_strerror(error));
- qq_connect_cb(gc, -1, _("Unable to connect"));
+ connect_cb(gc, -1, _("Unable to connect"));
return;
}
- qq_connect_cb(gc, source, NULL);
+ connect_cb(gc, source, NULL);
}
static void udp_host_resolved(GSList *hosts, gpointer data, const char *error_message) {
@@ -725,7 +820,7 @@ static void udp_host_resolved(GSList *hosts, gpointer data, const char *error_me
hosts = g_slist_remove(hosts, hosts->data);
memcpy(&server_addr, hosts->data, addr_size);
g_free(hosts->data);
-
+
hosts = g_slist_remove(hosts, hosts->data);
while(hosts) {
hosts = g_slist_remove(hosts, hosts->data);
@@ -735,7 +830,7 @@ static void udp_host_resolved(GSList *hosts, gpointer data, const char *error_me
fd = socket(PF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Unable to create socket: %s\n", g_strerror(errno));
return;
}
@@ -752,122 +847,97 @@ static void udp_host_resolved(GSList *hosts, gpointer data, const char *error_me
* If a UDP socket is unconnected, which is the normal state after a
* bind() call, then send() or write() are not allowed, since no
* destination is available; only sendto() can be used to send data.
- *
+ *
* Calling connect() on the socket simply records the specified address
* and port number as being the desired communications partner. That
* means that send() or write() are now allowed; they use the destination
* address and port given on the connect call as the destination of packets.
*/
if (connect(fd, &server_addr, addr_size) >= 0) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Connected.\n");
+ purple_debug_info("QQ", "Connected.\n");
flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
- qq_connect_cb(gc, fd, NULL);
+ connect_cb(gc, fd, NULL);
return;
}
-
+
/* [EINPROGRESS]
- * The socket is marked as non-blocking and the connection cannot be
- * completed immediately. It is possible to select for completion by
+ * The socket is marked as non-blocking and the connection cannot be
+ * completed immediately. It is possible to select for completion by
* selecting the socket for writing.
* [EINTR]
- * A signal interrupted the call.
+ * A signal interrupted the call.
* The connection is established asynchronously.
*/
if ((errno == EINPROGRESS) || (errno == EINTR)) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Connect in asynchronous mode.\n");
- qd->tx_handler = purple_input_add(fd, PURPLE_INPUT_WRITE, udp_can_write, gc);
+ purple_debug_warning( "QQ", "Connect in asynchronous mode.\n");
+ qd->udp_can_write_handler = purple_input_add(fd, PURPLE_INPUT_WRITE, udp_can_write, gc);
return;
}
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Connection failed: %s\n", g_strerror(errno));
+ purple_debug_error("QQ", "Connection failed: %s\n", g_strerror(errno));
close(fd);
}
+#endif
-/* establish a generic QQ connection
- * TCP/UDP, and direct/redirected */
-void qq_connect(PurpleAccount *account)
+gboolean connect_to_server(PurpleConnection *gc, gchar *server, gint port)
{
- PurpleConnection *gc;
+ PurpleAccount *account ;
qq_data *qd;
gchar *conn_msg;
- gc = purple_account_get_connection(account);
- g_return_if_fail(gc != NULL && gc->proto_data != NULL);
-
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, FALSE);
+ account = purple_connection_get_account(gc);
qd = (qq_data *) gc->proto_data;
-
- /* test set_new_server
- while (set_new_server(qd)) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TEST",
- "New server %s:%d Real server %s:%d\n",
- qd->server_name, qd->user_port, qd->real_hostname, qd->real_port);
- }
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TEST", "qd->servers %lu\n",
- qd->servers);
- exit(1);
- */
- if (qd->server_name == NULL) {
- /* must be first call this function */
- if ( set_new_server(qd) != TRUE) {
- purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Failed to connect server"));
- return;
- }
- }
-
- if (qd->real_hostname == NULL || qd->real_port == 0) {
+ if (server == NULL || strlen(server) == 0 || port == 0) {
purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("hostname is NULL or port is 0"));
- return;
+ _("Invalid server or port"));
+ return FALSE;
}
- conn_msg = g_strdup_printf( _("Connecting server %s, retries %d"),
- qd->real_hostname, qd->reconnect_times);
+ conn_msg = g_strdup_printf( _("Connecting server %s, retries %d"), server, port);
purple_connection_update_progress(gc, conn_msg, 1, QQ_CONNECT_STEPS);
g_free(conn_msg);
- if (qd->is_redirect) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Redirect to %s:%d\n",
- qd->real_hostname, qd->real_port);
- }
- qd->is_redirect = FALSE;
+ purple_debug_info("QQ", "Connect to %s:%d\n", server, port);
- qd->fd = -1;
- qd->tx_handler = 0;
-
- /* QQ connection via UDP/TCP.
+ if (qd->conn_data != NULL) {
+ purple_proxy_connect_cancel(qd->conn_data);
+ qd->conn_data = NULL;
+ }
+
+#ifdef purple_proxy_connect_udp
+ if (qd->use_tcp) {
+ qd->conn_data = purple_proxy_connect(gc, account, server, port, connect_cb, gc);
+ } else {
+ qd->conn_data = purple_proxy_connect_udp(gc, account, server, port, connect_cb, gc);
+ }
+ if ( qd->conn_data == NULL ) {
+ purple_debug_error("QQ", _("Couldn't create socket"));
+ return FALSE;
+ }
+#else
+ /* QQ connection via UDP/TCP.
* Now use Purple proxy function to provide TCP proxy support,
* and qq_udp_proxy.c to add UDP proxy support (thanks henry) */
if(qd->use_tcp) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "TCP Connect to %s:%d\n",
- qd->real_hostname, qd->real_port);
-
- /* TODO: is there a good default grow size? */
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Create tcp_txbuf\n");
- qd->tcp_txbuf = purple_circ_buffer_new(0);
-
- qd->connect_data = purple_proxy_connect(NULL, account,
- qd->real_hostname, qd->real_port, qq_connect_cb, gc);
- if (qd->connect_data == NULL) {
- purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Unable to connect."));
+ qd->conn_data = purple_proxy_connect(gc, account, server, port, connect_cb, gc);
+ if ( qd->conn_data == NULL ) {
+ purple_debug_error("QQ", "Unable to connect.");
+ return FALSE;
}
- return;
+ return TRUE;
}
-
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "UDP Connect to %s:%d\n",
- qd->real_hostname, qd->real_port);
- g_return_if_fail(qd->udp_query_data == NULL);
- qd->udp_query_data = purple_dnsquery_a(qd->real_hostname, qd->real_port,
- udp_host_resolved, gc);
- if (qd->udp_query_data == NULL) {
- purple_connection_error_reason(qd->gc,
- PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Could not resolve hostname"));
+ purple_debug_info("QQ", "UDP Connect to %s:%d\n", server, port);
+ qd->udp_query_data = purple_dnsquery_a(server, port, udp_host_resolved, gc);
+ if ( qd->udp_query_data == NULL ) {
+ purple_debug_error("QQ", "Could not resolve hostname");
+ return FALSE;
}
+#endif
+ return TRUE;
}
/* clean up qq_data structure and all its components
@@ -879,65 +949,43 @@ void qq_disconnect(PurpleConnection *gc)
g_return_if_fail(gc != NULL && gc->proto_data != NULL);
qd = (qq_data *) gc->proto_data;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Disconnecting ...\n");
+ purple_debug_info("QQ", "Disconnecting ...\n");
- if (qd->network_timeout > 0) {
- purple_timeout_remove(qd->network_timeout);
- qd->network_timeout = 0;
+ if (qd->network_watcher > 0) {
+ purple_debug_info("QQ", "Remove network watcher\n");
+ purple_timeout_remove(qd->network_watcher);
+ qd->network_watcher = 0;
}
/* finish all I/O */
- if (qd->fd >= 0 && qd->logged_in) {
+ if (qd->fd >= 0 && qd->is_login) {
qq_send_packet_logout(gc);
}
- if (gc->inpa > 0) {
- purple_input_remove(gc->inpa);
- gc->inpa = 0;
- }
-
- if (qd->fd >= 0) {
- close(qd->fd);
- qd->fd = -1;
- }
-
- if (qd->reconnect_timeout > 0) {
- purple_timeout_remove(qd->reconnect_timeout);
- qd->reconnect_timeout = 0;
- }
-
- if (qd->connect_data != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Cancel connect_data\n");
- purple_proxy_connect_cancel(qd->connect_data);
- }
-
- if(qd->tcp_txbuf != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "destroy tcp_txbuf\n");
- purple_circ_buffer_destroy(qd->tcp_txbuf);
- qd->tcp_txbuf = NULL;
+ /* not connected */
+ if (qd->conn_data != NULL) {
+ purple_debug_info("QQ", "Connect cancel\n");
+ purple_proxy_connect_cancel(qd->conn_data);
+ qd->conn_data = NULL;
}
-
- if (qd->tx_handler) {
- purple_input_remove(qd->tx_handler);
- qd->tx_handler = 0;
+#ifndef purple_proxy_connect_udp
+ if (qd->udp_can_write_handler) {
+ purple_input_remove(qd->udp_can_write_handler);
+ qd->udp_can_write_handler = 0;
}
- if (qd->tcp_rxqueue != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "destroy tcp_rxqueue\n");
- g_free(qd->tcp_rxqueue);
- qd->tcp_rxqueue = NULL;
- qd->tcp_rxlen = 0;
- }
-
if (qd->udp_query_data != NULL) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "destroy udp_query_data\n");
+ purple_debug_info("QQ", "destroy udp_query_data\n");
purple_dnsquery_destroy(qd->udp_query_data);
qd->udp_query_data = NULL;
}
+#endif
+ connection_free_all(qd);
+ qd->fd = -1;
+
+ qq_trans_remove_all(gc);
- qq_trans_remove_all(qd);
-
if (qd->token) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "free token\n");
+ purple_debug_info("QQ", "free token\n");
g_free(qd->token);
qd->token = NULL;
qd->token_len = 0;
@@ -955,13 +1003,13 @@ void qq_disconnect(PurpleConnection *gc)
qq_buddies_list_free(gc->account, qd);
}
-static gint encap(qq_data *qd, guint8 *buf, gint maxlen, guint16 cmd, guint16 seq,
+static gint packet_encap(qq_data *qd, guint8 *buf, gint maxlen, guint16 cmd, guint16 seq,
guint8 *data, gint data_len)
{
gint bytes = 0;
g_return_val_if_fail(qd != NULL && buf != NULL && maxlen > 0, -1);
g_return_val_if_fail(data != NULL && data_len > 0, -1);
-
+
/* QQ TCP packet has two bytes in the begining defines packet length
* so leave room here to store packet size */
if (qd->use_tcp) {
@@ -971,7 +1019,7 @@ static gint encap(qq_data *qd, guint8 *buf, gint maxlen, guint16 cmd, guint16 se
bytes += qq_put8(buf + bytes, QQ_PACKET_TAG);
bytes += qq_put16(buf + bytes, QQ_CLIENT);
bytes += qq_put16(buf + bytes, cmd);
-
+
bytes += qq_put16(buf + bytes, seq);
bytes += qq_put32(buf + bytes, qd->uid);
@@ -987,109 +1035,168 @@ static gint encap(qq_data *qd, guint8 *buf, gint maxlen, guint16 cmd, guint16 se
}
/* data has been encrypted before */
-gint qq_send_data(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack,
- guint8 *data, gint data_len)
+static gint packet_send_out(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *data, gint data_len)
{
+ qq_data *qd;
guint8 *buf;
gint buf_len;
gint bytes_sent;
- g_return_val_if_fail(qd != NULL, -1);
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *)gc->proto_data;
g_return_val_if_fail(data != NULL && data_len > 0, -1);
buf = g_newa(guint8, MAX_PACKET_SIZE);
memset(buf, 0, MAX_PACKET_SIZE);
- buf_len = encap(qd, buf, MAX_PACKET_SIZE, cmd, seq, data, data_len);
+ buf_len = packet_encap(qd, buf, MAX_PACKET_SIZE, cmd, seq, data, data_len);
if (buf_len <= 0) {
return -1;
}
+ qd->net_stat.sent++;
if (qd->use_tcp) {
- bytes_sent = tcp_send_out(qd, buf, buf_len);
+ bytes_sent = tcp_send_out(gc, buf, buf_len);
} else {
- bytes_sent = udp_send_out(qd, buf, buf_len);
+ bytes_sent = udp_send_out(gc, buf, buf_len);
}
- if (need_ack) {
- qq_trans_add_client_cmd(qd, cmd, seq, data, data_len);
- }
-
+ return bytes_sent;
+}
+
+gint qq_send_cmd_encrypted(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *encrypted_data, gint encrypted_len, gboolean is_save2trans)
+{
+ gint sent_len;
+
#if 1
- /* qq_show_packet("QQ_SEND_DATA", buf, buf_len); */
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "<== [%05d], 0x%04X %s, total %d bytes is sent %d\n",
- seq, cmd, qq_get_cmd_desc(cmd), buf_len, bytes_sent);
+ /* qq_show_packet("qq_send_cmd_encrypted", data, data_len); */
+ purple_debug_info("QQ", "<== [%05d], %s(0x%04X), datalen %d\n",
+ seq, qq_get_cmd_desc(cmd), cmd, encrypted_len);
#endif
- return bytes_sent;
+
+ sent_len = packet_send_out(gc, cmd, seq, encrypted_data, encrypted_len);
+ if (is_save2trans) {
+ qq_trans_add_client_cmd(gc, cmd, seq, encrypted_data, encrypted_len, 0, 0);
+ }
+ return sent_len;
}
-/* Encrypt data with session_key, then call qq_send_data */
-gint qq_send_cmd_detail(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack,
- guint8 *data, gint data_len)
+/* Encrypt data with session_key, and send packet out */
+static gint send_cmd_detail(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *data, gint data_len, gboolean is_save2trans, gint update_class, guint32 ship32)
{
+ qq_data *qd;
guint8 *encrypted_data;
gint encrypted_len;
+ gint bytes_sent;
- g_return_val_if_fail(qd != NULL, -1);
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *)gc->proto_data;
g_return_val_if_fail(data != NULL && data_len > 0, -1);
/* at most 16 bytes more */
encrypted_data = g_newa(guint8, data_len + 16);
-#if 0
- purple_debug(PURPLE_DEBUG_INFO, "QQ_ENCRYPT",
- "Before %d: [%05d] 0x%04X %s\n",
- data_len, seq, cmd, qq_get_cmd_desc(cmd));
-#endif
encrypted_len = qq_encrypt(encrypted_data, data, data_len, qd->session_key);
if (encrypted_len < 16) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_ENCRYPT",
- "Error len %d: [%05d] 0x%04X %s\n",
+ purple_debug_error("QQ_ENCRYPT", "Error len %d: [%05d] 0x%04X %s\n",
encrypted_len, seq, cmd, qq_get_cmd_desc(cmd));
return -1;
}
-#if 0
- purple_debug(PURPLE_DEBUG_INFO, "QQ_ENCRYPT",
- "After %d: [%05d] 0x%04X %s\n",
- encrypted_len, seq, cmd, qq_get_cmd_desc(cmd));
-#endif
- return qq_send_data(qd, cmd, seq, need_ack, encrypted_data, encrypted_len);
+ bytes_sent = packet_send_out(gc, cmd, seq, encrypted_data, encrypted_len);
+
+ if (is_save2trans) {
+ qq_trans_add_client_cmd(gc, cmd, seq, encrypted_data, encrypted_len,
+ update_class, ship32);
+ }
+ return bytes_sent;
}
-/* set seq and need_ack, then call qq_send_cmd_detail */
-gint qq_send_cmd(qq_data *qd, guint16 cmd, guint8 *data, gint data_len)
+gint qq_send_cmd_mess(PurpleConnection *gc, guint16 cmd, guint8 *data, gint data_len,
+ gint update_class, guint32 ship32)
{
- g_return_val_if_fail(qd != NULL, -1);
+ qq_data *qd;
+ guint16 seq;
+
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *) gc->proto_data;
g_return_val_if_fail(data != NULL && data_len > 0, -1);
- qd->send_seq++;
- return qq_send_cmd_detail(qd, cmd, qd->send_seq, TRUE, data, data_len);
+ seq = ++qd->send_seq;
+#if 1
+ purple_debug_info("QQ", "<== [%05d], %s(0x%04X), datalen %d\n",
+ seq, qq_get_cmd_desc(cmd), cmd, data_len);
+#endif
+ return send_cmd_detail(gc, cmd, seq, data, data_len, TRUE, update_class, ship32);
}
-gint qq_send_room_cmd_noid(PurpleConnection *gc, guint8 room_cmd,
- guint8 *data, gint data_len)
+/* set seq and is_save2trans, then call send_cmd_detail */
+gint qq_send_cmd(PurpleConnection *gc, guint16 cmd, guint8 *data, gint data_len)
{
- return qq_send_room_cmd(gc, room_cmd, 0, data, data_len);
+ qq_data *qd;
+ guint16 seq;
+ gboolean is_save2trans;
+
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *) gc->proto_data;
+ g_return_val_if_fail(data != NULL && data_len > 0, -1);
+
+ if (cmd != QQ_CMD_LOGOUT) {
+ seq = ++qd->send_seq;
+ is_save2trans = TRUE;
+ } else {
+ seq = 0xFFFF;
+ is_save2trans = FALSE;
+ }
+#if 1
+ purple_debug_info("QQ", "<== [%05d], %s(0x%04X), datalen %d\n",
+ seq, qq_get_cmd_desc(cmd), cmd, data_len);
+#endif
+ return send_cmd_detail(gc, cmd, seq, data, data_len, is_save2trans, 0, 0);
}
-gint qq_send_room_cmd_only(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
+/* set seq and is_save2trans, then call send_cmd_detail */
+gint qq_send_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *data, gint data_len)
{
- g_return_val_if_fail(room_cmd > 0 && room_id > 0, -1);
- return qq_send_room_cmd(gc, room_cmd, room_id, NULL, 0);
+ qq_data *qd;
+ guint8 *encrypted_data;
+ gint encrypted_len;
+ gint bytes_sent;
+
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
+ qd = (qq_data *)gc->proto_data;
+ g_return_val_if_fail(data != NULL && data_len > 0, -1);
+
+#if 1
+ purple_debug_info("QQ", "<== [SRV-%05d], %s(0x%04X), datalen %d\n",
+ seq, qq_get_cmd_desc(cmd), cmd, data_len);
+#endif
+ /* at most 16 bytes more */
+ encrypted_data = g_newa(guint8, data_len + 16);
+ encrypted_len = qq_encrypt(encrypted_data, data, data_len, qd->session_key);
+ if (encrypted_len < 16) {
+ purple_debug_error("QQ_ENCRYPT", "Error len %d: [%05d] 0x%04X %s\n",
+ encrypted_len, seq, cmd, qq_get_cmd_desc(cmd));
+ return -1;
+ }
+
+ bytes_sent = packet_send_out(gc, cmd, seq, encrypted_data, encrypted_len);
+ qq_trans_add_server_reply(gc, cmd, seq, encrypted_data, encrypted_len);
+
+ return bytes_sent;
}
-gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
- guint8 *data, gint data_len)
+static gint send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
+ guint8 *data, gint data_len, gint update_class, guint32 ship32)
{
qq_data *qd;
-
guint8 *buf;
gint buf_len;
guint8 *encrypted_data;
gint encrypted_len;
gint bytes_sent;
guint16 seq;
-
+
g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, -1);
qd = (qq_data *) gc->proto_data;
@@ -1106,6 +1213,7 @@ gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
if (data != NULL && data_len > 0) {
buf_len += qq_putdata(buf + buf_len, data, data_len);
}
+
qd->send_seq++;
seq = qd->send_seq;
@@ -1114,32 +1222,44 @@ gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
encrypted_data = g_newa(guint8, buf_len + 16);
encrypted_len = qq_encrypt(encrypted_data, buf, buf_len, qd->session_key);
if (encrypted_len < 16) {
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_ENCRYPT",
- "Error len %d: [%05d] QQ_CMD_ROOM.(0x%02X %s)\n",
- encrypted_len, seq, room_cmd, qq_get_room_cmd_desc(room_cmd));
- return -1;
- }
-
- /* Encap header to buf */
- buf_len = encap(qd, buf, MAX_PACKET_SIZE, QQ_CMD_ROOM, seq, encrypted_data, encrypted_len);
- if (buf_len <= 0) {
+ purple_debug_error("QQ_ENCRYPT", "Error len %d: [%05d] %s (0x%02X)\n",
+ encrypted_len, seq, qq_get_room_cmd_desc(room_cmd), room_cmd);
return -1;
}
- if (qd->use_tcp) {
- bytes_sent = tcp_send_out(qd, buf, buf_len);
- } else {
- bytes_sent = udp_send_out(qd, buf, buf_len);
- }
-
- qq_trans_add_room_cmd(qd, seq, room_cmd, room_id, buf, buf_len);
-
+ bytes_sent = packet_send_out(gc, QQ_CMD_ROOM, seq, encrypted_data, encrypted_len);
#if 1
- /* qq_show_packet("QQ_SEND_DATA", buf, buf_len); */
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
- "<== [%05d], QQ_CMD_ROOM.(0x%02X %s) to room %d, total %d bytes is sent %d\n",
- seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id,
- buf_len, bytes_sent);
+ /* qq_show_packet("send_room_cmd", buf, buf_len); */
+ purple_debug_info("QQ",
+ "<== [%05d], %s (0x%02X) to room %d, datalen %d\n",
+ seq, qq_get_room_cmd_desc(room_cmd), room_cmd, room_id, buf_len);
#endif
+
+ qq_trans_add_room_cmd(gc, seq, room_cmd, room_id, encrypted_data, encrypted_len,
+ update_class, ship32);
return bytes_sent;
}
+
+gint qq_send_room_cmd_mess(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
+ guint8 *data, gint data_len, gint update_class, guint32 ship32)
+{
+ return send_room_cmd(gc, room_cmd, room_id, data, data_len, update_class, ship32);
+}
+
+gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
+ guint8 *data, gint data_len)
+{
+ return send_room_cmd(gc, room_cmd, room_id, data, data_len, 0, 0);
+}
+
+gint qq_send_room_cmd_noid(PurpleConnection *gc, guint8 room_cmd,
+ guint8 *data, gint data_len)
+{
+ return send_room_cmd(gc, room_cmd, 0, data, data_len, 0, 0);
+}
+
+gint qq_send_room_cmd_only(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
+{
+ g_return_val_if_fail(room_cmd > 0 && room_id > 0, -1);
+ return send_room_cmd(gc, room_cmd, room_id, NULL, 0, 0, 0);
+}
diff --git a/libpurple/protocols/qq/qq_network.h b/libpurple/protocols/qq/qq_network.h
index 33d4b7def5..e150f70639 100644
--- a/libpurple/protocols/qq/qq_network.h
+++ b/libpurple/protocols/qq/qq_network.h
@@ -32,19 +32,23 @@
#define QQ_CONNECT_STEPS 3 /* steps in connection */
-void qq_connect(PurpleAccount *account);
+gboolean qq_connect_later(gpointer data);
void qq_disconnect(PurpleConnection *gc);
-void qq_connect_later(PurpleConnection *gc);
-gint qq_send_cmd(qq_data *qd, guint16 cmd, guint8 *data, gint datalen);
-gint qq_send_data(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack,
- guint8 *data, gint data_len);
-gint qq_send_cmd_detail(qq_data *qd, guint16 cmd, guint16 seq, gboolean need_ack,
- guint8 *data, gint data_len);
+gint qq_send_cmd_encrypted(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *encrypted_data, gint encrypted_len, gboolean is_save2trans);
+gint qq_send_cmd(PurpleConnection *gc, guint16 cmd, guint8 *data, gint datalen);
+gint qq_send_cmd_mess(PurpleConnection *gc, guint16 cmd, guint8 *data, gint data_len,
+ gint update_class, guint32 ship32);
+
+gint qq_send_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *data, gint data_len);
gint qq_send_room_cmd(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
guint8 *data, gint data_len);
+gint qq_send_room_cmd_mess(PurpleConnection *gc, guint8 room_cmd, guint32 room_id,
+ guint8 *data, gint data_len, gint update_class, guint32 ship32);
gint qq_send_room_cmd_only(PurpleConnection *gc, guint8 room_cmd, guint32 room_id);
-gint qq_send_room_cmd_noid(PurpleConnection *gc, guint8 room_cmd,
+gint qq_send_room_cmd_noid(PurpleConnection *gc, guint8 room_cmd,
guint8 *data, gint data_len);
#endif
diff --git a/libpurple/protocols/qq/qq_process.c b/libpurple/protocols/qq/qq_process.c
index b1fafb1762..e2731fcb5a 100644
--- a/libpurple/protocols/qq/qq_process.c
+++ b/libpurple/protocols/qq/qq_process.c
@@ -26,11 +26,6 @@
#include "debug.h"
#include "internal.h"
-#ifdef _WIN32
-#define random rand
-#define srandom srand
-#endif
-
#include "buddy_info.h"
#include "buddy_list.h"
#include "buddy_opt.h"
@@ -65,7 +60,7 @@ enum {
};
/* default process, decrypt and dump */
-static void process_cmd_unknow(PurpleConnection *gc,gchar *title, guint8 *data, gint data_len, guint16 cmd, guint16 seq)
+static void process_cmd_unknow(PurpleConnection *gc,const gchar *title, guint8 *data, gint data_len, guint16 cmd, guint16 seq)
{
qq_data *qd;
gchar *msg_utf8 = NULL;
@@ -82,14 +77,13 @@ static void process_cmd_unknow(PurpleConnection *gc,gchar *title, guint8 *data,
seq, qq_get_cmd_desc(cmd));
msg_utf8 = try_dump_as_gbk(data, data_len);
- if (msg_utf8) {
- purple_notify_info(gc, NULL, msg_utf8, NULL);
+ if (msg_utf8 != NULL) {
+ purple_notify_info(gc, _("QQ Error"), title, msg_utf8);
g_free(msg_utf8);
}
}
-void qq_proc_cmd_server(PurpleConnection *gc,
- guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len)
+void qq_proc_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len)
{
qq_data *qd;
@@ -102,20 +96,20 @@ void qq_proc_cmd_server(PurpleConnection *gc,
data = g_newa(guint8, rcved_len);
data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
if (data_len < 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Can not decrypt server cmd by session key, [%05d], 0x%04X %s, len %d\n",
+ purple_debug_warning("QQ",
+ "Can not decrypt server cmd by session key, [%05d], 0x%04X %s, len %d\n",
seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
qq_show_packet("Can not decrypted", rcved, rcved_len);
return;
}
if (data_len <= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Server cmd decrypted is empty, [%05d], 0x%04X %s, len %d\n",
+ purple_debug_warning("QQ",
+ "Server cmd decrypted is empty, [%05d], 0x%04X %s, len %d\n",
seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
return;
}
-
+
/* now process the packet */
switch (cmd) {
case QQ_CMD_RECV_IM:
@@ -124,107 +118,208 @@ void qq_proc_cmd_server(PurpleConnection *gc,
case QQ_CMD_RECV_MSG_SYS:
qq_process_msg_sys(data, data_len, seq, gc);
break;
- case QQ_CMD_RECV_MSG_BUDDY_CHANGE_STATUS:
+ case QQ_CMD_BUDDY_CHANGE_STATUS:
qq_process_buddy_change_status(data, data_len, gc);
break;
default:
- process_cmd_unknow(gc, "Unknow SERVER CMD", data, data_len, cmd, seq);
+ process_cmd_unknow(gc, _("Unknow SERVER CMD"), data, data_len, cmd, seq);
break;
}
}
-static void process_cmd_login(PurpleConnection *gc, guint8 *data, gint data_len)
+static void process_room_cmd_notify(PurpleConnection *gc,
+ guint8 room_cmd, guint8 room_id, guint8 reply, guint8 *data, gint data_len)
+{
+ gchar *prim;
+ gchar *msg, *msg_utf8;
+ g_return_if_fail(data != NULL && data_len > 0);
+
+ msg = g_strndup((gchar *) data, data_len); /* it will append 0x00 */
+ msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
+ g_free(msg);
+
+ prim = g_strdup_printf(_("Error reply of %s(0x%02X)\nRoom %d, reply 0x%02X"),
+ qq_get_room_cmd_desc(room_cmd), room_cmd, room_id, reply);
+
+ purple_notify_error(gc, _("QQ Qun Command"), prim, msg_utf8);
+
+ g_free(prim);
+ g_free(msg_utf8);
+}
+
+void qq_update_room(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
{
qq_data *qd;
- guint ret_8;
+ qq_group *group;
+ gint ret;
g_return_if_fail (gc != NULL && gc->proto_data != NULL);
-
qd = (qq_data *) gc->proto_data;
- ret_8 = qq_process_login_reply(data, data_len, gc);
- if (ret_8 == QQ_LOGIN_REPLY_OK) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Login repliess OK; everything is fine\n");
+ group = qq_room_search_id(gc, room_id);
+ if (group == NULL && room_id <= 0) {
+ purple_debug_info("QQ", "No room, nothing update\n");
+ return;
+ }
+ if (group == NULL ) {
+ purple_debug_warning("QQ", "Failed search room id [%d]\n", room_id);
+ return;
+ }
- purple_connection_set_state(gc, PURPLE_CONNECTED);
- qd->logged_in = TRUE; /* must be defined after sev_finish_login */
+ switch (room_cmd) {
+ case 0:
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ROOM, 0);
+ break;
+ case QQ_ROOM_CMD_GET_INFO:
+ ret = qq_request_room_get_buddies(gc, group, QQ_CMD_CLASS_UPDATE_ROOM);
+ if (ret <= 0) {
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ROOM, 0);
+ }
+ break;
+ case QQ_ROOM_CMD_GET_BUDDIES:
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ROOM, 0);
+ break;
+ case QQ_ROOM_CMD_GET_ONLINES:
+ /* last command */
+ default:
+ break;
+ }
+}
- /* now initiate QQ Qun, do it first as it may take longer to finish */
- qq_group_init(gc);
+static void update_all_rooms(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
+{
+ qq_data *qd;
+ gboolean is_new_turn = FALSE;
+ qq_group *next_group;
- /* Now goes on updating my icon/nickname, not showing info_window */
- qd->modifying_face = FALSE;
+ g_return_if_fail (gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
- qq_send_packet_get_info(gc, qd->uid, FALSE);
- /* grab my level */
- qq_send_packet_get_level(gc, qd->uid);
+ next_group = qq_room_get_next(gc, room_id);
+ if (next_group == NULL && room_id <= 0) {
+ purple_debug_info("QQ", "No room. Finished update\n");
+ return;
+ }
+ if (next_group == NULL ) {
+ is_new_turn = TRUE;
+ next_group = qq_room_get_next(gc, 0);
+ g_return_if_fail(next_group != NULL);
+ }
- qq_send_packet_change_status(gc);
+ switch (room_cmd) {
+ case 0:
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ALL, 0);
+ break;
+ case QQ_ROOM_CMD_GET_INFO:
+ if (!is_new_turn) {
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_INFO, next_group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ALL, 0);
+ } else {
+ qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL);
+ }
+ break;
+ case QQ_ROOM_CMD_GET_BUDDIES:
+ /* last command */
+ if (!is_new_turn) {
+ qq_request_room_get_buddies(gc, next_group, QQ_CMD_CLASS_UPDATE_ALL);
+ } else {
+ purple_debug_info("QQ", "Finished update\n");
+ }
+ break;
+ default:
+ break;
+ }
+}
- /* refresh buddies */
- qq_send_packet_get_buddies_list(gc, 0);
+void qq_update_all(PurpleConnection *gc, guint16 cmd)
+{
+ qq_data *qd;
- /* refresh groups */
- qq_send_packet_get_buddies_and_rooms(gc, 0);
+ g_return_if_fail (gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
- return;
+ switch (cmd) {
+ case 0:
+ qq_request_buddy_info(gc, qd->uid, QQ_CMD_CLASS_UPDATE_ALL, QQ_BUDDY_INFO_UPDATE_ONLY);
+ break;
+ case QQ_CMD_GET_BUDDY_INFO:
+ qq_request_change_status(gc, QQ_CMD_CLASS_UPDATE_ALL);
+ break;
+ case QQ_CMD_CHANGE_STATUS:
+ qq_request_get_buddies_list(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
+ break;
+ case QQ_CMD_GET_BUDDIES_LIST:
+ qq_request_get_buddies_and_rooms(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
+ break;
+ case QQ_CMD_GET_BUDDIES_AND_ROOMS:
+ qq_request_get_buddies_level(gc, QQ_CMD_CLASS_UPDATE_ALL);
+ break;
+ case QQ_CMD_GET_LEVEL:
+ qq_request_get_buddies_online(gc, 0, QQ_CMD_CLASS_UPDATE_ALL);
+ break;
+ case QQ_CMD_GET_BUDDIES_ONLINE:
+ /* last command */
+ update_all_rooms(gc, 0, 0);
+ break;
+ default:
+ break;
}
+}
+
+static void update_all_rooms_online(PurpleConnection *gc, guint8 room_cmd, guint32 room_id)
+{
+ qq_data *qd;
+ qq_group *next_group;
- if (ret_8 == QQ_LOGIN_REPLY_REDIRECT) {
- qd->is_redirect = TRUE;
- /*
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Redirected to new server: %s:%d\n", qd->real_hostname, qd->real_port);
- */
+ g_return_if_fail (gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
+
+ next_group = qq_room_get_next_conv(gc, room_id);
+ if (next_group == NULL && room_id <= 0) {
+ purple_debug_info("QQ", "No room in conversation, no update online buddies\n");
return;
}
-
- if (ret_8 == QQ_LOGIN_REPLY_ERR_PWD) {
- if (!purple_account_get_remember_password(gc->account)) {
- purple_account_set_password(gc->account, NULL);
- }
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Incorrect password."));
+ if (next_group == NULL ) {
+ purple_debug_info("QQ", "finished update rooms' online buddies\n");
return;
}
- if (ret_8 == QQ_LOGIN_REPLY_ERR_MISC) {
- if (purple_debug_is_enabled())
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login. Check debug log."));
- else
- purple_connection_error_reason(gc,
- PURPLE_CONNECTION_ERROR_NETWORK_ERROR, _("Unable to login"));
- return;
+ switch (room_cmd) {
+ case 0:
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ALL, 0);
+ break;
+ case QQ_ROOM_CMD_GET_ONLINES:
+ qq_send_room_cmd_mess(gc, QQ_ROOM_CMD_GET_ONLINES, next_group->id, NULL, 0,
+ QQ_CMD_CLASS_UPDATE_ALL, 0);
+ break;
+ default:
+ break;
}
}
-static void process_room_cmd_notify(PurpleConnection *gc,
- guint8 room_cmd, guint8 room_id, guint8 reply_cmd, guint8 reply, guint8 *data, gint data_len)
+void qq_update_online(PurpleConnection *gc, guint16 cmd)
{
- gchar *msg, *msg_utf8;
- g_return_if_fail(data != NULL && data_len > 0);
-
- msg = g_strndup((gchar *) data, data_len); /* it will append 0x00 */
- msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
- g_free(msg);
-
- msg = g_strdup_printf(_(
- "Reply %s(0x%02X )\n"
- "Sent %s(0x%02X )\n"
- "Room id %d, reply [0x%02X]: \n"
- "%s"),
- qq_get_room_cmd_desc(reply_cmd), reply_cmd,
- qq_get_room_cmd_desc(room_cmd), room_cmd,
- room_id, reply, msg_utf8);
-
- purple_notify_error(gc, NULL, _("Failed room reply"), msg);
- g_free(msg);
- g_free(msg_utf8);
+ switch (cmd) {
+ case 0:
+ qq_request_get_buddies_online(gc, 0, QQ_CMD_CLASS_UPDATE_ONLINE);
+ break;
+ case QQ_CMD_GET_BUDDIES_ONLINE:
+ /* last command */
+ update_all_rooms_online(gc, 0, 0);
+ break;
+ default:
+ break;
+ }
}
-void qq_proc_room_cmd_reply(PurpleConnection *gc,
- guint16 seq, guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len)
+void qq_proc_room_cmd(PurpleConnection *gc, guint16 seq,
+ guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len,
+ gint update_class, guint32 ship32)
{
qq_data *qd;
guint8 *data;
@@ -239,58 +334,57 @@ void qq_proc_room_cmd_reply(PurpleConnection *gc,
data = g_newa(guint8, rcved_len);
data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
if (data_len < 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Can not decrypt room cmd by session key, [%05d], 0x%02X %s for %d, len %d\n",
+ purple_debug_warning("QQ",
+ "Can not decrypt room cmd by session key, [%05d], 0x%02X %s for %d, len %d\n",
seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
qq_show_packet("Can not decrypted", rcved, rcved_len);
return;
}
if (room_id <= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Invaild room id, [%05d], 0x%02X %s for %d, len %d\n",
+ purple_debug_warning("QQ",
+ "Invaild room id, [%05d], 0x%02X %s for %d, len %d\n",
seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
- return;
+ /* Some room cmd has no room id, like QQ_ROOM_CMD_SEARCH */
}
if (data_len <= 2) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Invaild len of room cmd decrypted, [%05d], 0x%02X %s for %d, len %d\n",
+ purple_debug_warning("QQ",
+ "Invaild len of room cmd decrypted, [%05d], 0x%02X %s for %d, len %d\n",
seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
return;
}
-
+
group = qq_room_search_id(gc, room_id);
if (group == NULL) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Missing room id in [%05d], 0x%02X %s for %d, len %d\n",
+ purple_debug_warning("QQ",
+ "Missing room id in [%05d], 0x%02X %s for %d, len %d\n",
seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
}
-
+
bytes = 0;
bytes += qq_get8(&reply_cmd, data + bytes);
bytes += qq_get8(&reply, data + bytes);
if (reply_cmd != room_cmd) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Missing room cmd in reply 0x%02X %s, [%05d], 0x%02X %s for %d, len %d\n",
+ purple_debug_warning("QQ",
+ "Missing room cmd in reply 0x%02X %s, [%05d], 0x%02X %s for %d, len %d\n",
reply_cmd, qq_get_room_cmd_desc(reply_cmd),
seq, room_cmd, qq_get_room_cmd_desc(room_cmd), room_id, rcved_len);
}
-
+
/* now process the packet */
if (reply != QQ_ROOM_CMD_REPLY_OK) {
if (group != NULL) {
qq_set_pending_id(&qd->joining_groups, group->ext_id, FALSE);
}
-
+
switch (reply) { /* this should be all errors */
case QQ_ROOM_CMD_REPLY_NOT_MEMBER:
if (group != NULL) {
- purple_debug(PURPLE_DEBUG_WARNING,
- "QQ",
- _("You are not a member of group \"%s\"\n"), group->group_name_utf8);
- group->my_status = QQ_GROUP_MEMBER_STATUS_NOT_MEMBER;
+ purple_debug_warning("QQ",
+ _("You are not a member of QQ Qun \"%s\"\n"), group->title_utf8);
+ group->my_role = QQ_ROOM_ROLE_NO;
qq_group_refresh(gc, group);
}
break;
@@ -300,7 +394,7 @@ void qq_proc_room_cmd_reply(PurpleConnection *gc,
purple_roomlist_set_in_progress(qd->roomlist, FALSE);
}
default:
- process_room_cmd_notify(gc, room_cmd, room_id, reply_cmd, reply, data + bytes, data_len - bytes);
+ process_room_cmd_notify(gc, reply_cmd, room_id, reply, data + bytes, data_len - bytes);
}
return;
}
@@ -309,10 +403,6 @@ void qq_proc_room_cmd_reply(PurpleConnection *gc,
switch (reply_cmd) {
case QQ_ROOM_CMD_GET_INFO:
qq_process_room_cmd_get_info(data + bytes, data_len - bytes, gc);
- if (group != NULL) {
- qq_send_cmd_group_get_members_info(gc, group);
- qq_send_cmd_group_get_online_members(gc, group);
- }
break;
case QQ_ROOM_CMD_CREATE:
qq_group_process_create_group_reply(data + bytes, data_len - bytes, gc);
@@ -346,20 +436,88 @@ void qq_proc_room_cmd_reply(PurpleConnection *gc,
if (group != NULL)
qq_group_conv_refresh_online_member(gc, group);
break;
- case QQ_ROOM_CMD_GET_MEMBER_INFO:
- qq_process_room_cmd_get_members(data + bytes, data_len - bytes, gc);
- if (group != NULL)
+ case QQ_ROOM_CMD_GET_BUDDIES:
+ qq_process_room_cmd_get_buddies(data + bytes, data_len - bytes, gc);
+ if (group != NULL) {
+ group->is_got_info = TRUE;
qq_group_conv_refresh_online_member(gc, group);
+ }
break;
default:
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Unknow room cmd 0x%02X %s\n",
+ purple_debug_warning("QQ", "Unknow room cmd 0x%02X %s\n",
reply_cmd, qq_get_room_cmd_desc(reply_cmd));
}
+
+ if (update_class == QQ_CMD_CLASS_NONE)
+ return;
+
+ purple_debug_info("QQ", "Update class %d\n", update_class);
+ if (update_class == QQ_CMD_CLASS_UPDATE_ALL) {
+ update_all_rooms(gc, room_cmd, room_id);
+ return;
+ }
+ if (update_class == QQ_CMD_CLASS_UPDATE_ONLINE) {
+ update_all_rooms_online(gc, room_cmd, room_id);
+ return;
+ }
+ if (update_class == QQ_CMD_CLASS_UPDATE_ROOM) {
+ qq_update_room(gc, room_cmd, room_id);
+ }
}
-void qq_proc_cmd_reply(PurpleConnection *gc,
- guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len)
+void qq_proc_login_cmd(PurpleConnection *gc, guint8 *rcved, gint rcved_len)
+{
+ qq_data *qd;
+ guint8 *data;
+ gint data_len;
+ guint ret_8;
+
+ g_return_if_fail (gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
+
+ data = g_newa(guint8, rcved_len);
+ /* May use password_twice_md5 in the past version like QQ2005*/
+ data_len = qq_decrypt(data, rcved, rcved_len, qd->inikey);
+ if (data_len >= 0) {
+ purple_debug_warning("QQ",
+ "Decrypt login reply packet with inikey, %d bytes\n", data_len);
+ } else {
+ data_len = qq_decrypt(data, rcved, rcved_len, qd->password_twice_md5);
+ if (data_len >= 0) {
+ purple_debug_warning("QQ",
+ "Decrypt login reply packet with password_twice_md5, %d bytes\n", data_len);
+ } else {
+ purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
+ _("Can not decrypt login reply"));
+ return;
+ }
+ }
+
+ ret_8 = qq_process_login_reply(gc, data, data_len);
+ if (ret_8 != QQ_LOGIN_REPLY_OK) {
+ return;
+ }
+
+ purple_debug_info("QQ", "Login repliess OK; everything is fine\n");
+
+ purple_connection_set_state(gc, PURPLE_CONNECTED);
+ qd->is_login = TRUE; /* must be defined after sev_finish_login */
+
+ /* now initiate QQ Qun, do it first as it may take longer to finish */
+ qq_group_init(gc);
+
+ /* Now goes on updating my icon/nickname, not showing info_window */
+ qd->modifying_face = FALSE;
+
+ /* is_login, but we have packets before login */
+ qq_trans_process_remained(gc);
+
+ qq_update_all(gc, 0);
+ return;
+}
+
+void qq_proc_client_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *rcved, gint rcved_len, gint update_class, guint32 ship32)
{
qq_data *qd;
@@ -369,7 +527,7 @@ void qq_proc_cmd_reply(PurpleConnection *gc,
guint8 ret_8 = 0;
guint16 ret_16 = 0;
guint32 ret_32 = 0;
- gchar *error_msg = NULL;
+ gboolean is_unknow = FALSE;
g_return_if_fail(rcved_len > 0);
@@ -377,61 +535,23 @@ void qq_proc_cmd_reply(PurpleConnection *gc,
qd = (qq_data *) gc->proto_data;
data = g_newa(guint8, rcved_len);
- if (cmd == QQ_CMD_TOKEN) {
- g_memmove(data, rcved, rcved_len);
- data_len = rcved_len;
- } else if (cmd == QQ_CMD_LOGIN) {
- /* May use password_twice_md5 in the past version like QQ2005*/
- data_len = qq_decrypt(data, rcved, rcved_len, qd->inikey);
- if (data_len >= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Decrypt login reply packet with inikey, %d bytes\n", data_len);
- } else {
- data_len = qq_decrypt(data, rcved, rcved_len, qd->password_twice_md5);
- if (data_len >= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Decrypt login reply packet with password_twice_md5, %d bytes\n", data_len);
- } else {
- purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR,
- _("Can not decrypt login reply"));
- return;
- }
- }
- } else {
- data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
- if (data_len < 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Can not reply by session key, [%05d], 0x%04X %s, len %d\n",
- seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
- qq_show_packet("Can not decrypted", rcved, rcved_len);
- return;
- }
+ data_len = qq_decrypt(data, rcved, rcved_len, qd->session_key);
+ if (data_len < 0) {
+ purple_debug_warning("QQ",
+ "Reply can not be decrypted by session key, [%05d], 0x%04X %s, len %d\n",
+ seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
+ qq_show_packet("Can not decrypted", rcved, rcved_len);
+ return;
}
-
+
if (data_len <= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Reply decrypted is empty, [%05d], 0x%04X %s, len %d\n",
+ purple_debug_warning("QQ",
+ "Reply decrypted is empty, [%05d], 0x%04X %s, len %d\n",
seq, cmd, qq_get_cmd_desc(cmd), rcved_len);
return;
}
switch (cmd) {
- case QQ_CMD_TOKEN:
- ret_8 = qq_process_token_reply(gc, error_msg, data, data_len);
- if (ret_8 != QQ_TOKEN_REPLY_OK) {
- if (error_msg == NULL) {
- error_msg = g_strdup_printf( _("Invalid token reply code, 0x%02X"), ret_8);
- }
- purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_msg);
- g_free(error_msg);
- return;
- }
-
- qq_send_packet_login(gc);
- break;
- case QQ_CMD_LOGIN:
- process_cmd_login(gc, data, data_len);
- break;
case QQ_CMD_UPDATE_INFO:
qq_process_modify_info_reply(data, data_len, gc);
break;
@@ -447,10 +567,10 @@ void qq_proc_cmd_reply(PurpleConnection *gc,
case QQ_CMD_BUDDY_AUTH:
qq_process_add_buddy_auth_reply(data, data_len, gc);
break;
- case QQ_CMD_GET_USER_INFO:
- qq_process_get_info_reply(data, data_len, gc);
+ case QQ_CMD_GET_BUDDY_INFO:
+ qq_process_get_buddy_info(data, data_len, gc);
break;
- case QQ_CMD_CHANGE_ONLINE_STATUS:
+ case QQ_CMD_CHANGE_STATUS:
qq_process_change_status_reply(data, data_len, gc);
break;
case QQ_CMD_SEND_IM:
@@ -462,41 +582,53 @@ void qq_proc_cmd_reply(PurpleConnection *gc,
case QQ_CMD_GET_BUDDIES_ONLINE:
ret_8 = qq_process_get_buddies_online_reply(data, data_len, gc);
if (ret_8 > 0 && ret_8 < 0xff) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more online buddies\n");
- qq_send_packet_get_buddies_online(gc, ret_8);
- } else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "All online buddies received\n");
- /* Fixme: this should not be called once*/
- qq_send_packet_get_buddies_levels(gc);
-
- qq_refresh_all_buddy_status(gc);
+ purple_debug_info("QQ", "Requesting for more online buddies\n");
+ qq_request_get_buddies_online(gc, ret_8, update_class);
+ return;
}
+ purple_debug_info("QQ", "All online buddies received\n");
+ qq_refresh_all_buddy_status(gc);
break;
case QQ_CMD_GET_LEVEL:
qq_process_get_level_reply(data, data_len, gc);
break;
case QQ_CMD_GET_BUDDIES_LIST:
ret_16 = qq_process_get_buddies_list_reply(data, data_len, gc);
- if (ret_16 > 0 && ret_16 < 0xffff) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies\n");
- qq_send_packet_get_buddies_list(gc, ret_16);
- } else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies received. Requesting buddies' levels\n");
- qq_send_packet_get_buddies_online(gc, 0);
+ if (ret_16 > 0 && ret_16 < 0xffff) {
+ purple_debug_info("QQ", "Requesting for more buddies\n");
+ qq_request_get_buddies_list(gc, ret_16, update_class);
+ return;
}
+ purple_debug_info("QQ", "All buddies received. Requesting buddies' levels\n");
break;
case QQ_CMD_GET_BUDDIES_AND_ROOMS:
ret_32 = qq_process_get_buddies_and_rooms(data, data_len, gc);
if (ret_32 > 0 && ret_32 < 0xffffffff) {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "Requesting for more buddies and groups\n");
- qq_send_packet_get_buddies_and_rooms(gc, ret_32);
- } else {
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "All buddies and groups received\n");
+ purple_debug_info("QQ", "Requesting for more buddies and groups\n");
+ qq_request_get_buddies_and_rooms(gc, ret_32, update_class);
+ return;
}
+ purple_debug_info("QQ", "All buddies and groups received\n");
break;
default:
- process_cmd_unknow(gc, "Unknow reply CMD", data, data_len, cmd, seq);
+ process_cmd_unknow(gc, _("Unknow reply CMD"), data, data_len, cmd, seq);
+ is_unknow = TRUE;
break;
}
+ if (is_unknow)
+ return;
+
+ if (update_class == QQ_CMD_CLASS_NONE)
+ return;
+
+ purple_debug_info("QQ", "Update class %d\n", update_class);
+ if (update_class == QQ_CMD_CLASS_UPDATE_ALL) {
+ qq_update_all(gc, cmd);
+ return;
+ }
+ if (update_class == QQ_CMD_CLASS_UPDATE_ONLINE) {
+ qq_update_online(gc, cmd);
+ return;
+ }
}
diff --git a/libpurple/protocols/qq/qq_process.h b/libpurple/protocols/qq/qq_process.h
index 10fcbdd13d..e529100797 100644
--- a/libpurple/protocols/qq/qq_process.h
+++ b/libpurple/protocols/qq/qq_process.h
@@ -30,12 +30,24 @@
#include "qq.h"
-void qq_proc_cmd_reply(PurpleConnection *gc,
- guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len);
-void qq_proc_room_cmd_reply(PurpleConnection *gc,
- guint16 seq, guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len);
-
-void qq_proc_cmd_server(PurpleConnection *gc,
- guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len);
+enum {
+ QQ_CMD_CLASS_NONE = 0,
+ QQ_CMD_CLASS_UPDATE_ALL,
+ QQ_CMD_CLASS_UPDATE_ONLINE,
+ QQ_CMD_CLASS_UPDATE_ROOM,
+};
+
+void qq_proc_login_cmd(PurpleConnection *gc, guint8 *rcved, gint rcved_len);
+void qq_proc_client_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *rcved, gint rcved_len, gint update_class, guint32 ship32);
+void qq_proc_room_cmd(PurpleConnection *gc, guint16 seq,
+ guint8 room_cmd, guint32 room_id, guint8 *rcved, gint rcved_len,
+ gint update_class, guint32 ship32);
+
+void qq_proc_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq, guint8 *rcved, gint rcved_len);
+
+void qq_update_all(PurpleConnection *gc, guint16 cmd);
+void qq_update_online(PurpleConnection *gc, guint16 cmd);
+void qq_update_room(PurpleConnection *gc, guint8 room_cmd, guint32 room_id);
#endif
diff --git a/libpurple/protocols/qq/qq_trans.c b/libpurple/protocols/qq/qq_trans.c
index d376282952..3f507c6219 100644
--- a/libpurple/protocols/qq/qq_trans.c
+++ b/libpurple/protocols/qq/qq_trans.c
@@ -35,55 +35,47 @@
#include "qq_process.h"
#include "qq_trans.h"
-#define QQ_RESEND_MAX 3 /* max resend per packet */
-
-qq_transaction *qq_trans_find_rcved(qq_data *qd, guint16 cmd, guint16 seq)
-{
- GList *curr;
- GList *next;
- qq_transaction *trans;
-
- if (qd->transactions == NULL) {
- return NULL;
- }
-
- next = qd->transactions;
- while( (curr = next) ) {
- next = curr->next;
-
- trans = (qq_transaction *) (curr->data);
- if(trans->cmd == cmd && trans->seq == seq) {
- if (trans->rcved_times == 0) {
- trans->scan_times = 0;
- }
- trans->rcved_times++;
- if (qq_trans_is_server(trans) && qq_trans_is_dup(trans)) {
- /* server may not get our confirm reply before, send reply again*/
- if (trans->data != NULL && trans->data_len > 0) {
- qq_send_data(qd, trans->cmd, trans->seq, FALSE, trans->data, trans->data_len);
- }
- }
- return trans;
- }
- }
-
- return NULL;
-}
-
-gboolean qq_trans_is_server(qq_transaction *trans)
+enum {
+ QQ_TRANS_IS_SERVER = 0x01, /* Is server command or client command */
+ QQ_TRANS_IS_IMPORT = 0x02, /* Only notice if not get reply; or resend, disconn if reties get 0*/
+ QQ_TRANS_REMAINED = 0x04, /* server command before login*/
+ QQ_TRANS_IS_REPLY = 0x08, /* server command before login*/
+};
+
+struct _qq_transaction {
+ guint8 flag;
+ guint16 seq;
+ guint16 cmd;
+
+ guint8 room_cmd;
+ guint32 room_id;
+
+ guint8 *data;
+ gint data_len;
+
+ gint fd;
+ gint send_retries;
+ gint rcved_times;
+ gint scan_times;
+
+ gint update_class;
+ guint32 ship32;
+};
+
+gboolean qq_trans_is_server(qq_transaction *trans)
{
g_return_val_if_fail(trans != NULL, FALSE);
-
+
if (trans->flag & QQ_TRANS_IS_SERVER)
return TRUE;
else
return FALSE;
}
-gboolean qq_trans_is_dup(qq_transaction *trans)
+gboolean qq_trans_is_dup(qq_transaction *trans)
{
g_return_val_if_fail(trans != NULL, TRUE);
-
+
if (trans->rcved_times > 1)
return TRUE;
else
@@ -102,115 +94,203 @@ guint32 qq_trans_get_room_id(qq_transaction *trans)
return trans->room_id;
}
+gint qq_trans_get_class(qq_transaction *trans)
+{
+ g_return_val_if_fail(trans != NULL, QQ_CMD_CLASS_NONE);
+ return trans->update_class;
+}
+
+gint qq_trans_get_ship(qq_transaction *trans)
+{
+ g_return_val_if_fail(trans != NULL, 0);
+ return trans->ship32;
+}
+
+static qq_transaction *trans_create(PurpleConnection *gc, gint fd,
+ guint16 cmd, guint16 seq, guint8 *data, gint data_len, gint update_class, guint32 ship32)
+{
+ qq_data *qd;
+ qq_transaction *trans;
+
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, NULL);
+ qd = (qq_data *) gc->proto_data;
+
+ trans = g_new0(qq_transaction, 1);
+
+ memset(trans, 0, sizeof(qq_transaction));
+ trans->fd = fd;
+ trans->cmd = cmd;
+ trans->seq = seq;
+
+ trans->data = NULL;
+ trans->data_len = 0;
+ if (data != NULL && data_len > 0) {
+ /* don't use g_strdup, may have 0x00 */
+ trans->data = g_memdup(data, data_len);
+ trans->data_len = data_len;
+ }
+
+ trans->update_class = update_class;
+ return trans;
+}
+
/* Remove a packet with seq from send trans */
-static void trans_remove(qq_data *qd, qq_transaction *trans)
+static void trans_remove(PurpleConnection *gc, qq_transaction *trans)
{
- g_return_if_fail(qd != NULL && trans != NULL);
-
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS",
+ qq_data *qd = (qq_data *)gc->proto_data;
+
+ g_return_if_fail(gc != NULL && gc->proto_data != NULL);
+ qd = (qq_data *) gc->proto_data;
+
+ g_return_if_fail(trans != NULL);
+#if 0
+ purple_debug_info("QQ_TRANS",
"Remove [%s%05d] retry %d rcved %d scan %d %s\n",
(trans->flag & QQ_TRANS_IS_SERVER) ? "SRV-" : "",
trans->seq,
trans->send_retries, trans->rcved_times, trans->scan_times,
qq_get_cmd_desc(trans->cmd));
-
+#endif
if (trans->data) g_free(trans->data);
qd->transactions = g_list_remove(qd->transactions, trans);
g_free(trans);
}
-void qq_trans_add_client_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len)
+static qq_transaction *trans_find(PurpleConnection *gc, guint16 cmd, guint16 seq)
{
- qq_transaction *trans = g_new0(qq_transaction, 1);
+ qq_data *qd;
+ GList *list;
+ qq_transaction *trans;
- g_return_if_fail(trans != NULL);
+ g_return_val_if_fail(gc != NULL && gc->proto_data != NULL, NULL);
+ qd = (qq_data *) gc->proto_data;
- trans->flag = 0;
- if (cmd == QQ_CMD_TOKEN || cmd == QQ_CMD_LOGIN || cmd == QQ_CMD_KEEP_ALIVE) {
- trans->flag |= QQ_TRANS_CLI_IMPORT;
+ list = qd->transactions;
+ while (list != NULL) {
+ trans = (qq_transaction *) list->data;
+ if(trans->cmd == cmd && trans->seq == seq) {
+ return trans;
+ }
+ list = list->next;
}
- trans->fd = qd->fd;
- trans->cmd = cmd;
- trans->seq = seq;
- trans->room_cmd = 0;
- trans->room_id = 0;
- trans->send_retries = QQ_RESEND_MAX;
- trans->rcved_times = 0;
- trans->scan_times = 0;
- trans->data = NULL;
- trans->data_len = 0;
- if (data != NULL && data_len > 0) {
- trans->data = g_memdup(data, data_len); /* don't use g_strdup, may have 0x00 */
- trans->data_len = data_len;
+ return NULL;
+}
+
+void qq_trans_add_client_cmd(PurpleConnection *gc,
+ guint16 cmd, guint16 seq, guint8 *data, gint data_len, gint update_class, guint32 ship32)
+{
+ qq_data *qd = (qq_data *)gc->proto_data;
+ qq_transaction *trans = trans_create(gc, qd->fd, cmd, seq, data, data_len, update_class, ship32);
+
+ if (cmd == QQ_CMD_TOKEN || cmd == QQ_CMD_LOGIN || cmd == QQ_CMD_KEEP_ALIVE) {
+ trans->flag |= QQ_TRANS_IS_IMPORT;
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS",
- "Add client cmd, seq = %d, data = %p, len = %d\n",
+ trans->send_retries = qd->resend_times;
+#if 0
+ purple_debug_info("QQ_TRANS", "Add client cmd, seq %d, data %p, len %d\n",
trans->seq, trans->data, trans->data_len);
+#endif
qd->transactions = g_list_append(qd->transactions, trans);
}
-void qq_trans_add_room_cmd(qq_data *qd, guint16 seq, guint8 room_cmd, guint32 room_id,
- guint8 *data, gint data_len)
+qq_transaction *qq_trans_find_rcved(PurpleConnection *gc, guint16 cmd, guint16 seq)
{
- qq_transaction *trans = g_new0(qq_transaction, 1);
+ qq_transaction *trans;
- g_return_if_fail(trans != NULL);
+ trans = trans_find(gc, cmd, seq);
+ if (trans == NULL) {
+ return NULL;
+ }
+
+ if (trans->rcved_times == 0) {
+ trans->scan_times = 0;
+ }
+ trans->rcved_times++;
+ /* server may not get our confirm reply before, send reply again*/
+ if (qq_trans_is_server(trans) && (trans->flag & QQ_TRANS_IS_REPLY)) {
+ if (trans->data != NULL && trans->data_len > 0) {
+ qq_send_cmd_encrypted(gc, trans->cmd, trans->seq, trans->data, trans->data_len, FALSE);
+ }
+ }
+ return trans;
+}
+
+void qq_trans_add_room_cmd(PurpleConnection *gc,
+ guint16 seq, guint8 room_cmd, guint32 room_id, guint8 *data, gint data_len,
+ gint update_class, guint32 ship32)
+{
+ qq_data *qd = (qq_data *)gc->proto_data;
+ qq_transaction *trans = trans_create(gc, qd->fd, QQ_CMD_ROOM, seq, data, data_len,
+ update_class, ship32);
- trans->flag = 0;
- trans->fd = qd->fd;
- trans->seq = seq;
- trans->cmd = QQ_CMD_ROOM;
trans->room_cmd = room_cmd;
trans->room_id = room_id;
- trans->send_retries = QQ_RESEND_MAX;
- trans->rcved_times = 0;
- trans->scan_times = 0;
+ trans->send_retries = qd->resend_times;
+#if 0
+ purple_debug_info("QQ_TRANS", "Add room cmd, seq %d, data %p, len %d\n",
+ trans->seq, trans->data, trans->data_len);
+#endif
+ qd->transactions = g_list_append(qd->transactions, trans);
+}
- trans->data = NULL;
- trans->data_len = 0;
- if (data != NULL && data_len > 0) {
- trans->data = g_memdup(data, data_len); /* don't use g_strdup, may have 0x00 */
- trans->data_len = data_len;
- }
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS",
- "Add room cmd, seq = %d, data = %p, len = %d\n",
+void qq_trans_add_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *rcved, gint rcved_len)
+{
+ qq_data *qd = (qq_data *)gc->proto_data;
+ qq_transaction *trans = trans_create(gc, qd->fd, cmd, seq, rcved, rcved_len, QQ_CMD_CLASS_NONE, 0);
+
+ trans->flag = QQ_TRANS_IS_SERVER;
+ trans->send_retries = 0;
+ trans->rcved_times = 1;
+#if 0
+ purple_debug_info("QQ_TRANS", "Add server cmd, seq %d, data %p, len %d\n",
trans->seq, trans->data, trans->data_len);
+#endif
qd->transactions = g_list_append(qd->transactions, trans);
}
-void qq_trans_add_server_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len)
+void qq_trans_add_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *reply, gint reply_len)
{
- qq_transaction *trans = g_new0(qq_transaction, 1);
+ qq_transaction *trans;
- g_return_if_fail(trans != NULL);
+ g_return_if_fail(reply != NULL && reply_len > 0);
- trans->flag = QQ_TRANS_IS_SERVER;
- if ( !qd->logged_in ) {
- trans->flag |= QQ_TRANS_BEFORE_LOGIN;
+ trans = trans_find(gc, cmd, seq);
+ if (trans == NULL) {
+ return;
}
- trans->fd = qd->fd;
- trans->cmd = cmd;
- trans->seq = seq;
- trans->room_cmd = 0;
- trans->room_id = 0;
+
+ g_return_if_fail(trans->flag & QQ_TRANS_IS_SERVER);
+ trans->flag |= QQ_TRANS_IS_REPLY;
+
+ if (trans->data) g_free(trans->data);
+
+ trans->data = g_memdup(reply, reply_len);
+ trans->data_len = reply_len;
+}
+
+void qq_trans_add_remain(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *data, gint data_len)
+{
+ qq_data *qd = (qq_data *)gc->proto_data;
+ qq_transaction *trans = trans_create(gc, qd->fd, cmd, seq, data, data_len, QQ_CMD_CLASS_NONE, 0);
+
+ trans->flag = QQ_TRANS_IS_SERVER;
+ trans->flag |= QQ_TRANS_REMAINED;
trans->send_retries = 0;
trans->rcved_times = 1;
- trans->scan_times = 0;
- trans->data = NULL;
- trans->data_len = 0;
- if (data != NULL && data_len > 0) {
- trans->data = g_memdup(data, data_len); /* don't use g_strdup, may have 0x00 */
- trans->data_len = data_len;
- }
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS",
- "Add server cmd, seq = %d, data = %p, len = %d\n",
+#if 1
+ purple_debug_info("QQ_TRANS", "Add server cmd and remained, seq %d, data %p, len %d\n",
trans->seq, trans->data, trans->data_len);
+#endif
qd->transactions = g_list_append(qd->transactions, trans);
}
-void qq_trans_process_before_login(qq_data *qd)
+void qq_trans_process_remained(PurpleConnection *gc)
{
+ qq_data *qd = (qq_data *)gc->proto_data;
GList *curr;
GList *next;
qq_transaction *trans;
@@ -221,43 +301,46 @@ void qq_trans_process_before_login(qq_data *qd)
while( (curr = next) ) {
next = curr->next;
trans = (qq_transaction *) (curr->data);
- /* purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS", "Scan [%d]\n", trans->seq); */
-
+#if 0
+ purple_debug_info("QQ_TRANS", "Scan [%d]\n", trans->seq);
+#endif
if ( !(trans->flag & QQ_TRANS_IS_SERVER) ) {
continue;
}
- if ( !(trans->flag & QQ_TRANS_BEFORE_LOGIN) ) {
+ if ( !(trans->flag & QQ_TRANS_REMAINED) ) {
continue;
}
- // set QQ_TRANS_BEFORE_LOGIN off
- trans->flag &= ~QQ_TRANS_BEFORE_LOGIN;
+ /* set QQ_TRANS_REMAINED off */
+ trans->flag &= ~QQ_TRANS_REMAINED;
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS",
- "Process server cmd before login, seq %d, data %p, len %d, send_retries %d\n",
+#if 1
+ purple_debug_info("QQ_TRANS",
+ "Process server cmd remained, seq %d, data %p, len %d, send_retries %d\n",
trans->seq, trans->data, trans->data_len, trans->send_retries);
-
- qq_proc_cmd_reply(qd->gc, trans->seq, trans->cmd, trans->data, trans->data_len);
+#endif
+ qq_proc_server_cmd(gc, trans->cmd, trans->seq, trans->data, trans->data_len);
}
- /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan finished\n"); */
+ /* purple_debug_info("QQ_TRANS", "Scan finished\n"); */
return;
}
-gboolean qq_trans_scan(qq_data *qd)
+gboolean qq_trans_scan(PurpleConnection *gc)
{
+ qq_data *qd = (qq_data *)gc->proto_data;
GList *curr;
GList *next;
qq_transaction *trans;
g_return_val_if_fail(qd != NULL, FALSE);
-
+
next = qd->transactions;
while( (curr = next) ) {
next = curr->next;
trans = (qq_transaction *) (curr->data);
- /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan [%d]\n", trans->seq); */
-
- if (trans->flag & QQ_TRANS_BEFORE_LOGIN) {
+ /* purple_debug_info("QQ_TRANS", "Scan [%d]\n", trans->seq); */
+
+ if (trans->flag & QQ_TRANS_REMAINED) {
/* keep server cmd before login*/
continue;
}
@@ -270,67 +353,62 @@ gboolean qq_trans_scan(qq_data *qd)
if (trans->rcved_times > 0) {
/* Has been received */
- trans_remove(qd, trans);
+ trans_remove(gc, trans);
continue;
}
if (trans->flag & QQ_TRANS_IS_SERVER) {
continue;
}
-
+
/* Never get reply */
trans->send_retries--;
if (trans->send_retries <= 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ_TRANS",
+ purple_debug_warning("QQ_TRANS",
"[%d] %s is lost.\n",
trans->seq, qq_get_cmd_desc(trans->cmd));
- if (trans->flag & QQ_TRANS_CLI_IMPORT) {
+ if (trans->flag & QQ_TRANS_IS_IMPORT) {
return TRUE;
}
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS",
+ qd->net_stat.lost++;
+ purple_debug_error("QQ_TRANS",
"Lost [%d] %s, data %p, len %d, retries %d\n",
trans->seq, qq_get_cmd_desc(trans->cmd),
trans->data, trans->data_len, trans->send_retries);
- trans_remove(qd, trans);
+ trans_remove(gc, trans);
continue;
}
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS",
+ qd->net_stat.resend++;
+ purple_debug_warning("QQ_TRANS",
"Resend [%d] %s data %p, len %d, send_retries %d\n",
trans->seq, qq_get_cmd_desc(trans->cmd),
trans->data, trans->data_len, trans->send_retries);
- qq_send_data(qd, trans->cmd, trans->seq, FALSE, trans->data, trans->data_len);
+ qq_send_cmd_encrypted(gc, trans->cmd, trans->seq, trans->data, trans->data_len, FALSE);
}
- /* purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Scan finished\n"); */
+ /* purple_debug_info("QQ_TRANS", "Scan finished\n"); */
return FALSE;
}
/* clean up send trans and free all contents */
-void qq_trans_remove_all(qq_data *qd)
+void qq_trans_remove_all(PurpleConnection *gc)
{
- GList *curr;
- GList *next;
+ qq_data *qd = (qq_data *)gc->proto_data;
qq_transaction *trans;
gint count = 0;
- curr = qd->transactions;
- while(curr) {
- next = curr->next;
-
- trans = (qq_transaction *) (curr->data);
- /*
- purple_debug(PURPLE_DEBUG_ERROR, "QQ_TRANS",
- "Remove to transaction, seq = %d, buf = %p, len = %d\n",
- trans->seq, trans->buf, trans->len);
- */
- trans_remove(qd, trans);
+ while(qd->transactions != NULL) {
+ trans = (qq_transaction *) (qd->transactions->data);
+ qd->transactions = g_list_remove(qd->transactions, trans);
+
+ if (trans->data) g_free(trans->data);
+ g_free(trans);
count++;
- curr = next;
}
- g_list_free(qd->transactions);
-
- purple_debug(PURPLE_DEBUG_INFO, "QQ_TRANS", "Free all %d packets\n", count);
+ if (count > 0) {
+ purple_debug_info("QQ_TRANS", "Free all %d packets\n", count);
+ }
}
diff --git a/libpurple/protocols/qq/qq_trans.h b/libpurple/protocols/qq/qq_trans.h
index 1b8ae995ae..63b4f9f78a 100644
--- a/libpurple/protocols/qq/qq_trans.h
+++ b/libpurple/protocols/qq/qq_trans.h
@@ -28,44 +28,30 @@
#include <glib.h>
#include "qq.h"
-enum {
- QQ_TRANS_IS_SERVER = 0x01, /* Is server command or client command */
- /* prefix QQ_TRANS_CLI is for client command*/
- QQ_TRANS_CLI_EMERGE = 0x02, /* send at once; or may wait for next reply*/
- QQ_TRANS_CLI_IMPORT = 0x04, /* Only notice if not get reply; or resend, disconn if reties get 0*/
- QQ_TRANS_BEFORE_LOGIN = 0x08, /* server command before login*/
-};
+typedef struct _qq_transaction qq_transaction;
-typedef struct _qq_transaction {
- guint8 flag;
- guint16 seq;
- guint16 cmd;
-
- guint8 room_cmd;
- guint32 room_id;
-
- guint8 *data;
- gint data_len;
-
- gint fd;
- gint send_retries;
- gint rcved_times;
- gint scan_times;
-} qq_transaction;
-
-qq_transaction *qq_trans_find_rcved(qq_data *qd, guint16 cmd, guint16 seq);
+qq_transaction *qq_trans_find_rcved(PurpleConnection *gc, guint16 cmd, guint16 seq);
gboolean qq_trans_is_server(qq_transaction *trans) ;
gboolean qq_trans_is_dup(qq_transaction *trans);
guint8 qq_trans_get_room_cmd(qq_transaction *trans);
guint32 qq_trans_get_room_id(qq_transaction *trans);
-
-void qq_trans_add_client_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len);
-void qq_trans_add_server_cmd(qq_data *qd, guint16 cmd, guint16 seq, guint8 *data, gint data_len);
-void qq_trans_add_room_cmd(qq_data *qd, guint16 seq, guint8 room_cmd, guint32 room_id,
+gint qq_trans_get_class(qq_transaction *trans);
+gint qq_trans_get_ship(qq_transaction *trans);
+
+void qq_trans_add_client_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *data, gint data_len, gint update_class, guint32 ship32);
+void qq_trans_add_room_cmd(PurpleConnection *gc,
+ guint16 seq, guint8 room_cmd, guint32 room_id,
+ guint8 *data, gint data_len, gint update_class, guint32 ship32);
+void qq_trans_add_server_cmd(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *rcved, gint rcved_len);
+void qq_trans_add_server_reply(PurpleConnection *gc, guint16 cmd, guint16 seq,
+ guint8 *reply, gint reply_len);
+void qq_trans_add_remain(PurpleConnection *gc, guint16 cmd, guint16 seq,
guint8 *data, gint data_len);
-void qq_trans_process_before_login(qq_data *qd);
-gboolean qq_trans_scan(qq_data *qd);
-void qq_trans_remove_all(qq_data *qd);
+void qq_trans_process_remained(PurpleConnection *gc);
+gboolean qq_trans_scan(PurpleConnection *gc);
+void qq_trans_remove_all(PurpleConnection *gc);
#endif
diff --git a/libpurple/protocols/qq/send_file.c b/libpurple/protocols/qq/send_file.c
index 95cb629a4d..d7a6b45164 100644
--- a/libpurple/protocols/qq/send_file.c
+++ b/libpurple/protocols/qq/send_file.c
@@ -54,7 +54,7 @@ enum
static int _qq_in_same_lan(ft_info *info)
{
if (info->remote_internet_ip == info->local_internet_ip) return 1;
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"Not in the same LAN, remote internet ip[%x], local internet ip[%x]\n",
info->remote_internet_ip
, info->local_internet_ip);
@@ -87,7 +87,7 @@ static ssize_t _qq_xfer_udp_recv(guint8 *buf, size_t len, PurpleXfer *xfer)
info = (ft_info *) xfer->data;
sinlen = sizeof(sin);
r = recvfrom(info->recv_fd, buf, len, 0, (struct sockaddr *) &sin, &sinlen);
- purple_debug(PURPLE_DEBUG_INFO, "QQ",
+ purple_debug_info("QQ",
"==> recv %d bytes from File UDP Channel, remote ip[%s], remote port[%d]\n",
r, inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port));
return r;
@@ -121,7 +121,7 @@ static ssize_t _qq_xfer_udp_send(const guint8 *buf, size_t len, PurpleXfer *xfer
sin.sin_port = g_htons(info->remote_minor_port);
sin.sin_addr.s_addr = g_htonl(info->remote_real_ip);
}
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "sending to channel: %d.%d.%d.%d:%d\n",
+ purple_debug_info("QQ", "sending to channel: %d.%d.%d.%d:%d\n",
(int)sin.sin_addr.s_addr & 0xff,
(int)(sin.sin_addr.s_addr >> 8) & 0xff,
(int)(sin.sin_addr.s_addr >> 16) & 0xff,
@@ -207,20 +207,20 @@ static void _qq_xfer_end(PurpleXfer *xfer)
qq_xfer_close_file(xfer);
if (info->dest_fp != NULL) {
fclose(info->dest_fp);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "file closed\n");
+ purple_debug_info("QQ", "file closed\n");
}
if (info->major_fd != 0) {
close(info->major_fd);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "major port closed\n");
+ purple_debug_info("QQ", "major port closed\n");
}
if (info->minor_fd != 0) {
close(info->minor_fd);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "minor port closed\n");
+ purple_debug_info("QQ", "minor port closed\n");
}
/*
if (info->buffer != NULL) {
munmap(info->buffer, purple_xfer_get_size(xfer));
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "file mapping buffer is freed.\n");
+ purple_debug_info("QQ", "file mapping buffer is freed.\n");
}
*/
g_free(info);
@@ -235,7 +235,7 @@ static void qq_show_conn_info(ft_info *info)
real_ip_str = gen_ip_str((guint8 *) &ip);
ip = g_htonl(info->remote_internet_ip);
internet_ip_str = gen_ip_str((guint8 *) &ip);
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "remote internet ip[%s:%d], major port[%d], real ip[%s], minor port[%d]\n",
+ purple_debug_info("QQ", "remote internet ip[%s:%d], major port[%d], real ip[%s], minor port[%d]\n",
internet_ip_str, info->remote_internet_port,
info->remote_major_port, real_ip_str, info->remote_minor_port
);
@@ -393,7 +393,7 @@ static void _qq_xfer_init_socket(PurpleXfer *xfer)
info->local_real_ip = 0x7f000001;
*/
info->local_real_ip = g_ntohl(inet_addr(purple_network_get_my_ip(-1)));
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "local real ip is %x", info->local_real_ip);
+ purple_debug_info("QQ", "local real ip is %x", info->local_real_ip);
for (i = 0; i < 2; i++) {
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
@@ -412,13 +412,13 @@ static void _qq_xfer_init_socket(PurpleXfer *xfer)
case 0:
info->local_major_port = listen_port;
info->major_fd = sockfd;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "UDP Major Channel created on port[%d]\n",
+ purple_debug_info("QQ", "UDP Major Channel created on port[%d]\n",
info->local_major_port);
break;
case 1:
info->local_minor_port = listen_port;
info->minor_fd = sockfd;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "UDP Minor Channel created on port[%d]\n",
+ purple_debug_info("QQ", "UDP Minor Channel created on port[%d]\n",
info->local_minor_port);
break;
}
@@ -475,9 +475,9 @@ static void _qq_send_packet_file_request (PurpleConnection *gc, guint32 to_uid,
bytes += qq_putdata (raw_data + bytes, (guint8 *) filelen_str, filelen_strlen);
if (packet_len == bytes)
- qq_send_cmd (qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
else
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file_request",
+ purple_debug_info("qq_send_packet_file_request",
"%d bytes expected but got %d bytes\n",
packet_len, bytes);
@@ -497,7 +497,7 @@ static void _qq_send_packet_file_accept(PurpleConnection *gc, guint32 to_uid)
qd = (qq_data *) gc->proto_data;
info = (ft_info *) qd->xfer->data;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "I've accepted the file transfer request from %d\n", to_uid);
+ purple_debug_info("QQ", "I've accepted the file transfer request from %d\n", to_uid);
_qq_xfer_init_socket(qd->xfer);
packet_len = 79;
@@ -516,9 +516,9 @@ static void _qq_send_packet_file_accept(PurpleConnection *gc, guint32 to_uid)
info->local_real_ip = real_ip;
if (packet_len == bytes)
- qq_send_cmd (qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
else
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file_accept",
+ purple_debug_info("qq_send_packet_file_accept",
"%d bytes expected but got %d bytes\n",
packet_len, bytes);
}
@@ -539,13 +539,13 @@ static void _qq_send_packet_file_notifyip(PurpleConnection *gc, guint32 to_uid)
raw_data = g_newa (guint8, packet_len);
bytes = 0;
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "<== sending qq file notify ip packet\n");
+ purple_debug_info("QQ", "<== sending qq file notify ip packet\n");
bytes += _qq_create_packet_file_header(raw_data + bytes, to_uid, QQ_FILE_TRANS_NOTIFY, qd, TRUE);
bytes += qq_fill_conn_info(raw_data + bytes, info);
if (packet_len == bytes)
- qq_send_cmd (qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
else
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file_notify",
+ purple_debug_info("qq_send_packet_file_notify",
"%d bytes expected but got %d bytes\n",
packet_len, bytes);
@@ -561,7 +561,7 @@ static void _qq_send_packet_file_reject (PurpleConnection *gc, guint32 to_uid)
guint8 *raw_data;
gint packet_len, bytes;
- purple_debug(PURPLE_DEBUG_INFO, "_qq_send_packet_file_reject", "start");
+ purple_debug_info("_qq_send_packet_file_reject", "start");
qd = (qq_data *) gc->proto_data;
packet_len = 64;
@@ -571,9 +571,9 @@ static void _qq_send_packet_file_reject (PurpleConnection *gc, guint32 to_uid)
bytes += _qq_create_packet_file_header(raw_data + bytes, to_uid, QQ_FILE_TRANS_DENY_UDP, qd, TRUE);
if (packet_len == bytes)
- qq_send_cmd (qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
else
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file",
+ purple_debug_info("qq_send_packet_file",
"%d bytes expected but got %d bytes\n",
packet_len, bytes);
}
@@ -585,27 +585,27 @@ static void _qq_send_packet_file_cancel (PurpleConnection *gc, guint32 to_uid)
guint8 *raw_data;
gint packet_len, bytes;
- purple_debug(PURPLE_DEBUG_INFO, "_qq_send_packet_file_cancel", "start\n");
+ purple_debug_info("_qq_send_packet_file_cancel", "start\n");
qd = (qq_data *) gc->proto_data;
packet_len = 64;
raw_data = g_newa (guint8, packet_len);
bytes = 0;
- purple_debug(PURPLE_DEBUG_INFO, "_qq_send_packet_file_cancel", "before create header\n");
+ purple_debug_info("_qq_send_packet_file_cancel", "before create header\n");
bytes += _qq_create_packet_file_header(raw_data + bytes, to_uid, QQ_FILE_TRANS_CANCEL, qd, TRUE);
- purple_debug(PURPLE_DEBUG_INFO, "_qq_send_packet_file_cancel", "end create header\n");
+ purple_debug_info("_qq_send_packet_file_cancel", "end create header\n");
if (packet_len == bytes) {
- purple_debug(PURPLE_DEBUG_INFO, "_qq_send_packet_file_cancel", "before send cmd\n");
- qq_send_cmd (qd, QQ_CMD_SEND_IM, raw_data, bytes);
+ purple_debug_info("_qq_send_packet_file_cancel", "before send cmd\n");
+ qq_send_cmd(gc, QQ_CMD_SEND_IM, raw_data, bytes);
}
else
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file",
+ purple_debug_info("qq_send_packet_file",
"%d bytes expected but got %d bytes\n",
packet_len, bytes);
- purple_debug (PURPLE_DEBUG_INFO, "qq_send_packet_file_cancel", "end\n");
+ purple_debug_info("qq_send_packet_file_cancel", "end\n");
}
/* request to send a file */
@@ -694,7 +694,7 @@ void qq_process_recv_file_reject (guint8 *data, gint data_len,
/* border has been checked before
if (*cursor >= (data + data_len - 1)) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"Received file reject message is empty\n");
return;
}
@@ -724,8 +724,7 @@ void qq_process_recv_file_cancel (guint8 *data, gint data_len,
/* border has been checked before
if (*cursor >= (data + data_len - 1)) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
- "Received file reject message is empty\n");
+ purple_debug_warning("QQ", "Received file reject message is empty\n");
return;
}
*/
@@ -755,8 +754,7 @@ void qq_process_recv_file_accept(guint8 *data, gint data_len, guint32 sender_uid
info = (ft_info *) qd->xfer->data;
if (data_len <= 30 + QQ_CONN_INFO_LEN) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
- "Received file reject message is empty\n");
+ purple_debug_warning("QQ", "Received file reject message is empty\n");
return;
}
@@ -789,8 +787,7 @@ void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_ui
info->to_uid = sender_uid;
if (data_len <= 2 + 30 + QQ_CONN_INFO_LEN) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
- "Received file request message is empty\n");
+ purple_debug_warning("QQ", "Received file request message is empty\n");
return;
}
bytes = 0;
@@ -806,7 +803,7 @@ void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_ui
/* FACE from IP detector, ignored by gfhuang */
if(g_ascii_strcasecmp(fileinfo[0], "FACE") == 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"Received a FACE ip detect from qq-%d, so he/she must be online :)\n", sender_uid);
b = purple_find_buddy(gc->account, sender_name);
@@ -826,11 +823,11 @@ void qq_process_recv_file_request(guint8 *data, gint data_len, guint32 sender_ui
qq_update_buddy_contact(gc, q_bud);
}
else
- purple_debug(PURPLE_DEBUG_INFO, "QQ", "buddy %d is already online\n", sender_uid);
+ purple_debug_info("QQ", "buddy %d is already online\n", sender_uid);
}
else
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "buddy %d is not in list\n", sender_uid);
+ purple_debug_warning("QQ", "buddy %d is not in list\n", sender_uid);
g_free(sender_name);
g_strfreev(fileinfo);
@@ -892,8 +889,7 @@ void qq_process_recv_file_notify(guint8 *data, gint data_len,
xfer = qd->xfer;
info = (ft_info *) qd->xfer->data;
if (data_len <= 2 + 30 + QQ_CONN_INFO_LEN) {
- purple_debug (PURPLE_DEBUG_WARNING, "QQ",
- "Received file notify message is empty\n");
+ purple_debug_warning("QQ", "Received file notify message is empty\n");
return;
}
diff --git a/libpurple/protocols/qq/sys_msg.c b/libpurple/protocols/qq/sys_msg.c
index ef7d12e084..0df850d6f5 100644
--- a/libpurple/protocols/qq/sys_msg.c
+++ b/libpurple/protocols/qq/sys_msg.c
@@ -84,7 +84,7 @@ static void _qq_search_before_auth_with_gc_and_uid(gc_and_uid *g)
nombre = uid_to_purple_name(uid);
purple_request_action
- (gc, NULL, _("Do you want to approve the request?"), "",
+ (gc, NULL, _("Do you approve the requestion?"), "",
PURPLE_DEFAULT_ACTION_NONE,
purple_connection_get_account(gc), nombre, NULL,
g, 2,
@@ -108,7 +108,7 @@ static void _qq_search_before_add_with_gc_and_uid(gc_and_uid *g)
qq_send_packet_get_info(gc, uid, TRUE); /* we want to see window */
nombre = uid_to_purple_name(uid);
purple_request_action
- (gc, NULL, _("Do you want to add this buddy?"), "",
+ (gc, NULL, _("Do you add the buddy?"), "",
PURPLE_DEFAULT_ACTION_NONE,
purple_connection_get_account(gc), nombre, NULL,
g, 2,
@@ -126,7 +126,7 @@ static void _qq_send_packet_ack_msg_sys(PurpleConnection *gc, guint8 code, guint
gint ack_len, bytes;
qd = (qq_data *) gc->proto_data;
-
+
str = g_strdup_printf("%d", from);
bar = 0x1e;
ack_len = 1 + 1 + strlen(str) + 1 + 2;
@@ -142,9 +142,9 @@ static void _qq_send_packet_ack_msg_sys(PurpleConnection *gc, guint8 code, guint
g_free(str);
if (bytes == ack_len) /* creation OK */
- qq_send_cmd_detail(qd, QQ_CMD_ACK_SYS_MSG, 0, FALSE, ack, ack_len);
+ qq_send_server_reply(gc, QQ_CMD_ACK_SYS_MSG, 0, ack, ack_len);
else
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
+ purple_debug_error("QQ",
"Fail creating sys msg ACK, expect %d bytes, build %d bytes\n", ack_len, bytes);
}
@@ -178,9 +178,9 @@ static void _qq_process_msg_sys_being_added(PurpleConnection *gc, gchar *from, g
_("Add"), G_CALLBACK(qq_add_buddy_with_gc_and_uid),
_("Search"), G_CALLBACK(_qq_search_before_add_with_gc_and_uid));
} else {
- message = g_strdup_printf(_("%s has added you [%s] to his or her buddy list"), from, to);
+ message = g_strdup_printf(_("%s added you [%s] to buddy list"), from, to);
_qq_sys_msg_log_write(gc, message, from);
- purple_notify_info(gc, NULL, message, NULL);
+ purple_notify_info(gc, _("QQ Budy"), _("Successed:"), message);
}
g_free(name);
@@ -194,11 +194,11 @@ static void _qq_process_msg_sys_add_contact_rejected(PurpleConnection *gc, gchar
g_return_if_fail(from != NULL && to != NULL);
- message = g_strdup_printf(_("User %s rejected your request"), from);
- reason = g_strdup_printf(_("Reason: %s"), msg_utf8);
+ message = g_strdup_printf(_("Requestion rejected by %s"), from);
+ reason = g_strdup_printf(_("Message: %s"), msg_utf8);
_qq_sys_msg_log_write(gc, message, from);
- purple_notify_info(gc, NULL, message, reason);
+ purple_notify_info(gc, _("QQ Buddy"), message, reason);
g_free(message);
g_free(reason);
}
@@ -214,9 +214,9 @@ static void _qq_process_msg_sys_add_contact_approved(PurpleConnection *gc, gchar
qd = (qq_data *) gc->proto_data;
qq_add_buddy_by_recv_packet(gc, strtol(from, NULL, 10), TRUE, TRUE);
- message = g_strdup_printf(_("User %s approved your request"), from);
+ message = g_strdup_printf(_("Requestion approved by %s"), from);
_qq_sys_msg_log_write(gc, message, from);
- purple_notify_info(gc, NULL, message, NULL);
+ purple_notify_info(gc, _("QQ Buddy"), _("Notice:"), message);
g_free(message);
}
@@ -263,9 +263,9 @@ static void _qq_process_msg_sys_add_contact_request(PurpleConnection *gc, gchar
g2 = g_new0(gc_and_uid, 1);
g2->gc = gc;
g2->uid = strtol(from, NULL, 10);
- message = g_strdup_printf(_("%s is not in your buddy list"), from);
+ message = g_strdup_printf(_("%s is not in buddy list"), from);
purple_request_action(gc, NULL, message,
- _("Would you like to add him?"), PURPLE_DEFAULT_ACTION_NONE,
+ _("Would you add?"), PURPLE_DEFAULT_ACTION_NONE,
purple_connection_get_account(gc), name, NULL,
g2, 3,
_("Cancel"), NULL,
@@ -279,14 +279,19 @@ static void _qq_process_msg_sys_add_contact_request(PurpleConnection *gc, gchar
static void _qq_process_msg_sys_notice(PurpleConnection *gc, gchar *from, gchar *to, gchar *msg_utf8)
{
+ qq_data *qd = (qq_data *) gc->proto_data;
gchar *title, *content;
g_return_if_fail(from != NULL && to != NULL);
- title = g_strdup_printf(_("Notice from: %s"), from);
+ title = g_strdup_printf(_("From %s:"), from);
content = g_strdup_printf(_("%s"), msg_utf8);
- purple_notify_info(gc, NULL, title, content);
+ if (qd->is_show_notice) {
+ purple_notify_info(gc, _("QQ Server Notice"), title, content);
+ } else {
+ purple_debug_info("QQ", "QQ Server notice from %s:\n%s", from, msg_utf8);
+}
g_free(title);
g_free(content);
}
@@ -310,12 +315,19 @@ void qq_process_msg_sys(guint8 *data, gint data_len, guint16 seq, PurpleConnecti
_qq_send_packet_ack_msg_sys(gc, code[0], strtol(from, NULL, 10), seq);
if (strtol(to, NULL, 10) != qd->uid) { /* not to me */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Recv sys msg to [%s], not me!, discard\n", to);
+ purple_debug_error("QQ", "Recv sys msg to [%s], not me!, discard\n", to);
g_strfreev(segments);
return;
}
msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
+ if (from == NULL && msg_utf8) {
+ purple_debug_error("QQ", "Recv NULL sys msg to [%s], discard\n", to);
+ g_strfreev(segments);
+ g_free(msg_utf8);
+ return;
+ }
+
switch (strtol(code, NULL, 10)) {
case QQ_MSG_SYS_BEING_ADDED:
_qq_process_msg_sys_being_added(gc, from, to, msg_utf8);
@@ -333,12 +345,12 @@ void qq_process_msg_sys(guint8 *data, gint data_len, guint16 seq, PurpleConnecti
_qq_process_msg_sys_notice(gc, from, to, msg_utf8);
break;
case QQ_MSG_SYS_NEW_VERSION:
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"QQ server says there is newer version than %s\n", qq_get_ver_desc(QQ_CLIENT));
break;
default:
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Recv unknown sys msg code: %s\n", code);
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "the msg is : %s\n", msg_utf8);
+ purple_debug_warning("QQ", "Recv unknown sys msg code: %s\n", code);
+ purple_debug_warning("QQ", "the msg is : %s\n", msg_utf8);
}
g_free(msg_utf8);
g_strfreev(segments);
diff --git a/libpurple/protocols/qq/utils.c b/libpurple/protocols/qq/utils.c
index 2b2dd26c82..420e51886e 100644
--- a/libpurple/protocols/qq/utils.c
+++ b/libpurple/protocols/qq/utils.c
@@ -47,8 +47,8 @@
struct sockaddr_in sin;
socklen_t len = sizeof(sin);
getsockname(fd, (struct sockaddr *)&sin, &len);
- purple_debug(PURPLE_DEBUG_INFO, desc, "%s:%d\n",
- inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port));
+ purple_debug_info(desc, "%s:%d\n",
+ inet_ntoa(sin.sin_addr), g_ntohs(sin.sin_port));
}
*/
@@ -121,16 +121,16 @@ gchar **split_data(guint8 *data, gint len, const gchar *delimit, gint expected_f
for (i = 0; segments[i] != NULL; i++) {;
}
if (i < expected_fields) { /* not enough fields */
- purple_debug(PURPLE_DEBUG_ERROR, "QQ",
- "Invalid data, expect %d fields, found only %d, discard\n", expected_fields, i);
+ purple_debug_error("QQ", "Invalid data, expect %d fields, found only %d, discard\n",
+ expected_fields, i);
g_strfreev(segments);
return NULL;
} else if (i > expected_fields) { /* more fields, OK */
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Dangerous data, expect %d fields, found %d, return all\n", expected_fields, i);
+ purple_debug_warning("QQ", "Dangerous data, expect %d fields, found %d, return all\n",
+ expected_fields, i);
/* free up those not used */
for (j = expected_fields; j < i; j++) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "field[%d] is %s\n", j, segments[j]);
+ purple_debug_warning("QQ", "field[%d] is %s\n", j, segments[j]);
g_free(segments[j]);
}
@@ -218,7 +218,7 @@ gchar* try_dump_as_gbk(const guint8 *const data, gint len)
msg_utf8 = i < len ? qq_to_utf8((gchar *) &incoming[i], QQ_CHARSET_DEFAULT) : NULL;
if (msg_utf8 != NULL) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Try extract GB msg: %s\n", msg_utf8);
+ purple_debug_warning("QQ", "Try extract GB msg: %s\n", msg_utf8);
}
return msg_utf8;
}
@@ -257,7 +257,7 @@ guint8 *hex_str_to_bytes(const gchar *const buffer, gint *out_len)
hex_buffer = strstrip(buffer);
if (strlen(hex_buffer) % 2 != 0) {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
+ purple_debug_warning("QQ",
"Unable to convert an odd number of nibbles to a string of bytes!\n");
g_free(hex_buffer);
return NULL;
@@ -272,8 +272,8 @@ guint8 *hex_str_to_bytes(const gchar *const buffer, gint *out_len)
} else if (g_ascii_isalpha(*cursor) && (gint) *cursor - 87 < 16) {
nibble1 = (gint) *cursor - 87;
} else {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Invalid char \'%c\' found in hex string!\n", *cursor);
+ purple_debug_warning("QQ", "Invalid char \'%c\' found in hex string!\n",
+ *cursor);
g_free(hex_str);
return NULL;
}
@@ -284,8 +284,7 @@ guint8 *hex_str_to_bytes(const gchar *const buffer, gint *out_len)
} else if (g_ascii_isalpha(*cursor) && (gint) (*cursor - 87) < 16) {
nibble2 = (gint) *cursor - 87;
} else {
- purple_debug(PURPLE_DEBUG_WARNING, "QQ",
- "Invalid char found in hex string!\n");
+ purple_debug_warning("QQ", "Invalid char found in hex string!\n");
g_free(hex_str);
return NULL;
}
@@ -362,22 +361,7 @@ void qq_hex_dump(PurpleDebugLevel level, const char *category,
void qq_show_packet(const gchar *desc, const guint8 *buf, gint len)
{
- /*
- char buf1[8*len+2], buf2[10];
- int i;
- buf1[0] = 0;
- for (i = 0; i < len; i++) {
- sprintf(buf2, " %02x(%d)", buf[i] & 0xff, buf[i] & 0xff);
- strcat(buf1, buf2);
- }
- strcat(buf1, "\n");
- purple_debug(PURPLE_DEBUG_INFO, desc, "%s", buf1);
- */
-
- /* modified by s3e, 20080424 */
- qq_hex_dump(PURPLE_DEBUG_INFO, desc,
- buf, len,
- "");
+ qq_hex_dump(PURPLE_DEBUG_INFO, "QQ", buf, len, desc);
}
/* convert face num from packet (0-299) to local face (1-100) */
diff --git a/libpurple/protocols/yahoo/yahoo_auth.c b/libpurple/protocols/yahoo/yahoo_auth.c
index ff9bf00327..845bfb7775 100644
--- a/libpurple/protocols/yahoo/yahoo_auth.c
+++ b/libpurple/protocols/yahoo/yahoo_auth.c
@@ -1,10 +1,23 @@
/*
* yahoo_auth.c: Authentication routines.
- *
- * Written by Kevin Kurtz and Scott Werndorfer
*
+ * Written by Kevin Kurtz and Scott Werndorfer
* Copyright(c) 2003 Cerulean Studios
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+ *
*/
#include "internal.h"
diff --git a/libpurple/protocols/yahoo/yahoo_auth.h b/libpurple/protocols/yahoo/yahoo_auth.h
index fd5a94c1eb..2fd3565ca1 100755..100644
--- a/libpurple/protocols/yahoo/yahoo_auth.h
+++ b/libpurple/protocols/yahoo/yahoo_auth.h
@@ -2,6 +2,21 @@
* yahoo_auth.h: Header for Yahoo Messenger authentication schemes. Eew.
*
* Copyright(c) 2003 Cerulean Studios
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+ *
*/
#ifndef _YAHOO_AUTH_H_
diff --git a/libpurple/proxy.c b/libpurple/proxy.c
index 7e31faf0c0..9492717767 100644
--- a/libpurple/proxy.c
+++ b/libpurple/proxy.c
@@ -212,19 +212,21 @@ purple_gnome_proxy_get_info(void)
{
static PurpleProxyInfo info = {0, NULL, 0, NULL, NULL};
gboolean use_same_proxy = FALSE;
- gchar *tmp, *err;
+ gchar *tmp, *err = NULL;
tmp = g_find_program_in_path("gconftool-2");
if (tmp == NULL)
return purple_global_proxy_get_info();
g_free(tmp);
+ tmp = NULL;
/* Check whether to use a proxy. */
if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/mode",
&tmp, &err, NULL, NULL))
return purple_global_proxy_get_info();
g_free(err);
+ err = NULL;
if (!strcmp(tmp, "none\n")) {
info.type = PURPLE_PROXY_NONE;
@@ -239,6 +241,7 @@ purple_gnome_proxy_get_info(void)
}
g_free(tmp);
+ tmp = NULL;
/* Free the old fields */
if (info.host) {
@@ -258,28 +261,31 @@ purple_gnome_proxy_get_info(void)
&tmp, &err, NULL, NULL))
return purple_global_proxy_get_info();
g_free(err);
+ err = NULL;
if (!strcmp(tmp, "true\n"))
use_same_proxy = TRUE;
g_free(tmp);
+ tmp = NULL;
- if (!use_same_proxy && !g_spawn_command_line_sync("gconftool-2 -g /system/proxy/socks_host",
+ if (!use_same_proxy) {
+ if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/socks_host",
&info.host, &err, NULL, NULL))
- return purple_global_proxy_get_info();
- g_free(err);
- g_strchomp(info.host);
+ return purple_global_proxy_get_info();
+ g_free(err);
+ err = NULL;
+ }
+
+ if(info.host != NULL)
+ g_strchomp(info.host);
- if (!use_same_proxy && *info.host != '\0') {
+ if (!use_same_proxy && (info.host != NULL) && (*info.host != '\0')) {
info.type = PURPLE_PROXY_SOCKS5;
if (!g_spawn_command_line_sync("gconftool-2 -g /system/proxy/socks_port",
&tmp, &err, NULL, NULL))
{
g_free(info.host);
info.host = NULL;
- g_free(info.username);
- info.username = NULL;
- g_free(info.password);
- info.password = NULL;
return purple_global_proxy_get_info();
}
g_free(err);
@@ -291,6 +297,8 @@ purple_gnome_proxy_get_info(void)
&info.host, &err, NULL, NULL))
return purple_global_proxy_get_info();
g_free(err);
+ err = NULL;
+
/* If we get this far then we know we're using an HTTP proxy */
info.type = PURPLE_PROXY_HTTP;
@@ -310,11 +318,10 @@ purple_gnome_proxy_get_info(void)
{
g_free(info.host);
info.host = NULL;
- g_free(info.username);
- info.username = NULL;
return purple_global_proxy_get_info();
}
g_free(err);
+ err = NULL;
g_strchomp(info.username);
if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/authentication_password",
@@ -327,6 +334,7 @@ purple_gnome_proxy_get_info(void)
return purple_global_proxy_get_info();
}
g_free(err);
+ err = NULL;
g_strchomp(info.password);
if (!g_spawn_command_line_sync("gconftool-2 -g /system/http_proxy/port",
@@ -1505,62 +1513,31 @@ hmacmd5_chap(const unsigned char * challenge, int challen, const char * passwd,
}
static void
-s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
+s5_readchap(gpointer data, gint source, PurpleInputCondition cond);
+
+/*
+ * Return how many bytes we processed
+ * -1 means we've shouldn't keep reading from the buffer
+ */
+static gssize
+s5_parse_chap_msg(PurpleProxyConnectData *connect_data)
{
- guchar *cmdbuf, *buf;
- PurpleProxyConnectData *connect_data = data;
+ guchar *buf, *cmdbuf = connect_data->read_buffer;
int len, navas, currentav;
- purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n");
-
- if (connect_data->read_buffer == NULL) {
- /* A big enough butfer to read the message header (2 bytes) and at least one complete attribute and value (1 + 1 + 255). */
- connect_data->read_buf_len = 259;
- connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
- connect_data->read_len = 0;
- }
-
- if (connect_data->read_buf_len - connect_data->read_len == 0) {
- /*If the stuff below is right, this shouldn't be possible. */
- purple_debug_error("socks5 proxy", "This is about to suck because the read buffer is full (shouldn't happen).\n");
- }
-
- len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len,
- connect_data->read_buf_len - connect_data->read_len);
-
- if (len == 0)
- {
- purple_proxy_connect_data_disconnect(connect_data,
- _("Server closed the connection."));
- return;
- }
-
- if (len < 0)
- {
- if (errno == EAGAIN)
- /* No worries */
- return;
-
- /* Error! */
- purple_proxy_connect_data_disconnect_formatted(connect_data,
- _("Lost connection with server:\n%s"), g_strerror(errno));
- return;
- }
-
- connect_data->read_len += len;
- if (connect_data->read_len < 2)
- return;
-
- cmdbuf = connect_data->read_buffer;
+ purple_debug_misc("socks5 proxy", "Reading CHAP message: %x\n", *cmdbuf);
if (*cmdbuf != 0x01) {
purple_proxy_connect_data_disconnect(connect_data,
_("Received invalid data on connection with server."));
- return;
+ return -1;
}
cmdbuf++;
navas = *cmdbuf;
+
+ purple_debug_misc("socks5 proxy", "Expecting %d attribute(s).\n", navas);
+
cmdbuf++;
for (currentav = 0; currentav < navas; currentav++) {
@@ -1575,7 +1552,10 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
memmove((connect_data->read_buffer + 2), cmdbuf, len);
/* Decrease the read count accordingly */
connect_data->read_len = len + 2;
- return;
+
+ purple_debug_info("socks5 proxy", "Need more data to retrieve attribute %d.\n", currentav);
+
+ return -1;
}
buf = cmdbuf + 2;
@@ -1605,7 +1585,11 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
purple_proxy_connect_data_disconnect(connect_data,
_("Authentication failed"));
}
- return;
+ return -1;
+ case 0x01:
+ /* We've already validated that cmdbuf[1] is sane. */
+ purple_debug_info("socks5 proxy", "Received TEXT-MESSAGE of '%.*s'\n", (int) cmdbuf[1], buf);
+ break;
case 0x03:
purple_debug_info("socks5 proxy", "Received CHALLENGE\n");
/* Server wants our credentials */
@@ -1617,6 +1601,7 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
hmacmd5_chap(buf, cmdbuf[1],
purple_proxy_info_get_password(connect_data->gpi),
connect_data->write_buffer + 4);
+ /* TODO: What about USER-IDENTITY? */
connect_data->write_buffer[0] = 0x01;
connect_data->write_buffer[1] = 0x01;
connect_data->write_buffer[2] = 0x04;
@@ -1632,7 +1617,7 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
PURPLE_INPUT_WRITE, proxy_do_write, connect_data);
proxy_do_write(connect_data, connect_data->fd, PURPLE_INPUT_WRITE);
- return;
+ return -1;
case 0x11:
purple_debug_info("socks5 proxy", "Received ALGORIGTHMS of %x\n", buf[0]);
/* Server wants to select an algorithm */
@@ -1646,7 +1631,7 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
"Disconnecting...");
purple_proxy_connect_data_disconnect(connect_data,
_("Received invalid data on connection with server."));
- return;
+ return -1;
}
break;
default:
@@ -1655,10 +1640,85 @@ s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
cmdbuf = buf + cmdbuf[1];
}
+ return (cmdbuf - connect_data->read_buffer);
+}
+
+static void
+s5_readchap(gpointer data, gint source, PurpleInputCondition cond)
+{
+ gssize msg_ret;
+ PurpleProxyConnectData *connect_data = data;
+ int len;
+
+ purple_debug(PURPLE_DEBUG_INFO, "socks5 proxy", "Got CHAP response.\n");
+
+ if (connect_data->read_buffer == NULL) {
+ /* A big enough butfer to read the message header (2 bytes) and at least one complete attribute and value (1 + 1 + 255). */
+ connect_data->read_buf_len = 259;
+ connect_data->read_buffer = g_malloc(connect_data->read_buf_len);
+ connect_data->read_len = 0;
+ }
+
+ if (connect_data->read_buf_len - connect_data->read_len == 0) {
+ /*If the stuff below is right, this shouldn't be possible. */
+ purple_debug_error("socks5 proxy", "This is about to suck because the read buffer is full (shouldn't happen).\n");
+ }
+
+ len = read(connect_data->fd, connect_data->read_buffer + connect_data->read_len,
+ connect_data->read_buf_len - connect_data->read_len);
+
+ if (len == 0) {
+ purple_proxy_connect_data_disconnect(connect_data,
+ _("Server closed the connection."));
+ return;
+ }
+
+ if (len < 0) {
+ if (errno == EAGAIN)
+ /* No worries */
+ return;
+
+ /* Error! */
+ purple_proxy_connect_data_disconnect_formatted(connect_data,
+ _("Lost connection with server:\n%s"), g_strerror(errno));
+ return;
+ }
+
+ connect_data->read_len += len;
+
+ /* We may have read more than one message into the buffer, we need to make sure to process them all */
+ while (1) {
+
+ /* We need more to be able to read this message */
+ if (connect_data->read_len < 2)
+ return;
+
+ msg_ret = s5_parse_chap_msg(connect_data);
+
+ if (msg_ret < 0)
+ return;
+
+ /* See if we have another message already in the buffer */
+ if ((len = connect_data->read_len - msg_ret) > 0) {
+
+ /* Move on to the next message */
+ memmove(connect_data->read_buffer, connect_data->read_buffer + msg_ret, len);
+ /* Decrease the read count accordingly */
+ connect_data->read_len = len;
+
+ /* Try to read the message that connect_data->read_buffer now points to */
+ continue;
+ }
+
+ break;
+ }
+
/* Fell through. We ran out of CHAP events to process, but haven't
* succeeded or failed authentication - there may be more to come.
* If this is the case, come straight back here. */
+ purple_debug_info("socks5 proxy", "Waiting for another message from which to read CHAP info.\n");
+
/* We've processed all the available attributes, so get ready for a whole new message */
g_free(connect_data->read_buffer);
connect_data->read_buffer = NULL;
diff --git a/libpurple/util.c b/libpurple/util.c
index 1c3037aadc..0ab034575e 100644
--- a/libpurple/util.c
+++ b/libpurple/util.c
@@ -3763,9 +3763,7 @@ url_fetch_recv_cb(gpointer url_data, gint source, PurpleInputCondition cond)
while((len = read(source, buf, sizeof(buf))) > 0) {
if(gfud->max_len != -1 && (gfud->len + len) > gfud->max_len) {
- /* TODO: Fix this when not string frozen */
- /*purple_util_fetch_url_error(gfud, _("Error reading from %s: response too long (%d bytes limit)"),*/
- purple_util_fetch_url_error(gfud, "Error reading from %s: response too long (%d bytes limit)",
+ purple_util_fetch_url_error(gfud, _("Error reading from %s: response too long (%d bytes limit)"),
gfud->website.address, gfud->max_len);
return;
}
diff --git a/pidgin/artwork/art-tools/clean-svg-definitions.sh b/pidgin/artwork/art-tools/clean-svg-definitions.sh
deleted file mode 100644
index 9c5c7968f4..0000000000
--- a/pidgin/artwork/art-tools/clean-svg-definitions.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-for f in `ls *.svg`
-do
- echo "Processing $f file..."
- inkscape --vacuum-defs $f
-done
diff --git a/pidgin/artwork/art-tools/render-pidgin-emotes.rb b/pidgin/artwork/art-tools/render-pidgin-emotes.rb
deleted file mode 100755
index 77f9e539a8..0000000000
--- a/pidgin/artwork/art-tools/render-pidgin-emotes.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-
-require "rexml/document"
-require "ftools"
-include REXML
-INKSCAPE = '/usr/bin/inkscape'
-SRC = "./svg"
-
-def renderit(file)
- svg = Document.new(File.new("#{SRC}/#{file}", 'r'))
- svg.root.each_element("//g[contains(@inkscape:label,'plate')]") do |icon|
- filename = icon.attributes["label"]
- filename = `echo -n #{filename} | sed -e 's/plate\-//g'`
- puts "#{file} #{filename}.png"
- icon.each_element("rect") do |box|
- if box.attributes['inkscape:label'] == '22x22'
- dir = "#{box.attributes['width']}x#{box.attributes['height']}/"
- cmd = "#{INKSCAPE} -i #{box.attributes['id']} -e #{dir}/#{filename}.png #{SRC}/#{file} > /dev/null 2>&1"
- File.makedirs(dir) unless File.exists?(dir)
- system(cmd)
- print "."
- elsif box.attributes['inkscape:label'] == '24x24'
- dir = "#{box.attributes['width']}x#{box.attributes['height']}/"
- cmd = "#{INKSCAPE} -i #{box.attributes['id']} -e #{dir}/#{filename}.png #{SRC}/#{file} > /dev/null 2>&1"
- File.makedirs(dir) unless File.exists?(dir)
- system(cmd)
- print "."
- end
- end
- puts ''
- end
-end
-
-if (ARGV[0].nil?) #render all SVGs
- puts "Rendering from SVGs in #{SRC}"
- Dir.foreach(SRC) do |file|
- renderit(file) if file.match(/svg$/)
- end
- puts "\nrendered all SVGs"
-else #only render the SVG passed
- file = "#{ARGV[0]}.svg"
- if (File.exists?("#{SRC}/#{file}"))
- renderit(file)
- puts "\nrendered #{file}"
- else
- puts "[E] No such file (#{file})"
- end
-end
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-change-bgcolor.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-change-bgcolor.png
deleted file mode 100644
index 3271880fba..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-change-bgcolor.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-change-fgcolor.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-change-fgcolor.png
deleted file mode 100644
index fd11f0b935..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-change-fgcolor.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-down.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-down.png
deleted file mode 100644
index c4dc1261c2..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-down.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-left.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-left.png
deleted file mode 100644
index a239cc40b5..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-left.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-right.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-right.png
deleted file mode 100644
index 3b4572c446..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-right.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-up.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-up.png
deleted file mode 100644
index 39cdb70b6e..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-drag-up.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-emote-select.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-emote-select.png
deleted file mode 100644
index a399731061..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-emote-select.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-face.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-font-face.png
deleted file mode 100644
index 1e98c8558b..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-face.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-down.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-down.png
deleted file mode 100644
index 0f259c934c..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-down.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-up.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-up.png
deleted file mode 100644
index 4995b00328..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-font-size-up.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-get-attention.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-get-attention.png
deleted file mode 100644
index a28738889b..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-get-attention.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-image.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-image.png
deleted file mode 100644
index 8dd2338ef5..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-image.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-link.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-link.png
deleted file mode 100644
index 052a34b10c..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert-link.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-insert.png
deleted file mode 100644
index b93726fa55..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-insert.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-message-new.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-message-new.png
deleted file mode 100644
index 73f9b777a8..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-message-new.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-send-file.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-send-file.png
deleted file mode 100644
index 1796675d2c..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-send-file.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-unblock.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-unblock.png
deleted file mode 100644
index d2ecbbde1e..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-unblock.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-view-plugins.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-view-plugins.png
deleted file mode 100644
index e2fb70d3bf..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-view-plugins.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/actions/pidgin-view-transfers.png b/pidgin/artwork/hicolor/16x16/actions/pidgin-view-transfers.png
deleted file mode 100644
index a16c36e4ea..0000000000
--- a/pidgin/artwork/hicolor/16x16/actions/pidgin-view-transfers.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working0.png b/pidgin/artwork/hicolor/16x16/animations/process-working0.png
deleted file mode 100644
index d8a5626eb7..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working0.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working1.png b/pidgin/artwork/hicolor/16x16/animations/process-working1.png
deleted file mode 100644
index 6b8199add4..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working1.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working10.png b/pidgin/artwork/hicolor/16x16/animations/process-working10.png
deleted file mode 100644
index ab1c3a332c..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working10.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working11.png b/pidgin/artwork/hicolor/16x16/animations/process-working11.png
deleted file mode 100644
index 6420a31b85..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working11.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working12.png b/pidgin/artwork/hicolor/16x16/animations/process-working12.png
deleted file mode 100644
index b6245471c4..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working12.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working13.png b/pidgin/artwork/hicolor/16x16/animations/process-working13.png
deleted file mode 100644
index 74365536ec..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working13.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working14.png b/pidgin/artwork/hicolor/16x16/animations/process-working14.png
deleted file mode 100644
index 5886b12f4a..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working14.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working15.png b/pidgin/artwork/hicolor/16x16/animations/process-working15.png
deleted file mode 100644
index c99a846819..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working15.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working16.png b/pidgin/artwork/hicolor/16x16/animations/process-working16.png
deleted file mode 100644
index 314d91a859..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working16.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working17.png b/pidgin/artwork/hicolor/16x16/animations/process-working17.png
deleted file mode 100644
index 4b6d6c30e4..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working17.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working18.png b/pidgin/artwork/hicolor/16x16/animations/process-working18.png
deleted file mode 100644
index f267a71d33..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working18.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working19.png b/pidgin/artwork/hicolor/16x16/animations/process-working19.png
deleted file mode 100644
index b59c2133d0..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working19.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working2.png b/pidgin/artwork/hicolor/16x16/animations/process-working2.png
deleted file mode 100644
index cbf8b2b321..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working2.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working20.png b/pidgin/artwork/hicolor/16x16/animations/process-working20.png
deleted file mode 100644
index bee80c0d0f..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working20.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working21.png b/pidgin/artwork/hicolor/16x16/animations/process-working21.png
deleted file mode 100644
index f91aec4cb4..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working21.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working22.png b/pidgin/artwork/hicolor/16x16/animations/process-working22.png
deleted file mode 100644
index 4ab5bd95f9..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working22.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working23.png b/pidgin/artwork/hicolor/16x16/animations/process-working23.png
deleted file mode 100644
index bc12150383..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working23.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working24.png b/pidgin/artwork/hicolor/16x16/animations/process-working24.png
deleted file mode 100644
index 71045e4c6b..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working24.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working25.png b/pidgin/artwork/hicolor/16x16/animations/process-working25.png
deleted file mode 100644
index 3a97739ae2..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working25.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working26.png b/pidgin/artwork/hicolor/16x16/animations/process-working26.png
deleted file mode 100644
index 7bb8d0b42f..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working26.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working27.png b/pidgin/artwork/hicolor/16x16/animations/process-working27.png
deleted file mode 100644
index 3417c50c0b..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working27.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working28.png b/pidgin/artwork/hicolor/16x16/animations/process-working28.png
deleted file mode 100644
index e2ce26b1d3..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working28.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working29.png b/pidgin/artwork/hicolor/16x16/animations/process-working29.png
deleted file mode 100644
index 80c264b0ae..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working29.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working3.png b/pidgin/artwork/hicolor/16x16/animations/process-working3.png
deleted file mode 100644
index 03696a3981..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working3.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working30.png b/pidgin/artwork/hicolor/16x16/animations/process-working30.png
deleted file mode 100644
index 0d17544057..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working30.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working4.png b/pidgin/artwork/hicolor/16x16/animations/process-working4.png
deleted file mode 100644
index bb3697032b..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working4.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working5.png b/pidgin/artwork/hicolor/16x16/animations/process-working5.png
deleted file mode 100644
index 4926680a58..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working5.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working6.png b/pidgin/artwork/hicolor/16x16/animations/process-working6.png
deleted file mode 100644
index f7a56e14fb..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working6.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working7.png b/pidgin/artwork/hicolor/16x16/animations/process-working7.png
deleted file mode 100644
index 0d31ebfda0..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working7.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working8.png b/pidgin/artwork/hicolor/16x16/animations/process-working8.png
deleted file mode 100644
index 4d268ba10c..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working8.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/process-working9.png b/pidgin/artwork/hicolor/16x16/animations/process-working9.png
deleted file mode 100644
index aba24301a9..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/process-working9.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing0.png b/pidgin/artwork/hicolor/16x16/animations/typing0.png
deleted file mode 100644
index 52a7bbe127..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing0.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing1.png b/pidgin/artwork/hicolor/16x16/animations/typing1.png
deleted file mode 100644
index 3e404e23aa..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing1.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing2.png b/pidgin/artwork/hicolor/16x16/animations/typing2.png
deleted file mode 100644
index 7aadad6961..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing2.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing3.png b/pidgin/artwork/hicolor/16x16/animations/typing3.png
deleted file mode 100644
index 6e7cad0c49..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing3.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing4.png b/pidgin/artwork/hicolor/16x16/animations/typing4.png
deleted file mode 100644
index 018c16cb81..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing4.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/animations/typing5.png b/pidgin/artwork/hicolor/16x16/animations/typing5.png
deleted file mode 100644
index 8df17f8a6d..0000000000
--- a/pidgin/artwork/hicolor/16x16/animations/typing5.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-aim.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-aim.png
deleted file mode 100644
index 6527e70a40..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-aim.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-bonjour.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-bonjour.png
deleted file mode 100644
index a5c898ab0d..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-bonjour.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-facebook.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-facebook.png
deleted file mode 100644
index 6937605860..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-facebook.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-gadu-gadu.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-gadu-gadu.png
deleted file mode 100644
index a7f02acc74..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-gadu-gadu.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-google-talk.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-google-talk.png
deleted file mode 100644
index 2651da3e5a..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-google-talk.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-icq.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-icq.png
deleted file mode 100644
index 71eb4872a1..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-icq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-irc.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-irc.png
deleted file mode 100644
index 2d22c75a04..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-irc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-jabber.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-jabber.png
deleted file mode 100644
index 77a3f64135..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-jabber.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-meanwhile.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-meanwhile.png
deleted file mode 100644
index 99d1722502..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-meanwhile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-msn.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-msn.png
deleted file mode 100644
index 943ba35f67..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-msn.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-myspace.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-myspace.png
deleted file mode 100644
index e7c3034cc9..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-myspace.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-novell.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-novell.png
deleted file mode 100644
index fd3cff0a2e..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-novell.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-qq.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-qq.png
deleted file mode 100644
index 006130978a..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-qq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-silc.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-silc.png
deleted file mode 100644
index 3469ed197b..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-silc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-simple.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-simple.png
deleted file mode 100644
index bdbd88f680..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-simple.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-yahoo.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-yahoo.png
deleted file mode 100644
index b60415856d..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-yahoo.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin-zephyr.png b/pidgin/artwork/hicolor/16x16/apps/pidgin-zephyr.png
deleted file mode 100644
index c4f035a791..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin-zephyr.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/apps/pidgin.png b/pidgin/artwork/hicolor/16x16/apps/pidgin.png
deleted file mode 100644
index 1ea5fca89e..0000000000
--- a/pidgin/artwork/hicolor/16x16/apps/pidgin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/devices/pidgin-hiptop.png b/pidgin/artwork/hicolor/16x16/devices/pidgin-hiptop.png
deleted file mode 100644
index a73aced40a..0000000000
--- a/pidgin/artwork/hicolor/16x16/devices/pidgin-hiptop.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/devices/pidgin-mobile.png b/pidgin/artwork/hicolor/16x16/devices/pidgin-mobile.png
deleted file mode 100644
index d368e64715..0000000000
--- a/pidgin/artwork/hicolor/16x16/devices/pidgin-mobile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-aol-client.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-aol-client.png
deleted file mode 100644
index 2d04c992a7..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-aol-client.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-birthday.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-birthday.png
deleted file mode 100644
index 4dcd6f58e4..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-birthday.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-blocked.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-blocked.png
deleted file mode 100644
index cba00602d9..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-blocked.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-bot.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-bot.png
deleted file mode 100644
index f1fa1e0234..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-bot.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-external.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-external.png
deleted file mode 100644
index 1fe30fb524..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-external.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-female.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-female.png
deleted file mode 100644
index c3b4019266..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-female.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-founder.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-founder.png
deleted file mode 100644
index 295958fd88..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-founder.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-free-for-chat.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-free-for-chat.png
deleted file mode 100644
index 795cd48425..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-free-for-chat.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-game.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-game.png
deleted file mode 100644
index ca83d8a00d..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-game.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-half-operator.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-half-operator.png
deleted file mode 100644
index 9bac49928a..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-half-operator.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-male.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-male.png
deleted file mode 100644
index 24f63d53c1..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-male.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-music.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-music.png
deleted file mode 100644
index 4b40b6eedf..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-music.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-not-authorized.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-not-authorized.png
deleted file mode 100644
index 84b4ed4803..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-not-authorized.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-operator.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-operator.png
deleted file mode 100644
index 3758af17f1..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-operator.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-qq-member.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-qq-member.png
deleted file mode 100644
index af93d4bc6e..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-qq-member.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-secure.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-secure.png
deleted file mode 100644
index da093d0995..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-secure.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-unavailable.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-unavailable.png
deleted file mode 100644
index 74aaeb9d20..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-unavailable.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-video.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-video.png
deleted file mode 100644
index 3e246ea178..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-video.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/emblems/pidgin-voice.png b/pidgin/artwork/hicolor/16x16/emblems/pidgin-voice.png
deleted file mode 100644
index 2c0279d083..0000000000
--- a/pidgin/artwork/hicolor/16x16/emblems/pidgin-voice.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-available.png b/pidgin/artwork/hicolor/16x16/status/pidgin-available.png
deleted file mode 100644
index 936beb8b6b..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-away.png b/pidgin/artwork/hicolor/16x16/status/pidgin-away.png
deleted file mode 100644
index f0a58fd5bf..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-busy.png b/pidgin/artwork/hicolor/16x16/status/pidgin-busy.png
deleted file mode 100644
index 8629a448db..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-chatroom.png b/pidgin/artwork/hicolor/16x16/status/pidgin-chatroom.png
deleted file mode 100644
index 44c3d147c4..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-chatroom.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-contact.png b/pidgin/artwork/hicolor/16x16/status/pidgin-contact.png
deleted file mode 100644
index d25f70ceb4..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-contact.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-auth.png b/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-auth.png
deleted file mode 100644
index 0bd7647132..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-auth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-error.png b/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-error.png
deleted file mode 100644
index e0770f0260..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-error.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-info.png b/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-info.png
deleted file mode 100644
index 95385df847..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-info.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-mail.png b/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-mail.png
deleted file mode 100644
index aa08dc39df..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-mail.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-question.png b/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-question.png
deleted file mode 100644
index 4c20e5a27d..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-dialog-question.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-extended-away.png b/pidgin/artwork/hicolor/16x16/status/pidgin-extended-away.png
deleted file mode 100644
index 8ac263eebd..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-invisible.png b/pidgin/artwork/hicolor/16x16/status/pidgin-invisible.png
deleted file mode 100644
index 41044f1f68..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-offline.png b/pidgin/artwork/hicolor/16x16/status/pidgin-offline.png
deleted file mode 100644
index 5e443e98dc..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-available.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-available.png
deleted file mode 100644
index d5ebf29cc8..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-away.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-away.png
deleted file mode 100644
index bcd3f2740d..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-busy.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-busy.png
deleted file mode 100644
index d334bb447c..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-extended-away.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-extended-away.png
deleted file mode 100644
index 23b4d7da66..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-invisible.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-invisible.png
deleted file mode 100644
index dfa3e5a3d6..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-message-pending.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-message-pending.png
deleted file mode 100644
index d67a889f85..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-message-pending.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-new-im.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-new-im.png
deleted file mode 100644
index f3e2cd2f1a..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-new-im.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-offline.png b/pidgin/artwork/hicolor/16x16/status/pidgin-tray-offline.png
deleted file mode 100644
index e6599d732a..0000000000
--- a/pidgin/artwork/hicolor/16x16/status/pidgin-tray-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/apps/pidgin.png b/pidgin/artwork/hicolor/22x22/apps/pidgin.png
deleted file mode 100644
index 6722fe03bf..0000000000
--- a/pidgin/artwork/hicolor/22x22/apps/pidgin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-available.png b/pidgin/artwork/hicolor/22x22/status/pidgin-available.png
deleted file mode 100644
index a364d76531..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-away.png b/pidgin/artwork/hicolor/22x22/status/pidgin-away.png
deleted file mode 100644
index 3dfe0f438f..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-busy.png b/pidgin/artwork/hicolor/22x22/status/pidgin-busy.png
deleted file mode 100644
index 4b32aa8da5..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-chatroom.png b/pidgin/artwork/hicolor/22x22/status/pidgin-chatroom.png
deleted file mode 100644
index d7667b849f..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-chatroom.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-contact.png b/pidgin/artwork/hicolor/22x22/status/pidgin-contact.png
deleted file mode 100644
index 7b96063ab7..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-contact.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-extended-away.png b/pidgin/artwork/hicolor/22x22/status/pidgin-extended-away.png
deleted file mode 100644
index 8eda01eafd..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-invisible.png b/pidgin/artwork/hicolor/22x22/status/pidgin-invisible.png
deleted file mode 100644
index ef9af6fdb6..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-offline.png b/pidgin/artwork/hicolor/22x22/status/pidgin-offline.png
deleted file mode 100644
index c0d34f137c..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-available.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-available.png
deleted file mode 100644
index f0bb8d356e..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-away.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-away.png
deleted file mode 100644
index 9b15afc8b0..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-busy.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-busy.png
deleted file mode 100644
index a6dd0eb69c..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-extended-away.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-extended-away.png
deleted file mode 100644
index 147a9c1d3d..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-invisible.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-invisible.png
deleted file mode 100644
index 6f3fa7b4ad..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-message-pending.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-message-pending.png
deleted file mode 100644
index dc1bbdf25d..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-message-pending.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-new-im.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-new-im.png
deleted file mode 100644
index 70f181132f..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-new-im.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-offline.png b/pidgin/artwork/hicolor/22x22/status/pidgin-tray-offline.png
deleted file mode 100644
index dab8873997..0000000000
--- a/pidgin/artwork/hicolor/22x22/status/pidgin-tray-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-aim.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-aim.png
deleted file mode 100644
index 9c2c4d308b..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-aim.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-bonjour.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-bonjour.png
deleted file mode 100644
index 5f27d98538..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-bonjour.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-facebook.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-facebook.png
deleted file mode 100644
index b295a34a8c..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-facebook.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-gadu-gadu.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-gadu-gadu.png
deleted file mode 100644
index 388256c905..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-gadu-gadu.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-google-talk.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-google-talk.png
deleted file mode 100644
index e1997891e6..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-google-talk.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-icq.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-icq.png
deleted file mode 100644
index ecd03aa64d..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-icq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-irc.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-irc.png
deleted file mode 100644
index 4fa09abe9c..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-irc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-jabber.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-jabber.png
deleted file mode 100644
index 99ec91040a..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-jabber.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-meanwhile.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-meanwhile.png
deleted file mode 100644
index d6da49461f..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-meanwhile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-msn.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-msn.png
deleted file mode 100644
index 97977f2ed1..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-msn.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-myspace.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-myspace.png
deleted file mode 100644
index 2b6020b58c..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-myspace.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-novell.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-novell.png
deleted file mode 100644
index 1131f6ff67..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-novell.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-qq.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-qq.png
deleted file mode 100644
index cf5a02a927..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-qq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-silc.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-silc.png
deleted file mode 100644
index 54a54ab012..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-silc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-simple.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-simple.png
deleted file mode 100644
index e895beabe1..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-simple.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-yahoo.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-yahoo.png
deleted file mode 100644
index 3b85f889b1..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-yahoo.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin-zephyr.png b/pidgin/artwork/hicolor/24x24/apps/pidgin-zephyr.png
deleted file mode 100644
index 77a82cce70..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin-zephyr.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/apps/pidgin.png b/pidgin/artwork/hicolor/24x24/apps/pidgin.png
deleted file mode 100644
index b94715bbbd..0000000000
--- a/pidgin/artwork/hicolor/24x24/apps/pidgin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/Makefile.am b/pidgin/artwork/hicolor/24x24/emotes/Makefile.am
deleted file mode 100644
index 855b3715d7..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/Makefile.am
+++ /dev/null
@@ -1,209 +0,0 @@
-SMILEYS = act-up.png \
- airplane.png \
- alien.png \
- angel.png \
- angry.png \
- arrogant.png \
- at-wits-end.png \
- bad.png \
- bashful.png \
- beat-up.png \
- beauty.png \
- beer.png \
- blowkiss.png \
- bomb.png \
- bowl.png \
- boy.png \
- brb.png \
- bulgy-eyes.png \
- bunny.png \
- bye.png \
- cake.png \
- call-me.png \
- camera.png \
- can.png \
- car.png \
- cat.png \
- chicken.png \
- cigarette.png \
- clap.png \
- clock.png \
- cloudy.png \
- clover.png \
- clown.png \
- coffee.png \
- coins.png \
- computer.png \
- confused.png \
- console.png \
- cowboy.png \
- cow.png \
- crying.png \
- curl-lip.png \
- curse.png \
- cute.png \
- cyclops.png \
- dance.png \
- dazed.png \
- desire.png \
- devil.png \
- disappointed.png \
- disdain.png \
- doctor.png \
- dog.png \
- doh.png \
- dont-know.png \
- drink.png \
- drool.png \
- eat.png \
- embarrassed.png \
- excruciating.png \
- eyeroll.png \
- female-fighter.png \
- film.png \
- fingers-crossed.png \
- flag.png \
- foot-in-mouth.png \
- freaked-out.png \
- ghost.png \
- giggle.png \
- girl.png \
- glasses-cool.png \
- glasses-nerdy.png \
- goat.png \
- go-away.png \
- good.png \
- hammer.png \
- handcuffs.png \
- handshake.png \
- highfive.png \
- hug-left.png \
- hug-right.png \
- hypnotized.png \
- in-love.png \
- island.png \
- jump.png \
- kissed.png \
- kissing.png \
- kiss.png \
- knife.png \
- lamp.png \
- lashes.png \
- laugh.png \
- liquor.png \
- loser.png \
- love-over.png \
- love.png \
- lying.png \
- mad-tongue.png \
- mail.png \
- male-fighter1.png \
- male-fighter2.png \
- mean.png \
- meeting.png \
- messed.png \
- mobile.png \
- mohawk.png \
- moneymouth.png \
- monkey.png \
- moon.png \
- msn-away.png \
- msn-busy.png \
- msn_online.png \
- msn.png \
- musical-note.png \
- music.png \
- nailbiting.png \
- neutral.png \
- on-the-phone.png \
- party.png \
- peace.png \
- phone.png \
- pig.png \
- pill.png \
- pirate.png \
- pissed-off.png \
- pizza.png \
- plate.png \
- poop.png \
- pray.png \
- present.png \
- pumpkin.png \
- qq.png \
- question.png \
- quiet.png \
- rainbow.png \
- rain.png \
- rose-dead.png \
- rose.png \
- rotfl.png \
- sad.png \
- sarcastic.png \
- search.png \
- secret.png \
- shame.png \
- sheep.png \
- shock.png \
- shout.png \
- shut-mouth.png \
- sick.png \
- sidefrown.png \
- silly.png \
- sinister.png \
- skeleton.png \
- skywalker.png \
- sleepy.png \
- smile-big.png \
- smile.png \
- smirk.png \
- snail.png \
- snicker.png \
- snowman.png \
- soccerball.png \
- soldier.png \
- star.png \
- starving.png \
- stop.png \
- struggle.png \
- sun.png \
- sweat.png \
- talktohand.png \
- teeth.png \
- terror.png \
- thinking.png \
- thunder.png \
- time-out.png \
- tongue.png \
- tremble.png \
- turtle.png \
- tv.png \
- umbrella.png \
- vampire.png \
- victory.png \
- waiting.png \
- watermelon.png \
- waving.png \
- weep.png \
- wilt.png \
- wink.png \
- worship.png \
- yawn.png \
- yin-yang.png
-
-
-pidginsmileypix_in_files = default.theme.in
-
-if INSTALL_PIXMAPS
-pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/default
-pidginsmileypix_DATA = \
- $(SMILEYS) \
- theme
-
-theme: default.theme.in
- sed -e 's/^_Name=/Name=/' \
- -e 's/^_Description=/Description=/' \
- -e 's/^_Author=/Author=/' \
- $< > $@
-endif
-
-EXTRA_DIST = $(SMILEYS) $(pidginsmileypix_in_files) theme
diff --git a/pidgin/artwork/hicolor/24x24/emotes/Makefile.mingw b/pidgin/artwork/hicolor/24x24/emotes/Makefile.mingw
deleted file mode 100644
index f01b414267..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/Makefile.mingw
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Makefile.mingw
-#
-# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
-#
-
-PIDGIN_TREE_TOP := ../../../../..
-include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
-
-datadir = $(PIDGIN_INSTALL_DIR)
--include ./Makefile.am.mingw
-
-.PHONY: install clean
-
-install: ./Makefile.am.mingw theme
- if test '$(pidginsmileypix_DATA)'; then \
- mkdir -p $(pidginsmileypixdir); \
- cp $(pidginsmileypix_DATA) $(pidginsmileypixdir); \
- fi;
-
-clean:
- rm -f theme
-
-./Makefile.am.mingw: ./Makefile.am
- sed -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' ./Makefile.am > $@
- include $@
-
diff --git a/pidgin/artwork/hicolor/24x24/emotes/default.theme.in b/pidgin/artwork/hicolor/24x24/emotes/default.theme.in
deleted file mode 100644
index 066df8fa6b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/default.theme.in
+++ /dev/null
@@ -1,394 +0,0 @@
-_Name=Default
-_Description=Pidgin smileys
-Icon=wink.png
-Author=Hylke Bons
-
-
-# Default smileys
-[default]
-smile.png :) :-)
-smile-big.png :-D :-d :D :d
-sad.png :-( :(
-wink.png ;-) ;)
-tongue.png :P :-P :-p :p
-shock.png =-O =-o
-kiss.png :-*
-glasses-cool.png 8-)
-embarrassed.png :-[
-crying.png :'(
-thinking.png :-/ :-\\
-angel.png O:-) o:-)
-shut-mouth.png :-X
-moneymouth.png :-$
-foot-in-mouth.png :-!
-shout.png >:o >:O
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|) 8-|)
-! cyclops.png O-) o-)
-
-
-# Following AIM 6.1
-[AIM]
-smile.png :-) :)
-wink.png ;-) ;)
-sad.png :-( :(
-tongue.png :-P :P :-p :p
-shock.png =-O
-kiss.png :-*
-shout.png >:o
-smile-big.png :-D :D
-moneymouth.png :-$
-foot-in-mouth.png :-!
-embarrassed.png :-[
-angel.png O:-)
-thinking.png :-\\ :-/
-crying.png :'(
-shut-mouth.png :-X
-glasses-cool.png 8-)
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following Windows Live Messenger 8.1
-[MSN]
-smile.png :) :-)
-smile-big.png :D :d :-D :-d
-wink.png ;) ;-)
-shock.png :-O :-o :O :o
-tongue.png :P :p :-P :-p
-glasses-cool.png (H) (h)
-angry.png :@ :-@
-embarrassed.png :$ :-$
-confused.png :S :s :-S :-s
-sad.png :( :-(
-crying.png :'(
-neutral.png :| :-|
-devil.png (6)
-angel.png (A) (a)
-love.png (L) (l)
-love-over.png (U) (u)
-msn.png (M) (m)
-cat.png (@)
-dog.png (&)
-moon.png (S)
-star.png (*)
-film.png (~)
-musical-note.png (8)
-mail.png (E) (e)
-rose.png (F) (f)
-rose-dead.png (W) (w)
-clock.png (O) (o)
-kiss.png (K) (k)
-present.png (G) (g)
-cake.png (^)
-camera.png (P) (p)
-lamp.png (I) (i)
-coffee.png (C) (c)
-phone.png (T) (t)
-hug-left.png ({)
-hug-right.png (})
-beer.png (B) (b)
-drink.png (D) (d)
-boy.png (Z) (z)
-girl.png (X) (x)
-good.png (Y) (y)
-bad.png (N) (n)
-vampire.png :[ :-[
-goat.png (nah)
-sun.png (#)
-rainbow.png (R) (r)
-quiet.png :-#
-teeth.png 8o|
-glasses-nerdy.png 8-|
-sarcastic.png ^o)
-secret.png :-*
-sick.png +o(
-snail.png (sn)
-turtle.png (tu)
-plate.png (pl)
-bowl.png (||)
-pizza.png (pi)
-soccerball.png (so)
-car.png (au)
-airplane.png (ap)
-umbrella.png (um)
-island.png (ip)
-computer.png (co)
-mobile.png (mp)
-brb.png (brb)
-rain.png (st)
-highfive.png (h5)
-coins.png (mo)
-sheep.png (bah)
-dont-know.png :^)
-thinking.png *-)
-thunder.png (li)
-party.png <:o)
-eyeroll.png 8-)
-yawn.png |-)
-bunny.png ('.')
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-# Hidden MSN emotes
-cigarette.png (ci) (CI)
-handcuffs.png (%)
-console.png (xx) (XX)
-fingers-crossed.png (yn) (YN)
-
-
-# Following QQ 2006
-[QQ]
-shock.png /:O /jy /surprised
-curl-lip.png /:~ /pz /curl_lip
-desire.png /:* /se /desire
-dazed.png /:| /dazed
-party.png /8-) /dy /revel
-crying.png /:< /ll /cry
-bashful.png /:$ /hx /bashful
-shut-mouth.png /:X /bz /shut_mouth
-sleepy.png /:Z /shui /sleep
-weep.png /:'( /dk /weep
-embarrassed.png /:-| /gg /embarassed
-pissed-off.png /:@ /fn /pissed_off
-act-up.png /:P /tp /act_up
-smile-big.png /:D /cy /toothy_smile
-smile.png /:) /wx /small_smile
-sad.png /:( /ng /sad
-glasses-cool.png /:+ /kuk /cool
-doctor.png /:# /feid /SARS
-silly.png /:Q /zk /crazy
-sick.png /:T /tu /vomit
-snicker.png /;p /tx /titter
-cute.png /;-D /ka /cute
-disdain.png /;d /by /disdain
-arrogant.png /;o /am /arrogant
-starving.png /:g /jie /starving
-yawn.png /|-) /kun /sleepy
-terror.png /:! /jk /terror
-sweat.png /:L /sweat
-smirk.png /:> /hanx /smirk
-soldier.png /:; /db /soldier
-struggle.png /;f /fendou /struggle
-curse.png /:-S /zhm /curse
-question.png /? /yiw /question
-quiet.png /;x /xu /shh
-hypnotized.png /;@ /yun /dizzy
-excruciating.png /:8 /zhem /excrutiating
-freaked-out.png /;! /shuai /freaked_out
-skeleton.png /!!! /kl /skeleton
-hammer.png /xx /qiao /hammer
-bye.png /bye /zj /bye
-go-away.png /go /shan /go
-tremble.png /shake /fad /shake
-in-love.png /love /aiq /love
-jump.png /jump /tiao /jump
-search.png /find /zhao /search
-lashes.png /& /mm /beautiful_eyebrows
-pig.png /pig /zt /pig
-cat.png /cat /mm /cat
-dog.png /dog /xg /dog
-hug-left.png /hug /yb /hug
-coins.png /$ /qianc /money
-lamp.png /! /dp /lightbulb
-bowl.png /cup /bei /cup
-cake.png /cake /dg /cake
-thunder.png /li /shd /lightning
-bomb.png /bome /zhd /bomb
-knife.png /kn /dao /knife
-soccerball.png /footb /zq /soccer
-musical-note.png /music /yy /music
-poop.png /shit /bb /shit
-coffee.png /coffee /kf /coffee
-eat.png /eat /fan /eat
-pill.png /pill /yw /pill
-rose.png /rose /mg /rose
-wilt.png /fade /dx /wilt
-kiss.png /kiss /wen /kiss
-love.png /heart /xin /heart
-love-over.png /break /xs /broken_heart
-meeting.png /meeting /hy /meeting
-present.png /gift /lw /gift
-phone.png /phone /dh /phone
-clock.png /time /sj /time
-mail.png /email /yj /email
-tv.png /TV /ds /TV
-sun.png /sun /ty /sun
-moon.png /moon /yl /moon
-good.png /strong /qiang /thumbs_up
-bad.png /weak /ruo /thumbs_down
-handshake.png /share /ws /handshake
-victory.png /v /shl /victory
-beauty.png /<J> /mn /beauty
-qq.png /<QQ> /qz /qq
-blowkiss.png /<L> /fw /blow_kiss
-angry.png /<O> /oh /angry
-liquor.png /<B> /bj /baijiu
-can.png /<U> /qsh /soda
-watermelon.png /<W> /xigua /watermelon
-rain.png /<!!> /xy /rain
-cloudy.png /<~> /duoy /cloudy
-snowman.png /<Z> /xr /snowman
-star.png /<*> /xixing /star
-girl.png /<00> /nv /woman
-boy.png /<11> /nan /man
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following ICQ 6.0
-[ICQ]
-smile.png :-) :)
-neutral.png :-$
-sad.png :-( :(
-shock.png =-O
-wink.png ;-) ;)
-tongue.png :-P :P :-p :p
-music.png [:-}
-laugh.png *JOKINGLY*
-sleepy.png *TIRED*
-crying.png :'( :'-(
-sick.png :-!
-kissed.png *KISSED*
-stop.png *STOP*
-kiss.png :-{} :-*
-kissing.png *KISSING*
-victory.png *YAHOO*
-silly.png %)
-embarrassed.png :-[
-devil.png ]:->
-angel.png O:-)
-rose.png @}->--
-shut-mouth.png :-X :X :-x :x
-bomb.png @=
-thinking.png :-\\ :-/
-good.png *THUMBS\ UP*
-shout.png >:o >:O :-@
-beer.png *DRINK*
-smile-big.png :-D :D
-glasses-cool.png 8-)
-in-love.png *IN\ LOVE*
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-smile.png :) :-)
-question.png :-/ :-\\
-shock.png :-O :O :-o :o
-devil.png >:)
-angel.png O:-) o:-) 0:-)
-sick.png :-&
-yawn.png (:|
-hypnotized.png @-)
-on-the-phone.png :)]
-sad.png :( :-(
-in-love.png :x :-x :X :-X
-angry.png X-( x-( X( x(
-crying.png :((
-glasses-nerdy.png :-B :-b
-quiet.png :-$
-drool.png =P~ =p~
-lying.png :^O :^o
-call-me.png :-c
-wink.png ;) ;-)
-embarrassed.png :">
-mean.png :-> :>
-laugh.png :)) :-))
-bye.png =;
-arrogant.png [-(
-thinking.png :-?
-waiting.png :-w :-W
-at-wits-end.png ~x( ~X(
-smile-big.png :D :-D :d :-d
-tongue.png :-P :P :-p :p
-glasses-cool.png B-) b-)
-neutral.png :| :-|
-sleepy.png I-) i-) |-)
-clown.png :o) :O)
-doh.png #-o #-O
-weep.png :-<
-go-away.png :-h
-lashes.png ;;)
-kiss.png :-* :*
-confused.png :-S :-s
-sarcastic.png /:)
-eyeroll.png 8-|
-silly.png 8-}
-clap.png =D> =d>
-mad-tongue.png >:P >:p
-time-out.png :-t :-T
-hug-left.png >:D< >:d<
-love-over.png =((
-sweat.png #:-S #:-s
-rotfl.png =)) :-j :-J
-loser.png L-) l-)
-party.png <:-P <:-p
-nailbiting.png :-SS :-Ss :-sS :-ss
-cowboy.png <):)
-desire.png 8->
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-# Hidden Yahoo emotes
-alien.png =:) >-)
-beat-up.png b-( B-(
-chicken.png ~:>
-coffee.png ~o) ~O)
-cow.png 3:-O 3:-o
-dance.png \\:D/ \\:d/
-rose.png @};-
-dont-know.png :-L :-l
-skeleton.png 8-X 8-x
-lamp.png *-:)
-monkey.png :(|)
-coins.png $-)
-peace.png :)>-
-pig.png :@)
-pray.png [-o< [-O<
-pumpkin.png (~~)
-shame.png [-X [-x
-flag.png **==
-clover.png %%-
-musical-note.png :-"
-giggle.png ;))
-worship.png ^:)^
-star.png (*)
-waving.png >:/
-talktohand.png :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png o-> O->
-male-fighter2.png o=> O=>
-female-fighter.png o-+ O-+
-yin-yang.png (%)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-smile-big.png :D :-D
-devil.png }:)
-confused.png :Z
-glasses-nerdy.png B)
-bulgy-eyes.png %)
-freaked-out.png :E
-smile.png :) :-)
-in-love.png :X
-laugh.png :))
-mohawk.png -:
-mad-tongue.png X(
-messed.png X)
-glasses-nerdy.png Q)
-doh.png :G
-pirate.png P)
-shock.png :O
-sidefrown.png :{
-sinister.png :B
-smirk.png :,
-neutral.png :|
-tongue.png :P :p
-pissed-off.png B|
-wink.png ;-) ;)
-sad.png :[
-kiss.png :x
diff --git a/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.am b/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.am
deleted file mode 100644
index 40ddc6d03f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-pidginsmileypix_in_files = none.theme.in
-
-if INSTALL_PIXMAPS
-pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/none
-pidginsmileypix_DATA = theme
-
-theme: none.theme.in
- sed -e 's/^_Name=/Name=/' \
- -e 's/^_Description=/Description=/' \
- -e 's/^_Author=/Author=/' \
- $< > $@
-endif
-
-EXTRA_DIST = \
- $(pidginsmileypix_in_files) \
- Makefile.mingw \
- theme
diff --git a/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.mingw b/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.mingw
deleted file mode 100644
index 4fa27f2b3b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/none/Makefile.mingw
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Makefile.mingw
-#
-# Description: Makefile for win32 (mingw) version of Pidgin pixmaps
-#
-
-PIDGIN_TREE_TOP := ../../../..
-include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak
-
-datadir = $(PIDGIN_INSTALL_DIR)
--include ./Makefile.am.mingw
-
-.PHONY: install clean
-
-install: ./Makefile.am.mingw theme
- if test '$(pidginsmileypix_DATA)'; then \
- mkdir -p $(pidginsmileypixdir); \
- cp $(pidginsmileypix_DATA) $(pidginsmileypixdir); \
- fi;
-
-clean:
- rm -f theme
-
-./Makefile.am.mingw: ./Makefile.am
- sed -e 's/^if\ INSTALL_PIXMAPS/ifeq (\$$(INSTALL_PIXMAPS), 1)/' ./Makefile.am > $@
- include $@
-
diff --git a/pidgin/artwork/hicolor/24x24/emotes/none/none.theme.in b/pidgin/artwork/hicolor/24x24/emotes/none/none.theme.in
deleted file mode 100644
index 2f23f8a85a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/none/none.theme.in
+++ /dev/null
@@ -1,3 +0,0 @@
-_Name=None
-_Description=Selecting this disables graphical emoticons.
-_Author=Penguin Pimps
diff --git a/pidgin/artwork/hicolor/24x24/emotes/none/theme b/pidgin/artwork/hicolor/24x24/emotes/none/theme
deleted file mode 100644
index 48d4564080..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/none/theme
+++ /dev/null
@@ -1,3 +0,0 @@
-Name=None
-Description=Selecting this disables graphical emoticons.
-Author=Penguin Pimps
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-act-up.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-act-up.png
deleted file mode 100644
index a6ed2c4829..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-act-up.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-airplane.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-airplane.png
deleted file mode 100644
index dd87f7a0d4..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-airplane.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-alien.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-alien.png
deleted file mode 100644
index b9ca044e3e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-alien.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-angel.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-angel.png
deleted file mode 100644
index cdf33893ee..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-angel.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-angry.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-angry.png
deleted file mode 100644
index 3b57d969bb..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-angry.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-arrogant.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-arrogant.png
deleted file mode 100644
index 61093e4759..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-arrogant.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-at-wits-end.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-at-wits-end.png
deleted file mode 100644
index 218e5319a7..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-at-wits-end.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bad.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bad.png
deleted file mode 100644
index a297f8680f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bad.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bashful.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bashful.png
deleted file mode 100644
index 92a99836f0..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bashful.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beat-up.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-beat-up.png
deleted file mode 100644
index d1367cefa9..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beat-up.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beauty.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-beauty.png
deleted file mode 100644
index 95943affc2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beauty.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beer.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-beer.png
deleted file mode 100644
index 6f82e46b9d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-beer.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-blowkiss.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-blowkiss.png
deleted file mode 100644
index 132df9941b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-blowkiss.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bomb.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bomb.png
deleted file mode 100644
index f50d407587..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bomb.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bowl.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bowl.png
deleted file mode 100644
index e800c7287f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bowl.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-boy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-boy.png
deleted file mode 100644
index 3e70c54719..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-boy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-brb.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-brb.png
deleted file mode 100644
index 61b3a146a5..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-brb.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bulgy-eyes.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bulgy-eyes.png
deleted file mode 100644
index 8cc7c3cd6e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bulgy-eyes.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bunny.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bunny.png
deleted file mode 100644
index 77d97c4ffe..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bunny.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bye.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-bye.png
deleted file mode 100644
index 9bfaeaa1af..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-bye.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cake.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cake.png
deleted file mode 100644
index 519fd4ceae..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cake.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-call-me.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-call-me.png
deleted file mode 100644
index 1044de0c5e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-call-me.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-camera.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-camera.png
deleted file mode 100644
index d8ccc97b69..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-camera.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-can.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-can.png
deleted file mode 100644
index e4792ccd01..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-can.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-car.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-car.png
deleted file mode 100644
index 97622bc2c4..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-car.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cat.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cat.png
deleted file mode 100644
index 4b602dae8a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cat.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-chicken.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-chicken.png
deleted file mode 100644
index 8356dbf09f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-chicken.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cigarette.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cigarette.png
deleted file mode 100644
index 68cffedf09..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cigarette.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clap.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-clap.png
deleted file mode 100644
index d0b4ae6e66..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clap.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clock.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-clock.png
deleted file mode 100644
index e0bbb85478..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clock.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cloudy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cloudy.png
deleted file mode 100644
index 4202a0ef22..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cloudy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clover.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-clover.png
deleted file mode 100644
index c90494ad51..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clover.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clown.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-clown.png
deleted file mode 100644
index bfc9552d16..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-clown.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-coffee.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-coffee.png
deleted file mode 100644
index 51c4f90ad2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-coffee.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-coins.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-coins.png
deleted file mode 100644
index 7e06f3eab3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-coins.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-computer.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-computer.png
deleted file mode 100644
index 1b11a09322..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-computer.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-confused.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-confused.png
deleted file mode 100644
index 3b77b55dca..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-confused.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-console.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-console.png
deleted file mode 100644
index 4933bc5eec..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-console.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cow.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cow.png
deleted file mode 100644
index 62657da08c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cow.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cowboy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cowboy.png
deleted file mode 100644
index 8d895a960c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cowboy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-crying.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-crying.png
deleted file mode 100644
index ec9c6f47c8..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-crying.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-curl-lip.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-curl-lip.png
deleted file mode 100644
index fc33918e4f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-curl-lip.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-curse.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-curse.png
deleted file mode 100644
index c1d20588ad..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-curse.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cute.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cute.png
deleted file mode 100644
index f76bce10c2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cute.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cyclops.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-cyclops.png
deleted file mode 100644
index 49b2f72b36..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-cyclops.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dance.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-dance.png
deleted file mode 100644
index 60e44d5dba..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dance.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dazed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-dazed.png
deleted file mode 100644
index 293736055a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dazed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-desire.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-desire.png
deleted file mode 100644
index a04d2926b2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-desire.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-devil.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-devil.png
deleted file mode 100644
index d7d0f46b45..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-devil.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-disappointed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-disappointed.png
deleted file mode 100644
index ab307be528..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-disappointed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-disdain.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-disdain.png
deleted file mode 100644
index a122e7825f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-disdain.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-doctor.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-doctor.png
deleted file mode 100644
index 6183061a61..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-doctor.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dog.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-dog.png
deleted file mode 100644
index d8c1ddf6fe..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dog.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-doh.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-doh.png
deleted file mode 100644
index 66e9679d81..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-doh.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dont-know.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-dont-know.png
deleted file mode 100644
index d6bc7eda9f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-dont-know.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-drink.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-drink.png
deleted file mode 100644
index 563ab94029..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-drink.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-drool.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-drool.png
deleted file mode 100644
index 5771d5bfa5..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-drool.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-eat.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-eat.png
deleted file mode 100644
index 393482f13e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-eat.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-embarrassed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-embarrassed.png
deleted file mode 100644
index f8ca79f13b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-embarrassed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-excruciating.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-excruciating.png
deleted file mode 100644
index 1e7fec34ec..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-excruciating.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-eyeroll.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-eyeroll.png
deleted file mode 100644
index 0d8f021c20..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-eyeroll.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-female-fighter.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-female-fighter.png
deleted file mode 100644
index 188bd1bc5d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-female-fighter.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-film.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-film.png
deleted file mode 100644
index 66acb127ca..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-film.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-fingers-crossed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-fingers-crossed.png
deleted file mode 100644
index 33576ff103..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-fingers-crossed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-flag.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-flag.png
deleted file mode 100644
index aff86374b2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-flag.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-foot-in-mouth.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-foot-in-mouth.png
deleted file mode 100644
index 79aaa149be..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-foot-in-mouth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-freaked-out.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-freaked-out.png
deleted file mode 100644
index 85ca5717cb..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-freaked-out.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-ghost.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-ghost.png
deleted file mode 100644
index a58efa52fd..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-ghost.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-giggle.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-giggle.png
deleted file mode 100644
index 906fb4ae4b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-giggle.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-girl.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-girl.png
deleted file mode 100644
index 82c9428203..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-girl.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-cool.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-cool.png
deleted file mode 100644
index 855bc49168..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-cool.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-nerdy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-nerdy.png
deleted file mode 100644
index 3d794b2ad0..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-glasses-nerdy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-go-away.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-go-away.png
deleted file mode 100644
index 24611ed0a4..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-go-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-goat.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-goat.png
deleted file mode 100644
index f44db4a4b9..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-goat.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-good.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-good.png
deleted file mode 100644
index c32988d22a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-good.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hammer.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-hammer.png
deleted file mode 100644
index 53098ac0b9..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hammer.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-handcuffs.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-handcuffs.png
deleted file mode 100644
index 849ee912d7..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-handcuffs.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-handshake.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-handshake.png
deleted file mode 100644
index a51da2d540..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-handshake.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-highfive.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-highfive.png
deleted file mode 100644
index 01a7159858..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-highfive.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-left.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-left.png
deleted file mode 100644
index fba82606d8..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-left.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-right.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-right.png
deleted file mode 100644
index 6cd79205d9..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hug-right.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hypnotized.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-hypnotized.png
deleted file mode 100644
index 7b7488f492..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-hypnotized.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-in-love.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-in-love.png
deleted file mode 100644
index e752acc976..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-in-love.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-island.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-island.png
deleted file mode 100644
index 5e63e1dc35..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-island.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-jump.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-jump.png
deleted file mode 100644
index d476c556f6..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-jump.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kiss.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-kiss.png
deleted file mode 100644
index 697392fd9a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kiss.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissed.png
deleted file mode 100644
index 7049c48197..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissing.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissing.png
deleted file mode 100644
index 31f8da9991..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-kissing.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-knife.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-knife.png
deleted file mode 100644
index 6db80de15c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-knife.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lamp.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-lamp.png
deleted file mode 100644
index 85b7968aa1..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lamp.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lashes.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-lashes.png
deleted file mode 100644
index 062d964d55..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lashes.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-laugh.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-laugh.png
deleted file mode 100644
index 306b2c592d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-laugh.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-liquor.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-liquor.png
deleted file mode 100644
index cd509c9f04..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-liquor.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-loser.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-loser.png
deleted file mode 100644
index 0cecd2fce0..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-loser.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-love-over.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-love-over.png
deleted file mode 100644
index 59c8a6ef69..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-love-over.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-love.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-love.png
deleted file mode 100644
index 31aeea275e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-love.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lying.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-lying.png
deleted file mode 100644
index c7e8be3389..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-lying.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mad-tongue.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-mad-tongue.png
deleted file mode 100644
index 14cfd37c19..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mad-tongue.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mail.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-mail.png
deleted file mode 100644
index a1a365f0d7..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mail.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter1.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter1.png
deleted file mode 100644
index e3a4b17907..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter1.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter2.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter2.png
deleted file mode 100644
index 5feb9dd7cb..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-male-fighter2.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mean.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-mean.png
deleted file mode 100644
index ac05d2128e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mean.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-meeting.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-meeting.png
deleted file mode 100644
index 02b4b1a67a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-meeting.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-messed.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-messed.png
deleted file mode 100644
index f76307f631..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-messed.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mobile.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-mobile.png
deleted file mode 100644
index ac3469007d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mobile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mohawk.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-mohawk.png
deleted file mode 100644
index 60a9f0ffb3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-mohawk.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-moneymouth.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-moneymouth.png
deleted file mode 100644
index 8fe1fa4702..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-moneymouth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-monkey.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-monkey.png
deleted file mode 100644
index dfc05f5b3b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-monkey.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-moon.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-moon.png
deleted file mode 100644
index 0679d3dec3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-moon.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-away.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-away.png
deleted file mode 100644
index 0ccff24cb3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-busy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-busy.png
deleted file mode 100644
index db57fd2ae5..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn.png
deleted file mode 100644
index 3c2adcd1b0..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn_online.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn_online.png
deleted file mode 100644
index deaca64755..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-msn_online.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-music.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-music.png
deleted file mode 100644
index e9d87e1feb..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-music.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-musical-note.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-musical-note.png
deleted file mode 100644
index d003bc6170..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-musical-note.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-nailbiting.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-nailbiting.png
deleted file mode 100644
index 6888af8e0a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-nailbiting.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-neutral.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-neutral.png
deleted file mode 100644
index 00691ac1e9..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-neutral.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-on-the-phone.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-on-the-phone.png
deleted file mode 100644
index dd8155994d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-on-the-phone.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-party.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-party.png
deleted file mode 100644
index 66828bd96a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-party.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-peace.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-peace.png
deleted file mode 100644
index ffeab9d952..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-peace.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-phone.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-phone.png
deleted file mode 100644
index a3c86155c3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-phone.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pig.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pig.png
deleted file mode 100644
index 1dc5c1ff79..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pig.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pill.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pill.png
deleted file mode 100644
index 04d326a2be..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pill.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pirate.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pirate.png
deleted file mode 100644
index ff807af9af..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pirate.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pissed-off.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pissed-off.png
deleted file mode 100644
index 224021002f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pissed-off.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pizza.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pizza.png
deleted file mode 100644
index 9b8da769b4..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pizza.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-plate.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-plate.png
deleted file mode 100644
index 0ed2c6fdb2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-plate.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-poop.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-poop.png
deleted file mode 100644
index 3413bbaffa..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-poop.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pray.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pray.png
deleted file mode 100644
index a7815aed97..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pray.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-present.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-present.png
deleted file mode 100644
index ac43e38dbe..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-present.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pumpkin.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-pumpkin.png
deleted file mode 100644
index 389c2b0c8c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-pumpkin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-qq.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-qq.png
deleted file mode 100644
index cf5a02a927..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-qq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-question.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-question.png
deleted file mode 100644
index c4bc2e1046..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-question.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-quiet.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-quiet.png
deleted file mode 100644
index 371574fa47..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-quiet.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rain.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-rain.png
deleted file mode 100644
index 6954d826a1..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rain.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rainbow.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-rainbow.png
deleted file mode 100644
index 344fdb5dc8..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rainbow.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose-dead.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose-dead.png
deleted file mode 100644
index 927cf90eb1..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose-dead.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose.png
deleted file mode 100644
index 33cfb13782..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rose.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rotfl.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-rotfl.png
deleted file mode 100644
index f0c4879ef5..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-rotfl.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sad.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sad.png
deleted file mode 100644
index bf20e9df85..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sad.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sarcastic.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sarcastic.png
deleted file mode 100644
index eef0e8e968..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sarcastic.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-search.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-search.png
deleted file mode 100644
index d61cebb36f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-search.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-secret.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-secret.png
deleted file mode 100644
index 64fc95ef3a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-secret.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shame.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-shame.png
deleted file mode 100644
index a4b0547986..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shame.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sheep.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sheep.png
deleted file mode 100644
index dc3feaa458..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sheep.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shock.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-shock.png
deleted file mode 100644
index 0e7438e9ee..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shock.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shout.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-shout.png
deleted file mode 100644
index 1fe2fa9dbd..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shout.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shut-mouth.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-shut-mouth.png
deleted file mode 100644
index 5037ad6811..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-shut-mouth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sick.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sick.png
deleted file mode 100644
index 94e4e598c5..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sick.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sidefrown.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sidefrown.png
deleted file mode 100644
index 2d4e422061..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sidefrown.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-silly.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-silly.png
deleted file mode 100644
index 950400c1b8..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-silly.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sinister.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sinister.png
deleted file mode 100644
index f26a3a6171..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sinister.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-skeleton.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-skeleton.png
deleted file mode 100644
index f59540d584..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-skeleton.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-skywalker.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-skywalker.png
deleted file mode 100644
index d6365f1e55..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-skywalker.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sleepy.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sleepy.png
deleted file mode 100644
index e3bfe411b1..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sleepy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile-big.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile-big.png
deleted file mode 100644
index ce3f8664bc..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile-big.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile.png
deleted file mode 100644
index 8a2ba4925c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smirk.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-smirk.png
deleted file mode 100644
index c458e1a60a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-smirk.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snail.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-snail.png
deleted file mode 100644
index 2e8ac91bab..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snail.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snicker.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-snicker.png
deleted file mode 100644
index a40c462610..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snicker.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snowman.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-snowman.png
deleted file mode 100644
index 9fec7d7d5f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-snowman.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-soccerball.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-soccerball.png
deleted file mode 100644
index 358a157b31..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-soccerball.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-soldier.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-soldier.png
deleted file mode 100644
index 04435a9e35..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-soldier.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-star.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-star.png
deleted file mode 100644
index cc92a69a71..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-star.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-starving.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-starving.png
deleted file mode 100644
index 4eb3b62d57..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-starving.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-stop.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-stop.png
deleted file mode 100644
index 469eaa0e87..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-stop.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-struggle.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-struggle.png
deleted file mode 100644
index f3fc010d7e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-struggle.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sun.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sun.png
deleted file mode 100644
index 43a61280c7..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sun.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sweat.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-sweat.png
deleted file mode 100644
index 1b7fbec14b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-sweat.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-talktohand.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-talktohand.png
deleted file mode 100644
index 7218955150..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-talktohand.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-teeth.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-teeth.png
deleted file mode 100644
index 42ae1d558b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-teeth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-terror.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-terror.png
deleted file mode 100644
index 91c07d6600..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-terror.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-thinking.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-thinking.png
deleted file mode 100644
index 5567953a65..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-thinking.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-thunder.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-thunder.png
deleted file mode 100644
index fef2007b8c..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-thunder.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-time-out.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-time-out.png
deleted file mode 100644
index 7b8ff4d622..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-time-out.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tongue.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-tongue.png
deleted file mode 100644
index 029f0a566f..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tongue.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tremble.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-tremble.png
deleted file mode 100644
index 623a5d26e3..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tremble.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-turtle.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-turtle.png
deleted file mode 100644
index a95b64f03a..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-turtle.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tv.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-tv.png
deleted file mode 100644
index 30b8969867..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-tv.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-umbrella.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-umbrella.png
deleted file mode 100644
index 8c5a8518f8..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-umbrella.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-vampire.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-vampire.png
deleted file mode 100644
index 6758b35aa4..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-vampire.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-victory.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-victory.png
deleted file mode 100644
index b35692fa16..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-victory.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-waiting.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-waiting.png
deleted file mode 100644
index 0f6baeea7b..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-waiting.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-watermelon.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-watermelon.png
deleted file mode 100644
index 4a201d5235..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-watermelon.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-waving.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-waving.png
deleted file mode 100644
index e309c3e343..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-waving.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-weep.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-weep.png
deleted file mode 100644
index 85c87319f0..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-weep.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-wilt.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-wilt.png
deleted file mode 100644
index fd89129047..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-wilt.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-wink.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-wink.png
deleted file mode 100644
index 6316618a97..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-wink.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-worship.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-worship.png
deleted file mode 100644
index 2a3010df8e..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-worship.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-yawn.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-yawn.png
deleted file mode 100644
index 2c3e78fd8d..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-yawn.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/pidgin-yin-yang.png b/pidgin/artwork/hicolor/24x24/emotes/pidgin-yin-yang.png
deleted file mode 100644
index 4d3f970a76..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/pidgin-yin-yang.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/emotes/theme b/pidgin/artwork/hicolor/24x24/emotes/theme
deleted file mode 100644
index 5a0b9af3d2..0000000000
--- a/pidgin/artwork/hicolor/24x24/emotes/theme
+++ /dev/null
@@ -1,394 +0,0 @@
-Name=Default
-Description=Pidgin smileys
-Icon=wink.png
-Author=Hylke Bons
-
-
-# Default smileys
-[default]
-smile.png :) :-)
-smile-big.png :-D :-d :D :d
-sad.png :-( :(
-wink.png ;-) ;)
-tongue.png :P :-P :-p :p
-shock.png =-O =-o
-kiss.png :-*
-glasses-cool.png 8-)
-embarrassed.png :-[
-crying.png :'(
-thinking.png :-/ :-\\
-angel.png O:-) o:-)
-shut-mouth.png :-X
-moneymouth.png :-$
-foot-in-mouth.png :-!
-shout.png >:o >:O
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|) 8-|)
-! cyclops.png O-) o-)
-
-
-# Following AIM 6.1
-[AIM]
-smile.png :-) :)
-wink.png ;-) ;)
-sad.png :-( :(
-tongue.png :-P :P :-p :p
-shock.png =-O
-kiss.png :-*
-shout.png >:o
-smile-big.png :-D :D
-moneymouth.png :-$
-foot-in-mouth.png :-!
-embarrassed.png :-[
-angel.png O:-)
-thinking.png :-\\ :-/
-crying.png :'(
-shut-mouth.png :-X
-glasses-cool.png 8-)
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following Windows Live Messenger 8.1
-[MSN]
-smile.png :) :-)
-smile-big.png :D :d :-D :-d
-wink.png ;) ;-)
-shock.png :-O :-o :O :o
-tongue.png :P :p :-P :-p
-glasses-cool.png (H) (h)
-angry.png :@ :-@
-embarrassed.png :$ :-$
-confused.png :S :s :-S :-s
-sad.png :( :-(
-crying.png :'(
-neutral.png :| :-|
-devil.png (6)
-angel.png (A) (a)
-love.png (L) (l)
-love-over.png (U) (u)
-msn.png (M) (m)
-cat.png (@)
-dog.png (&)
-moon.png (S)
-star.png (*)
-film.png (~)
-musical-note.png (8)
-mail.png (E) (e)
-rose.png (F) (f)
-rose-dead.png (W) (w)
-clock.png (O) (o)
-kiss.png (K) (k)
-present.png (G) (g)
-cake.png (^)
-camera.png (P) (p)
-lamp.png (I) (i)
-coffee.png (C) (c)
-phone.png (T) (t)
-hug-left.png ({)
-hug-right.png (})
-beer.png (B) (b)
-drink.png (D) (d)
-boy.png (Z) (z)
-girl.png (X) (x)
-good.png (Y) (y)
-bad.png (N) (n)
-vampire.png :[ :-[
-goat.png (nah)
-sun.png (#)
-rainbow.png (R) (r)
-quiet.png :-#
-teeth.png 8o|
-glasses-nerdy.png 8-|
-sarcastic.png ^o)
-secret.png :-*
-sick.png +o(
-snail.png (sn)
-turtle.png (tu)
-plate.png (pl)
-bowl.png (||)
-pizza.png (pi)
-soccerball.png (so)
-car.png (au)
-airplane.png (ap)
-umbrella.png (um)
-island.png (ip)
-computer.png (co)
-mobile.png (mp)
-brb.png (brb)
-rain.png (st)
-highfive.png (h5)
-coins.png (mo)
-sheep.png (bah)
-dont-know.png :^)
-thinking.png *-)
-thunder.png (li)
-party.png <:o)
-eyeroll.png 8-)
-yawn.png |-)
-bunny.png ('.')
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-# Hidden MSN emotes
-cigarette.png (ci) (CI)
-handcuffs.png (%)
-console.png (xx) (XX)
-fingers-crossed.png (yn) (YN)
-
-
-# Following QQ 2006
-[QQ]
-shock.png /:O /jy /surprised
-curl-lip.png /:~ /pz /curl_lip
-desire.png /:* /se /desire
-dazed.png /:| /dazed
-party.png /8-) /dy /revel
-crying.png /:< /ll /cry
-bashful.png /:$ /hx /bashful
-shut-mouth.png /:X /bz /shut_mouth
-sleepy.png /:Z /shui /sleep
-weep.png /:'( /dk /weep
-embarrassed.png /:-| /gg /embarassed
-pissed-off.png /:@ /fn /pissed_off
-act-up.png /:P /tp /act_up
-smile-big.png /:D /cy /toothy_smile
-smile.png /:) /wx /small_smile
-sad.png /:( /ng /sad
-glasses-cool.png /:+ /kuk /cool
-doctor.png /:# /feid /SARS
-silly.png /:Q /zk /crazy
-sick.png /:T /tu /vomit
-snicker.png /;p /tx /titter
-cute.png /;-D /ka /cute
-disdain.png /;d /by /disdain
-arrogant.png /;o /am /arrogant
-starving.png /:g /jie /starving
-yawn.png /|-) /kun /sleepy
-terror.png /:! /jk /terror
-sweat.png /:L /sweat
-smirk.png /:> /hanx /smirk
-soldier.png /:; /db /soldier
-struggle.png /;f /fendou /struggle
-curse.png /:-S /zhm /curse
-question.png /? /yiw /question
-quiet.png /;x /xu /shh
-hypnotized.png /;@ /yun /dizzy
-excruciating.png /:8 /zhem /excrutiating
-freaked-out.png /;! /shuai /freaked_out
-skeleton.png /!!! /kl /skeleton
-hammer.png /xx /qiao /hammer
-bye.png /bye /zj /bye
-go-away.png /go /shan /go
-tremble.png /shake /fad /shake
-in-love.png /love /aiq /love
-jump.png /jump /tiao /jump
-search.png /find /zhao /search
-lashes.png /& /mm /beautiful_eyebrows
-pig.png /pig /zt /pig
-cat.png /cat /mm /cat
-dog.png /dog /xg /dog
-hug-left.png /hug /yb /hug
-coins.png /$ /qianc /money
-lamp.png /! /dp /lightbulb
-bowl.png /cup /bei /cup
-cake.png /cake /dg /cake
-thunder.png /li /shd /lightning
-bomb.png /bome /zhd /bomb
-knife.png /kn /dao /knife
-soccerball.png /footb /zq /soccer
-musical-note.png /music /yy /music
-poop.png /shit /bb /shit
-coffee.png /coffee /kf /coffee
-eat.png /eat /fan /eat
-pill.png /pill /yw /pill
-rose.png /rose /mg /rose
-wilt.png /fade /dx /wilt
-kiss.png /kiss /wen /kiss
-love.png /heart /xin /heart
-love-over.png /break /xs /broken_heart
-meeting.png /meeting /hy /meeting
-present.png /gift /lw /gift
-phone.png /phone /dh /phone
-clock.png /time /sj /time
-mail.png /email /yj /email
-tv.png /TV /ds /TV
-sun.png /sun /ty /sun
-moon.png /moon /yl /moon
-good.png /strong /qiang /thumbs_up
-bad.png /weak /ruo /thumbs_down
-handshake.png /share /ws /handshake
-victory.png /v /shl /victory
-beauty.png /<J> /mn /beauty
-qq.png /<QQ> /qz /qq
-blowkiss.png /<L> /fw /blow_kiss
-angry.png /<O> /oh /angry
-liquor.png /<B> /bj /baijiu
-can.png /<U> /qsh /soda
-watermelon.png /<W> /xigua /watermelon
-rain.png /<!!> /xy /rain
-cloudy.png /<~> /duoy /cloudy
-snowman.png /<Z> /xr /snowman
-star.png /<*> /xixing /star
-girl.png /<00> /nv /woman
-boy.png /<11> /nan /man
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following ICQ 6.0
-[ICQ]
-smile.png :-) :)
-neutral.png :-$
-sad.png :-( :(
-shock.png =-O
-wink.png ;-) ;)
-tongue.png :-P :P :-p :p
-music.png [:-}
-laugh.png *JOKINGLY*
-sleepy.png *TIRED*
-crying.png :'( :'-(
-sick.png :-!
-kissed.png *KISSED*
-stop.png *STOP*
-kiss.png :-{} :-*
-kissing.png *KISSING*
-victory.png *YAHOO*
-silly.png %)
-embarrassed.png :-[
-devil.png ]:->
-angel.png O:-)
-rose.png @}->--
-shut-mouth.png :-X :X :-x :x
-bomb.png @=
-thinking.png :-\\ :-/
-good.png *THUMBS\ UP*
-shout.png >:o >:O :-@
-beer.png *DRINK*
-smile-big.png :-D :D
-glasses-cool.png 8-)
-in-love.png *IN\ LOVE*
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-
-# Following Yahoo! Messenger 8.1
-[Yahoo]
-smile.png :) :-)
-question.png :-/ :-\\
-shock.png :-O :O :-o :o
-devil.png >:)
-angel.png O:-) o:-) 0:-)
-sick.png :-&
-yawn.png (:|
-hypnotized.png @-)
-on-the-phone.png :)]
-sad.png :( :-(
-in-love.png :x :-x :X :-X
-angry.png X-( x-( X( x(
-crying.png :((
-glasses-nerdy.png :-B :-b
-quiet.png :-$
-drool.png =P~ =p~
-lying.png :^O :^o
-call-me.png :-c
-wink.png ;) ;-)
-embarrassed.png :">
-mean.png :-> :>
-laugh.png :)) :-))
-bye.png =;
-arrogant.png [-(
-thinking.png :-?
-waiting.png :-w :-W
-at-wits-end.png ~x( ~X(
-smile-big.png :D :-D :d :-d
-tongue.png :-P :P :-p :p
-glasses-cool.png B-) b-)
-neutral.png :| :-|
-sleepy.png I-) i-) |-)
-clown.png :o) :O)
-doh.png #-o #-O
-weep.png :-<
-go-away.png :-h
-lashes.png ;;)
-kiss.png :-* :*
-confused.png :-S :-s
-sarcastic.png /:)
-eyeroll.png 8-|
-silly.png 8-}
-clap.png =D> =d>
-mad-tongue.png >:P >:p
-time-out.png :-t :-T
-hug-left.png >:D< >:d<
-love-over.png =((
-sweat.png #:-S #:-s
-rotfl.png =)) :-j :-J
-loser.png L-) l-)
-party.png <:-P <:-p
-nailbiting.png :-SS :-Ss :-sS :-ss
-cowboy.png <):)
-desire.png 8->
-! skywalker.png C:-) c:-) C:) c:)
-! monkey.png :-(|) :(|)
-
-# Hidden Yahoo emotes
-alien.png =:) >-)
-beat-up.png b-( B-(
-chicken.png ~:>
-coffee.png ~o) ~O)
-cow.png 3:-O 3:-o
-dance.png \\:D/ \\:d/
-rose.png @};-
-dont-know.png :-L :-l
-skeleton.png 8-X 8-x
-lamp.png *-:)
-monkey.png :(|)
-coins.png $-)
-peace.png :)>-
-pig.png :@)
-pray.png [-o< [-O<
-pumpkin.png (~~)
-shame.png [-X [-x
-flag.png **==
-clover.png %%-
-musical-note.png :-"
-giggle.png ;))
-worship.png ^:)^
-star.png (*)
-waving.png >:/
-talktohand.png :-@
-
-# Only available after activating the Yahoo! Fighter IMVironment
-male-fighter1.png o-> O->
-male-fighter2.png o=> O=>
-female-fighter.png o-+ O-+
-yin-yang.png (%)
-
-
-# Following MySpaceIM Beta 1.0.697.0
-[MySpaceIM]
-smile-big.png :D :-D
-devil.png }:)
-confused.png :Z
-glasses-nerdy.png B)
-bulgy-eyes.png %)
-freaked-out.png :E
-smile.png :) :-)
-in-love.png :X
-laugh.png :))
-mohawk.png -:
-mad-tongue.png X(
-messed.png X)
-glasses-nerdy.png Q)
-doh.png :G
-pirate.png P)
-shock.png :O
-sidefrown.png :{
-sinister.png :B
-smirk.png :,
-neutral.png :|
-tongue.png :P :p
-pissed-off.png B|
-wink.png ;-) ;)
-sad.png :[
-kiss.png :x
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-available.png b/pidgin/artwork/hicolor/24x24/status/pidgin-available.png
deleted file mode 100644
index 96ae9a3048..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-away.png b/pidgin/artwork/hicolor/24x24/status/pidgin-away.png
deleted file mode 100644
index cf3013c0d0..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-busy.png b/pidgin/artwork/hicolor/24x24/status/pidgin-busy.png
deleted file mode 100644
index c195dc0eaa..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-chatroom.png b/pidgin/artwork/hicolor/24x24/status/pidgin-chatroom.png
deleted file mode 100644
index e97f320c46..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-chatroom.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-contact.png b/pidgin/artwork/hicolor/24x24/status/pidgin-contact.png
deleted file mode 100644
index 485735487a..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-contact.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-extended-away.png b/pidgin/artwork/hicolor/24x24/status/pidgin-extended-away.png
deleted file mode 100644
index 560cba6610..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-invisible.png b/pidgin/artwork/hicolor/24x24/status/pidgin-invisible.png
deleted file mode 100644
index f6a009b4f1..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-offline.png b/pidgin/artwork/hicolor/24x24/status/pidgin-offline.png
deleted file mode 100644
index 2d8e997b96..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-available.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-available.png
deleted file mode 100644
index 2e39d07a99..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-away.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-away.png
deleted file mode 100644
index 4238e5dcaf..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-busy.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-busy.png
deleted file mode 100644
index 4eb40222ad..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-extended-away.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-extended-away.png
deleted file mode 100644
index e69151ebc6..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-invisible.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-invisible.png
deleted file mode 100644
index 78625993d0..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-message-pending.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-message-pending.png
deleted file mode 100644
index ff9b3375cd..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-message-pending.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-new-im.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-new-im.png
deleted file mode 100644
index b936fa8405..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-new-im.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-offline.png b/pidgin/artwork/hicolor/24x24/status/pidgin-tray-offline.png
deleted file mode 100644
index ab2ca35cad..0000000000
--- a/pidgin/artwork/hicolor/24x24/status/pidgin-tray-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/actions/pidgin-select-avatar.png b/pidgin/artwork/hicolor/32x32/actions/pidgin-select-avatar.png
deleted file mode 100644
index 34cd661010..0000000000
--- a/pidgin/artwork/hicolor/32x32/actions/pidgin-select-avatar.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/apps/pidgin.png b/pidgin/artwork/hicolor/32x32/apps/pidgin.png
deleted file mode 100644
index cd19389562..0000000000
--- a/pidgin/artwork/hicolor/32x32/apps/pidgin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-available.png b/pidgin/artwork/hicolor/32x32/status/pidgin-available.png
deleted file mode 100644
index 3876133619..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-away.png b/pidgin/artwork/hicolor/32x32/status/pidgin-away.png
deleted file mode 100644
index e8979e220c..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-busy.png b/pidgin/artwork/hicolor/32x32/status/pidgin-busy.png
deleted file mode 100644
index 192fd59293..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-extended-away.png b/pidgin/artwork/hicolor/32x32/status/pidgin-extended-away.png
deleted file mode 100644
index 7f70ba168c..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-invisible.png b/pidgin/artwork/hicolor/32x32/status/pidgin-invisible.png
deleted file mode 100644
index 52a5dab8f2..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-offline.png b/pidgin/artwork/hicolor/32x32/status/pidgin-offline.png
deleted file mode 100644
index d86e0b5e53..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-available.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-available.png
deleted file mode 100644
index 77024b0e17..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-away.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-away.png
deleted file mode 100644
index fc83c2d813..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-busy.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-busy.png
deleted file mode 100644
index 15e3cb1910..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-extended-away.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-extended-away.png
deleted file mode 100644
index 70a43887eb..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-invisible.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-invisible.png
deleted file mode 100644
index 8de8030c67..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-message-pending.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-message-pending.png
deleted file mode 100644
index ab59ae4440..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-message-pending.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-new-im.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-new-im.png
deleted file mode 100644
index 36dbf27dec..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-new-im.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-offline.png b/pidgin/artwork/hicolor/32x32/status/pidgin-tray-offline.png
deleted file mode 100644
index 216c74e60f..0000000000
--- a/pidgin/artwork/hicolor/32x32/status/pidgin-tray-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-aim.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-aim.png
deleted file mode 100644
index fb3aabff9b..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-aim.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-bonjour.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-bonjour.png
deleted file mode 100644
index 197b33d56f..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-bonjour.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-facebook.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-facebook.png
deleted file mode 100644
index 475d1a1f85..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-facebook.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-gadu-gadu.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-gadu-gadu.png
deleted file mode 100644
index cc2660dc78..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-gadu-gadu.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-icq.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-icq.png
deleted file mode 100644
index 9e92ad9729..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-icq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-irc.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-irc.png
deleted file mode 100644
index 606425fabb..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-irc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-jabber.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-jabber.png
deleted file mode 100644
index 8116334ffe..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-jabber.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-meanwhile.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-meanwhile.png
deleted file mode 100644
index f747a56002..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-meanwhile.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-msn.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-msn.png
deleted file mode 100644
index 1b960dd327..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-msn.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-myspace.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-myspace.png
deleted file mode 100644
index d9740ef5ff..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-myspace.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-novell.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-novell.png
deleted file mode 100644
index 8b8778fb52..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-novell.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-qq.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-qq.png
deleted file mode 100644
index 41b8f123cf..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-qq.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-silc.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-silc.png
deleted file mode 100644
index e43d9c2cb7..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-silc.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-simple.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-simple.png
deleted file mode 100644
index 7e81d3e64a..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-simple.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-yahoo.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-yahoo.png
deleted file mode 100644
index f454f26d3c..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-yahoo.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin-zephyr.png b/pidgin/artwork/hicolor/48x48/apps/pidgin-zephyr.png
deleted file mode 100644
index 83bb3e20a5..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin-zephyr.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/apps/pidgin.png b/pidgin/artwork/hicolor/48x48/apps/pidgin.png
deleted file mode 100644
index 473c1af2f8..0000000000
--- a/pidgin/artwork/hicolor/48x48/apps/pidgin.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-available.png b/pidgin/artwork/hicolor/48x48/status/pidgin-available.png
deleted file mode 100644
index 3c68e64a27..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-away.png b/pidgin/artwork/hicolor/48x48/status/pidgin-away.png
deleted file mode 100644
index caea9c2966..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-busy.png b/pidgin/artwork/hicolor/48x48/status/pidgin-busy.png
deleted file mode 100644
index 4467c51b64..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-auth.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-auth.png
deleted file mode 100644
index b167522f3c..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-auth.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-cool.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-cool.png
deleted file mode 100644
index 99cc48f243..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-cool.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-dialog.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-dialog.png
deleted file mode 100644
index 1bfab11f69..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-dialog.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-error.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-error.png
deleted file mode 100644
index 2900c812d9..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-error.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-info.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-info.png
deleted file mode 100644
index 9fd363677d..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-info.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-mail.png b/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-mail.png
deleted file mode 100644
index 97657ae17b..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-dialog-mail.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-extended-away.png b/pidgin/artwork/hicolor/48x48/status/pidgin-extended-away.png
deleted file mode 100644
index b7b959cfa9..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-invisible.png b/pidgin/artwork/hicolor/48x48/status/pidgin-invisible.png
deleted file mode 100644
index 9607cd0244..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-offline.png b/pidgin/artwork/hicolor/48x48/status/pidgin-offline.png
deleted file mode 100644
index fbd1444b60..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-available.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-available.png
deleted file mode 100644
index dd3c568961..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-available.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-away.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-away.png
deleted file mode 100644
index 80b7be2c17..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-busy.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-busy.png
deleted file mode 100644
index 735ced09f5..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-busy.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-extended-away.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-extended-away.png
deleted file mode 100644
index 1a7b434321..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-extended-away.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-invisible.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-invisible.png
deleted file mode 100644
index 041b903d71..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-invisible.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-message-pending.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-message-pending.png
deleted file mode 100644
index 4fc7276109..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-message-pending.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-new-im.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-new-im.png
deleted file mode 100644
index 07b9c457b8..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-new-im.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-offline.png b/pidgin/artwork/hicolor/48x48/status/pidgin-tray-offline.png
deleted file mode 100644
index 3538c215ba..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/pidgin-tray-offline.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/question.png b/pidgin/artwork/hicolor/48x48/status/question.png
deleted file mode 100644
index 296b516e6a..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/question.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/48x48/status/warning.png b/pidgin/artwork/hicolor/48x48/status/warning.png
deleted file mode 100644
index 3b2dd66b1f..0000000000
--- a/pidgin/artwork/hicolor/48x48/status/warning.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/hicolor/scalable/apps/pidgin.svg b/pidgin/artwork/hicolor/scalable/apps/pidgin.svg
deleted file mode 100644
index ede1897348..0000000000
--- a/pidgin/artwork/hicolor/scalable/apps/pidgin.svg
+++ /dev/null
@@ -1,610 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48px"
- height="48px"
- id="svg4345"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docbase="/home/hbons/Desktop/2.0.2/pidgin/pixmaps/icons/48/scalable"
- sodipodi:docname="pidgin.svg"
- inkscape:export-filename="/home/hbons/Desktop/pidgin48.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <defs
- id="defs4347">
- <linearGradient
- id="linearGradient8744"
- inkscape:collect="always">
- <stop
- id="stop8746"
- offset="0"
- style="stop-color:#7a1d90;stop-opacity:1" />
- <stop
- id="stop8748"
- offset="1"
- style="stop-color:#6b3678;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8732">
- <stop
- style="stop-color:#6b3678;stop-opacity:1;"
- offset="0"
- id="stop8734" />
- <stop
- style="stop-color:#6b3678;stop-opacity:0;"
- offset="1"
- id="stop8736" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8904">
- <stop
- style="stop-color:#729fcf;stop-opacity:1;"
- offset="0"
- id="stop8906" />
- <stop
- style="stop-color:#25486d;stop-opacity:1"
- offset="1"
- id="stop8908" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8884">
- <stop
- style="stop-color:#9a5ba8;stop-opacity:1;"
- offset="0"
- id="stop8886" />
- <stop
- style="stop-color:#6b3e75;stop-opacity:1"
- offset="1"
- id="stop8888" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8876">
- <stop
- style="stop-color:#9a5ba8;stop-opacity:1;"
- offset="0"
- id="stop8878" />
- <stop
- style="stop-color:#744380;stop-opacity:1"
- offset="1"
- id="stop8880" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8868">
- <stop
- style="stop-color:#3b1941;stop-opacity:1;"
- offset="0"
- id="stop8870" />
- <stop
- style="stop-color:#a646b7;stop-opacity:1"
- offset="1"
- id="stop8872" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8860">
- <stop
- style="stop-color:#3b1941;stop-opacity:1;"
- offset="0"
- id="stop8862" />
- <stop
- style="stop-color:#a949b9;stop-opacity:1"
- offset="1"
- id="stop8864" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8848">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop8850" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop8852" />
- </linearGradient>
- <linearGradient
- id="linearGradient8820"
- inkscape:collect="always">
- <stop
- id="stop8822"
- offset="0"
- style="stop-color:#522400;stop-opacity:1" />
- <stop
- id="stop8824"
- offset="1"
- style="stop-color:#6e3100;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8808">
- <stop
- style="stop-color:#6e3100;stop-opacity:1;"
- offset="0"
- id="stop8810" />
- <stop
- style="stop-color:#6e3100;stop-opacity:0;"
- offset="1"
- id="stop8812" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8686">
- <stop
- style="stop-color:#fdb751;stop-opacity:1"
- offset="0"
- id="stop8688" />
- <stop
- style="stop-color:#ce5c00;stop-opacity:1"
- offset="1"
- id="stop8690" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2834">
- <stop
- style="stop-color:#7e408d;stop-opacity:1"
- offset="0"
- id="stop2836" />
- <stop
- style="stop-color:#82508e;stop-opacity:0;"
- offset="1"
- id="stop2838" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2826">
- <stop
- style="stop-color:#3b1941;stop-opacity:1;"
- offset="0"
- id="stop2828" />
- <stop
- style="stop-color:#3b1941;stop-opacity:0;"
- offset="1"
- id="stop2830" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2816">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop2818" />
- <stop
- style="stop-color:#eeeeec;stop-opacity:0;"
- offset="1"
- id="stop2820" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient6537">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop6539" />
- <stop
- style="stop-color:#d3e1f1;stop-opacity:1"
- offset="1"
- id="stop6541" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient6506">
- <stop
- style="stop-color:#ffffff;stop-opacity:0.95477384"
- offset="0"
- id="stop6508" />
- <stop
- style="stop-color:#eeeeec;stop-opacity:0;"
- offset="1"
- id="stop6510" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6506"
- id="linearGradient6512"
- x1="15.645709"
- y1="40.668503"
- x2="15.645709"
- y2="47.022106"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.988192,1.5624997,-2.39645)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2816"
- id="radialGradient2824"
- cx="14.930223"
- cy="25.801632"
- fx="14.930223"
- fy="25.801632"
- r="16.390338"
- gradientTransform="matrix(1.3364897,0,0,1.3894845,-0.759152,-10.711989)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2826"
- id="linearGradient2832"
- x1="13.191773"
- y1="41.606163"
- x2="13.191773"
- y2="49.067719"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2834"
- id="linearGradient2840"
- x1="11.373499"
- y1="43.444576"
- x2="11.373499"
- y2="47.757988"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8686"
- id="linearGradient8692"
- x1="18.5"
- y1="29.911009"
- x2="19.985121"
- y2="29.853554"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0769231,0,0,1.1428571,-0.905101,-4.6800586)" />
- <filter
- inkscape:collect="always"
- id="filter8730">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.27197245"
- id="feGaussianBlur8732" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter8792"
- x="-0.095301818"
- width="1.1906036"
- y="-0.27704017"
- height="1.5540803">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.31022727"
- id="feGaussianBlur8794" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8820"
- id="linearGradient8814"
- x1="18.339697"
- y1="29.338558"
- x2="18.031723"
- y2="30.431053"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8808"
- id="linearGradient8818"
- gradientUnits="userSpaceOnUse"
- x1="17.969458"
- y1="29.494703"
- x2="18.143806"
- y2="30.188351" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8848"
- id="linearGradient8854"
- x1="10.48653"
- y1="25.21174"
- x2="9.7512932"
- y2="23.675837"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8848"
- id="linearGradient8858"
- gradientUnits="userSpaceOnUse"
- x1="10.498732"
- y1="24.936121"
- x2="9.6415968"
- y2="23.675837" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8860"
- id="linearGradient8866"
- x1="13.061977"
- y1="10.027351"
- x2="16.545418"
- y2="12.891665"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.50247,0,0,1,-6.5946403,-2.139701)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8868"
- id="linearGradient8874"
- x1="12.409452"
- y1="10.602999"
- x2="16.140554"
- y2="13.895189"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.236264,0,0,0.549587,-5.4828863,3.775206)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8876"
- id="linearGradient8882"
- x1="10.46875"
- y1="25.3125"
- x2="9.53125"
- y2="19.6875"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8884"
- id="linearGradient8890"
- x1="23.881994"
- y1="24.343237"
- x2="24.973602"
- y2="19.216713"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8904"
- id="linearGradient8910"
- x1="26.125"
- y1="1.8037834"
- x2="41.875"
- y2="33.678783"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8744"
- id="linearGradient8738"
- x1="4.0852318"
- y1="39.097038"
- x2="4.0852318"
- y2="44.321774"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8732"
- id="linearGradient8742"
- gradientUnits="userSpaceOnUse"
- x1="4.0852318"
- y1="40.416641"
- x2="4.0852318"
- y2="43.352409"
- gradientTransform="matrix(-1,0,0,1,37.022732,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6537"
- id="linearGradient7977"
- gradientUnits="userSpaceOnUse"
- x1="30.5"
- y1="4.8871226"
- x2="30.5"
- y2="22.781603" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.828427"
- inkscape:cx="63.722923"
- inkscape:cy="33.120105"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- inkscape:window-width="1434"
- inkscape:window-height="840"
- inkscape:window-x="-2"
- inkscape:window-y="0"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:grid-points="true"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10">
- <inkscape:grid
- type="xygrid"
- id="grid7914"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata4350">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <path
- style="fill:#efefef;fill-opacity:1;stroke:url(#linearGradient8910);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 20.53125,1.5 C 17.192693,1.5 14.5,4.611235 14.5,8.46875 L 14.5,20.53125 C 14.5,24.388765 17.192693,27.5 20.53125,27.5 L 34.530203,27.5 C 34.530203,27.5 34.406442,30.680041 32.92887,32.534344 C 38.120414,32.534344 39.353553,27.485509 39.353553,27.485509 L 41.5,27.5 C 45.512737,27.5 46.5,24.38319 46.5,20.53125 L 46.5,8.46875 C 46.5,4.6112353 43.807307,1.5 40.46875,1.5 L 20.53125,1.5 z"
- id="rect5498"
- sodipodi:nodetypes="cccccccccccc" />
- <path
- style="fill:url(#linearGradient7977);fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 20.53125,2.5 C 17.815701,2.5 15.5,5.0778932 15.5,8.46875 L 15.5,20.53125 C 15.5,23.922107 17.815701,26.5 20.53125,26.5 L 34.53125,26.5 C 35.082875,26.501589 35.529661,26.948375 35.53125,27.5 C 35.53125,27.5 35.367799,30.212738 34.75,31.34218 C 36.852551,31.34218 38.53125,26.6875 38.53125,26.6875 C 38.704261,26.563588 38.912203,26.497922 39.125,26.5 L 41.5,26.5 C 43.246736,26.5 44.065452,25.932701 44.65625,24.9375 C 45.247048,23.942299 45.5,22.371547 45.5,20.53125 L 45.5,8.46875 C 45.5,5.0778935 43.184299,2.5 40.46875,2.5 L 20.53125,2.5 z"
- id="path6535"
- sodipodi:nodetypes="ccccccccccscccc" />
- <rect
- style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect8734"
- width="7"
- height="1.8602936"
- x="15.642976"
- y="26.409245"
- rx="0.81387848"
- ry="0.93014681" />
- <path
- style="fill:url(#linearGradient8866);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 10.968089,7.6821669 C 13.825874,5.8764931 18.683474,9.095739 19.201853,10.751964 L 15.25649,10.751964 C 15.19399,8.408214 10.968089,7.6821669 10.968089,7.6821669 z"
- id="rect5189"
- sodipodi:nodetypes="cccc" />
- <path
- style="fill:url(#linearGradient8874);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 8.9209727,9.9271812 C 10.543462,8.0699992 15.5336,9.5097671 15.5336,10.860297 L 11.743475,11.411821 C 12.958815,9.7987339 8.9209727,9.9271812 8.9209727,9.9271812 z"
- id="path5192"
- sodipodi:nodetypes="cccc" />
- <path
- style="opacity:1;fill:url(#linearGradient2840);fill-opacity:1;stroke:url(#linearGradient2832);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 16.447354,10.481822 C 9.8233516,10.481822 3.9308558,15.93012 4.5098537,22.712688 C 5.7768579,37.554787 1.9403503,35.543378 1.5,42.316391 C 1.5,44.375904 2.4854201,45.355587 4.5920502,45.355587 C 5.7795388,45.355587 30.807389,45.5 33.498388,45.5 C 35.612515,45.5 35.447354,43.46472 35.447354,43.46472 C 35.447354,40.830782 29.045256,38.620654 27.260807,36.687231 C 25.432389,34.709838 27.447354,27.653648 27.447354,27.653648 C 28.08866,26.141912 28.447354,24.466812 28.447354,22.712688 C 28.447354,15.894164 23.071356,10.481822 16.447354,10.481822 z"
- id="path5176"
- sodipodi:nodetypes="cscccszcsc" />
- <path
- style="opacity:0.55000000000000004;fill:url(#radialGradient2824);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-opacity:1"
- d="M 16.25,11.5 C 10.237704,11.5 5.0276636,16.611038 5.4999997,22.834065 C 6.0644244,30.27036 5.8175038,32.821583 4.0236672,37.541192 C 1.1437418,42.286379 3.1235207,44.533069 5.4658637,44.533069 C 7.4024447,44.533069 25.520621,44.503627 31.346594,44.503627 C 32.513801,44.503627 34.5,45.001748 34.5,43.554478 C 34.5,43.335354 34.300249,42.923343 33.75,42.411881 C 33.199751,41.90042 32.37676,41.351214 31.46875,40.806069 C 30.56074,40.260924 29.59071,39.709456 28.71875,39.169376 C 27.84679,38.629297 27.074154,38.125147 26.53125,37.409159 C 25.921245,36.604678 25.641306,35.658991 25.586842,34.629869 C 25.532378,33.600747 25.670221,32.49665 25.787061,31.449126 C 26.020741,29.354077 26.53125,27.527239 26.53125,27.527239 C 26.54624,27.4637 26.567163,27.401673 26.59375,27.341953 C 27.181231,25.957097 27.5,24.414481 27.5,22.802446 C 27.5,16.531779 22.272436,11.5 16.25,11.5 z"
- id="path5241"
- sodipodi:nodetypes="cscccssssssscssc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="1.0174263"
- inkscape:original="M 9.96875 19 C 8.022221 19 6.9374998 21.081214 6.9375 23 C 6.9375 25.208 8.5222219 27 10.46875 27 C 11.889191 27 14 25.489251 14 23.28125 C 14 21.536852 11.915281 19 9.96875 19 z "
- style="opacity:1;fill:url(#linearGradient8882);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- id="path8838"
- d="M 9.96875,17.96875 C 8.6328774,17.96875 7.5286409,18.753017 6.875,19.71875 C 6.2213591,20.684483 5.9062499,21.848884 5.90625,23 C 5.90625,25.694817 7.8977844,28.03125 10.46875,28.03125 C 11.539674,28.03125 12.596335,27.527372 13.46875,26.71875 C 14.341165,25.910128 15.03125,24.709464 15.03125,23.28125 C 15.03125,22.003744 14.362496,20.808851 13.46875,19.8125 C 12.575004,18.816149 11.384009,17.96875 9.96875,17.96875 z"
- transform="translate(1.09375,-0.96875)" />
- <path
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 15.09375,22.321339 C 15.09375,24.52934 12.987869,26.03125 11.567428,26.03125 C 9.6208995,26.03125 8.0411075,24.239249 8.0411075,22.031249 C 8.0411075,20.112462 9.1240375,18.03125 11.070566,18.03125 C 13.017097,18.03125 15.09375,20.576941 15.09375,22.321339 z"
- id="path5157"
- sodipodi:nodetypes="csssc" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#6b1a80;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5162"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(1.237779,0,0,1.544828,-1.0301916,-15.38768)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient8854);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5164"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(0.4028775,0,0,0.772414,7.4966298,3.2519345)" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="1.0250763"
- inkscape:original="M 24.71875 19 C 23.921039 19.030682 23.197708 19.355158 22.78125 19.8125 C 21.639847 21.065961 21.758036 23.254972 23.0625 24.6875 C 24.196099 25.932389 26.077347 26.565958 27.21875 25.3125 C 28.360153 24.05904 28.061824 21.069247 27.03125 19.9375 C 26.379019 19.221236 25.516461 18.969318 24.71875 19 z "
- style="opacity:1;fill:url(#linearGradient8890);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- id="path8846"
- d="M 24.6875,17.96875 C 23.636213,18.009185 22.683031,18.409233 22.03125,19.125 C 20.466122,20.843786 20.678782,23.580894 22.3125,25.375 C 23.011072,26.142154 23.917332,26.724837 24.9375,26.9375 C 25.957668,27.150163 27.151401,26.89759 27.96875,26 C 28.842555,25.04041 29.039766,23.753975 28.96875,22.53125 C 28.897734,21.308525 28.565932,20.111716 27.78125,19.25 C 26.906665,18.289553 25.728905,17.928695 24.6875,17.96875 z"
- transform="translate(1.0348213,-0.9657729)" />
- <path
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 28.07086,18.984912 C 26.766398,17.552385 24.644242,17.934034 23.811326,18.848719 C 22.669923,20.102179 22.802261,22.282108 24.106725,23.714636 C 25.240323,24.959524 27.104889,25.612445 28.246292,24.358987 C 29.387696,23.105527 29.101434,20.116659 28.07086,18.984912 z"
- id="path5169"
- sodipodi:nodetypes="csssc" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#6b1a80;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5171"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(1.208632,0,0,1.598777,13.243467,-16.766194)" />
- <path
- transform="matrix(0.9902622,0,0,1.0468412,0.6803699,-1.6322179)"
- style="fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter8730)"
- d="M 19.0625,25.21875 C 18.601377,25.21875 18.273569,25.504007 18.09375,25.71875 C 17.913931,25.933493 17.816385,26.151947 17.6875,26.375 C 17.42973,26.821106 17.161718,27.281061 16.8125,27.625 C 16.463282,27.968939 15.753081,28.431077 15.090677,28.457564 C 13.768981,28.152971 12.567412,27.574567 11.44337,27.388802 C 11.190855,27.626888 11.124903,28.002654 11.28125,28.3125 C 12.447615,30.480389 13.704893,31.652553 16.158709,32.98462 C 17.36658,33.640319 19.551532,34.28873 20.662703,34.736506 C 22.03071,33.835346 25.543472,30.338576 25.75,28.125 C 25.844084,27.808258 25.729503,27.466527 25.463497,27.270522 C 24.478872,27.816677 23.360045,28.165794 22.250307,28.426314 C 21.786763,28.408951 21.509989,27.99255 21.21875,27.65625 C 20.927511,27.31995 20.680079,26.828945 20.4375,26.375 C 20.31621,26.148027 20.208768,25.937142 20.03125,25.71875 C 19.853732,25.500358 19.525474,25.21875 19.0625,25.21875 z"
- id="path8696"
- sodipodi:nodetypes="cssscccsccccsssc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0.36336106"
- inkscape:original="M 15.8125 27 C 15.361611 27 15 27.422198 15 27.9375 C 15 28.452801 15.361612 28.874999 15.8125 28.875 L 21.1875 28.875 C 21.638389 28.875 22 28.452801 22 27.9375 C 22 27.422199 21.638389 27 21.1875 27 L 15.8125 27 z "
- style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter8792)"
- id="path8738"
- d="M 15.8125,26.625 C 15.134785,26.625 14.625,27.252207 14.625,27.9375 C 14.625,28.622793 15.134785,29.249998 15.8125,29.25 L 21.1875,29.25 C 21.865216,29.25 22.375,28.622793 22.375,27.9375 C 22.375,27.252207 21.865216,26.625 21.1875,26.625 L 15.8125,26.625 z"
- transform="translate(1.0492259,-0.5907729)" />
- <rect
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect5215"
- width="7"
- height="1.8602936"
- x="16.017977"
- y="26.173933"
- rx="0.81387848"
- ry="0.93014681" />
- <path
- style="fill:url(#linearGradient8692);fill-opacity:1;stroke:none;stroke-width:1.0283047;stroke-miterlimit:4;stroke-opacity:1"
- d="M 12.017976,27.284466 C 18.332186,30.947891 18.535242,25.034227 19.622035,25.034227 C 20.693875,25.034227 20.889384,30.946219 26.017976,27.230273 C 25.73271,30.311439 22.068246,33.065477 21.020058,34.065477 C 18.988153,32.971727 14.03875,31.7541 12.017976,27.284466 z"
- id="rect5187"
- sodipodi:nodetypes="czccc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.61111109;fill:url(#linearGradient8814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path8806"
- sodipodi:cx="18.097515"
- sodipodi:cy="29.72571"
- sodipodi:rx="0.28726214"
- sodipodi:ry="0.6408155"
- d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
- transform="matrix(-1.0945752,0.9356227,0.6067766,1.5209514,23.290203,-33.120817)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.61111109;fill:url(#linearGradient8818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path8816"
- sodipodi:cx="18.097515"
- sodipodi:cy="29.72571"
- sodipodi:rx="0.28726214"
- sodipodi:ry="0.6408155"
- d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
- transform="matrix(1.0945741,0.9356227,-0.606776,1.5209514,16.745752,-33.098342)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient8858);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path8856"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(0.4028775,0,0,0.772414,21.437701,3.254912)" />
- <path
- style="opacity:0.61111108999999997;fill:url(#linearGradient8738);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 3.375,44.9375 C 1.75,44.5625 1.125,41.0625 4.1875,35.75 C 5.3980639,40.757973 11,44.375 11,44.375 L 3.375,44.9375 z"
- id="rect7959"
- sodipodi:nodetypes="cccc" />
- <path
- style="opacity:0.61111108999999997;fill:url(#linearGradient8742);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 33.647731,44.9375 C 35.272732,44.5625 36.772732,42.5625 28.772731,38.5625 C 29.124668,42.695473 26.022731,44.375 26.022731,44.375 L 33.647731,44.9375 z"
- id="path8740"
- sodipodi:nodetypes="cccc" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-auth.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-auth.svg
deleted file mode 100644
index 1c3bd63e42..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-auth.svg
+++ /dev/null
@@ -1,850 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="auth.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/Projecten/Pidgin/pidgin-mtn/pidgin/pixmaps/dialogs/64/auth.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9188">
- <stop
- style="stop-color:#2e3436;stop-opacity:1;"
- offset="0"
- id="stop9190" />
- <stop
- style="stop-color:#6f726d;stop-opacity:1"
- offset="1"
- id="stop9192" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9166">
- <stop
- style="stop-color:#3b73bb;stop-opacity:1;"
- offset="0"
- id="stop9168" />
- <stop
- style="stop-color:#3b73bb;stop-opacity:0;"
- offset="1"
- id="stop9170" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9158">
- <stop
- style="stop-color:#729fcf;stop-opacity:1;"
- offset="0"
- id="stop9160" />
- <stop
- style="stop-color:#bcd2e9;stop-opacity:1"
- offset="1"
- id="stop9162" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9056">
- <stop
- style="stop-color:#729fcf;stop-opacity:1;"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#729fcf;stop-opacity:0;"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9040">
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="0"
- id="stop9042" />
- <stop
- style="stop-color:#3465a4;stop-opacity:1"
- offset="1"
- id="stop9044" />
- </linearGradient>
- <linearGradient
- id="linearGradient11669"
- inkscape:collect="always">
- <stop
- id="stop11671"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop11673"
- offset="1"
- style="stop-color:#2e3436;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11653">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop11655" />
- <stop
- style="stop-color:#2e3436;stop-opacity:1"
- offset="1"
- id="stop11657" />
- </linearGradient>
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="translate(10.999931,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999932,1.885788e-7)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11669"
- id="radialGradient11659"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,0.5000001,4.156251)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11653"
- id="radialGradient11667"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,15.5,4.156251)"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient8720"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient8722"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient8985"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient8993"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient8995"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient8997"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient9005"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-34.999933,2.0000002)"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient9018"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9659258,0.1156321,0.258819,0.431545,39.417822,14.519987)"
- x1="22.919643"
- y1="33.491837"
- x2="23.746914"
- y2="36.579254" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient9036"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5208182,0,0,0.3864192,-14.644203,17.599539)"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9040"
- id="linearGradient9046"
- x1="24"
- y1="37"
- x2="44.533825"
- y2="40.875"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1262515,0,0,1,-4.093162,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9056"
- id="linearGradient9062"
- x1="34.5"
- y1="61.35038"
- x2="34.5"
- y2="33.72963"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9158"
- id="linearGradient9164"
- x1="29"
- y1="35.649048"
- x2="29"
- y2="32.334484"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-1,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9166"
- id="linearGradient9172"
- x1="29.125"
- y1="36.5625"
- x2="25"
- y2="31.9375"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9188"
- id="linearGradient9194"
- x1="37.5"
- y1="42.295494"
- x2="37.5"
- y2="40.792892"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9166"
- id="linearGradient9246"
- gradientUnits="userSpaceOnUse"
- x1="29.78125"
- y1="37.09375"
- x2="23.984375"
- y2="30.40625" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="274.07651"
- inkscape:cy="97.498181"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.73423419999999995;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.48784169999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- style="opacity:0.37037036000000001;fill:url(#radialGradient9036);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
- d="M 10.826033,28.011426 C 10.520443,28.014045 10.234263,28.093756 10.050887,28.227332 C 9.8675105,28.360908 9.8075706,28.533318 9.8885335,28.694322 C 11.280177,31.722142 16.087826,34.020914 21.857283,34.020914 C 27.626736,34.020914 32.434391,31.722142 33.826033,28.694322 C 33.967019,28.436085 33.737888,28.160593 33.289106,28.048758 C 32.840324,27.936923 32.309315,28.02299 32.044783,28.25044 C 29.836827,29.981737 25.929281,31.047173 21.857283,31.047173 C 17.785285,31.047174 13.87774,29.981737 11.669783,28.25044 C 11.481718,28.097267 11.163547,28.007137 10.826033,28.011426 L 10.826033,28.011426 z"
- id="path11288"
- sodipodi:nodetypes="cscscscsccc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4873425,3.0804918)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499931,19.500002 C 21.499931,22.812 18.811935,25.5 15.499932,25.5 C 12.187931,25.5 9.4999315,22.812 9.4999315,19.500002 C 9.4999315,16.188 12.187931,13.5 15.499932,13.5 C 18.811935,13.5 21.499931,16.188 21.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 10.857282,29 C 12.147541,31.295706 16.56888,33.020914 21.857283,33.020914 C 27.145683,33.020914 31.567025,31.295706 32.857282,29 C 30.539039,30.486544 26.467508,31.996368 21.857283,31.996368 C 17.247058,31.99637 13.175526,30.486544 10.857282,29 z"
- style="fill:url(#linearGradient9018);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699998999999999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499932,19.5 C 20.499932,22.259999 18.259935,24.499999 15.499932,24.499999 C 12.739932,24.499999 10.499932,22.259999 10.499932,19.5 C 10.499932,16.739999 12.739932,14.499999 15.499932,14.499999 C 18.259935,14.499999 20.499932,16.739999 20.499932,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.4367989,0,0,1.5452869,-7.1539168,6.0838442)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5297812,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5297812,-9.9684476)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837946999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-10.968439)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-9.9684388)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.499931,19.5 C 23.499931,22.259999 25.739928,24.499999 28.499931,24.499999 C 31.259931,24.499999 33.499931,22.259999 33.499931,19.5 C 33.499931,16.739999 31.259931,14.499999 28.499931,14.499999 C 25.739928,14.499999 23.499931,16.739999 23.499931,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.436799,0,0,1.5452869,3.846082,6.0838439)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,2.3076208,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,13.30762,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 34.499931,19.500002 C 34.499931,22.812 31.811935,25.5 28.499932,25.5 C 25.187931,25.5 22.499931,22.812 22.499931,19.500002 C 22.499931,16.188 25.187931,13.5 28.499932,13.5 C 31.811935,13.5 34.499931,16.188 34.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- style="opacity:0.80000000000000004;fill:url(#radialGradient11659);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 22.1875,18.537724 C 22.1875,22.656901 18.64,26.000001 14.5,26.000001 C 10.36,26.000001 7,22.656901 7,18.537724 C 7,14.418548 10.36,14.000001 14.5,14.000001 C 18.64,14.000001 22.53125,14.293548 22.1875,18.537724 z"
- id="path11647"
- sodipodi:nodetypes="csssc" />
- <rect
- style="opacity:1;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect11649"
- width="5.1303458"
- height="1.0018942"
- x="6.2930641"
- y="14.833013"
- rx="0.51303452"
- ry="0.50094712"
- transform="matrix(0.9676638,0.2522433,-0.265541,0.9640996,0,0)" />
- <rect
- style="opacity:1;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect11651"
- width="5.1303449"
- height="1.0018942"
- x="31.000992"
- y="25.932768"
- rx="0.51303446"
- ry="0.50094712"
- transform="matrix(0.9676638,-0.2522433,0.265541,0.9640996,0,0)" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#2e3436;stroke-width:0.99999994000000003;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 14.5,13.5 C 10.084001,13.5 6.5,13.946414 6.5,18.408854 C 6.5,22.871297 10.084001,26.500001 14.5,26.5 C 17.950001,26.5 20.877881,24.27985 22,21.184896 C 23.122119,24.27985 26.049999,26.500001 29.5,26.5 C 33.916001,26.5 37.499998,22.871296 37.5,18.408854 C 37.5,13.946415 33.916,13.5 29.5,13.5 C 26.05,13.5 23.122119,13.790128 22,16.039063 C 20.877881,13.790128 17.950001,13.5 14.5,13.5 z"
- id="path11661" />
- <path
- style="opacity:0.80000000000000004;fill:url(#radialGradient11667);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 37,18.537724 C 37,22.656901 33.64,26.000001 29.5,26.000001 C 25.36,26.000001 21.849813,22.809207 21.78125,18.600224 C 21.711014,14.288526 25.36,14.000001 29.5,14.000001 C 33.64,14.000001 37,14.418548 37,18.537724 z"
- id="path11663"
- sodipodi:nodetypes="csssc" />
- <path
- transform="matrix(0.651488,0,0,0.651488,28.30843,24.844692)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8714"
- style="opacity:1;fill:#e0a900;fill-opacity:1;stroke:url(#linearGradient8720);stroke-width:1.53875648999999992;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.5012403,0,0,0.5012402,30.082278,26.494867)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8716"
- style="opacity:1;fill:url(#radialGradient8722);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.5513643,0,0,-0.5513643,29.490506,38.055647)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8718"
- style="opacity:0.48699998999999999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.81368314999999991;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <rect
- style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient9046);stroke-width:0.99999994000000003;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect9038"
- width="21.999998"
- height="15"
- x="23.499998"
- y="29.5"
- rx="1.331211"
- ry="1.2101918" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="-1.0060635"
- inkscape:original="M 25.71875 29.5 C 25.048304 29.5 24.5 30.048304 24.5 30.71875 L 24.5 43.28125 C 24.5 43.951696 25.048304 44.5 25.71875 44.5 L 43.28125 44.5 C 43.951696 44.5 44.5 43.951698 44.5 43.28125 L 44.5 30.71875 C 44.5 30.048304 43.951698 29.5 43.28125 29.5 L 25.71875 29.5 z "
- style="opacity:1;fill:url(#linearGradient9062);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.94868326000000003;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path9052"
- d="M 25.71875,30.5 C 25.596823,30.5 25.5,30.596823 25.5,30.71875 L 25.5,43.28125 C 25.5,43.403177 25.596823,43.5 25.71875,43.5 L 43.28125,43.5 C 43.403179,43.5 43.5,43.403181 43.5,43.28125 L 43.5,30.71875 C 43.5,30.596821 43.403181,30.5 43.28125,30.5 L 25.71875,30.5 z"
- transform="matrix(1.1111112,0,0,1,-3.833336,0)" />
- <rect
- style="opacity:1;fill:url(#linearGradient9164);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient9246);stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect9064"
- width="5"
- height="6"
- x="25.5"
- y="31.5"
- rx="0.53033006"
- ry="0.53033006" />
- <path
- style="fill:#3465a4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 28 34 C 27.448 34 27 34.447999 27 35 C 27 35.552 27.448001 35.999999 28 36 C 28.552 36 29 35.551999 29 35 C 29 34.448 28.552001 33.999999 28 34 z M 28 36 C 27.448 36 27 36.448 27 37 C 27 37 29 37 29 37 C 29 36.448 28.552001 36 28 36 z "
- id="path9242" />
- <path
- style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:semi-condensed;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold Semi-Condensed"
- d="M 33.000002,33.459106 L 33.308145,33.459106 L 33.308145,33.96439 L 33.761924,33.96439 L 33.761924,33.459106 L 34.069179,33.459106 L 34.069179,34.784921 L 33.761924,34.784921 L 33.761924,34.222804 L 33.308145,34.222804 L 33.308145,34.784921 L 33.000002,34.784921 L 33.000002,33.459106 M 34.237014,33.790338 L 34.523845,33.790338 L 34.764499,34.465233 L 34.968743,33.790338 L 35.254686,33.790338 L 34.878165,34.879051 C 34.840276,34.989757 34.796171,35.067015 34.74585,35.110824 C 34.695529,35.155225 34.629223,35.177425 34.546934,35.177426 L 34.380874,35.177426 L 34.380874,34.968741 L 34.470564,34.968741 C 34.519109,34.968741 34.554333,34.960157 34.576238,34.942988 C 34.598734,34.92582 34.616199,34.895035 34.628631,34.850634 L 34.636624,34.823106 L 34.237014,33.790338 M 35.420746,33.403161 L 35.706688,33.403161 L 35.706688,34.784921 L 35.420746,34.784921 L 35.420746,33.403161 M 35.985527,33.403161 L 36.271469,33.403161 L 36.271469,34.155314 L 36.600925,33.790338 L 36.933045,33.790338 L 36.496139,34.24678 L 36.967677,34.784921 L 36.620461,34.784921 L 36.271469,34.370215 L 36.271469,34.784921 L 35.985527,34.784921 L 35.985527,33.403161 M 37.919635,34.284965 L 37.919635,34.375543 L 37.250956,34.375543 C 37.257468,34.450137 37.281444,34.506083 37.322886,34.543379 C 37.364918,34.580676 37.423231,34.599325 37.497826,34.599324 C 37.55821,34.599325 37.61978,34.589556 37.682534,34.57002 C 37.745878,34.549891 37.810704,34.519699 37.87701,34.479442 L 37.87701,34.724535 C 37.80952,34.752952 37.741734,34.774265 37.673654,34.788473 C 37.606163,34.803273 37.538674,34.810673 37.471185,34.810673 C 37.308973,34.810673 37.182874,34.765088 37.092888,34.673918 C 37.003494,34.582156 36.958797,34.453689 36.958797,34.288517 C 36.958797,34.126306 37.002902,33.998727 37.091112,33.90578 C 37.179322,33.812835 37.300685,33.766362 37.455201,33.766361 C 37.596099,33.766362 37.708582,33.813427 37.792648,33.907556 C 37.877305,34.001687 37.919634,34.12749 37.919635,34.284965 M 37.625701,34.179291 C 37.6257,34.118906 37.609715,34.070361 37.577747,34.033655 C 37.54637,33.996359 37.504929,33.977711 37.453425,33.97771 C 37.398367,33.977711 37.353374,33.995175 37.318445,34.030103 C 37.284108,34.064441 37.2625,34.11417 37.25362,34.179291 L 37.625701,34.179291 M 39.193057,33.972382 C 39.241601,33.972383 39.278306,33.960542 39.303171,33.936861 C 39.328627,33.913182 39.341355,33.878253 39.341356,33.832075 C 39.341355,33.786491 39.328627,33.751858 39.303171,33.728176 C 39.278306,33.703905 39.241601,33.691769 39.193057,33.691767 L 39.023445,33.691767 L 39.023445,33.972382 L 39.193057,33.972382 M 39.203713,34.552259 C 39.265874,34.55226 39.312347,34.537755 39.343132,34.508746 C 39.374508,34.479738 39.390196,34.435929 39.390197,34.377319 C 39.390196,34.319894 39.374508,34.276974 39.343132,34.248556 C 39.312347,34.219548 39.265874,34.205044 39.203713,34.205043 L 39.023445,34.205043 L 39.023445,34.552259 L 39.203713,34.552259 M 39.489655,34.075392 C 39.55596,34.096706 39.607169,34.136074 39.643283,34.193499 C 39.679395,34.250925 39.697451,34.321374 39.697452,34.404848 C 39.697451,34.532723 39.658378,34.628037 39.580234,34.69079 C 39.502679,34.753544 39.384572,34.784921 39.225913,34.784921 L 38.715302,34.784921 L 38.715302,33.459106 L 39.177072,33.459106 C 39.342835,33.459107 39.462718,33.486932 39.536721,33.54258 C 39.611313,33.598231 39.64861,33.687329 39.648611,33.809874 C 39.64861,33.874405 39.634994,33.929462 39.607762,33.975046 C 39.581121,34.02004 39.541752,34.053489 39.489655,34.075392 M 40.375012,33.993694 C 40.311666,33.993695 40.263417,34.019152 40.230265,34.070064 C 40.197111,34.120386 40.180535,34.193204 40.180535,34.288517 C 40.180535,34.383832 40.197111,34.456946 40.230265,34.507858 C 40.263417,34.55818 40.311666,34.58334 40.375012,34.58334 C 40.437765,34.58334 40.485422,34.55818 40.517983,34.507858 C 40.551135,34.456946 40.567712,34.383832 40.567712,34.288517 C 40.567712,34.193204 40.551135,34.120386 40.517983,34.070064 C 40.485422,34.019152 40.437765,33.993695 40.375012,33.993694 M 40.375012,33.766361 C 40.529527,33.766362 40.650001,33.812539 40.736436,33.904892 C 40.822869,33.997247 40.866086,34.125122 40.866087,34.288517 C 40.866086,34.451913 40.822869,34.579788 40.736436,34.672142 C 40.650001,34.764496 40.529527,34.810673 40.375012,34.810673 C 40.221088,34.810673 40.100317,34.764496 40.0127,34.672142 C 39.925673,34.579788 39.88216,34.451913 39.882161,34.288517 C 39.88216,34.125122 39.925673,33.997247 40.0127,33.904892 C 40.100317,33.812539 40.221088,33.766362 40.375012,33.766361 M 41.975225,34.179291 L 41.975225,34.784921 L 41.687506,34.784921 L 41.687506,34.68635 L 41.687506,34.321374 C 41.687505,34.235533 41.685729,34.176331 41.682178,34.14377 C 41.678625,34.11121 41.672705,34.087233 41.664418,34.07184 C 41.653169,34.051121 41.637776,34.035136 41.618241,34.023887 C 41.599295,34.012048 41.577687,34.006127 41.553415,34.006127 C 41.493621,34.006127 41.446556,34.03188 41.41222,34.083385 C 41.378475,34.134298 41.361602,34.205044 41.361603,34.295621 L 41.361603,34.784921 L 41.07566,34.784921 L 41.07566,33.790338 L 41.361603,33.790338 L 41.361603,33.935973 C 41.404819,33.877957 41.4507,33.835332 41.499246,33.808098 C 41.54779,33.780274 41.601367,33.766362 41.659977,33.766361 C 41.762987,33.766362 41.841133,33.801587 41.894415,33.872036 C 41.948287,33.942486 41.975224,34.044904 41.975225,34.179291 M 42.939615,33.821418 L 42.939615,34.06296 C 42.878637,34.034544 42.819435,34.013232 42.762011,33.999023 C 42.705177,33.984815 42.6516,33.977711 42.601279,33.97771 C 42.546813,33.977711 42.506261,33.985407 42.47962,34.000799 C 42.453571,34.0156 42.440547,34.038688 42.440547,34.070064 C 42.440547,34.095521 42.450315,34.115058 42.469852,34.128674 C 42.48998,34.142291 42.526093,34.152355 42.578191,34.158866 L 42.62792,34.166858 C 42.774739,34.18758 42.873309,34.22162 42.923631,34.268981 C 42.974543,34.316342 42.999999,34.39064 43,34.491874 C 42.999999,34.597845 42.964775,34.67747 42.894326,34.730751 C 42.823876,34.784033 42.718793,34.810673 42.579079,34.810673 C 42.519877,34.810673 42.458603,34.805345 42.395258,34.794689 C 42.332505,34.784625 42.267975,34.769232 42.20167,34.748512 L 42.20167,34.50697 C 42.258503,34.537755 42.316816,34.560844 42.37661,34.576236 C 42.436995,34.591628 42.497972,34.599325 42.559542,34.599324 C 42.615191,34.599325 42.657224,34.59074 42.685641,34.573572 C 42.714057,34.556404 42.728265,34.530947 42.728266,34.497202 C 42.728265,34.468786 42.718497,34.447769 42.698961,34.434153 C 42.679424,34.419945 42.640648,34.408992 42.582631,34.401296 L 42.532014,34.394192 C 42.40473,34.376432 42.315336,34.343575 42.263831,34.295621 C 42.212918,34.247669 42.187462,34.174851 42.187462,34.077168 C 42.187462,33.971791 42.220022,33.893645 42.285144,33.842731 C 42.350265,33.791819 42.450019,33.766362 42.584407,33.766361 C 42.637095,33.766362 42.692449,33.770802 42.750467,33.779681 C 42.808483,33.788563 42.871533,33.802475 42.939615,33.821418"
- id="flowRoot9140" />
- <path
- style="opacity:1;fill:url(#linearGradient9194);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 31 40 L 31 43 L 32 43 L 32 40 L 31 40 z M 33 40 L 33 43 L 35 43 L 35 40 L 33 40 z M 36 40 L 36 43 L 36.9375 43 L 36.9375 40 L 36 40 z M 38 40 L 38 43 L 40 43 L 40 40 L 38 40 z M 41.28125 40 C 41.168464 40 41.0625 40.105962 41.0625 40.21875 L 41.0625 42.78125 C 41.0625 42.894036 41.168462 43 41.28125 43 L 41.78125 43 C 41.894036 43 42 42.894038 42 42.78125 L 42 40.21875 C 42 40.105964 41.894038 40 41.78125 40 L 41.28125 40 z M 43.0625 40 L 43.0625 43 L 44 43 L 44 40 L 43.0625 40 z "
- id="rect9175" />
- <path
- style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:semi-condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold Semi-Condensed"
- d="M 33,35.766614 L 33.543122,35.766614 C 33.704956,35.766616 33.829008,35.806602 33.915279,35.886573 C 34.001548,35.965918 34.044683,36.079265 34.044684,36.226615 C 34.044683,36.374597 34.001548,36.488574 33.915279,36.568546 C 33.829008,36.64789 33.704956,36.687561 33.543122,36.687561 L 33.327762,36.687561 L 33.327762,37.176843 L 33,37.176843 L 33,35.766614 M 33.327762,36.030147 L 33.327762,36.424028 L 33.508174,36.424028 C 33.571773,36.424029 33.62089,36.407027 33.655525,36.373022 C 33.690158,36.338389 33.707475,36.289587 33.707476,36.226615 C 33.707475,36.163646 33.690158,36.115158 33.655525,36.081153 C 33.62089,36.04715 33.571773,36.030148 33.508174,36.030147 L 33.327762,36.030147 M 34.260044,36.118936 L 34.564192,36.118936 L 34.564192,37.176843 L 34.260044,37.176843 L 34.260044,36.118936 M 34.260044,35.707107 L 34.564192,35.707107 L 34.564192,35.982918 L 34.260044,35.982918 L 34.260044,35.707107 M 35.508753,36.273843 L 35.508753,35.707107 L 35.814791,35.707107 L 35.814791,37.176843 L 35.508753,37.176843 L 35.508753,37.023824 C 35.466561,37.086166 35.420278,37.131819 35.369903,37.160786 C 35.319525,37.189752 35.260962,37.204235 35.194214,37.204235 C 35.077088,37.204235 34.980743,37.152599 34.905178,37.049327 C 34.830243,36.945426 34.792776,36.811928 34.792776,36.648834 C 34.792776,36.48574 34.830243,36.352558 34.905178,36.249285 C 34.980743,36.145384 35.077088,36.093433 35.194214,36.093432 C 35.260333,36.093433 35.318581,36.108231 35.368958,36.137827 C 35.419963,36.166794 35.466561,36.212133 35.508753,36.273843 M 35.307561,36.95865 C 35.37305,36.95865 35.422797,36.932202 35.456802,36.879307 C 35.491435,36.826412 35.508752,36.749587 35.508753,36.648834 C 35.508752,36.548081 35.491435,36.471257 35.456802,36.418361 C 35.422797,36.365467 35.37305,36.339019 35.307561,36.339018 C 35.243331,36.339019 35.193899,36.365467 35.159265,36.418361 C 35.125261,36.471257 35.108259,36.548081 35.108259,36.648834 C 35.108259,36.749587 35.125261,36.826412 35.159265,36.879307 C 35.193899,36.932202 35.243331,36.95865 35.307561,36.95865 M 36.759351,36.997376 C 36.71716,37.059088 36.670876,37.104427 36.6205,37.133394 C 36.570123,37.16236 36.511561,37.176843 36.444812,37.176843 C 36.328946,37.176843 36.232915,37.126152 36.156721,37.024769 C 36.081156,36.922757 36.043374,36.793037 36.043374,36.63561 C 36.043374,36.477554 36.081156,36.348149 36.156721,36.247396 C 36.232915,36.146014 36.328946,36.095322 36.444812,36.095322 C 36.511561,36.095322 36.570123,36.109806 36.6205,36.138771 C 36.670876,36.167739 36.71716,36.213392 36.759351,36.275732 L 36.759351,36.118936 L 37.065388,36.118936 L 37.065388,37.070108 C 37.065387,37.240129 37.0169,37.369848 36.919926,37.459267 C 36.82358,37.549315 36.68347,37.594339 36.499597,37.594339 C 36.440404,37.594339 36.382786,37.589301 36.326742,37.579226 C 36.271327,37.56915 36.215599,37.553722 36.159555,37.532943 L 36.159555,37.26941 C 36.21308,37.303414 36.265345,37.328602 36.316352,37.344975 C 36.367358,37.361977 36.418679,37.370478 36.470315,37.370478 C 36.569809,37.370478 36.642854,37.346234 36.689453,37.297747 C 36.736051,37.24926 36.75935,37.17338 36.759351,37.070108 L 36.759351,36.997376 M 36.55816,36.339018 C 36.495188,36.339019 36.446071,36.364837 36.410808,36.416472 C 36.376174,36.468108 36.358857,36.541155 36.358857,36.63561 C 36.358857,36.732585 36.375859,36.806261 36.409864,36.856637 C 36.443867,36.906384 36.493299,36.931257 36.55816,36.931257 C 36.621759,36.931257 36.671191,36.90544 36.706456,36.853803 C 36.741718,36.802168 36.75935,36.729437 36.759351,36.63561 C 36.75935,36.541155 36.741718,36.468108 36.706456,36.416472 C 36.671191,36.364837 36.621759,36.339019 36.55816,36.339018 M 37.36198,36.118936 L 37.666129,36.118936 L 37.666129,37.176843 L 37.36198,37.176843 L 37.36198,36.118936 M 37.36198,35.707107 L 37.666129,35.707107 L 37.666129,35.982918 L 37.36198,35.982918 L 37.36198,35.707107 M 38.919561,36.532653 L 38.919561,37.176843 L 38.613523,37.176843 L 38.613523,37.071997 L 38.613523,36.683783 C 38.613522,36.592476 38.611633,36.529505 38.607856,36.494871 C 38.604077,36.460237 38.597779,36.434734 38.588965,36.418361 C 38.577,36.396322 38.560627,36.37932 38.539847,36.367355 C 38.519696,36.354762 38.496712,36.348464 38.470894,36.348464 C 38.407293,36.348464 38.357232,36.375857 38.320709,36.43064 C 38.284816,36.484796 38.266869,36.560046 38.266869,36.65639 L 38.266869,37.176843 L 37.962721,37.176843 L 37.962721,36.118936 L 38.266869,36.118936 L 38.266869,36.273843 C 38.312838,36.212133 38.36164,36.166794 38.413276,36.137827 C 38.464912,36.108231 38.5219,36.093433 38.584242,36.093432 C 38.69381,36.093433 38.776931,36.130901 38.833606,36.205835 C 38.890908,36.280771 38.91956,36.38971 38.919561,36.532653"
- id="flowRoot9198" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-cool.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-cool.svg
deleted file mode 100644
index f2241c1ec0..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-cool.svg
+++ /dev/null
@@ -1,704 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="cool.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/cool.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective105" />
- <linearGradient
- id="linearGradient11669"
- inkscape:collect="always">
- <stop
- id="stop11671"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop11673"
- offset="1"
- style="stop-color:#3465a4;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11653">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop11655" />
- <stop
- style="stop-color:#3465a4;stop-opacity:1"
- offset="1"
- id="stop11657" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11586">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11588" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11590" />
- </linearGradient>
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11418">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11420" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11422" />
- </linearGradient>
- <linearGradient
- id="linearGradient11346"
- inkscape:collect="always">
- <stop
- id="stop11348"
- offset="0"
- style="stop-color:#ef7700;stop-opacity:1" />
- <stop
- id="stop11350"
- offset="1"
- style="stop-color:#fea523;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11346"
- id="linearGradient10424"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.0000002,0,0,2.0000001,48.499999,-0.4999991)"
- x1="8.9999981"
- y1="10.5625"
- x2="8.9999981"
- y2="12.4375" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient11214"
- x1="22.919643"
- y1="33.491837"
- x2="23.746914"
- y2="36.579254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9659258,0.258819,0.258819,0.9659258,39.560471,-4.4105697)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient11298"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846"
- gradientTransform="matrix(1.5208182,0,0,0.7073167,-12.501486,7.9416791)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="translate(10.999931,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11418"
- id="linearGradient11424"
- x1="22.915459"
- y1="34.796875"
- x2="22.854631"
- y2="29.835938"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter11462"
- x="-0.078992675"
- width="1.1579853"
- y="-0.19133781"
- height="1.3826756">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.448448"
- id="feGaussianBlur11464" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999932,1.885788e-7)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <filter
- id="filter3405"
- height="2.5649745"
- y="-0.78248727"
- width="1.5575919"
- x="-0.27879593"
- inkscape:collect="always">
- <feGaussianBlur
- id="feGaussianBlur3407"
- stdDeviation="1.5438116"
- inkscape:collect="always" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11586"
- id="linearGradient11592"
- x1="39.704506"
- y1="13.248698"
- x2="54.781696"
- y2="18.949747"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11669"
- id="radialGradient11659"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,0.5000001,4.156251)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11653"
- id="radialGradient11667"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,15.5,4.156251)"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="8"
- inkscape:cx="34.093743"
- inkscape:cy="29.192709"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.4878417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4873425,3.0804918)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499931,19.500002 C 21.499931,22.812 18.811935,25.5 15.499932,25.5 C 12.187931,25.5 9.4999315,22.812 9.4999315,19.500002 C 9.4999315,16.188 12.187931,13.5 15.499932,13.5 C 18.811935,13.5 21.499931,16.188 21.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499932,19.5 C 20.499932,22.259999 18.259935,24.499999 15.499932,24.499999 C 12.739932,24.499999 10.499932,22.259999 10.499932,19.5 C 10.499932,16.739999 12.739932,14.499999 15.499932,14.499999 C 18.259935,14.499999 20.499932,16.739999 20.499932,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.4367989,0,0,1.5452869,-7.1539168,6.0838442)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0.98821175"
- inkscape:original="M 13 28 C 14.290259 33.138472 18.711597 37 24 37 C 29.288399 37 33.709743 33.138472 35 28 C 32.681757 31.327326 28.610225 35.09375 24 35.09375 C 19.389774 35.093751 15.318244 31.327326 13 28 z "
- style="opacity:0.37037036;fill:url(#radialGradient11298);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- id="path11288"
- d="M 12.96875,27 C 12.66316,27.004794 12.37698,27.150701 12.193604,27.395203 C 12.010227,27.639705 11.950287,27.955291 12.03125,28.25 C 13.422894,33.792238 18.230543,38 24,38 C 29.769453,38 34.577108,33.792239 35.96875,28.25 C 36.109736,27.777313 35.880605,27.273042 35.431823,27.068334 C 34.983041,26.863627 34.452032,27.021167 34.1875,27.4375 C 31.979544,30.606533 28.071998,34.09375 24,34.09375 C 19.928002,34.093751 16.020457,30.606534 13.8125,27.4375 C 13.624435,27.157127 13.306264,26.992149 12.96875,27 L 12.96875,27 z"
- transform="matrix(0.9659258,-0.264782,0.258819,0.9881799,-6.825115,7.6473507)" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 13,31.694019 C 15.576229,36.323459 20.846351,38.909081 25.954556,37.540342 C 31.062759,36.171603 34.33401,31.297326 34.250368,26 C 32.872293,29.813956 29.916568,34.514228 25.463432,35.707442 C 21.010298,36.900659 16.100427,34.307964 13,31.694019 z"
- style="opacity:1;fill:url(#linearGradient11214);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5297812,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5297812,-9.9684476)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837947;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-12.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-11.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.499931,19.5 C 23.499931,22.259999 25.739928,24.499999 28.499931,24.499999 C 31.259931,24.499999 33.499931,22.259999 33.499931,19.5 C 33.499931,16.739999 31.259931,14.499999 28.499931,14.499999 C 25.739928,14.499999 23.499931,16.739999 23.499931,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.436799,0,0,1.5452869,3.846082,6.0838439)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,2.3076208,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,13.30762,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 34.499931,19.500002 C 34.499931,22.812 31.811935,25.5 28.499932,25.5 C 25.187931,25.5 22.499931,22.812 22.499931,19.500002 C 22.499931,16.188 25.187931,13.5 28.499932,13.5 C 31.811935,13.5 34.499931,16.188 34.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient11424);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter11462);enable-background:accumulate"
- id="path11416"
- sodipodi:cx="23.25"
- sodipodi:cy="30.1875"
- sodipodi:rx="6.8125"
- sodipodi:ry="2.8125"
- d="M 30.0625,30.1875 A 6.8125,2.8125 0 1 1 16.4375,30.1875 A 6.8125,2.8125 0 1 1 30.0625,30.1875 z"
- transform="matrix(0.9925109,-0.2659425,0.4601228,1.7172017,-13.102978,-15.495569)" />
- <path
- style="opacity:0.59722218;fill:url(#radialGradient11659);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 22,18.537724 C 22,22.656901 18.64,26.000001 14.5,26.000001 C 10.36,26.000001 7,22.656901 7,18.537724 C 7,14.418548 10.36,14.000001 14.5,14.000001 C 18.64,14.000001 22,14.418548 22,18.537724 z"
- id="path11647"
- sodipodi:nodetypes="csssc" />
- <rect
- style="opacity:1;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect11649"
- width="5.1303458"
- height="1.0018942"
- x="6.2930641"
- y="14.833013"
- rx="0.51303452"
- ry="0.50094712"
- transform="matrix(0.9676638,0.2522433,-0.265541,0.9640996,0,0)" />
- <rect
- style="opacity:1;fill:#204a87;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect11651"
- width="5.1303449"
- height="1.0018942"
- x="31.000992"
- y="25.932768"
- rx="0.51303446"
- ry="0.50094712"
- transform="matrix(0.9676638,-0.2522433,0.265541,0.9640996,0,0)" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:0.99999994;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 14.5,13.5 C 10.084001,13.5 6.5,13.946414 6.5,18.408854 C 6.5,22.871297 10.084001,26.500001 14.5,26.5 C 17.950001,26.5 20.877881,24.27985 22,21.184896 C 23.122119,24.27985 26.049999,26.500001 29.5,26.5 C 33.916001,26.5 37.499998,22.871296 37.5,18.408854 C 37.5,13.946415 33.916,13.5 29.5,13.5 C 26.05,13.5 23.122119,13.790128 22,16.039063 C 20.877881,13.790128 17.950001,13.5 14.5,13.5 z"
- id="path11661" />
- <path
- style="opacity:0.59722218;fill:url(#radialGradient11667);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 37,18.537724 C 37,22.656901 33.64,26.000001 29.5,26.000001 C 25.36,26.000001 22,22.656901 22,18.537724 C 22,14.418548 25.36,14.000001 29.5,14.000001 C 33.64,14.000001 37,14.418548 37,18.537724 z"
- id="path11663"
- sodipodi:nodetypes="csssc" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-dialog.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-dialog.svg
deleted file mode 100644
index b0b9fcb7ea..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-dialog.svg
+++ /dev/null
@@ -1,609 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="dialog.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/dialog.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective89" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9283">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop9285" />
- <stop
- style="stop-color:#c9daee;stop-opacity:1"
- offset="1"
- id="stop9287" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11418">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11420" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11422" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient11214"
- x1="22.919643"
- y1="33.491837"
- x2="22.919643"
- y2="36.402832"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.8636363,0,0,0.7777776,39.227274,9.2222251)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient11298"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846"
- gradientTransform="matrix(1.5208182,0,0,0.7073167,-12.501486,7.9416791)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9166666,0,0,0.9166666,-3.0416663,6.1250012)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="matrix(0.9166667,0,0,0.9166666,7.9583347,6.1250012)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11418"
- id="linearGradient11424"
- x1="22.915459"
- y1="34.796875"
- x2="22.854631"
- y2="29.835938"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter11462"
- x="-0.078992675"
- width="1.1579853"
- y="-0.19133781"
- height="1.3826756">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.448448"
- id="feGaussianBlur11464" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9,0,0,0.9,-2.7500001,6.450001)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9,0,0,0.9,39.749999,6.450001)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient7925"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient7927"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <linearGradient
- id="linearGradient8904"
- inkscape:collect="always">
- <stop
- id="stop8906"
- offset="0"
- style="stop-color:#729fcf;stop-opacity:1;" />
- <stop
- id="stop8908"
- offset="1"
- style="stop-color:#25486d;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9283"
- id="linearGradient8508"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6666666,0,0,0.6587574,15.166665,0.8540557)"
- x1="30.5"
- y1="1.7319652"
- x2="30.5"
- y2="22.781603" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8904"
- id="linearGradient8511"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6875001,0,0,0.6767003,14.531249,0.4849495)"
- x1="29.466667"
- y1="6.8962817"
- x2="42.829762"
- y2="37.801281" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.313708"
- inkscape:cx="42.212021"
- inkscape:cy="27.33968"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fill="#fce94f"
- inkscape:window-width="1430"
- inkscape:window-height="837"
- inkscape:window-x="2"
- inkscape:window-y="7"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- style="fill:#efefef;fill-opacity:1;stroke:url(#linearGradient8511);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 28.646485,1.5 C 26.351226,1.5 24.499999,3.6053736 24.499999,6.2157551 L 24.499999,14.378452 C 24.499999,16.988834 26.351226,19.471324 28.646485,19.471324 L 38.588405,19.471324 C 38.588405,19.471324 38.185679,21.246142 37.169849,22.500949 C 40.739034,22.500949 41.597375,20.059554 41.597375,19.461518 L 43.0625,19.471324 C 45.821256,19.471324 46.5,16.985061 46.5,14.378452 L 46.5,6.2157551 C 46.5,3.6053738 44.648774,1.5 42.353516,1.5 L 28.646485,1.5 z"
- id="path8201"
- sodipodi:nodetypes="cccccccccccc" />
- <path
- style="fill:url(#linearGradient8508);fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 28.854165,2.5009492 C 27.043799,2.5009492 25.499999,4.1991556 25.499999,6.4329081 L 25.499999,14.379169 C 25.499999,16.612921 27.043799,18.498627 28.854165,18.498627 L 38.854706,18.498627 C 39.222454,18.499674 39.520313,18.606498 39.521372,18.969885 C 39.521372,18.969885 39.644477,20.147733 39.23261,20.89176 C 40.286203,20.514643 40.854165,18.434645 40.854165,18.434645 C 40.969505,18.353016 41.108134,18.309759 41.249998,18.311127 L 42.833331,18.311127 C 43.997822,18.311127 44.543633,17.937415 44.937499,17.28182 C 45.331364,16.626223 45.499999,15.591478 45.499999,14.379169 L 45.499999,6.4329081 C 45.499999,4.1991558 43.956197,2.5009492 42.145832,2.5009492 L 28.854165,2.5009492 z"
- id="path8203"
- sodipodi:nodetypes="ccccccccccscccc" />
- <path
- transform="matrix(1.8058936,0,0,2.1118921,-0.410926,17.914587)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.7040925,0,0,1.7040625,-1.6187858,8.7839416)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.58828396;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.5795214,0,0,1.5795214,-0.1480796,10.152022)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.5538448,0,0,1.5538449,0.1550622,10.434085)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 18.5,24.000001 C 18.5,27.035998 16.036004,29.499999 13.000001,29.499999 C 9.9640002,29.499999 7.5000003,27.035998 7.5000003,24.000001 C 7.5000003,20.964 9.9640002,18.5 13.000001,18.5 C 16.036004,18.5 18.5,20.964 18.5,24.000001 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.6039688,0,0,-1.6039689,-0.4367098,45.116428)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.62345362;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 17.500001,24.000001 C 17.500001,26.484 15.484002,28.5 13,28.5 C 10.516001,28.5 8.5000003,26.484 8.5000003,24.000001 C 8.5000003,21.516 10.516001,19.5 13,19.5 C 15.484002,19.5 17.500001,21.516 17.500001,24.000001 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:0.99999994;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(0.8744826,0,0,0.8193141,-2.4902353,7.8660638)"
- style="opacity:0.37037036;fill:url(#radialGradient11298);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
- d="M 12.96875,27 C 12.66316,27.004794 12.37698,27.150701 12.193604,27.395203 C 12.010227,27.639705 11.950287,27.955291 12.03125,28.25 C 13.422894,33.792238 18.230543,38 24,38 C 29.769453,38 34.577108,33.792239 35.96875,28.25 C 36.109736,27.777313 35.880605,27.273042 35.431823,27.068334 C 34.983041,26.863627 34.452032,27.021167 34.1875,27.4375 C 31.979544,30.606533 28.071998,33.230703 24,33.230703 C 19.928002,33.230704 16.020457,30.606534 13.8125,27.4375 C 13.624435,27.157127 13.306264,26.992149 12.96875,27 L 12.96875,27 z"
- id="path11288"
- sodipodi:nodetypes="cscscscsccc" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 9,31 C 10.114314,34.996589 13.932744,38 18.5,38 C 23.067256,38 26.885687,34.996589 28,31 C 25.997881,33.58792 22.481559,36.086622 18.5,36.086622 C 14.518443,36.086624 11.00212,33.58792 9,31 z"
- style="opacity:1;fill:url(#linearGradient11214);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.0998724,0.5796011,-0.5856851,1.5252629,3.1832579,-1.498334)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.4442215;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.0998724,0.5796014,-0.5856851,1.5252636,3.1832579,-0.669072)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.44422138;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.0998724,0.5796011,0.5856851,1.5252629,33.816741,-1.498334)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.4442215;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.0998724,0.5796011,0.5856851,1.5252629,33.816741,-0.6690642)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.4442215;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 19.499999,24.000001 C 19.499999,26.484 21.515997,28.5 23.999999,28.5 C 26.483998,28.5 28.499999,26.484 28.499999,24.000001 C 28.499999,21.516 26.483998,19.5 23.999999,19.5 C 21.515997,19.5 19.499999,21.516 19.499999,24.000001 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:0.99999994;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.9494392,0,0,1.2877393,4.0769204,13.069868)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.9747197,0,0,0.6878263,13.538459,18.695971)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 29.5,24.000001 C 29.5,27.035998 27.036004,29.499999 24.000002,29.499999 C 20.964001,29.499999 18.500001,27.035998 18.500001,24.000001 C 18.500001,20.964 20.964001,18.5 24.000002,18.5 C 27.036004,18.5 29.5,20.964 29.5,24.000001 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient11424);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter11462);enable-background:accumulate"
- id="path11416"
- sodipodi:cx="23.25"
- sodipodi:cy="30.1875"
- sodipodi:rx="6.8125"
- sodipodi:ry="2.8125"
- d="M 30.0625,30.1875 A 6.8125,2.8125 0 1 1 16.4375,30.1875 A 6.8125,2.8125 0 1 1 30.0625,30.1875 z"
- transform="matrix(0.8520939,0,0,1.474258,-1.3111844,-12.857869)" />
- <path
- transform="matrix(1.9494392,0,0,1.2877393,-4.9230796,13.069868)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path7921"
- style="opacity:1;fill:url(#linearGradient7925);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.9747197,0,0,0.6878263,4.5384591,18.695971)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path7923"
- style="opacity:1;fill:url(#linearGradient7927);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-error.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-error.svg
deleted file mode 100644
index 704ed483c3..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-error.svg
+++ /dev/null
@@ -1,327 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="error.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/error.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective47" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8757">
- <stop
- style="stop-color:#2e3436;stop-opacity:1;"
- offset="0"
- id="stop8759" />
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="1"
- id="stop8761" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient11214"
- x1="23.151463"
- y1="36.068001"
- x2="23.151463"
- y2="31.364563"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,-1,46.004066,64)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient11298"
- cx="24.00321"
- cy="44.452724"
- fx="24.00321"
- fy="44.452724"
- r="12.133846"
- gradientTransform="matrix(1.5208182,0,0,0.7073167,-12.501486,7.9416791)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8757"
- id="linearGradient8763"
- x1="22"
- y1="17.615276"
- x2="22"
- y2="20.974033"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="50.073667"
- inkscape:cy="41.753083"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fill="#fce94f"
- inkscape:window-width="1081"
- inkscape:window-height="669"
- inkscape:window-x="122"
- inkscape:window-y="78"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.4878417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0.98821175"
- inkscape:original="M 13 28 C 14.290259 33.138472 18.711597 37 24 37 C 29.288399 37 33.709743 33.138472 35 28 C 32.681757 31.327326 28.610225 35.09375 24 35.09375 C 19.389774 35.093751 15.318244 31.327326 13 28 z "
- style="opacity:0.37037036000000001;fill:url(#radialGradient11298);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- id="path11288"
- d="M 12.96875,27 C 12.66316,27.004794 12.37698,27.150701 12.193604,27.395203 C 12.010227,27.639705 11.950287,27.955291 12.03125,28.25 C 13.422894,33.792238 18.230543,38 24,38 C 29.769453,38 34.577108,33.792239 35.96875,28.25 C 36.109736,27.777313 35.880605,27.273042 35.431823,27.068334 C 34.983041,26.863627 34.452032,27.021167 34.1875,27.4375 C 31.979544,30.606533 28.071998,34.09375 24,34.09375 C 19.928002,34.093751 16.020457,30.606534 13.8125,27.4375 C 13.624435,27.157127 13.306264,26.992149 12.96875,27 L 12.96875,27 z"
- transform="matrix(1,0,0,-1,-1.9959332,64)" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 11.004066,36.000001 C 12.294325,30.861529 16.715664,27.000001 22.004067,27.000001 C 27.292467,27.000001 31.713809,30.861529 33.004066,36.000001 C 30.685823,32.672675 26.614292,28.897559 22.004067,28.897559 C 17.393842,28.897556 13.32231,32.672675 11.004066,36.000001 z"
- style="opacity:1;fill:url(#linearGradient11214);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.4298057,-1.6425985,-1.1582421,-1.5938167,-5.185395,36.479745)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:0.24537037;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- style="opacity:0.74537037;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 14.03125,18 L 14.03125,19 L 15.03125,19 L 15.03125,18 L 14.03125,18 z M 15.03125,19 L 15.03125,20 L 16.03125,20 L 16.03125,19 L 15.03125,19 z M 16.03125,20 L 16.03125,21 L 17.03125,21 L 17.03125,20 L 16.03125,20 z M 17.03125,20 L 18.03125,20 L 18.03125,19 L 17.03125,19 L 17.03125,20 z M 18.03125,19 L 19.03125,19 L 19.03125,18 L 18.03125,18 L 18.03125,19 z M 17.03125,21 L 17.03125,22 L 18.03125,22 L 18.03125,21 L 17.03125,21 z M 18.03125,22 L 18.03125,23 L 19.03125,23 L 19.03125,22 L 18.03125,22 z M 16.03125,21 L 15.03125,21 L 15.03125,22 L 16.03125,22 L 16.03125,21 z M 25.03125,18 L 25.03125,19 L 26.03125,19 L 26.03125,18 L 25.03125,18 z M 26.03125,19 L 26.03125,20 L 27.03125,20 L 27.03125,19 L 26.03125,19 z M 27.03125,20 L 27.03125,21 L 28.03125,21 L 28.03125,20 L 27.03125,20 z M 28.03125,20 L 29.03125,20 L 29.03125,19 L 28.03125,19 L 28.03125,20 z M 29.03125,19 L 30.03125,19 L 30.03125,18 L 29.03125,18 L 29.03125,19 z M 28.03125,21 L 28.03125,22 L 29.03125,22 L 29.03125,21 L 28.03125,21 z M 29.03125,22 L 29.03125,23 L 30.03125,23 L 30.03125,22 L 29.03125,22 z M 27.03125,21 L 26.03125,21 L 26.03125,22 L 27.03125,22 L 27.03125,21 z M 14.03125,22.03125 L 14.03125,23.03125 L 15.03125,23.03125 L 15.03125,22.03125 L 14.03125,22.03125 z M 25.03125,22.03125 L 25.03125,23.03125 L 26.03125,23.03125 L 26.03125,22.03125 L 25.03125,22.03125 z"
- id="path8765"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
- <path
- style="opacity:1;fill:url(#linearGradient8763);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 14.03125,17 L 14.03125,18 L 15.03125,18 L 15.03125,17 L 14.03125,17 z M 15.03125,18 L 15.03125,19 L 16.03125,19 L 16.03125,18 L 15.03125,18 z M 16.03125,19 L 16.03125,20 L 17.03125,20 L 17.03125,19 L 16.03125,19 z M 17.03125,19 L 18.03125,19 L 18.03125,18 L 17.03125,18 L 17.03125,19 z M 18.03125,18 L 19.03125,18 L 19.03125,17 L 18.03125,17 L 18.03125,18 z M 17.03125,20 L 17.03125,21 L 18.03125,21 L 18.03125,20 L 17.03125,20 z M 18.03125,21 L 18.03125,22 L 19.03125,22 L 19.03125,21 L 18.03125,21 z M 16.03125,20 L 15.03125,20 L 15.03125,21 L 16.03125,21 L 16.03125,20 z M 25.03125,17 L 25.03125,18 L 26.03125,18 L 26.03125,17 L 25.03125,17 z M 26.03125,18 L 26.03125,19 L 27.03125,19 L 27.03125,18 L 26.03125,18 z M 27.03125,19 L 27.03125,20 L 28.03125,20 L 28.03125,19 L 27.03125,19 z M 28.03125,19 L 29.03125,19 L 29.03125,18 L 28.03125,18 L 28.03125,19 z M 29.03125,18 L 30.03125,18 L 30.03125,17 L 29.03125,17 L 29.03125,18 z M 28.03125,20 L 28.03125,21 L 29.03125,21 L 29.03125,20 L 28.03125,20 z M 29.03125,21 L 29.03125,22 L 30.03125,22 L 30.03125,21 L 29.03125,21 z M 27.03125,20 L 26.03125,20 L 26.03125,21 L 27.03125,21 L 27.03125,20 z M 14.03125,21.03125 L 14.03125,22.03125 L 15.03125,22.03125 L 15.03125,21.03125 L 14.03125,21.03125 z M 25.03125,21.03125 L 25.03125,22.03125 L 26.03125,22.03125 L 26.03125,21.03125 L 25.03125,21.03125 z"
- id="rect7941"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.4298057,-1.6425985,1.1582421,-1.5938167,48.926576,36.479745)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path7888"
- style="opacity:0.24537037;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-info.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-info.svg
deleted file mode 100644
index 3d92690b88..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-info.svg
+++ /dev/null
@@ -1,569 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="info.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/info.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective82" />
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11418">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11420" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11422" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient11214"
- x1="22.919643"
- y1="33.491837"
- x2="22.919643"
- y2="36.402832"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999931,1.885788e-7)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient11298"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846"
- gradientTransform="matrix(1.5208182,0,0,0.7073167,-12.501486,7.9416791)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="translate(10.999931,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11418"
- id="linearGradient11424"
- x1="22.915459"
- y1="34.796875"
- x2="22.854631"
- y2="29.835938"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter11462"
- x="-0.078992675"
- width="1.1579853"
- y="-0.19133781"
- height="1.3826756">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.448448"
- id="feGaussianBlur11464" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999932,1.885788e-7)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="8"
- inkscape:cx="41.138874"
- inkscape:cy="20.946547"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.4878417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499931,19.500002 C 21.499931,22.812 18.811935,25.5 15.499932,25.5 C 12.187931,25.5 9.4999315,22.812 9.4999315,19.500002 C 9.4999315,16.188 12.187931,13.5 15.499932,13.5 C 18.811935,13.5 21.499931,16.188 21.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499932,19.5 C 20.499932,22.259999 18.259935,24.499999 15.499932,24.499999 C 12.739932,24.499999 10.499932,22.259999 10.499932,19.5 C 10.499932,16.739999 12.739932,14.499999 15.499932,14.499999 C 18.259935,14.499999 20.499932,16.739999 20.499932,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.4367989,0,0,1.5452869,-7.1539168,6.0838442)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0.98821175"
- inkscape:original="M 13 28 C 14.290259 33.138472 18.711597 37 24 37 C 29.288399 37 33.709743 33.138472 35 28 C 32.681757 31.327326 28.610225 35.09375 24 35.09375 C 19.389774 35.093751 15.318244 31.327326 13 28 z "
- style="opacity:0.37037036;fill:url(#radialGradient11298);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- id="path11288"
- d="M 12.96875,27 C 12.66316,27.004794 12.37698,27.150701 12.193604,27.395203 C 12.010227,27.639705 11.950287,27.955291 12.03125,28.25 C 13.422894,33.792238 18.230543,38 24,38 C 29.769453,38 34.577108,33.792239 35.96875,28.25 C 36.109736,27.777313 35.880605,27.273042 35.431823,27.068334 C 34.983041,26.863627 34.452032,27.021167 34.1875,27.4375 C 31.979544,30.606533 28.071998,34.09375 24,34.09375 C 19.928002,34.093751 16.020457,30.606534 13.8125,27.4375 C 13.624435,27.157127 13.306264,26.992149 12.96875,27 L 12.96875,27 z"
- transform="translate(-2.0000685,1.885788e-7)" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 10.999931,28 C 12.29019,33.138472 16.711529,37 21.999932,37 C 27.288332,37 31.709674,33.138472 32.999931,28 C 30.681688,31.327326 26.610157,35.102442 21.999932,35.102442 C 17.389707,35.102445 13.318175,31.327326 10.999931,28 z"
- style="opacity:1;fill:url(#linearGradient11214);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5297812,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5297812,-9.9684476)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837947;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.470081,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.470081,-9.9684383)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.499931,19.5 C 23.499931,22.259999 25.739928,24.499999 28.499931,24.499999 C 31.259931,24.499999 33.499931,22.259999 33.499931,19.5 C 33.499931,16.739999 31.259931,14.499999 28.499931,14.499999 C 25.739928,14.499999 23.499931,16.739999 23.499931,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.436799,0,0,1.5452869,3.846082,6.0838439)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,2.3076208,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,13.30762,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 34.499931,19.500002 C 34.499931,22.812 31.811935,25.5 28.499932,25.5 C 25.187931,25.5 22.499931,22.812 22.499931,19.500002 C 22.499931,16.188 25.187931,13.5 28.499932,13.5 C 31.811935,13.5 34.499931,16.188 34.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient11424);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter11462);enable-background:accumulate"
- id="path11416"
- sodipodi:cx="23.25"
- sodipodi:cy="30.1875"
- sodipodi:rx="6.8125"
- sodipodi:ry="2.8125"
- d="M 30.0625,30.1875 A 6.8125,2.8125 0 1 1 16.4375,30.1875 A 6.8125,2.8125 0 1 1 30.0625,30.1875 z"
- transform="matrix(1.0275229,0,0,1.777778,-1.8899762,-24.666672)" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-mail.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-mail.svg
deleted file mode 100644
index 3249b8eb1c..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-mail.svg
+++ /dev/null
@@ -1,976 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="mail.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/mail.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective126" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9188">
- <stop
- style="stop-color:#2e3436;stop-opacity:1;"
- offset="0"
- id="stop9190" />
- <stop
- style="stop-color:#6f726d;stop-opacity:1"
- offset="1"
- id="stop9192" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9166">
- <stop
- style="stop-color:#3b73bb;stop-opacity:1;"
- offset="0"
- id="stop9168" />
- <stop
- style="stop-color:#3b73bb;stop-opacity:0;"
- offset="1"
- id="stop9170" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9158">
- <stop
- style="stop-color:#729fcf;stop-opacity:1;"
- offset="0"
- id="stop9160" />
- <stop
- style="stop-color:#bcd2e9;stop-opacity:1"
- offset="1"
- id="stop9162" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9056">
- <stop
- style="stop-color:#729fcf;stop-opacity:1;"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#729fcf;stop-opacity:0;"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9040">
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="0"
- id="stop9042" />
- <stop
- style="stop-color:#3465a4;stop-opacity:1"
- offset="1"
- id="stop9044" />
- </linearGradient>
- <linearGradient
- id="linearGradient11669"
- inkscape:collect="always">
- <stop
- id="stop11671"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop11673"
- offset="1"
- style="stop-color:#2e3436;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11653">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop11655" />
- <stop
- style="stop-color:#2e3436;stop-opacity:1"
- offset="1"
- id="stop11657" />
- </linearGradient>
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="translate(10.999931,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999932,1.885788e-7)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11669"
- id="radialGradient11659"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,0.5000001,4.156251)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11653"
- id="radialGradient11667"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0000001,0,0,0.8124999,15.5,4.156251)"
- cx="14"
- cy="19.5"
- fx="9.3258924"
- fy="14.814685"
- r="8" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient8720"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient8722"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient8985"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient8993"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient8995"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient8997"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient9005"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-34.999933,2.0000002)"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient9018"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9659258,0.1156321,0.258819,0.431545,39.417822,14.519987)"
- x1="22.919643"
- y1="33.491837"
- x2="23.746914"
- y2="36.579254" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient9036"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5208182,0,0,0.3864192,-14.644203,17.599539)"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9040"
- id="linearGradient9046"
- x1="24"
- y1="37"
- x2="44.533825"
- y2="40.875"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1262515,0,0,1,-4.093162,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9056"
- id="linearGradient9062"
- x1="34.5"
- y1="61.35038"
- x2="34.5"
- y2="33.72963"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9158"
- id="linearGradient9164"
- x1="29"
- y1="35.649048"
- x2="29"
- y2="32.334484"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-1,0)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9166"
- id="linearGradient9172"
- x1="29.125"
- y1="36.5625"
- x2="25"
- y2="31.9375"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9188"
- id="linearGradient9194"
- x1="37.5"
- y1="42.295494"
- x2="37.5"
- y2="40.792892"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9166"
- id="linearGradient9246"
- gradientUnits="userSpaceOnUse"
- x1="29.78125"
- y1="37.09375"
- x2="23.984375"
- y2="30.40625" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.7770035,0,2.6759581)"
- r="8.9687502"
- fy="12"
- fx="12"
- cy="12"
- cx="12"
- id="radialGradient3210"
- xlink:href="#linearGradient3204"
- inkscape:collect="always" />
- <linearGradient
- y2="18.288521"
- x2="12.015625"
- y1="10.420408"
- x1="12.015625"
- gradientUnits="userSpaceOnUse"
- id="linearGradient3200"
- xlink:href="#linearGradient4130"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="13.251127"
- x2="12.750399"
- y1="19.780256"
- x1="12.726427"
- id="linearGradient3197"
- xlink:href="#linearGradient3191"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="19.148933"
- x2="15.742911"
- y1="8.850009"
- x1="13.038205"
- id="linearGradient3189"
- xlink:href="#linearGradient3183"
- inkscape:collect="always" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.257382,0,0,0.665505,-3.088585,4.013937)"
- r="8.9687502"
- fy="12"
- fx="12"
- cy="12"
- cx="12"
- id="radialGradient4152"
- xlink:href="#linearGradient4146"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="17.151861"
- x2="12.015625"
- y1="12.513933"
- x1="12.015625"
- id="linearGradient4144"
- xlink:href="#linearGradient4138"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient4130"
- inkscape:collect="always">
- <stop
- id="stop4132"
- offset="0"
- style="stop-color:#babdb6;stop-opacity:1;" />
- <stop
- id="stop4134"
- offset="1"
- style="stop-color:#babdb6;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4138"
- inkscape:collect="always">
- <stop
- id="stop4140"
- offset="0"
- style="stop-color:#babdb6;stop-opacity:1;" />
- <stop
- id="stop4142"
- offset="1"
- style="stop-color:#babdb6;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient4146"
- inkscape:collect="always">
- <stop
- id="stop4148"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop4150"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient3183"
- inkscape:collect="always">
- <stop
- id="stop3185"
- offset="0"
- style="stop-color:#888a85;stop-opacity:1;" />
- <stop
- id="stop3187"
- offset="1"
- style="stop-color:#555753;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3191"
- inkscape:collect="always">
- <stop
- id="stop3193"
- offset="0"
- style="stop-color:#555753;stop-opacity:1;" />
- <stop
- id="stop3195"
- offset="1"
- style="stop-color:#888a85;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient3204"
- inkscape:collect="always">
- <stop
- id="stop3206"
- offset="0"
- style="stop-color:#888a85;stop-opacity:1;" />
- <stop
- id="stop3208"
- offset="1"
- style="stop-color:#888a85;stop-opacity:0;" />
- </linearGradient>
- <inkscape:perspective
- id="perspective8002"
- inkscape:persp3d-origin="12 : 8 : 1"
- inkscape:vp_z="24 : 12 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 12 : 1"
- sodipodi:type="inkscape:persp3d" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="173.29133"
- inkscape:cy="101.88242"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.73423419999999995;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.48784169999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- style="opacity:0.37037036000000001;fill:url(#radialGradient9036);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new"
- d="M 10.826033,28.011426 C 10.520443,28.014045 10.234263,28.093756 10.050887,28.227332 C 9.8675105,28.360908 9.8075706,28.533318 9.8885335,28.694322 C 11.280177,31.722142 16.087826,34.020914 21.857283,34.020914 C 27.626736,34.020914 32.434391,31.722142 33.826033,28.694322 C 33.967019,28.436085 33.737888,28.160593 33.289106,28.048758 C 32.840324,27.936923 32.309315,28.02299 32.044783,28.25044 C 29.836827,29.981737 25.929281,31.047173 21.857283,31.047173 C 17.785285,31.047174 13.87774,29.981737 11.669783,28.25044 C 11.481718,28.097267 11.163547,28.007137 10.826033,28.011426 L 10.826033,28.011426 z"
- id="path11288"
- sodipodi:nodetypes="cscscscsccc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4873425,3.0804918)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499931,19.500002 C 21.499931,22.812 18.811935,25.5 15.499932,25.5 C 12.187931,25.5 9.4999315,22.812 9.4999315,19.500002 C 9.4999315,16.188 12.187931,13.5 15.499932,13.5 C 18.811935,13.5 21.499931,16.188 21.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 10.857282,29 C 12.147541,31.295706 16.56888,33.020914 21.857283,33.020914 C 27.145683,33.020914 31.567025,31.295706 32.857282,29 C 30.539039,30.486544 26.467508,31.996368 21.857283,31.996368 C 17.247058,31.99637 13.175526,30.486544 10.857282,29 z"
- style="fill:url(#linearGradient9018);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699998999999999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499932,19.5 C 20.499932,22.259999 18.259935,24.499999 15.499932,24.499999 C 12.739932,24.499999 10.499932,22.259999 10.499932,19.5 C 10.499932,16.739999 12.739932,14.499999 15.499932,14.499999 C 18.259935,14.499999 20.499932,16.739999 20.499932,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.4367989,0,0,1.5452869,-7.1539168,6.0838442)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5297812,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5297812,-9.9684476)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837946999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-10.968439)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-9.9684388)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837955999999999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.499931,19.5 C 23.499931,22.259999 25.739928,24.499999 28.499931,24.499999 C 31.259931,24.499999 33.499931,22.259999 33.499931,19.5 C 33.499931,16.739999 31.259931,14.499999 28.499931,14.499999 C 25.739928,14.499999 23.499931,16.739999 23.499931,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.436799,0,0,1.5452869,3.846082,6.0838439)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,2.3076208,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,13.30762,11.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640185999999996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 34.499931,19.500002 C 34.499931,22.812 31.811935,25.5 28.499932,25.5 C 25.187931,25.5 22.499931,22.812 22.499931,19.500002 C 22.499931,16.188 25.187931,13.5 28.499932,13.5 C 31.811935,13.5 34.499931,16.188 34.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(0.651488,0,0,0.651488,28.30843,24.844692)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8714"
- style="opacity:1;fill:#e0a900;fill-opacity:1;stroke:url(#linearGradient8720);stroke-width:1.53875648999999992;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.5012403,0,0,0.5012402,30.082278,26.494867)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8716"
- style="opacity:1;fill:url(#radialGradient8722);fill-opacity:1;stroke:none;stroke-width:0.51155167999999995;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(0.5513643,0,0,-0.5513643,29.490506,38.055647)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path8718"
- style="opacity:0.48699998999999999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.81368314999999991;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <g
- id="g8029"
- inkscape:label="Layer 1"
- transform="translate(24.000001,25)">
- <rect
- ry="1.5292913"
- rx="1.4791573"
- y="4.5005183"
- x="2.5008683"
- height="14.994927"
- width="18.999125"
- id="rect3198"
- style="opacity:1;fill:#dfe2dc;fill-opacity:1;stroke:url(#linearGradient3189);stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <rect
- ry="1.325834"
- rx="1.3235176"
- y="5.5"
- x="3.5"
- height="13"
- width="17"
- id="rect3202"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
- <path
- d="M 3.96875,5.53125 C 3.7197609,5.53125 3.53125,5.7077743 3.53125,6.03125 L 3.53125,17.96875 C 3.53125,18.292225 3.7197609,18.46875 3.96875,18.46875 L 20.03125,18.46875 C 20.280239,18.46875 20.46875,18.292227 20.46875,17.96875 L 20.46875,6.03125 C 20.46875,5.7077741 20.280239,5.53125 20.03125,5.53125 L 3.96875,5.53125 z"
- inkscape:href="#rect3198"
- id="path4119"
- style="opacity:0.4;fill:url(#radialGradient3210);fill-opacity:1;stroke:url(#radialGradient4152);stroke-width:1.00000036;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- xlink:href="#rect3198"
- inkscape:original="M 3.96875 4.5 C 3.1492968 4.5 2.5 5.1840228 2.5 6.03125 L 2.5 17.96875 C 2.5 18.815977 3.1492967 19.5 3.96875 19.5 L 20.03125 19.5 C 20.850703 19.5 21.5 18.815978 21.5 17.96875 L 21.5 6.03125 C 21.5 5.1840226 20.850703 4.5 20.03125 4.5 L 3.96875 4.5 z "
- inkscape:radius="-1.0251163"
- sodipodi:type="inkscape:offset" />
- <path
- sodipodi:nodetypes="cccccc"
- id="path4113"
- d="M 20.173644,19.500002 L 3.8263566,19.500002 C 3.0915545,19.500002 2.4999999,18.840678 2.4999999,18.021697 L 11.981112,10.500001 L 21.499999,18.021697 C 21.499999,18.840678 20.908445,19.500002 20.173644,19.500002 z"
- style="fill:#dfe2dc;fill-opacity:1;stroke:url(#linearGradient3197);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" />
- <path
- transform="matrix(1.0093633,0,0,1,-3.4234557e-2,0)"
- d="M 11.96875,11.71875 L 3.65625,18.3125 C 3.718416,18.374228 3.7395135,18.53125 3.8125,18.53125 L 20.1875,18.53125 C 20.260486,18.53125 20.281584,18.374227 20.34375,18.3125 L 11.96875,11.71875 z"
- inkscape:href="#path4113"
- id="path4117"
- style="opacity:1;fill:url(#linearGradient4144);fill-opacity:1;stroke:#ffffff;stroke-width:0.9953509;stroke-miterlimit:4;stroke-opacity:1"
- xlink:href="#path4113"
- inkscape:original="M 11.96875 10.5 L 2.5 18.03125 C 2.5 18.850231 3.0776979 19.5 3.8125 19.5 L 20.1875 19.5 C 20.922301 19.5 21.500001 18.850232 21.5 18.03125 L 11.96875 10.5 z "
- inkscape:radius="-0.96695226"
- sodipodi:type="inkscape:offset" />
- <path
- sodipodi:nodetypes="ccczcc"
- id="path4122"
- d="M 20.145067,4.5000001 L 3.8242121,4.5000001 C 3.0905983,4.5000001 2.5000001,5.1593244 2.5000001,5.9783056 C 2.5000001,5.9783056 9.4173792,13.5 12.043511,13.5 C 14.708468,13.5 21.469279,5.9783056 21.469279,5.9783056 C 21.469279,5.1593244 20.878681,4.5000001 20.145067,4.5000001 z"
- style="fill:#eeeeec;fill-opacity:1;stroke:#888a85;stroke-width:1.00000012;stroke-miterlimit:4;stroke-opacity:1" />
- <path
- sodipodi:nodetypes="cccccz"
- id="path4124"
- d="M 12.087485,11.46875 C 10.301616,11.46875 3.34375,18.34375 3.34375,18.34375 C 3.4413342,18.582586 3.6045666,18.75 3.8125,18.75 L 20.1875,18.75 C 20.395433,18.75 20.558666,18.582586 20.65625,18.34375 C 20.65625,18.34375 13.912791,11.46875 12.087485,11.46875 z"
- style="opacity:1;fill:url(#linearGradient3200);fill-opacity:1;stroke:#ffffff;stroke-width:1.03183317;stroke-miterlimit:4;stroke-opacity:1"
- transform="matrix(0.9819495,0,0,-0.956515,0.2166063,23.434657)" />
- </g>
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-question.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-question.svg
deleted file mode 100644
index 0390e6f85f..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-question.svg
+++ /dev/null
@@ -1,655 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="question.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/question.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8711">
- <stop
- style="stop-color:#a5c2e1;stop-opacity:1"
- offset="0"
- id="stop8713" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop8715" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11586">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11588" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11590" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11570">
- <stop
- style="stop-color:#0a387a;stop-opacity:1"
- offset="0"
- id="stop11572" />
- <stop
- style="stop-color:#368eec;stop-opacity:1"
- offset="1"
- id="stop11574" />
- </linearGradient>
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11418">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11420" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11422" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11292">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11294" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11296" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11208">
- <stop
- style="stop-color:#c32f00;stop-opacity:1"
- offset="0"
- id="stop11210" />
- <stop
- style="stop-color:#6c1300;stop-opacity:1"
- offset="1"
- id="stop11212" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11208"
- id="linearGradient11214"
- x1="22.919643"
- y1="33.491837"
- x2="22.919643"
- y2="36.402832"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999931,1.885788e-7)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11292"
- id="radialGradient11298"
- cx="24.00321"
- cy="34.70562"
- fx="24.00321"
- fy="34.70562"
- r="12.133846"
- gradientTransform="matrix(1.5208182,0,0,0.7073167,-12.501486,7.9416791)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="translate(10.999931,1.885788e-7)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11418"
- id="linearGradient11424"
- x1="22.915459"
- y1="34.796875"
- x2="22.854631"
- y2="29.835938"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter11462"
- x="-0.078992675"
- width="1.1579853"
- y="-0.19133781"
- height="1.3826756">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.448448"
- id="feGaussianBlur11464" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-2.0000685,1.885788e-7)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1,0,0,1,45.999932,1.885788e-7)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11570"
- id="linearGradient11576"
- x1="48.140072"
- y1="17.348257"
- x2="36.310215"
- y2="9.2333107"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(0,-2)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11586"
- id="linearGradient11592"
- x1="43.267006"
- y1="14"
- x2="54.781696"
- y2="18.949747"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11570"
- id="linearGradient8706"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(0,-2)"
- x1="46.202572"
- y1="17.035757"
- x2="37.247715"
- y2="14.5" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11586"
- id="linearGradient8708"
- gradientUnits="userSpaceOnUse"
- x1="43.267006"
- y1="14"
- x2="54.781696"
- y2="18.949747"
- gradientTransform="translate(0,-2)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8711"
- id="linearGradient8717"
- x1="47.873451"
- y1="13.986977"
- x2="41.067547"
- y2="12.484375"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.313709"
- inkscape:cx="48.898255"
- inkscape:cy="29.543471"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.4878417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499931,19.500002 C 21.499931,22.812 18.811935,25.5 15.499932,25.5 C 12.187931,25.5 9.4999315,22.812 9.4999315,19.500002 C 9.4999315,16.188 12.187931,13.5 15.499932,13.5 C 18.811935,13.5 21.499931,16.188 21.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499932,19.5 C 20.499932,22.259999 18.259935,24.499999 15.499932,24.499999 C 12.739932,24.499999 10.499932,22.259999 10.499932,19.5 C 10.499932,16.739999 12.739932,14.499999 15.499932,14.499999 C 18.259935,14.499999 20.499932,16.739999 20.499932,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.4367989,0,0,1.5452869,-6.1538483,7.0838437)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0.98821175"
- inkscape:original="M 13 28 C 14.290259 33.138472 18.711597 37 24 37 C 29.288399 37 33.709743 33.138472 35 28 C 32.681757 31.327326 28.610225 35.09375 24 35.09375 C 19.389774 35.093751 15.318244 31.327326 13 28 z "
- style="opacity:0.37037036;fill:url(#radialGradient11298);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- id="path11288"
- d="M 12.96875,27 C 12.66316,27.004794 12.37698,27.150701 12.193604,27.395203 C 12.010227,27.639705 11.950287,27.955291 12.03125,28.25 C 13.422894,33.792238 18.230543,38 24,38 C 29.769453,38 34.577108,33.792239 35.96875,28.25 C 36.109736,27.777313 35.880605,27.273042 35.431823,27.068334 C 34.983041,26.863627 34.452032,27.021167 34.1875,27.4375 C 31.979544,30.606533 28.071998,34.09375 24,34.09375 C 19.928002,34.093751 16.020457,30.606534 13.8125,27.4375 C 13.624435,27.157127 13.306264,26.992149 12.96875,27 L 12.96875,27 z"
- transform="translate(-2.0000685,1.885788e-7)" />
- <path
- sodipodi:nodetypes="cscsc"
- id="path17974"
- d="M 10.999931,28 C 12.29019,33.138472 16.711529,37 21.999932,37 C 27.288332,37 31.709674,33.138472 32.999931,28 C 30.681688,31.327326 26.610157,35.102442 21.999932,35.102442 C 17.389707,35.102445 13.318175,31.327326 10.999931,28 z"
- style="opacity:1;fill:url(#linearGradient11214);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5297812,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5297812,-9.9684476)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837947;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.470081,-10.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.470081,-9.9684383)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.499931,19.5 C 23.499931,22.259999 25.739928,24.499999 28.499931,24.499999 C 31.259931,24.499999 33.499931,22.259999 33.499931,19.5 C 33.499931,16.739999 31.259931,14.499999 28.499931,14.499999 C 25.739928,14.499999 23.499931,16.739999 23.499931,19.5 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.436799,0,0,1.5452869,5.8461508,7.0838441)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,3.3076893,12.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.4620795,0,0,1.0301913,15.30769,12.055896)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 34.499931,19.500002 C 34.499931,22.812 31.811935,25.5 28.499932,25.5 C 25.187931,25.5 22.499931,22.812 22.499931,19.500002 C 22.499931,16.188 25.187931,13.5 28.499932,13.5 C 31.811935,13.5 34.499931,16.188 34.499931,19.500002 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient11424);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter11462);enable-background:accumulate"
- id="path11416"
- sodipodi:cx="23.25"
- sodipodi:cy="30.1875"
- sodipodi:rx="6.8125"
- sodipodi:ry="2.8125"
- d="M 30.0625,30.1875 A 6.8125,2.8125 0 1 1 16.4375,30.1875 A 6.8125,2.8125 0 1 1 30.0625,30.1875 z"
- transform="matrix(1.0275229,0,0,1.777778,-1.8899762,-24.666672)" />
- <path
- style="font-size:19.03945922999999851px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient8706);fill-opacity:1;stroke:none;stroke-width:1.55613649000000009px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Schoolbook L"
- d="M 40.5625,1 C 38.874477,1 37.314933,1.4226492 36.09375,2.28125 C 34.872565,3.1398509 34,4.5416345 34,6.125 C 33.999998,7.9320376 35.500885,9 37.375,9 C 38.972866,9 40.03125,8.6239064 40.03125,6.9375 C 40.03125,5.8358747 41.03125,5.7736538 41.03125,7 C 41.031252,7.5731772 40.720035,7.6923202 40.46875,8.03125 C 39.556981,9.1888218 39.147246,9.72288 38.8125,10.21875 C 37.953228,11.557311 37,12.936936 37,14.46875 C 36.999998,17.077704 39.59375,16.96875 39.59375,16.96875 C 39.236295,17.077217 38.886105,17.297356 38.5625,17.5625 C 38.550686,17.570277 38.542964,17.585834 38.53125,17.59375 C 38.424354,17.683359 38.318146,17.772605 38.21875,17.875 C 37.480053,18.516861 37,19.445308 37,20.5 C 37,22.432 38.568,24 40.5,24 C 42.432,24 44.000001,22.432 44,20.5 C 44,18.95785 43.010761,17.653479 41.625,17.1875 C 41.444379,17.110901 41.249634,17.062378 41.0625,17 C 41.763982,16.748864 42.068061,15.931257 42.0625,15.1875 C 42.051002,14.139574 42.280169,13.716262 42.375,13.5 C 43.426067,11.600594 44.954699,11.097944 46.125,9.75 C 46.749619,8.8343856 47,7.7477245 47,6.75 C 47.000001,5.1014533 46.28805,3.5482598 45.09375,2.53125 C 43.89945,1.5142402 42.298617,1 40.5625,1 z"
- id="path3346"
- sodipodi:nodetypes="csssssccscsscsssccsccssc" />
- <path
- style="font-size:19.03945922999999851px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient8717);fill-opacity:1;stroke:none;stroke-width:1.55613649000000009px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Century Schoolbook L"
- d="M 40.5625 1.96875 C 39.03732 1.96875 37.680971 2.3732797 36.65625 3.09375 C 35.664894 3.7907611 34.96875 4.9000488 34.96875 6.125 C 34.968749 6.758422 35.192622 7.1443716 35.59375 7.46875 C 35.994878 7.7931284 36.623252 8.03125 37.375 8.03125 C 38.097392 8.03125 38.596706 7.9024002 38.78125 7.78125 C 38.965794 7.6600998 39.0625 7.5766139 39.0625 6.9375 C 39.0625 6.5144976 39.145775 6.1274407 39.375 5.78125 C 39.604225 5.4350593 40.027732 5.1249297 40.53125 5.125 C 41.034768 5.1250703 41.462039 5.4531849 41.6875 5.8125 C 41.912961 6.1718151 42 6.5608281 42 7 C 42.000002 7.4631574 41.827288 7.9211544 41.625 8.1875 C 41.422712 8.453846 41.293456 8.566387 41.25 8.625 C 40.340574 9.779598 39.934939 10.290878 39.625 10.75 C 38.753163 12.108134 37.96875 13.34166 37.96875 14.46875 C 37.968749 15.449931 38.315321 15.62655 38.71875 15.8125 C 39.583542 16.168963 40.115403 16.105798 40.96875 15.84375 C 41.047882 15.684154 41.095517 15.423765 41.09375 15.1875 C 41.08066 13.994488 41.418028 13.209423 41.46875 13.09375 C 41.488628 13.071983 41.509483 13.051128 41.53125 13.03125 C 42.136141 11.938138 42.896246 11.218183 43.59375 10.65625 C 44.265082 10.115402 44.835184 9.717613 45.3125 9.1875 C 45.803013 8.468469 46.03125 7.5845097 46.03125 6.75 C 46.031251 5.3823316 45.435469 4.1044628 44.46875 3.28125 C 43.478484 2.4379857 42.105973 1.96875 40.5625 1.96875 z M 40.5 18 C 39.12 18 37.999999 19.12 38 20.5 C 38 21.88 39.119998 23 40.5 23 C 41.88 23 43.000002 21.88 43 20.5 C 43 19.12 41.879998 17.999999 40.5 18 z "
- id="path11582" />
- </g>
-</svg>
diff --git a/pidgin/artwork/hicolor/scalable/status/pidgin-warning.svg b/pidgin/artwork/hicolor/scalable/status/pidgin-warning.svg
deleted file mode 100644
index d4492adef1..0000000000
--- a/pidgin/artwork/hicolor/scalable/status/pidgin-warning.svg
+++ /dev/null
@@ -1,558 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48"
- height="48"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docbase="/home/hbons/Desktop"
- sodipodi:docname="warning.svg"
- inkscape:export-filename="/home/hbons/Bureaublad/warning.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- sodipodi:modified="true">
- <defs
- id="defs4">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8730">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop8732" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop8734" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8716">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop8718" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop8720" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient8706">
- <stop
- style="stop-color:#391f17;stop-opacity:1"
- offset="0"
- id="stop8708" />
- <stop
- style="stop-color:#841c0e;stop-opacity:1"
- offset="1"
- id="stop8710" />
- </linearGradient>
- <linearGradient
- id="linearGradient11493"
- inkscape:collect="always">
- <stop
- id="stop11495"
- offset="0"
- style="stop-color:#555753;stop-opacity:1" />
- <stop
- id="stop11497"
- offset="1"
- style="stop-color:#070808;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11487"
- inkscape:collect="always">
- <stop
- id="stop11489"
- offset="0"
- style="stop-color:#538ac5;stop-opacity:1" />
- <stop
- id="stop11491"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11474">
- <stop
- style="stop-color:#558bc5;stop-opacity:1"
- offset="0"
- id="stop11476" />
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="1"
- id="stop11478" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11333">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11335" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11337" />
- </linearGradient>
- <linearGradient
- id="linearGradient11316"
- inkscape:collect="always">
- <stop
- id="stop11318"
- offset="0"
- style="stop-color:#edd400;stop-opacity:1" />
- <stop
- id="stop11320"
- offset="1"
- style="stop-color:#f6c93b;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11304">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11306" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11308" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11259">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop11261" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop11263" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11241">
- <stop
- style="stop-color:#4f381b;stop-opacity:0.97254902"
- offset="0"
- id="stop11243" />
- <stop
- style="stop-color:#a87b42;stop-opacity:0.96078432"
- offset="1"
- id="stop11245" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11196">
- <stop
- style="stop-color:#555753;stop-opacity:1"
- offset="0"
- id="stop11198" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop11200" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11241"
- id="linearGradient10406"
- gradientUnits="userSpaceOnUse"
- x1="14.365882"
- y1="19.515574"
- x2="11.215483"
- y2="8.2263536" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11493"
- id="linearGradient11202"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11196"
- id="linearGradient11206"
- gradientUnits="userSpaceOnUse"
- x1="9.7069349"
- y1="8.5495605"
- x2="9.9879932"
- y2="10.59237" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11316"
- id="radialGradient11271"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.8771377,9.6878354e-8,-5.330884e-8,1.0893079,-10.4827,-2.6428601)"
- cx="11.873854"
- cy="12.147273"
- fx="11.594166"
- fy="8.8655272"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11310"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11304"
- id="linearGradient11314"
- gradientUnits="userSpaceOnUse"
- x1="8.9530411"
- y1="6.2636566"
- x2="10.732871"
- y2="9.6526775" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11259"
- id="radialGradient11327"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.023438,0,0,0.8870879,-0.2709505,0.7064648)"
- cx="11.736404"
- cy="7.3689327"
- fx="11.800528"
- fy="1.1734189"
- r="9.975256" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11339"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0833276,0,0,1.1666668,-3.9582687,-5.2500011)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11333"
- id="linearGradient11343"
- gradientUnits="userSpaceOnUse"
- x1="14.6875"
- y1="11.875"
- x2="20.6875"
- y2="22.5625"
- gradientTransform="matrix(1.0833391,0,0,1.1666668,10.041531,-5.2500011)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11487"
- id="linearGradient11480"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.0999932,0,0,1.2,-4.2499165,-5.8999987)" />
- <filter
- inkscape:collect="always"
- id="filter11503"
- x="-0.11697236"
- width="1.2339447"
- y="-0.32830241"
- height="1.6566048">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.64772565"
- id="feGaussianBlur11505" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11474"
- id="linearGradient11507"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.1000069,0,0,1.2,48.250086,-5.8999987)"
- x1="14.728965"
- y1="15.785595"
- x2="16.957989"
- y2="24.104429" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8716"
- id="radialGradient8722"
- cx="44.7687"
- cy="4.7732658"
- fx="44.7687"
- fy="4.7732658"
- r="9.0598059"
- gradientTransform="matrix(1.7013896,0,0,1.0125342,-31.400301,2.4538538)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8730"
- id="linearGradient8736"
- x1="45.837402"
- y1="21.754553"
- x2="45.837402"
- y2="19.126131"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8706"
- id="radialGradient8738"
- cx="44.7687"
- cy="21.608887"
- fx="44.7687"
- fy="21.608887"
- r="9.0598059"
- gradientTransform="matrix(1.3094421,0,0,0.7792777,-13.85332,2.5000315)"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.8284271"
- inkscape:cx="64.2628"
- inkscape:cy="40.347011"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- fill="#fce94f"
- inkscape:window-width="1440"
- inkscape:window-height="847"
- inkscape:window-x="0"
- inkscape:window-y="0"
- width="48px"
- height="48px"
- inkscape:snap-bbox="true"
- inkscape:snap-nodes="false"
- objecttolerance="10"
- gridtolerance="10"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- type="xygrid"
- id="grid10393"
- visible="true"
- enabled="true" />
- </sodipodi:namedview>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1">
- <path
- transform="matrix(2.257367,0,0,2.7454598,-1.263726,9.7889628)"
- d="M 17.393564,10.457643 A 6.6449099,2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099,2.3675451 0 1 1 17.393564,10.457643 z"
- sodipodi:ry="2.3675451"
- sodipodi:rx="6.6449099"
- sodipodi:cy="10.457643"
- sodipodi:cx="10.748654"
- id="path17958"
- style="opacity:0.7342342;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;filter:url(#filter11503);enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(2.0549539,0,0,2.0549096,-2.2611787,1.4304378)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17960"
- style="opacity:1;fill:#e08700;fill-opacity:1;stroke:url(#linearGradient10406);stroke-width:0.4878417;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11247"
- style="opacity:1;fill:url(#radialGradient11271);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.904713,0,0,1.904713,-0.4874115,3.0804919)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path11257"
- style="opacity:1;fill:url(#radialGradient11327);fill-opacity:1;stroke:none;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11329"
- d="M 21.499929,17.500003 C 21.499929,21.364001 18.587949,24.500001 14.999965,24.500001 C 11.411983,24.500001 8.4999987,21.364001 8.4999987,17.500003 C 8.4999987,13.636 11.411983,10.5 14.999965,10.5 C 18.587949,10.5 21.499929,13.636 21.499929,17.500003 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11339);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(1.954837,0,0,-1.954837,-1.0791836,45.47002)"
- d="M 21.781414,10.983024 A 9.975256,9.975256 0 1 1 1.8309021,10.983024 A 9.975256,9.975256 0 1 1 21.781414,10.983024 z"
- sodipodi:ry="9.975256"
- sodipodi:rx="9.975256"
- sodipodi:cy="10.983024"
- sodipodi:cx="11.806158"
- id="path17964"
- style="opacity:0.48699999;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.51155168;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path17966"
- d="M 20.499931,17.500002 C 20.499931,20.812 18.03595,23.5 14.999965,23.5 C 11.963984,23.5 9.499999,20.812 9.499999,17.500002 C 9.499999,14.188 11.963984,11.5 14.999965,11.5 C 18.03595,11.5 20.499931,14.188 20.499931,17.500002 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11480);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.9241248,0,0,1.5452869,-12.384324,4.083844)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path17968"
- style="opacity:1;fill:url(#linearGradient11202);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989293,-0.7062659,1.8392838,3.5298496,-13.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11325"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(3.7380737,0.6989296,-0.7062659,1.8392846,3.5298496,-12.968448)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17976"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837947;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-13.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path11323"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- sodipodi:open="true"
- sodipodi:end="5.6135639"
- sodipodi:start="3.5782199"
- transform="matrix(-3.7380737,0.6989293,0.7062659,1.8392838,40.47015,-12.968438)"
- d="M 7.2133909,8.4869402 A 1.2276785,1.7410715 0 0 1 9.288462,8.1425499"
- sodipodi:ry="1.7410715"
- sodipodi:rx="1.2276785"
- sodipodi:cy="9.2232141"
- sodipodi:cx="8.3258924"
- id="path17978"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#a95300;stroke-width:0.36837956;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11482"
- d="M 23.49993,17.500002 C 23.49993,20.812 25.963942,23.5 28.999965,23.5 C 32.035984,23.5 34.499999,20.812 34.499999,17.500002 C 34.499999,14.188 32.035984,11.5 28.999965,11.5 C 25.963942,11.5 23.49993,14.188 23.49993,17.500002 z"
- style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:url(#linearGradient11507);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- transform="matrix(2.9241927,0,0,1.5452869,-0.3849832,4.0838437)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11204"
- style="opacity:1;fill:url(#linearGradient11206);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.9494053,0,0,1.0301913,-2.922785,9.0558958)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11300"
- style="opacity:1;fill:url(#linearGradient11310);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- transform="matrix(1.9494735,0,0,1.0301913,9.0765518,9.0558958)"
- d="M 10.732871,9.6526775 A 1.0259361,1.9413869 0 1 1 8.6809988,9.6526775 A 1.0259361,1.9413869 0 1 1 10.732871,9.6526775 z"
- sodipodi:ry="1.9413869"
- sodipodi:rx="1.0259361"
- sodipodi:cy="9.6526775"
- sodipodi:cx="9.7069349"
- id="path11312"
- style="opacity:1;fill:url(#linearGradient11314);fill-opacity:1;stroke:none;stroke-width:0.98640186;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;enable-background:new"
- sodipodi:type="arc" />
- <path
- id="path11341"
- d="M 35.5,17.500003 C 35.5,21.364001 32.587988,24.500001 28.999966,24.500001 C 25.411946,24.500001 22.49993,21.364001 22.49993,17.500003 C 22.49993,13.636 25.411946,10.5 28.999966,10.5 C 32.587988,10.5 35.5,13.636 35.5,17.500003 z"
- style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient11343);stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;display:inline;enable-background:new" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#radialGradient8722);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path8714"
- sodipodi:cx="44.7687"
- sodipodi:cy="16.003418"
- sodipodi:rx="9.0598059"
- sodipodi:ry="5.3916893"
- d="M 53.828506,16.003418 A 9.0598059,5.3916893 0 1 1 35.708894,16.003418 A 9.0598059,5.3916893 0 1 1 53.828506,16.003418 z"
- transform="matrix(1.0485875,0,0,1.2982945,-25.443899,12.222851)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#radialGradient8738);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path7934"
- sodipodi:cx="44.7687"
- sodipodi:cy="16.003418"
- sodipodi:rx="9.0598059"
- sodipodi:ry="5.3916893"
- d="M 53.828506,16.003418 A 9.0598059,5.3916893 0 1 1 35.708894,16.003418 A 9.0598059,5.3916893 0 1 1 53.828506,16.003418 z"
- transform="matrix(0.93821,0,0,1.1128238,-20.50244,15.191015)" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient8736);stroke-width:0.80703287999999984;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path8728"
- sodipodi:cx="44.7687"
- sodipodi:cy="16.003418"
- sodipodi:rx="9.0598059"
- sodipodi:ry="5.3916893"
- d="M 53.828506,16.003418 A 9.0598059,5.3916893 0 1 1 35.708894,16.003418 A 9.0598059,5.3916893 0 1 1 53.828506,16.003418 z"
- transform="matrix(1.1037765,0,0,1.3910297,-27.91464,10.738771)" />
- </g>
-</svg>
diff --git a/pidgin/artwork/pixmaps/logo.png b/pidgin/artwork/pixmaps/logo.png
deleted file mode 100644
index f16a50ec28..0000000000
--- a/pidgin/artwork/pixmaps/logo.png
+++ /dev/null
Binary files differ
diff --git a/pidgin/artwork/pixmaps/pidgin.ico b/pidgin/artwork/pixmaps/pidgin.ico
deleted file mode 100644
index b215586d1c..0000000000
--- a/pidgin/artwork/pixmaps/pidgin.ico
+++ /dev/null
Binary files differ
diff --git a/pidgin/gtkblist.c b/pidgin/gtkblist.c
index 42734045f1..17a076c129 100644
--- a/pidgin/gtkblist.c
+++ b/pidgin/gtkblist.c
@@ -67,7 +67,6 @@
#include <gdk/gdk.h>
#define HEADLINE_CLOSE_SIZE 12
-#define STEPS 50
typedef struct
{
@@ -168,18 +167,11 @@ typedef enum {
PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE = 1 << 0, /* Whether there's pending message in a conversation */
} PidginBlistNodeFlags;
-typedef enum {
- RECENT_STATUS_NONE = 0,
- RECENT_STATUS_SIGN_ON,
- RECENT_STATUS_SIGN_OFF
-} RecentStatus;
-
typedef struct _pidgin_blist_node {
GtkTreeRowReference *row;
gboolean contact_expanded;
- RecentStatus recent_signonoff;
+ gboolean recent_signonoff;
gint recent_signonoff_timer;
- gint recent_signonoff_steps;
struct {
PurpleConversation *conv;
time_t last_message; /* timestamp for last displayed message */
@@ -3746,11 +3738,11 @@ pidgin_blist_get_status_icon(PurpleBlistNode *node, PidginStatusIconSize size)
p = purple_buddy_get_presence(buddy);
trans = purple_presence_is_idle(p);
- /*if (PURPLE_BUDDY_IS_ONLINE(buddy) && gtkbuddynode && gtkbuddynode->recent_signonoff)
+ if (PURPLE_BUDDY_IS_ONLINE(buddy) && gtkbuddynode && gtkbuddynode->recent_signonoff)
icon = PIDGIN_STOCK_STATUS_LOGIN;
else if (gtkbuddynode && gtkbuddynode->recent_signonoff)
icon = PIDGIN_STOCK_STATUS_LOGOUT;
- else */if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE))
+ else if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE))
if (trans)
icon = PIDGIN_STOCK_STATUS_BUSY_I;
else
@@ -6046,11 +6038,9 @@ static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *n
GdkPixbuf *status, *avatar, *emblem, *prpl_icon;
char *mark;
char *idle = NULL;
- struct _pidgin_blist_node *gtknode = ((PurpleBlistNode*)buddy)->ui_data;
gboolean expanded = ((struct _pidgin_blist_node *)(node->parent->ui_data))->contact_expanded;
gboolean selected = (gtkblist->selected_node == node);
gboolean biglist = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/blist/show_buddy_icons");
- int size;
presence = purple_buddy_get_presence(buddy);
if (editing_blist)
@@ -6059,14 +6049,6 @@ static void buddy_node(PurpleBuddy *buddy, GtkTreeIter *iter, PurpleBlistNode *n
status = pidgin_blist_get_status_icon((PurpleBlistNode*)buddy,
biglist ? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL);
- size = biglist ? 16 : 11;
- if (gtknode->recent_signonoff == RECENT_STATUS_SIGN_ON) {
- size = size / 2 + (size / 2 + (STEPS - gtknode->recent_signonoff_steps)) % (size / 2);
- } else if (gtknode->recent_signonoff == RECENT_STATUS_SIGN_OFF) {
- size = size - (STEPS - gtknode->recent_signonoff_steps) % (size / 2);
- }
- status = gdk_pixbuf_scale_simple(status, size, size, GDK_INTERP_BILINEAR);
-
/* Speed it up if we don't want buddy icons. */
if(biglist)
avatar = pidgin_blist_get_buddy_icon((PurpleBlistNode *)buddy, TRUE, TRUE);
@@ -6198,7 +6180,7 @@ static void pidgin_blist_update_contact(PurpleBuddyList *list, PurpleBlistNode *
BUDDY_ICON_COLUMN, NULL,
CONTACT_EXPANDER_COLUMN, TRUE,
CONTACT_EXPANDER_VISIBLE_COLUMN, TRUE,
- GROUP_EXPANDER_VISIBLE_COLUMN, FALSE,
+ GROUP_EXPANDER_VISIBLE_COLUMN, FALSE,
-1);
g_free(mark);
if(status)
@@ -7150,17 +7132,13 @@ pidgin_blist_get_handle() {
static gboolean buddy_signonoff_timeout_cb(PurpleBuddy *buddy)
{
struct _pidgin_blist_node *gtknode = ((PurpleBlistNode*)buddy)->ui_data;
- gboolean cont = TRUE;
- if (--gtknode->recent_signonoff_steps == 0) {
- gtknode->recent_signonoff = RECENT_STATUS_NONE;
- gtknode->recent_signonoff_timer = 0;
- cont = FALSE;
- }
+ gtknode->recent_signonoff = FALSE;
+ gtknode->recent_signonoff_timer = 0;
pidgin_blist_update(NULL, (PurpleBlistNode*)buddy);
- return cont;
+ return FALSE;
}
static void buddy_signonoff_cb(PurpleBuddy *buddy)
@@ -7173,12 +7151,11 @@ static void buddy_signonoff_cb(PurpleBuddy *buddy)
gtknode = ((PurpleBlistNode*)buddy)->ui_data;
- gtknode->recent_signonoff = PURPLE_BUDDY_IS_ONLINE(buddy) ? RECENT_STATUS_SIGN_ON : RECENT_STATUS_SIGN_OFF;
+ gtknode->recent_signonoff = TRUE;
if(gtknode->recent_signonoff_timer > 0)
purple_timeout_remove(gtknode->recent_signonoff_timer);
- gtknode->recent_signonoff_steps = STEPS;
- gtknode->recent_signonoff_timer = purple_timeout_add(100,
+ gtknode->recent_signonoff_timer = purple_timeout_add(10000,
(GSourceFunc)buddy_signonoff_timeout_cb, buddy);
}
@@ -7655,10 +7632,7 @@ pidgin_blist_update_accounts_menu(void)
gtk_widget_destroy(menuitem);
}
- if (!(accounts = purple_accounts_get_all()))
- return;
-
- for (; accounts; accounts = accounts->next) {
+ for (accounts = purple_accounts_get_all(); accounts; accounts = accounts->next) {
char *buf = NULL;
GtkWidget *image = NULL;
PurpleAccount *account = NULL;
diff --git a/pidgin/gtkimhtmltoolbar.c b/pidgin/gtkimhtmltoolbar.c
index c4156ff3be..a09208b490 100644
--- a/pidgin/gtkimhtmltoolbar.c
+++ b/pidgin/gtkimhtmltoolbar.c
@@ -1146,7 +1146,7 @@ gtk_imhtmltoolbar_finalize (GObject *object)
toolbar);
}
- free(toolbar->sml);
+ g_free(toolbar->sml);
gtk_object_sink(GTK_OBJECT(toolbar->tooltips));
menu = g_object_get_data(object, "font_menu");
diff --git a/pidgin/gtkstatusbox.c b/pidgin/gtkstatusbox.c
index 9fbeab330d..734b4dcec8 100644
--- a/pidgin/gtkstatusbox.c
+++ b/pidgin/gtkstatusbox.c
@@ -2715,7 +2715,6 @@ static void pidgin_status_box_changed(PidginStatusBox *status_box)
gtk_widget_show_all(status_box->vbox);
status_box->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, status_box);
gtk_widget_grab_focus(status_box->imhtml);
- gtk_imhtml_clear(GTK_IMHTML(status_box->imhtml));
}
else
{
diff --git a/pidgin/pixmaps/icons/hicolor/48x48/apps/scalable/pidgin.svg b/pidgin/pixmaps/icons/hicolor/48x48/apps/scalable/pidgin.svg
index d38577f13b..ede1897348 100644
--- a/pidgin/pixmaps/icons/hicolor/48x48/apps/scalable/pidgin.svg
+++ b/pidgin/pixmaps/icons/hicolor/48x48/apps/scalable/pidgin.svg
@@ -23,55 +23,12 @@
<defs
id="defs4347">
<linearGradient
- inkscape:collect="always"
- id="linearGradient9905">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9907" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9909" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9893">
- <stop
- style="stop-color:#ff2de9;stop-opacity:1;"
- offset="0"
- id="stop9895" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.498"
- offset="1"
- id="stop9897" />
- </linearGradient>
- <linearGradient
- id="linearGradient9689"
- inkscape:collect="always">
- <stop
- id="stop9691"
- offset="0"
- style="stop-color:#ffb547;stop-opacity:1" />
- <stop
- id="stop9693"
- offset="1"
- style="stop-color:#e56600;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective100" />
- <linearGradient
id="linearGradient8744"
inkscape:collect="always">
<stop
id="stop8746"
offset="0"
- style="stop-color:#162c5e;stop-opacity:1" />
+ style="stop-color:#7a1d90;stop-opacity:1" />
<stop
id="stop8748"
offset="1"
@@ -81,7 +38,7 @@
inkscape:collect="always"
id="linearGradient8732">
<stop
- style="stop-color:#262f65;stop-opacity:1"
+ style="stop-color:#6b3678;stop-opacity:1;"
offset="0"
id="stop8734" />
<stop
@@ -93,11 +50,11 @@
inkscape:collect="always"
id="linearGradient8904">
<stop
- style="stop-color:#649fdd;stop-opacity:1"
+ style="stop-color:#729fcf;stop-opacity:1;"
offset="0"
id="stop8906" />
<stop
- style="stop-color:#184779;stop-opacity:1"
+ style="stop-color:#25486d;stop-opacity:1"
offset="1"
id="stop8908" />
</linearGradient>
@@ -109,7 +66,7 @@
offset="0"
id="stop8886" />
<stop
- style="stop-color:#3c2375;stop-opacity:1"
+ style="stop-color:#6b3e75;stop-opacity:1"
offset="1"
id="stop8888" />
</linearGradient>
@@ -121,12 +78,24 @@
offset="0"
id="stop8878" />
<stop
- style="stop-color:#472d7e;stop-opacity:1"
+ style="stop-color:#744380;stop-opacity:1"
offset="1"
id="stop8880" />
</linearGradient>
<linearGradient
inkscape:collect="always"
+ id="linearGradient8868">
+ <stop
+ style="stop-color:#3b1941;stop-opacity:1;"
+ offset="0"
+ id="stop8870" />
+ <stop
+ style="stop-color:#a646b7;stop-opacity:1"
+ offset="1"
+ id="stop8872" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
id="linearGradient8860">
<stop
style="stop-color:#3b1941;stop-opacity:1;"
@@ -138,6 +107,18 @@
id="stop8864" />
</linearGradient>
<linearGradient
+ inkscape:collect="always"
+ id="linearGradient8848">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop8850" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop8852" />
+ </linearGradient>
+ <linearGradient
id="linearGradient8820"
inkscape:collect="always">
<stop
@@ -189,7 +170,7 @@
inkscape:collect="always"
id="linearGradient2826">
<stop
- style="stop-color:#552b72;stop-opacity:1"
+ style="stop-color:#3b1941;stop-opacity:1;"
offset="0"
id="stop2828" />
<stop
@@ -205,7 +186,7 @@
offset="0"
id="stop2818" />
<stop
- style="stop-color:#b077ee;stop-opacity:1"
+ style="stop-color:#eeeeec;stop-opacity:0;"
offset="1"
id="stop2820" />
</linearGradient>
@@ -217,7 +198,7 @@
offset="0"
id="stop6539" />
<stop
- style="stop-color:#cce1f9;stop-opacity:1"
+ style="stop-color:#d3e1f1;stop-opacity:1"
offset="1"
id="stop6541" />
</linearGradient>
@@ -225,7 +206,7 @@
inkscape:collect="always"
id="linearGradient6506">
<stop
- style="stop-color:#ffffff;stop-opacity:1"
+ style="stop-color:#ffffff;stop-opacity:0.95477384"
offset="0"
id="stop6508" />
<stop
@@ -233,16 +214,26 @@
offset="1"
id="stop6510" />
</linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6506"
+ id="linearGradient6512"
+ x1="15.645709"
+ y1="40.668503"
+ x2="15.645709"
+ y2="47.022106"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.988192,1.5624997,-2.39645)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2816"
id="radialGradient2824"
- cx="14.914475"
- cy="26.467632"
- fx="14.914475"
- fy="26.467632"
+ cx="14.930223"
+ cy="25.801632"
+ fx="14.930223"
+ fy="25.801632"
r="16.390338"
- gradientTransform="matrix(0.6426095,-5.3927465e-3,6.3214714e-3,0.753278,9.3247223,4.0470884)"
+ gradientTransform="matrix(1.3364897,0,0,1.3894845,-0.759152,-10.711989)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
@@ -251,7 +242,7 @@
x1="13.191773"
y1="41.606163"
x2="13.191773"
- y2="48.688236"
+ y2="49.067719"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)" />
<linearGradient
@@ -266,7 +257,7 @@
gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)" />
<linearGradient
inkscape:collect="always"
- xlink:href="#linearGradient9689"
+ xlink:href="#linearGradient8686"
id="linearGradient8692"
x1="18.5"
y1="29.911009"
@@ -314,6 +305,24 @@
y2="30.188351" />
<linearGradient
inkscape:collect="always"
+ xlink:href="#linearGradient8848"
+ id="linearGradient8854"
+ x1="10.48653"
+ y1="25.21174"
+ x2="9.7512932"
+ y2="23.675837"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8848"
+ id="linearGradient8858"
+ gradientUnits="userSpaceOnUse"
+ x1="10.498732"
+ y1="24.936121"
+ x2="9.6415968"
+ y2="23.675837" />
+ <linearGradient
+ inkscape:collect="always"
xlink:href="#linearGradient8860"
id="linearGradient8866"
x1="13.061977"
@@ -324,21 +333,31 @@
gradientTransform="matrix(1.50247,0,0,1,-6.5946403,-2.139701)" />
<linearGradient
inkscape:collect="always"
+ xlink:href="#linearGradient8868"
+ id="linearGradient8874"
+ x1="12.409452"
+ y1="10.602999"
+ x2="16.140554"
+ y2="13.895189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.236264,0,0,0.549587,-5.4828863,3.775206)" />
+ <linearGradient
+ inkscape:collect="always"
xlink:href="#linearGradient8876"
id="linearGradient8882"
x1="10.46875"
- y1="26.726713"
- x2="9.7964153"
- y2="19.333946"
+ y1="25.3125"
+ x2="9.53125"
+ y2="19.6875"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient8884"
id="linearGradient8890"
- x1="24.973602"
- y1="24.961956"
+ x1="23.881994"
+ y1="24.343237"
x2="24.973602"
- y2="18.863159"
+ y2="19.216713"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
@@ -377,323 +396,6 @@
y1="4.8871226"
x2="30.5"
y2="22.781603" />
- <inkscape:perspective
- id="perspective7946"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 526.18109 : 1"
- sodipodi:type="inkscape:persp3d" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8860"
- id="radialGradient8780"
- cx="12.809438"
- cy="7.5702162"
- fx="12.809438"
- fy="7.5702162"
- r="5.140625"
- gradientTransform="matrix(1,0,0,0.4138305,0,5.4390103)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.4138305,0,5.4390103)"
- r="5.140625"
- fy="7.5702162"
- fx="12.809438"
- cy="7.5702162"
- cx="12.809438"
- id="radialGradient9297"
- xlink:href="#linearGradient8860"
- inkscape:collect="always" />
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective9295" />
- <linearGradient
- y2="22.781603"
- x2="30.5"
- y1="4.8871226"
- x1="30.5"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9293"
- xlink:href="#linearGradient6537"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(-1,0,0,1,37.022732,0)"
- y2="43.352409"
- x2="4.0852318"
- y1="40.416641"
- x1="4.0852318"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9291"
- xlink:href="#linearGradient8732"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="44.321774"
- x2="4.0852318"
- y1="39.097038"
- x1="4.0852318"
- id="linearGradient9289"
- xlink:href="#linearGradient8744"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="33.678783"
- x2="41.875"
- y1="1.8037834"
- x1="26.125"
- id="linearGradient9287"
- xlink:href="#linearGradient8904"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="18.863159"
- x2="24.973602"
- y1="24.961956"
- x1="24.973602"
- id="linearGradient9285"
- xlink:href="#linearGradient8884"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="19.333946"
- x2="9.7964153"
- y1="26.726713"
- x1="10.46875"
- id="linearGradient9283"
- xlink:href="#linearGradient8876"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1.50247,0,0,1,-6.5946403,-2.139701)"
- gradientUnits="userSpaceOnUse"
- y2="12.891665"
- x2="16.545418"
- y1="10.027351"
- x1="13.061977"
- id="linearGradient9281"
- xlink:href="#linearGradient8860"
- inkscape:collect="always" />
- <linearGradient
- y2="23.675837"
- x2="9.6415968"
- y1="24.936121"
- x1="10.498732"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8858"
- xlink:href="#linearGradient8848"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="23.675837"
- x2="9.7512932"
- y1="25.21174"
- x1="10.48653"
- id="linearGradient8854"
- xlink:href="#linearGradient8848"
- inkscape:collect="always" />
- <linearGradient
- y2="30.188351"
- x2="18.143806"
- y1="29.494703"
- x1="17.969458"
- gradientUnits="userSpaceOnUse"
- id="linearGradient9277"
- xlink:href="#linearGradient8808"
- inkscape:collect="always" />
- <linearGradient
- gradientUnits="userSpaceOnUse"
- y2="30.431053"
- x2="18.031723"
- y1="29.338558"
- x1="18.339697"
- id="linearGradient9275"
- xlink:href="#linearGradient8820"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1.0769231,0,0,1.1428571,-0.905101,-4.6800586)"
- gradientUnits="userSpaceOnUse"
- y2="29.853554"
- x2="19.985121"
- y1="29.911009"
- x1="18.5"
- id="linearGradient9265"
- xlink:href="#linearGradient8686"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)"
- gradientUnits="userSpaceOnUse"
- y2="47.757988"
- x2="11.373499"
- y1="43.444576"
- x1="11.373499"
- id="linearGradient9263"
- xlink:href="#linearGradient2834"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,0.988192,1.4473537,-2.486208)"
- gradientUnits="userSpaceOnUse"
- y2="49.067719"
- x2="13.191773"
- y1="41.606163"
- x1="13.191773"
- id="linearGradient9261"
- xlink:href="#linearGradient2826"
- inkscape:collect="always" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6426095,-5.3927465e-3,6.3214714e-3,0.753278,9.3247223,4.0470884)"
- r="16.390338"
- fy="26.467632"
- fx="14.914475"
- cy="26.467632"
- cx="14.914475"
- id="radialGradient9259"
- xlink:href="#linearGradient2816"
- inkscape:collect="always" />
- <linearGradient
- gradientTransform="matrix(1,0,0,0.988192,1.5624997,-2.39645)"
- gradientUnits="userSpaceOnUse"
- y2="47.022106"
- x2="15.645709"
- y1="40.668503"
- x1="15.645709"
- id="linearGradient9257"
- xlink:href="#linearGradient6506"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient8848"
- inkscape:collect="always">
- <stop
- id="stop8850"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop8852"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- id="perspective9168"
- inkscape:persp3d-origin="24 : 16 : 1"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 24 : 1"
- sodipodi:type="inkscape:persp3d" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8860"
- id="radialGradient9363"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.4138305,0,5.4390103)"
- cx="12.809438"
- cy="7.5702162"
- fx="12.809438"
- fy="7.5702162"
- r="5.140625" />
- <linearGradient
- gradientTransform="matrix(0.6875001,0,0,0.6767003,-0.4687499,-0.5159997)"
- y2="37.801281"
- x2="42.829762"
- y1="6.8962817"
- x1="29.466667"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8280"
- xlink:href="#linearGradient8904"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8820"
- id="linearGradient9520"
- x1="18.097515"
- y1="29.72571"
- x2="18.031723"
- y2="30.431053"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8808"
- id="linearGradient9518"
- gradientUnits="userSpaceOnUse"
- x1="18.097515"
- y1="29.72571"
- x2="18.143806"
- y2="30.188351" />
- <inkscape:perspective
- id="perspective9485"
- inkscape:persp3d-origin="16 : 10.666667 : 1"
- inkscape:vp_z="32 : 16 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 16 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient6506"
- id="linearGradient9651"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.988192,1.5624997,-2.39645)"
- x1="24.027578"
- y1="2.4785707"
- x2="16.983839"
- y2="70.046394" />
- <filter
- inkscape:collect="always"
- id="filter9685"
- x="-0.29886015"
- width="1.5977203"
- y="-0.49649348"
- height="1.992987">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.1336762"
- id="feGaussianBlur9687" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter9811"
- x="-0.81284236"
- width="2.6256847"
- y="-0.52522121"
- height="2.0504424">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.2573014"
- id="feGaussianBlur9813" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter9889"
- x="-0.24442129"
- width="1.4888426"
- y="-0.20170113"
- height="1.4034023">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.4272566"
- id="feGaussianBlur9891" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9893"
- id="linearGradient9899"
- x1="17.854447"
- y1="23.295456"
- x2="21.566757"
- y2="23.295456"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9905"
- id="linearGradient9911"
- x1="5.90625"
- y1="23"
- x2="11.291513"
- y2="20.405081"
- gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
@@ -702,16 +404,16 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="5.6568543"
- inkscape:cx="73.497233"
- inkscape:cy="20.402636"
+ inkscape:zoom="2.828427"
+ inkscape:cx="63.722923"
+ inkscape:cy="33.120105"
inkscape:current-layer="layer1"
- showgrid="false"
+ showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
- inkscape:window-width="1440"
- inkscape:window-height="848"
- inkscape:window-x="0"
+ inkscape:window-width="1434"
+ inkscape:window-height="840"
+ inkscape:window-x="-2"
inkscape:window-y="0"
showguides="true"
inkscape:guide-bbox="true"
@@ -761,39 +463,25 @@
rx="0.81387848"
ry="0.93014681" />
<path
- style="fill:url(#radialGradient8780);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 12.75 7.15625 C 12.115339 7.1849256 11.504585 7.3489361 10.96875 7.6875 C 10.96875 7.6875 14.502372 8.292676 15.15625 10.1875 C 13.96441 9.115271 10.258623 8.3895059 8.90625 9.9375 C 8.90625 9.9375 12.96534 9.7931625 11.75 11.40625 L 15.53125 10.875 C 15.53125 10.837265 15.507609 10.787801 15.5 10.75 L 19.1875 10.75 C 18.766317 9.4043172 15.500198 7.0319893 12.75 7.15625 z "
- id="rect5189" />
+ style="fill:url(#linearGradient8866);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 10.968089,7.6821669 C 13.825874,5.8764931 18.683474,9.095739 19.201853,10.751964 L 15.25649,10.751964 C 15.19399,8.408214 10.968089,7.6821669 10.968089,7.6821669 z"
+ id="rect5189"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:url(#linearGradient8874);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 8.9209727,9.9271812 C 10.543462,8.0699992 15.5336,9.5097671 15.5336,10.860297 L 11.743475,11.411821 C 12.958815,9.7987339 8.9209727,9.9271812 8.9209727,9.9271812 z"
+ id="path5192"
+ sodipodi:nodetypes="cccc" />
<path
style="opacity:1;fill:url(#linearGradient2840);fill-opacity:1;stroke:url(#linearGradient2832);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.447354,10.481822 C 9.8233516,10.481822 3.9308558,15.93012 4.5098537,22.712688 C 5.7768579,37.554787 1.9403503,35.543378 1.5,42.316391 C 1.5,44.375904 2.4854201,45.355587 4.5920502,45.355587 C 5.7795388,45.355587 30.807389,45.5 33.498388,45.5 C 35.612515,45.5 35.447354,43.46472 35.447354,43.46472 C 35.447354,40.830782 29.045256,38.620654 27.260807,36.687231 C 25.432389,34.709838 27.447354,27.653648 27.447354,27.653648 C 28.08866,26.141912 28.447354,24.466812 28.447354,22.712688 C 28.447354,15.894164 23.071356,10.481822 16.447354,10.481822 z"
id="path5176"
sodipodi:nodetypes="cscccszcsc" />
<path
- style="opacity:0.55000000000000004;fill:url(#radialGradient2824);fill-opacity:1;stroke:url(#linearGradient9651);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-opacity:1"
- d="M 16.25,11.5 C 10.237704,11.5 5.0276636,16.611038 5.4999997,22.834065 C 5.5006447,22.842563 5.5012886,22.851054 5.5019315,22.85954 C 6.063858,30.276194 5.8154539,32.826976 4.0236672,37.541192 C 1.1437418,42.286379 3.1235207,44.533069 5.4658637,44.533069 C 7.4024447,44.533069 25.520621,44.503627 31.346594,44.503627 C 32.513801,44.503627 34.5,45.001748 34.5,43.554478 C 34.5,43.335354 34.300249,42.923343 33.75,42.411881 C 33.199751,41.90042 32.37676,41.351214 31.46875,40.806069 C 30.56074,40.260924 29.59071,39.709456 28.71875,39.169376 C 27.84679,38.629297 27.074154,38.125147 26.53125,37.409159 C 25.921245,36.604678 25.641306,35.658991 25.586842,34.629869 C 25.532378,33.600747 25.670221,32.49665 25.787061,31.449126 C 26.020741,29.354077 26.53125,27.527239 26.53125,27.527239 C 26.54624,27.4637 26.567163,27.401673 26.59375,27.341953 C 27.181231,25.957097 27.5,24.414481 27.5,22.802446 C 27.5,16.531779 22.272436,11.5 16.25,11.5 z"
+ style="opacity:0.55000000000000004;fill:url(#radialGradient2824);fill-opacity:1;stroke:url(#linearGradient6512);stroke-width:0.99999994000000003;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 16.25,11.5 C 10.237704,11.5 5.0276636,16.611038 5.4999997,22.834065 C 6.0644244,30.27036 5.8175038,32.821583 4.0236672,37.541192 C 1.1437418,42.286379 3.1235207,44.533069 5.4658637,44.533069 C 7.4024447,44.533069 25.520621,44.503627 31.346594,44.503627 C 32.513801,44.503627 34.5,45.001748 34.5,43.554478 C 34.5,43.335354 34.300249,42.923343 33.75,42.411881 C 33.199751,41.90042 32.37676,41.351214 31.46875,40.806069 C 30.56074,40.260924 29.59071,39.709456 28.71875,39.169376 C 27.84679,38.629297 27.074154,38.125147 26.53125,37.409159 C 25.921245,36.604678 25.641306,35.658991 25.586842,34.629869 C 25.532378,33.600747 25.670221,32.49665 25.787061,31.449126 C 26.020741,29.354077 26.53125,27.527239 26.53125,27.527239 C 26.54624,27.4637 26.567163,27.401673 26.59375,27.341953 C 27.181231,25.957097 27.5,24.414481 27.5,22.802446 C 27.5,16.531779 22.272436,11.5 16.25,11.5 z"
id="path5241"
- sodipodi:nodetypes="csscccssssssscssc" />
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:#b87bf7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9685);enable-background:accumulate"
- id="path8782"
- sodipodi:cx="18.075417"
- sodipodi:cy="17.064077"
- sodipodi:rx="4.552"
- sodipodi:ry="2.7400389"
- d="M 22.627417,17.064077 A 4.552,2.7400389 0 1 1 13.523417,17.064077 A 4.552,2.7400389 0 1 1 22.627417,17.064077 z"
- transform="matrix(1.1235721,0,0,1.2773541,-2.423533,-4.2968681)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.25;fill:url(#linearGradient9899);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9889);enable-background:accumulate"
- id="path9815"
- sodipodi:cx="19.710602"
- sodipodi:cy="23.295456"
- sodipodi:rx="1.8561553"
- sodipodi:ry="2.8726213"
- d="M 21.566757,23.295456 A 1.8561553,2.8726213 0 1 1 17.854447,23.295456 A 1.8561553,2.8726213 0 1 1 21.566757,23.295456 z"
- transform="matrix(8.4928046e-8,4.9721706,2.9846154,0,-50.922233,-71.70382)" />
+ sodipodi:nodetypes="cscccssssssscssc" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="1.0174263"
@@ -801,7 +489,7 @@
style="opacity:1;fill:url(#linearGradient8882);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
id="path8838"
d="M 9.96875,17.96875 C 8.6328774,17.96875 7.5286409,18.753017 6.875,19.71875 C 6.2213591,20.684483 5.9062499,21.848884 5.90625,23 C 5.90625,25.694817 7.8977844,28.03125 10.46875,28.03125 C 11.539674,28.03125 12.596335,27.527372 13.46875,26.71875 C 14.341165,25.910128 15.03125,24.709464 15.03125,23.28125 C 15.03125,22.003744 14.362496,20.808851 13.46875,19.8125 C 12.575004,18.816149 11.384009,17.96875 9.96875,17.96875 z"
- transform="translate(1.09375,-0.9687531)" />
+ transform="translate(1.09375,-0.96875)" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
d="M 15.09375,22.321339 C 15.09375,24.52934 12.987869,26.03125 11.567428,26.03125 C 9.6208995,26.03125 8.0411075,24.239249 8.0411075,22.031249 C 8.0411075,20.112462 9.1240375,18.03125 11.070566,18.03125 C 13.017097,18.03125 15.09375,20.576941 15.09375,22.321339 z"
@@ -819,7 +507,7 @@
transform="matrix(1.237779,0,0,1.544828,-1.0301916,-15.38768)" />
<path
sodipodi:type="arc"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="opacity:1;fill:url(#linearGradient8854);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5164"
sodipodi:cx="10.169642"
sodipodi:cy="24.3125"
@@ -834,10 +522,10 @@
style="opacity:1;fill:url(#linearGradient8890);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
id="path8846"
d="M 24.6875,17.96875 C 23.636213,18.009185 22.683031,18.409233 22.03125,19.125 C 20.466122,20.843786 20.678782,23.580894 22.3125,25.375 C 23.011072,26.142154 23.917332,26.724837 24.9375,26.9375 C 25.957668,27.150163 27.151401,26.89759 27.96875,26 C 28.842555,25.04041 29.039766,23.753975 28.96875,22.53125 C 28.897734,21.308525 28.565932,20.111716 27.78125,19.25 C 26.906665,18.289553 25.728905,17.928695 24.6875,17.96875 z"
- transform="translate(1.0348213,-0.9657741)" />
+ transform="translate(1.0348213,-0.9657729)" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1"
- d="M 28.088692,18.950685 C 26.78423,17.518158 24.662074,17.899807 23.829158,18.814492 C 22.687755,20.067952 22.820093,22.247881 24.124557,23.680409 C 25.258155,24.925297 27.122721,25.578218 28.264124,24.32476 C 29.405528,23.0713 29.119266,20.082432 28.088692,18.950685 z"
+ d="M 28.07086,18.984912 C 26.766398,17.552385 24.644242,17.934034 23.811326,18.848719 C 22.669923,20.102179 22.802261,22.282108 24.106725,23.714636 C 25.240323,24.959524 27.104889,25.612445 28.246292,24.358987 C 29.387696,23.105527 29.101434,20.116659 28.07086,18.984912 z"
id="path5169"
sodipodi:nodetypes="csssc" />
<path
@@ -857,25 +545,15 @@
id="path8696"
sodipodi:nodetypes="cssscccsccccsssc" />
<path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;filter:url(#filter9811);enable-background:accumulate"
- id="path9701"
- sodipodi:cx="19.710602"
- sodipodi:cy="23.295456"
- sodipodi:rx="1.8561553"
- sodipodi:ry="2.8726213"
- d="M 21.566757,23.295456 A 1.8561553,2.8726213 0 1 1 17.854447,23.295456 A 1.8561553,2.8726213 0 1 1 21.566757,23.295456 z"
- transform="matrix(1.6864563,0,0,1.5538462,-14.149186,-11.929827)" />
- <path
sodipodi:type="inkscape:offset"
inkscape:radius="0.36336106"
inkscape:original="M 15.8125 27 C 15.361611 27 15 27.422198 15 27.9375 C 15 28.452801 15.361612 28.874999 15.8125 28.875 L 21.1875 28.875 C 21.638389 28.875 22 28.452801 22 27.9375 C 22 27.422199 21.638389 27 21.1875 27 L 15.8125 27 z "
style="opacity:1;fill:#5c3566;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter8792)"
id="path8738"
d="M 15.8125,26.625 C 15.134785,26.625 14.625,27.252207 14.625,27.9375 C 14.625,28.622793 15.134785,29.249998 15.8125,29.25 L 21.1875,29.25 C 21.865216,29.25 22.375,28.622793 22.375,27.9375 C 22.375,27.252207 21.865216,26.625 21.1875,26.625 L 15.8125,26.625 z"
- transform="matrix(1.0403226,0,0,1.1666667,0.1470082,-5.4657729)" />
+ transform="translate(1.0492259,-0.5907729)" />
<rect
- style="opacity:1;fill:#f8eaba;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5215"
width="7"
height="1.8602936"
@@ -890,27 +568,27 @@
sodipodi:nodetypes="czccc" />
<path
sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient8814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="opacity:0.61111109;fill:url(#linearGradient8814);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path8806"
sodipodi:cx="18.097515"
sodipodi:cy="29.72571"
sodipodi:rx="0.28726214"
sodipodi:ry="0.6408155"
d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
- transform="matrix(-1.0945752,0.9356227,0.6067766,1.5209514,23.272227,-33.155044)" />
+ transform="matrix(-1.0945752,0.9356227,0.6067766,1.5209514,23.290203,-33.120817)" />
<path
sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient8818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ style="opacity:0.61111109;fill:url(#linearGradient8818);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="path8816"
sodipodi:cx="18.097515"
sodipodi:cy="29.72571"
sodipodi:rx="0.28726214"
sodipodi:ry="0.6408155"
d="M 18.384777,29.72571 A 0.28726214,0.6408155 0 1 1 17.810253,29.72571 A 0.28726214,0.6408155 0 1 1 18.384777,29.72571 z"
- transform="matrix(1.0945741,0.9356227,-0.606776,1.5209514,16.727776,-33.132569)" />
+ transform="matrix(1.0945741,0.9356227,-0.606776,1.5209514,16.745752,-33.098342)" />
<path
sodipodi:type="arc"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ style="opacity:1;fill:url(#linearGradient8858);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path8856"
sodipodi:cx="10.169642"
sodipodi:cy="24.3125"
@@ -928,38 +606,5 @@
d="M 33.647731,44.9375 C 35.272732,44.5625 36.772732,42.5625 28.772731,38.5625 C 29.124668,42.695473 26.022731,44.375 26.022731,44.375 L 33.647731,44.9375 z"
id="path8740"
sodipodi:nodetypes="cccc" />
- <image
- y="-12"
- x="50"
- id="image7948"
- height="69.54084"
- width="69.54084"
- sodipodi:absref="/home/hbons/Bureaublad/pidgin-oxygen.png"
- xlink:href="/home/hbons/Bureaublad/pidgin-oxygen.png" />
- <path
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:0.55"
- d="M 19.999895,26.990381 C 20.503282,27.702861 21.154686,31.031198 21.018582,33.998949 C 19.248555,31.850235 20.467226,29.772496 19.999895,26.990381 z"
- id="rect9034"
- sodipodi:nodetypes="ccc" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path9045"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(0.4028774,0,0,0.3862069,7.4028807,12.110344)" />
- <path
- sodipodi:type="arc"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path9047"
- sodipodi:cx="10.169642"
- sodipodi:cy="24.3125"
- sodipodi:rx="1.2410715"
- sodipodi:ry="1.2946428"
- d="M 11.410714,24.3125 A 1.2410715,1.2946428 0 1 1 8.928571,24.3125 A 1.2410715,1.2946428 0 1 1 11.410714,24.3125 z"
- transform="matrix(0.4028775,0,0,0.3862069,21.40288,12.110344)" />
</g>
</svg>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 42b3400892..43cc471777 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -183,6 +183,8 @@ libpurple/status.c
libpurple/util.c
libpurple/win32/libc_interface.c
pidgin.desktop.in
+pidgin/artwork/hicolor/24x24/emotes/default.theme.in
+pidgin/artwork/hicolor/24x24/emotes/none/none.theme.in
pidgin/eggtrayicon.c
pidgin/gtkaccount.c
pidgin/gtkblist.c
@@ -214,6 +216,7 @@ pidgin/gtkutils.c
pidgin/gtkwhiteboard.c
pidgin/pidgin.h
pidgin/pidgincombobox.c
+pidgin/pidginstock-artwork.c
pidgin/pidginstock.c
pidgin/pidgintooltip.c
pidgin/pixmaps/emotes/default/24/default.theme.in