diff options
author | jgeboski <jgeboski@gmail.com> | 2015-06-15 15:57:22 +0300 |
---|---|---|
committer | jgeboski <jgeboski@gmail.com> | 2015-06-15 16:41:54 +0300 |
commit | cc769823b91a1b77363f7c15898774027d2cfe82 (patch) | |
tree | 397b57f0292640151725c2c8e6bb5fb9f138c65b |
Initial commitdownloads
-rw-r--r-- | .gitignore | 20 | ||||
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | COPYING | 339 | ||||
-rw-r--r-- | ChangeLog | 0 | ||||
-rw-r--r-- | Makefile.am | 9 | ||||
-rw-r--r-- | NEWS | 0 | ||||
-rw-r--r-- | README | 32 | ||||
l--------- | README.md | 1 | ||||
-rwxr-xr-x | autogen.sh | 15 | ||||
-rw-r--r-- | configure.ac | 110 | ||||
-rw-r--r-- | include/internal.h | 32 | ||||
-rw-r--r-- | include/purple-compat.h | 81 | ||||
-rw-r--r-- | patches/01-makefile.patch | 29 | ||||
-rw-r--r-- | patches/02-plugin.patch | 259 | ||||
-rwxr-xr-x | update.sh | 40 |
15 files changed, 968 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac7abe0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +*.la +*.lo +*.o +*.tar.* +.deps +.libs +aclocal.m4 +autom4te.cache +build-aux +config.log +config.status +configure +include +INSTALL +libtool +libtool.m4 +lt*.m4 +Makefile +Makefile.in +pidgin @@ -0,0 +1 @@ +James Geboski <jgeboski@gmail.com> @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/ChangeLog diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..00c5ffa --- /dev/null +++ b/Makefile.am @@ -0,0 +1,9 @@ +ACLOCAL_AMFLAGS = -Im4 +SUBDIRS = pidgin/libpurple/protocols/facebook + +EXTRA_DIST = \ + autogen.sh \ + include \ + patches \ + pidgin/libpurple/glibcompat.h \ + update.sh @@ -0,0 +1,32 @@ +Purple Facebook implements the Facebook Messenger protocol into pidgin, +finch, and libpurple. While the primary implementation is for purple3, +this plugin is back-ported for purple2. + +## Installing Prebuilt Binaries + +Precompiled binaries can be downloaded from the releases section of +GitHub. Then follow the generic instructions provided on the Pidgin +website. + +https://developer.pidgin.im/wiki/ThirdPartyPlugins#InstallingPlugins + +## Building and Installing + +Make sure glib, json-glib, libpurple (pidgin), and zlib are installed +with their headers and development information. If these packages came +from the distribution's repository, they will likely need additional +development packages, usually suffixed with -dev. + + $ git clone https://github.com/jgeboski/purple-facebook.git + $ cd purple-facebook + $ ./autogen.sh + $ make + +With a "global" (or system) installation: + + $ make install + +Or with a "local" installation: + + $ mkdir -p ~/.purple/plugins + $ cp pidgin/libpurple/protocols/facebook/.libs/libfacebook.so ~/.purple/plugins diff --git a/README.md b/README.md new file mode 120000 index 0000000..100b938 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +README
\ No newline at end of file diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..e523005 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +test -z "$srcdir" && srcdir=$(dirname "$0") +test -z "$srcdir" && srcdir=. + +cwd=$(pwd) +cd "$srcdir" + +./update.sh + +mkdir -p m4 +autoreconf --verbose --force --install || exit $? + +cd "$cwd" +"$srcdir/configure" $@ diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..2f8bdc3 --- /dev/null +++ b/configure.ac @@ -0,0 +1,110 @@ +# Copyright 2015 James Geboski <jgeboski@gmail.com> +# +# 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, see <http://www.gnu.org/licenses/>. + +AC_INIT( + [purple-facebook], + [0.1.0], + [https://github.com/jgeboski/purple-facebook/issues], + [purple-facebook], + [https://github.com/jgeboski/purple-facebook], + [] +) + +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) +AM_INIT_AUTOMAKE([subdir-objects]) + +AC_PROG_CC +AM_PROG_CC_C_O + +AC_DISABLE_STATIC +AC_PROG_LIBTOOL + +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Define PKG_CHECK_VAR() for pkg-config < 0.28 +m4_define_default( + [PKG_CHECK_VAR], + [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config]) + AS_IF([test -z "$$1"], [$1=`$PKG_CONFIG --variable="$3" "$2"`]) + AS_IF([test -n "$$1"], [$4], [$5])] +) + +AC_ARG_ENABLE( + [debug], + [AS_HELP_STRING( + [--enable-debug], + [Enable debugging features] + )], + [DEBUG="yes"], + [DEBUG="no"] +) + +AC_ARG_ENABLE( + [minimal-flags], + [AS_HELP_STRING( + [--enable-minimal-flags], + [Disable internal CFLAGS which are not required] + )], + [MINIMAL_FLAGS="yes"], + [MINIMAL_FLAGS="no"] +) + +AS_IF( + [test "x$DEBUG" == "xyes"], + [AS_IF( + [test "x$MINIMAL_FLAGS" == "xno"], + [CFLAGS="$CFLAGS -Wall -Wformat-nonliteral -g -O0" + CFLAGS="$CFLAGS -Wno-unused-variable -Wno-unused-but-set-variable"] + )] +) + +AC_ARG_WITH( + [plugindir], + [AS_HELP_STRING( + [--with-plugindir], + [libpurple plugin directory] + )], + [PURPLE_PLUGINDIR="$with_plugindir"] +) + +PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.32.0]) +PKG_CHECK_MODULES([JSON], [json-glib-1.0 >= 0.14.0]) +PKG_CHECK_MODULES([PURPLE], [purple <= 3]) +PKG_CHECK_MODULES([ZLIB], [zlib]) +PKG_CHECK_VAR([GLIB_GENMARSHAL], [glib-2.0], [glib_genmarshal]) + +AS_IF( + [test -z "$PURPLE_PLUGINDIR"], + [PKG_CHECK_VAR( + [PURPLE_PLUGINDIR], + [purple], + [plugindir], + [PURPLE_PLUGINDIR="$PURPLE_PLUGINDIR"], + [PURPLE_PLUGINDIR="$libdir/purple-2"] + )] +) + +PLUGIN_CFLAGS="-I`pwd`/$srcdir/include -I`pwd`/$srcdir/pidgin" +PLUGIN_CFLAGS="$PLUGIN_CFLAGS -DPURPLE_PLUGINS -include purple-compat.h" +AC_SUBST([PLUGIN_CFLAGS]) + +AM_CONDITIONAL([STATIC_FACEBOOK], false) +AC_SUBST([PLUGIN_LDFLAGS], [-avoid-version]) +AC_SUBST([PURPLE_LIBS], ["$GLIB_LIBS $JSON_LIBS $PURPLE_LIBS $ZLIB_LIBS"]) + +AC_CONFIG_FILES([Makefile pidgin/libpurple/protocols/facebook/Makefile]) +AC_OUTPUT diff --git a/include/internal.h b/include/internal.h new file mode 100644 index 0000000..465ef3c --- /dev/null +++ b/include/internal.h @@ -0,0 +1,32 @@ +/* + * Copyright 2015 James Geboski <jgeboski@gmail.com> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _PURPLE_INTERNAL_H_ +#define _PURPLE_INTERNAL_H_ + +#include <errno.h> +#include <glib.h> +#include <glib/gi18n.h> +#include <locale.h> + +void +_purple_socket_init(void); + +void +_purple_socket_uninit(void); + +#endif /* _PURPLE_INTERNAL_H_ */ diff --git a/include/purple-compat.h b/include/purple-compat.h new file mode 100644 index 0000000..795dbbd --- /dev/null +++ b/include/purple-compat.h @@ -0,0 +1,81 @@ +/* + * Copyright 2015 James Geboski <jgeboski@gmail.com> + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef _PURPLE_COMPAT_H_ +#define _PURPLE_COMPAT_H_ + +#include "connection.h" +#include "notify.h" +#include "prpl.h" +#include "request.h" + +#undef purple_notify_error + +#define PurpleChatConversation PurpleConvChat +#define PurpleIMTypingState PurpleTypingState +#define PurpleMessage const gchar +#define PurpleProtocol void +#define PurpleRequestCommonParameters void + +#define PURPLE_CONNECTION_CONNECTED PURPLE_CONNECTED +#define PURPLE_IM_NOT_TYPING PURPLE_NOT_TYPING +#define PURPLE_IM_TYPING PURPLE_TYPING + +#define PURPLE_CONVERSATION purple_conv_chat_get_conversation +#define PURPLE_IS_CONNECTION(c) ((c) != NULL) + +#define purple_account_get_private_alias purple_account_get_alias +#define purple_account_set_private_alias purple_account_set_alias +#define purple_blist_get_default_group() NULL +#define purple_blist_find_buddies purple_find_buddies +#define purple_blist_find_buddy purple_find_buddy +#define purple_connection_error purple_connection_error_reason +#define purple_connection_is_disconnecting(c) FALSE +#define purple_chat_conversation_add_user purple_conv_chat_add_user +#define purple_chat_conversation_get_id purple_conv_chat_get_id +#define purple_chat_conversation_set_topic purple_conv_chat_set_topic +#define purple_proxy_info_get_proxy_type purple_proxy_info_get_type +#define purple_request_cpar_from_connection(c) NULL +#define purple_roomlist_get_account(l) ((l)->account) +#define purple_serv_got_chat_in serv_got_chat_in +#define purple_serv_got_im serv_got_im +#define purple_serv_got_typing serv_got_typing +#define purple_serv_got_typing_stopped serv_got_typing_stopped +#define purple_serv_join_chat serv_join_chat + +#define purple_conversations_find_chat(c, i) \ + purple_conversation_get_chat_data( \ + purple_find_chat(c, i) \ + ) + +#define purple_conversations_find_chat_with_account(n, a) \ + purple_conversation_get_chat_data( \ + purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, n, a) \ + ) + +#define purple_notify_error(h, t, p, s, c) \ + purple_notify_message(h, PURPLE_NOTIFY_MSG_ERROR, t, p, s, NULL, NULL) + +#define purple_request_fields(h, t, p, s, f, ot, oc, ct, cc, c, d) \ + purple_request_fields(h, t, p, s, f, ot, oc, ct, cc, NULL, NULL, NULL, d) + +#define purple_serv_got_joined_chat(c, i, n) \ + purple_conversation_get_chat_data( \ + serv_got_joined_chat(c, i, n) \ + ) + +#endif /* _PURPLE_COMPAT_H_ */ diff --git a/patches/01-makefile.patch b/patches/01-makefile.patch new file mode 100644 index 0000000..47b8260 --- /dev/null +++ b/patches/01-makefile.patch @@ -0,0 +1,29 @@ +diff -r 510e0ad7dfea libpurple/protocols/facebook/Makefile.am +--- a/libpurple/protocols/facebook/Makefile.am Sun Jun 14 21:34:44 2015 -0400 ++++ b/libpurple/protocols/facebook/Makefile.am Mon Jun 15 02:08:17 2015 -0400 +@@ -23,7 +23,11 @@ + thrift.c \ + thrift.h \ + util.c \ +- util.h ++ util.h \ ++ ../../http.c \ ++ ../../http.h \ ++ ../../purple-socket.h \ ++ ../../purple-socket.c + + CLEANFILES = \ + marshal.c \ +@@ -57,10 +61,9 @@ + endif + + AM_CPPFLAGS = \ +- -I$(top_srcdir)/libpurple \ +- -I$(top_builddir)/libpurple \ + $(GLIB_CFLAGS) \ + $(JSON_CFLAGS) \ ++ $(PURPLE_CFLAGS) \ + $(ZLIB_CFLAGS) \ +- $(GPLUGIN_CFLAGS) \ ++ $(PLUGIN_CFLAGS) \ + $(DEBUG_CFLAGS) diff --git a/patches/02-plugin.patch b/patches/02-plugin.patch new file mode 100644 index 0000000..8a3b0cc --- /dev/null +++ b/patches/02-plugin.patch @@ -0,0 +1,259 @@ +diff -r 510e0ad7dfea libpurple/protocols/facebook/facebook.c +--- a/libpurple/protocols/facebook/facebook.c Sun Jun 14 21:34:44 2015 -0400 ++++ b/libpurple/protocols/facebook/facebook.c Mon Jun 15 08:14:49 2015 -0400 +@@ -548,7 +548,8 @@ + } + + static gint +-fb_im_send(PurpleConnection *gc, PurpleMessage *msg) ++fb_im_send(PurpleConnection *gc, const gchar *who, const gchar *msg, ++ PurpleMessageFlags flags) + { + const gchar *name; + const gchar *text; +@@ -559,10 +560,10 @@ + fata = purple_connection_get_protocol_data(gc); + api = fb_data_get_api(fata); + +- name = purple_message_get_recipient(msg); ++ name = who; + uid = FB_ID_FROM_STR(name); + +- text = purple_message_get_contents(msg); ++ text = msg; + fb_api_message(api, uid, FALSE, text); + return 1; + } +@@ -636,7 +637,8 @@ + } + + static gint +-fb_chat_send(PurpleConnection *gc, gint id, PurpleMessage *msg) ++fb_chat_send(PurpleConnection *gc, gint id, const gchar *msg, ++ PurpleMessageFlags flags) + { + const gchar *name; + const gchar *text; +@@ -654,13 +656,13 @@ + name = purple_conversation_get_name(PURPLE_CONVERSATION(chat)); + tid = FB_ID_FROM_STR(name); + +- text = purple_message_get_contents(msg); ++ text = msg; + fb_api_message(api, tid, TRUE, text); + + name = purple_account_get_username(acct); + purple_serv_got_chat_in(gc, id, name, +- purple_message_get_flags(msg), +- purple_message_get_contents(msg), ++ flags, ++ msg, + time(NULL)); + return 0; + } +@@ -740,111 +742,68 @@ + g_object_unref(list); + } + +-static void +-facebook_protocol_init(PurpleProtocol *protocol) ++gboolean ++plugin_load(PurplePlugin *plugin) + { +- protocol->id = "prpl-facebook"; +- protocol->name = "Facebook"; +- protocol->options = OPT_PROTO_CHAT_TOPIC; ++ _purple_socket_init(); ++ purple_http_init(); ++ return TRUE; + } + +-static void +-facebook_protocol_class_init(PurpleProtocolClass *klass) ++gboolean ++plugin_unload(PurplePlugin *plugin) + { +- klass->login = fb_login; +- klass->close = fb_close; +- klass->status_types = fb_status_types; +- klass->list_icon = fb_list_icon; ++ purple_http_uninit(); ++ _purple_socket_uninit(); ++ return TRUE; + } + +-static void +-facebook_protocol_client_iface_init(PurpleProtocolClientIface *iface) ++G_MODULE_EXPORT gboolean ++purple_init_plugin(PurplePlugin *plugin) + { +- iface->blist_node_menu = fb_client_blist_node_menu; ++ static gboolean inited = FALSE; ++ static PurplePluginInfo info; ++ static PurplePluginProtocolInfo pinfo; ++ ++ plugin->info = &info; ++ ++ if (G_LIKELY(inited)) { ++ return purple_plugin_register(plugin); ++ } ++ ++ memset(&info, 0, sizeof info); ++ memset(&pinfo, 0, sizeof pinfo); ++ ++ info.magic = PURPLE_PLUGIN_MAGIC; ++ info.major_version = PURPLE_MAJOR_VERSION; ++ info.minor_version = PURPLE_MINOR_VERSION; ++ info.type = PURPLE_PLUGIN_PROTOCOL; ++ info.priority = PURPLE_PRIORITY_DEFAULT; ++ info.id = "prpl-facebook"; ++ info.name = "Facebook"; ++ info.version = PACKAGE_VERSION; ++ info.summary = N_("Facebook Protocol Plugin"); ++ info.description = N_("Facebook Protocol Plugin"); ++ info.homepage = PACKAGE_URL; ++ info.load = plugin_load; ++ info.unload = plugin_unload; ++ info.extra_info = &pinfo; ++ ++ pinfo.options = OPT_PROTO_CHAT_TOPIC; ++ pinfo.list_icon = fb_list_icon; ++ pinfo.status_types = fb_status_types; ++ pinfo.blist_node_menu = fb_client_blist_node_menu; ++ pinfo.login = fb_login; ++ pinfo.close = fb_close; ++ pinfo.send_im = fb_im_send; ++ pinfo.send_typing = fb_im_send_typing; ++ pinfo.join_chat = fb_chat_join; ++ pinfo.chat_invite = fb_chat_invite; ++ pinfo.chat_send = fb_chat_send; ++ pinfo.set_chat_topic = fb_chat_set_topic; ++ pinfo.roomlist_get_list = fb_roomlist_get_list; ++ pinfo.roomlist_cancel = fb_roomlist_cancel; ++ ++ inited = TRUE; ++ return purple_plugin_register(plugin); + } +- +-static void +-facebook_protocol_server_iface_init(PurpleProtocolServerIface *iface) +-{ +- +-} +- +-static void +-facebook_protocol_im_iface_init(PurpleProtocolIMIface *iface) +-{ +- iface->send = fb_im_send; +- iface->send_typing = fb_im_send_typing; +-} +- +-static void +-facebook_protocol_chat_iface_init(PurpleProtocolChatIface *iface) +-{ +- iface->join = fb_chat_join; +- iface->invite = fb_chat_invite; +- iface->send = fb_chat_send; +- iface->set_topic = fb_chat_set_topic; +-} +- +-static void +-facebook_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *iface) +-{ +- +-} +- +-static void +-facebook_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *iface) +-{ +- iface->get_list = fb_roomlist_get_list; +- iface->cancel = fb_roomlist_cancel; +-} +- +-PURPLE_DEFINE_TYPE_EXTENDED( +- FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0, +- +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT_IFACE, +- facebook_protocol_client_iface_init) +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE, +- facebook_protocol_server_iface_init) +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM_IFACE, +- facebook_protocol_im_iface_init) +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE, +- facebook_protocol_chat_iface_init) +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE, +- facebook_protocol_privacy_iface_init) +- PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE, +- facebook_protocol_roomlist_iface_init) +-); +- +-static PurplePluginInfo * +-plugin_query(GError **error) +-{ +- return purple_plugin_info_new( +- "id", "prpl-facebook", +- "name", "Facebook Protocol", +- "version", DISPLAY_VERSION, +- "category", N_("Protocol"), +- "summary", N_("Facebook Protocol Plugin"), +- "description", N_("Facebook Protocol Plugin"), +- "website", PURPLE_WEBSITE, +- "abi-version", PURPLE_ABI_VERSION, +- "flags", PURPLE_PLUGIN_INFO_FLAGS_INTERNAL | +- PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD, +- NULL +- ); +-} +- +-static gboolean +-plugin_load(PurplePlugin *plugin, GError **error) +-{ +- facebook_protocol_register_type(plugin); +- my_protocol = purple_protocols_add(FACEBOOK_TYPE_PROTOCOL, error); +- return my_protocol != NULL; +-} +- +-static gboolean +-plugin_unload(PurplePlugin *plugin, GError **error) +-{ +- return purple_protocols_remove(my_protocol, error); +-} +- +-PURPLE_PLUGIN_INIT(facebook, plugin_query, plugin_load, plugin_unload); +diff -r 510e0ad7dfea libpurple/protocols/facebook/facebook.h +--- a/libpurple/protocols/facebook/facebook.h Sun Jun 14 21:34:44 2015 -0400 ++++ b/libpurple/protocols/facebook/facebook.h Mon Jun 15 08:14:49 2015 -0400 +@@ -22,33 +22,4 @@ + #ifndef _FACEBOOK_H_ + #define _FACEBOOK_H_ + +-#include <glib.h> +- +-#include "protocol.h" +- +-#define FACEBOOK_TYPE_PROTOCOL (facebook_protocol_get_type()) +-#define FACEBOOK_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), FACEBOOK_TYPE_PROTOCOL, FacebookProtocol)) +-#define FACEBOOK_PROTOCOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), FACEBOOK_TYPE_PROTOCOL, FacebookProtocolClass)) +-#define FACEBOOK_IS_PROTOCOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), FACEBOOK_TYPE_PROTOCOL)) +-#define FACEBOOK_IS_PROTOCOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), FACEBOOK_TYPE_PROTOCOL)) +-#define FACEBOOK_PROTOCOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), FACEBOOK_TYPE_PROTOCOL, FacebookProtocolClass)) +- +-typedef struct _FacebookProtocol FacebookProtocol; +-typedef struct _FacebookProtocolClass FacebookProtocolClass; +- +-struct _FacebookProtocol +-{ +- PurpleProtocol parent; +-}; +- +-struct _FacebookProtocolClass +-{ +- PurpleProtocolClass parent_class; +-}; +- +-/** +- * Returns the GType for the FacebookProtocol object. +- */ +-G_MODULE_EXPORT GType facebook_protocol_get_type(void); +- + #endif /* _FACEBOOK_H_ */ diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..f1d39f1 --- /dev/null +++ b/update.sh @@ -0,0 +1,40 @@ +#!/bin/sh + +URL="https://hg.pidgin.im/soc/2015/jgeboski/facebook" +REV="facebook" +HG=$(type -p hg || exit 1) + +test -z "$srcdir" && srcdir=$(dirname "$0") +test -z "$srcdir" && srcdir=. + +cd "$srcdir" + +if ! test -d pidgin/.hg; then + rm -rf pidgin + "$HG" clone "$URL" pidgin +fi + +touch \ + include/plugins.h \ + include/protocol.h \ + include/protocols.h + +patchdir="$(pwd)/patches" +cd "$srcdir/pidgin" + +"$HG" pull +"$HG" update -C "$REV" +"$HG" clean --all --config extensions.purge= + +for patch in $(ls -1 "$patchdir"); do + patch -p1 -i "$patchdir/$patch" +done + +rm -f \ + libpurple/connection.h \ + libpurple/conversation.h \ + libpurple/debug.h \ + libpurple/internal.h \ + libpurple/ntlm.h \ + libpurple/proxy.h \ + libpurple/sslconn.h |