adium 3170:c763ca8bf4b7: Added William Bowling and updated year

commits at adium.im commits at adium.im
Sat Apr 24 16:23:11 UTC 2010


details:	http://hg.adium.im/adium/rev/c763ca8bf4b7
revision:	3170:c763ca8bf4b7
author:		Evan Schoenberg
date:		Sat Mar 13 21:03:19 2010 -0600

Added William Bowling and updated year
(transplanted from db9349fdb4b51a9890658b4123189f6468429409)
Subject: adium 3171:d6121762c15a: Merged

details:	http://hg.adium.im/adium/rev/d6121762c15a
revision:	3171:d6121762c15a
author:		Evan Schoenberg
date:		Sun Mar 28 20:22:25 2010 -0500

Merged
Subject: adium 3172:ac866c15ecd7: Merging

details:	http://hg.adium.im/adium/rev/ac866c15ecd7
revision:	3172:ac866c15ecd7
author:		Evan Schoenberg
date:		Sat Apr 24 11:23:06 2010 -0500

Merging

diffs (truncated from 1481 to 1000 lines):

diff -r 8d3eb1d1acaf -r ac866c15ecd7 Copyright.txt
--- a/Copyright.txt	Sat Mar 13 20:30:05 2010 -0600
+++ b/Copyright.txt	Sat Apr 24 11:23:06 2010 -0500
@@ -1,5 +1,5 @@
 Adium
-Copyright (C) 2001-2009 by the following:
+Copyright (C) 2001-2010 by the following:
 
 Adam Atlas
 Jackie Balzer
@@ -9,6 +9,7 @@
 Max Bertrand
 Adam Betts
 Graham Booker
+William Bowling
 Jorge Salvador Caffarena
 Wesley Campaigne
 Ariel Chinn
@@ -22,6 +23,7 @@
 Augie Fackler
 Ken Ferry
 Christopher Forsythe
+Tyler Funnell
 Brian Ganninger
 Ryan Govostes
 Asher Haig
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.h
--- a/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.h	Sat Apr 24 11:23:06 2010 -0500
@@ -21,7 +21,7 @@
  *
  * This functionality was added, with less control to the programmer, in OS X 10.3.  <tt>AIAlternatingRowOutlineView</tt> also supports disabling it from drawing its background (useful if cells wish to draw their own backgrounds and potentially be transparent).
  */
- at interface AIAlternatingRowOutlineView : AIOutlineView {
+ at interface AIAlternatingRowOutlineView : AIOutlineView <AIAlternatingRowsProtocol> {
 	NSColor		*alternatingRowColor;
 	
 	BOOL		drawsBackground;
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m
--- a/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AIUtilities Framework/Source/AIAlternatingRowOutlineView.m	Sat Apr 24 11:23:06 2010 -0500
@@ -29,7 +29,6 @@
 @interface AIAlternatingRowOutlineView ()
 - (void)initAlternatingRowOutlineView;
 - (void)_drawGridInClipRect:(NSRect)rect;
-- (void)alternatingRowOutlineViewSelectionDidChange:(NSNotification *)notification;
 @end
 
 @interface NSOutlineView (Undocumented)
@@ -60,17 +59,11 @@
 	drawsBackground = YES;
 	drawsGradientSelection = NO;
 	alternatingRowColor = [[NSColor colorWithCalibratedRed:(237.0f/255.0f) green:(243.0f/255.0f) blue:(254.0f/255.0f) alpha:1.0f] retain];
-
-	[[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(alternatingRowOutlineViewSelectionDidChange:)
-												 name:NSOutlineViewSelectionDidChangeNotification
-											   object:self];
 }
 
 - (void)dealloc
 {
 	[alternatingRowColor release];
-	[[NSNotificationCenter defaultCenter] removeObserver:self];
 
 	[super dealloc];
 }
@@ -147,7 +140,7 @@
 
 	if (rectNumber > 0) {
 		[[self alternatingRowColor] set];
-		NSRectFillList(gridRects, rectNumber);
+		NSRectFillListUsingOperation(gridRects, rectNumber, NSCompositeSourceOver);
 	}
 }
 
@@ -164,11 +157,10 @@
 
 - (void)highlightSelectionInClipRect:(NSRect)clipRect
 {
-	[self drawAlternatingRowsInRect:clipRect];
-
-	if (drawsGradientSelection && [[self window] isKeyWindow] && ([[self window] firstResponder] == self)) {
-		NSIndexSet *indices = [self selectedRowIndexes];
-		NSUInteger bufSize = [indices count];
+	NSIndexSet *indices = [self selectedRowIndexes];
+	NSUInteger bufSize = [indices count];
+	
+	if (drawsGradientSelection && bufSize > 0 && [[self window] isKeyWindow] && ([[self window] firstResponder] == self)) {
 		NSUInteger *buf = malloc(bufSize * sizeof(NSUInteger));
 		NSUInteger i = 0, j = 0;
 
@@ -230,14 +222,6 @@
 	}
 }
 
-- (void)alternatingRowOutlineViewSelectionDidChange:(NSNotification *)notification
-{
-	if (drawsGradientSelection) {
-		//We do fancy drawing, so we need a full redisplay when selection changes
-		[self setNeedsDisplay:YES];
-	}
-}
-
 #pragma mark Grid
 
 - (void)drawGridInClipRect:(NSRect)rect
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AIUtilities Framework/Source/AIOutlineView.h
--- a/Frameworks/AIUtilities Framework/Source/AIOutlineView.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AIUtilities Framework/Source/AIOutlineView.h	Sat Apr 24 11:23:06 2010 -0500
@@ -95,6 +95,23 @@
 @end
 
 /*!
+ * @protocol AIAlternatingRowsProtocol
+ * @brief Delegate protocol for <tt>AIOutlineView</tt>
+ *
+ * Implementation of all methods is optional.
+ */
+ at protocol AIAlternatingRowsProtocol
+
+/*!
+ * @brief Draws rows of the view with alternating colors
+ *
+ * @param rect The <tt>NSRect</tt> defining the background to color.
+ */
+- (void)drawAlternatingRowsInRect:(NSRect)rect;
+ at end
+
+
+/*!
  * @class AIOutlineView
  * @brief An NSOutlineView subclass with several improvments
  *
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AIUtilities Framework/Source/AIVariableHeightOutlineView.m
--- a/Frameworks/AIUtilities Framework/Source/AIVariableHeightOutlineView.m	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AIUtilities Framework/Source/AIVariableHeightOutlineView.m	Sat Apr 24 11:23:06 2010 -0500
@@ -227,7 +227,7 @@
 		
 		if (rectNumber > 0) {
 			[[self alternatingRowColor] set];
-			NSRectFillList(gridRects, rectNumber);
+			NSRectFillListUsingOperation(gridRects, rectNumber, NSCompositeSourceOver);
 		}		
 	}
 }
@@ -444,8 +444,6 @@
 			free(selectionRects);
 		}
 
-	} else {
-		[self drawAlternatingRowsInRect:clipRect];
 	}
 }
 
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/Adium Framework/Source/AIHTMLDecoder.m
--- a/Frameworks/Adium Framework/Source/AIHTMLDecoder.m	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/Adium Framework/Source/AIHTMLDecoder.m	Sat Apr 24 11:23:06 2010 -0500
@@ -310,6 +310,7 @@
 			//Close any existing font tags, and open a new one
 			if (thingsToInclude.closingFontTags && openFontTag) {
 				[string appendString:@"</FONT>"];
+				openFontTag = NO;
 			}
 			if (!thingsToInclude.simpleTagsOnly) {
 				openFontTag = YES;
@@ -320,6 +321,7 @@
 			//Family
 			if (thingsToInclude.fontTags && familyName && (![familyName isEqualToString:currentFamily] || thingsToInclude.closingFontTags)) {
 				if (thingsToInclude.simpleTagsOnly) {
+					openFontTag = YES;
 					[string appendString:[NSString stringWithFormat:@"<FONT FACE=\"%@\">",familyName]];
 				} else {
 					//(traits | NSNonStandardCharacterSetFontMask) seems to be the proper test... but it is true for all fonts!
@@ -344,6 +346,7 @@
 			//Color
 			if (color) {
 				if (thingsToInclude.simpleTagsOnly) {
+					openFontTag = YES;
 					[string appendString:[NSString stringWithFormat:@"<FONT COLOR=\"#%@\">",color]];	
 				} else {
 					[string appendString:[NSString stringWithFormat:@" COLOR=\"#%@\"",color]];
@@ -673,9 +676,10 @@
 		oldLink = nil;
 	}
 
-	if (thingsToInclude.fontTags && thingsToInclude.closingFontTags && openFontTag) {
+	if (thingsToInclude.closingFontTags && openFontTag) {
 		//Close any open font tag
 		[string appendString:@"</FONT>"];
+		openFontTag = NO;
 	}
 	if (rightToLeft) {
 		//Close any open div
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/Adium Framework/Source/AIListOutlineView+Drawing.m
--- a/Frameworks/Adium Framework/Source/AIListOutlineView+Drawing.m	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/Adium Framework/Source/AIListOutlineView+Drawing.m	Sat Apr 24 11:23:06 2010 -0500
@@ -43,6 +43,7 @@
 			NSRect	visRect = [enclosingScrollView documentVisibleRect];
 			NSSize	imageSize = [backgroundImage size];
 			NSRect	imageRect = NSMakeRect(0.0f, 0.0f, imageSize.width, imageSize.height);
+			CGFloat imageFade = backgroundFade * backgroundOpacity;
 			
 			switch (backgroundStyle) {
 					
@@ -51,7 +52,7 @@
 					[backgroundImage drawInRect:NSMakeRect(visRect.origin.x, visRect.origin.y, imageSize.width, imageSize.height)
 									   fromRect:imageRect
 									  operation:NSCompositeSourceOver
-									   fraction:backgroundFade];
+									   fraction:imageFade];
 					break;
 				}
 				case AIFillProportionatelyBackground: {
@@ -69,7 +70,7 @@
 					[backgroundImage drawInRect:visRect
 									   fromRect:imageRect
 									  operation:NSCompositeSourceOver
-									   fraction:backgroundFade];
+									   fraction:imageFade];
 					break;
 				}
 				case AIFillStretchBackground: {
@@ -77,7 +78,7 @@
 					[backgroundImage drawInRect:visRect
 									   fromRect:imageRect
 									  operation:NSCompositeSourceOver
-									   fraction:backgroundFade];
+									   fraction:imageFade];
 					break;
 				}
 				case AITileBackground: {
@@ -98,7 +99,7 @@
 								[backgroundImage drawInRect:drawingRect
 												   fromRect:imageRect
 												  operation:NSCompositeSourceOver
-												   fraction:backgroundFade];
+												   fraction:imageFade];
 							}
 							
 							//Shift right for the next iteration
@@ -118,6 +119,9 @@
 		[[NSColor clearColor] set];
 		NSRectFill(clipRect);
 	}
+	
+	if([self conformsToProtocol:@protocol(AIAlternatingRowsProtocol)])
+		[(id<AIAlternatingRowsProtocol>)self drawAlternatingRowsInRect:clipRect];
 }
 
 #pragma mark Background
@@ -252,7 +256,8 @@
 - (NSColor *)alternatingRowColor
 {
 	if (!_rowColorWithOpacity) {
-		_rowColorWithOpacity = [[rowColor colorWithAlphaComponent:backgroundOpacity] retain];
+		CGFloat rowAlpha = [rowColor alphaComponent];
+		_rowColorWithOpacity = [[rowColor colorWithAlphaComponent:(rowAlpha * backgroundOpacity)] retain];
 	}
 	
 	return _rowColorWithOpacity;
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AutoHyperlinks Framework/Source/AHHyperlinkScanner.m
--- a/Frameworks/AutoHyperlinks Framework/Source/AHHyperlinkScanner.m	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AutoHyperlinks Framework/Source/AHHyperlinkScanner.m	Sat Apr 24 11:23:06 2010 -0500
@@ -263,6 +263,13 @@
 	
 	// main scanning loop
 	while([self _scanString:m_scanString upToCharactersFromSet:skipSet intoRange:&scannedRange fromIndex:&scannedLocation]) {
+		
+		// back off if the last character is puncuation.
+		unichar s_char = [m_scanString characterAtIndex:(scannedRange.location + scannedRange.length - 1)];
+		if(4 < scannedRange.length && [puncSet characterIsMember:s_char]) {
+			scannedRange.length--;
+		}
+		
 		BOOL foundUnpairedEnclosureCharacter = NO;
 		
 		// Check for and filter enclosures.  We can't add (, [, etc. to the skipSet as they may be in a URI
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/AutoHyperlinks Framework/Source/AHLinkLexer.l
--- a/Frameworks/AutoHyperlinks Framework/Source/AHLinkLexer.l	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/AutoHyperlinks Framework/Source/AHLinkLexer.l	Sat Apr 24 11:23:06 2010 -0500
@@ -49,7 +49,10 @@
 sTLD            (com|edu|gov|int|mil|net|org|biz|info|name|pro)
 uTLD            (aero|coop|museum|mobi|cat|jobs|travel)
 
+SLDs            (ac|co|gov|ltd|me|mod|net|nhs|nic|org|parliament|plc|police|sch|edu|asn|id)
 TLDs            ({ccTLD}|{sTLD}|{uTLD}|arpa|local)
+uTLDs           (({SLDs}\.{ccTLD})|{sTLD}|{uTLD}|arpa|local)
+
 %{
 /*The Unicode standard, version 4.1, table 3-6, says that the highest byte that will occur in a valid UTF-8 sequence is 0xF4.*/
 %}
@@ -57,7 +60,7 @@
 singleDomain    [_[:alnum:]\x80-\xf4-]+
 
 urlPath         \/[^[:space:]]*
-urlSpec         ({singleDomain}\.)+{TLDs}(:[0-9]+)?{urlPath}?
+urlSpec         ({singleDomain}\.)+{uTLDs}(:[0-9]+)?{urlPath}?
 urlCSpec        {singleDomain}(\.{singleDomain})*(:[0-9]+)?{urlPath}?
 
 ipv4address     ([0-9]{1,3}\.){3}([0-9]{1,3})
@@ -70,7 +73,7 @@
 ipv6URL         \[{ipv6Address}](:[0-9]+)?{urlPath}?
 
 userAtDomain	[^:@\/[:space:]]+\@{singleDomain}(\.{singleDomain})*
-mailSpec        {userAtDomain}\.{TLDs}
+mailSpec        {userAtDomain}\.({ccTLD}|{sTLD}|{uTLD}|arpa|local)
 jabberSpec      xmpp:{mailSpec}{urlPath}?(\?[^[:space:]]+)?
 aolIMSpec       aim:goim\?screenname=[^\ \t\n&]+(&message=.+)?
 aolChatSpec     aim:gochat\?roomname=[^\ \t\n&]+
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/LMX.framework/Versions/A/LMX
Binary file Frameworks/LMX.framework/Versions/A/LMX has changed
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/account.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/account.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/account.h	Sat Apr 24 11:23:06 2010 -0500
@@ -414,6 +414,14 @@
 void purple_account_set_proxy_info(PurpleAccount *account, PurpleProxyInfo *info);
 
 /**
+ * Sets the account's privacy type.
+ *
+ * @param account      The account.
+ * @param privacy_type The privacy type.
+ */
+void purple_account_set_privacy_type(PurpleAccount *account, PurplePrivacyType privacy_type);
+
+/**
  * Sets the account's status types.
  *
  * @param account      The account.
@@ -683,6 +691,15 @@
 PurpleProxyInfo *purple_account_get_proxy_info(const PurpleAccount *account);
 
 /**
+ * Returns the account's privacy type.
+ *
+ * @param account   The account.
+ *
+ * @return The privacy type.
+ */
+PurplePrivacyType purple_account_get_privacy_type(const PurpleAccount *account);
+
+/**
  * Returns the active status for this account.  This looks through
  * the PurplePresence associated with this account and returns the
  * PurpleStatus that has its active flag set to "TRUE."  There can be
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/certificate.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/certificate.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/certificate.h	Sat Apr 24 11:23:06 2010 -0500
@@ -250,10 +250,17 @@
 	/** Retrieve the certificate activation/expiration times */
 	gboolean (* get_times)(PurpleCertificate *crt, time_t *activation, time_t *expiration);
 
+	/** Imports certificates from a file
+	 *
+	 *  @param filename   File to import the certificates from
+	 *  @return           GSList of pointers to the newly allocated Certificate structs
+	 *                    or NULL on failure.
+	 */
+	GSList * (* import_certificates)(const gchar * filename);
+
 	void (*_purple_reserved1)(void);
 	void (*_purple_reserved2)(void);
 	void (*_purple_reserved3)(void);
-	void (*_purple_reserved4)(void);
 };
 
 /** A set of operations used to provide logic for verifying a Certificate's
@@ -492,6 +499,16 @@
 purple_certificate_import(PurpleCertificateScheme *scheme, const gchar *filename);
 
 /**
+ * Imports a list of PurpleCertificates from a file
+ *
+ * @param scheme      Scheme to import under
+ * @param filename    File path to import from
+ * @return Pointer to a GSList of new PurpleCertificates, or NULL on failure
+ */
+GSList *
+purple_certificates_import(PurpleCertificateScheme *scheme, const gchar *filename);
+
+/**
  * Exports a PurpleCertificate to a file
  *
  * @param filename    File to export the certificate to
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/connection.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/connection.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/connection.h	Sat Apr 24 11:23:06 2010 -0500
@@ -44,8 +44,9 @@
 	PURPLE_CONNECTION_NO_FONTSIZE = 0x0020, /**< Connection does not send/receive font sizes */
 	PURPLE_CONNECTION_NO_URLDESC = 0x0040,  /**< Connection does not support descriptions with links */
 	PURPLE_CONNECTION_NO_IMAGES = 0x0080,  /**< Connection does not support sending of images */
-	PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100 /**< Connection supports sending and receiving custom smileys */
-	
+	PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100, /**< Connection supports sending and receiving custom smileys */
+	PURPLE_CONNECTION_SUPPORT_MOODS = 0x0200, /**< Connection supports setting moods */
+	PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES = 0x0400 /**< Connection supports setting a message on moods */
 } PurpleConnectionFlags;
 
 typedef enum
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/jabber.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/jabber.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/jabber.h	Sat Apr 24 11:23:06 2010 -0500
@@ -105,13 +105,20 @@
 	xmlParserCtxt *context;
 	xmlnode *current;
 
-	enum {
-		JABBER_PROTO_0_9,
-		JABBER_PROTO_1_0
+	struct {
+		guint8 major;
+		guint8 minor;
 	} protocol_version;
 
 	JabberSaslMech *auth_mech;
 	gpointer auth_mech_data;
+	
+	/**
+	 * The header from the opening <stream/> tag.  This being NULL is treated
+	 * as a special condition in the parsing code (signifying the next
+	 * stanza started is an opening stream tag), and its being missing on
+	 * the stream header is treated as a fatal error.
+	 */
 	char *stream_id;
 	JabberStreamState state;
 
@@ -166,6 +173,11 @@
 	time_t idle;
 	time_t old_idle;
 
+	/** When we last pinged the server, so we don't ping more
+	 *  often than once every minute.
+	 */
+	time_t last_ping;
+
 	JabberID *user;
 	JabberBuddy *user_jb;
 
@@ -371,10 +383,7 @@
 PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who);
 gboolean jabber_can_receive_file(PurpleConnection *gc, const gchar *who);
 
-void jabber_register_commands(void);
-void jabber_unregister_commands(void);
-
-void jabber_init_plugin(PurplePlugin *plugin);
-void jabber_uninit_plugin(PurplePlugin *plugin);
+void jabber_plugin_init(PurplePlugin *plugin);
+void jabber_plugin_uninit(PurplePlugin *plugin);
 
 #endif /* PURPLE_JABBER_H_ */
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/jutil.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/jutil.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/jutil.h	Sat Apr 24 11:23:06 2010 -0500
@@ -85,5 +85,6 @@
 /* show attr (presence stanza) -> state */
 JabberBuddyState jabber_buddy_show_get_state(const char *id);
 
-char *jabber_calculate_data_sha1sum(gconstpointer data, size_t len);
+char *jabber_calculate_data_hash(gconstpointer data, size_t len,
+    const gchar *hash_algo);
 #endif /* PURPLE_JABBER_JUTIL_H_ */
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/libymsg.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/libymsg.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/libymsg.h	Sat Apr 24 11:23:06 2010 -0500
@@ -29,7 +29,7 @@
 #include "cmds.h"
 #include "prpl.h"
 
-#define YAHOO_PAGER_HOST "scsa.msg.yahoo.com"
+#define YAHOO_PAGER_HOST_REQ_URL "http://vcs1.msg.yahoo.com/capacity"
 #define YAHOO_PAGER_PORT 5050
 #define YAHOO_PAGER_PORT_P2P 5101
 #define YAHOO_LOGIN_URL "https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=%s"
@@ -44,9 +44,9 @@
 #define YAHOO_XFER_RELAY_PORT 80
 #define YAHOO_ROOMLIST_URL "http://insider.msg.yahoo.com/ycontent/"
 #define YAHOO_ROOMLIST_LOCALE "us"
-/* really we should get the list of servers from
- http://update.messenger.yahoo.co.jp/servers.html */
-#define YAHOOJP_PAGER_HOST "cs.yahoo.co.jp"
+
+/* Yahoo! JAPAN stuff */
+#define YAHOOJP_PAGER_HOST_REQ_URL "http://cs1.msg.vip.ogk.yahoo.co.jp/capacity"
 #define YAHOOJP_TOKEN_URL "https://login.yahoo.co.jp/config/pwtoken_get?src=ymsgr&ts=&login=%s&passwd=%s&chal=%s"
 #define YAHOOJP_LOGIN_URL "https://login.yahoo.co.jp/config/pwtoken_login?src=ymsgr&ts=&token=%s"
 #define YAHOOJP_PROFILE_URL "http://profiles.yahoo.co.jp/"
@@ -90,8 +90,8 @@
 #define YAHOO_CLIENT_VERSION_ID "4194239"
 #define YAHOO_CLIENT_VERSION "9.0.0.2162"
 
-#define YAHOOJP_CLIENT_VERSION_ID "4194239"
-#define YAHOOJP_CLIENT_VERSION "9.0.0.2162"
+#define YAHOOJP_CLIENT_VERSION_ID "4186047"
+#define YAHOOJP_CLIENT_VERSION "9.0.0.1727"
 
 #define YAHOO_CLIENT_USERAGENT "Mozilla/5.0"
 
@@ -119,6 +119,7 @@
 	YAHOO_STATUS_ONVACATION,
 	YAHOO_STATUS_OUTTOLUNCH,
 	YAHOO_STATUS_STEPPEDOUT,
+	YAHOO_STATUS_P2P = 11,
 	YAHOO_STATUS_INVISIBLE = 12,
 	YAHOO_STATUS_CUSTOM = 99,
 	YAHOO_STATUS_IDLE = 999,
@@ -219,6 +220,7 @@
 	gsize auth_written;
 	char *cookie_y;
 	char *cookie_t;
+	char *cookie_b;
 	int session_id;
 	gboolean jp;
 	gboolean wm; /* connected w/ web messenger method */
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/namespaces.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/namespaces.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/namespaces.h	Sat Apr 24 11:23:06 2010 -0500
@@ -30,6 +30,7 @@
 #define NS_XMPP_SESSION "urn:ietf:params:xml:ns:xmpp-session"
 #define NS_XMPP_STANZAS "urn:ietf:params:xml:ns:xmpp-stanzas"
 #define NS_XMPP_STREAMS "http://etherx.jabber.org/streams"
+#define NS_XMPP_TLS "urn:ietf:params:xml:ns:xmpp-tls"
 
 /* XEP-0012 Last Activity (and XEP-0256 Last Activity in Presence) */
 #define NS_LAST_ACTIVITY "jabber:iq:last"
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/network.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/network.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/network.h	Sat Apr 24 11:23:06 2010 -0500
@@ -123,8 +123,8 @@
  * The default value is TRUE
  *
  * @param map_external Should the open port be mapped externally?
- * @deprecated In 3.0.0 a boolean will be added to the above functions to
- *             perform the same function.
+ * @deprecated In 3.0.0 a boolean will be added to the functions mentioned
+ *             above to perform the same function.
  * @since 2.3.0
  */
 void purple_network_listen_map_external(gboolean map_external);
@@ -236,15 +236,15 @@
  */
 void *purple_network_get_handle(void);
 
-/**	
+/**
  * Update the STUN server IP given the host name
  * Will result in a DNS query being executed asynchronous
- * 
+ *
  * @param stun_server The host name of the STUN server to set
  * @since 2.6.0
  */
 void purple_network_set_stun_server(const gchar *stun_server);
-	
+
 /**
  * Get the IP address of the STUN server as a string representation
  *
@@ -252,16 +252,16 @@
  * @since 2.6.0
  */
 const gchar *purple_network_get_stun_ip(void);
-	
-/**	
+
+/**
  * Update the TURN server IP given the host name
  * Will result in a DNS query being executed asynchronous
- * 
+ *
  * @param turn_server The host name of the TURN server to set
  * @since 2.6.0
  */
 void purple_network_set_turn_server(const gchar *turn_server);
-	
+
 /**
  * Get the IP address of the TURN server as a string representation
  *
@@ -269,14 +269,14 @@
  * @since 2.6.0
  */
 const gchar *purple_network_get_turn_ip(void);
-		
+
 /**
  * Remove a port mapping (UPnP or NAT-PMP) associated with listening socket
  *
  * @param fd Socket to remove the port mapping for
  * @since 2.6.0
  */
-void purple_network_remove_port_mapping(gint fd);	
+void purple_network_remove_port_mapping(gint fd);
 
 /**
  * Convert a UTF-8 domain name to ASCII in accordance with the IDNA
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/oscar.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/oscar.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/oscar.h	Sat Apr 24 11:23:06 2010 -0500
@@ -344,40 +344,39 @@
 	OSCAR_DISCONNECT_RETRYING /* peer connections only */
 } OscarDisconnectReason;
 
-typedef enum
-{
-	OSCAR_CAPABILITY_BUDDYICON            = 0x00000001,
-	OSCAR_CAPABILITY_TALK                 = 0x00000002,
-	OSCAR_CAPABILITY_DIRECTIM             = 0x00000004,
-	OSCAR_CAPABILITY_CHAT                 = 0x00000008,
-	OSCAR_CAPABILITY_GETFILE              = 0x00000010,
-	OSCAR_CAPABILITY_SENDFILE             = 0x00000020,
-	OSCAR_CAPABILITY_GAMES                = 0x00000040,
-	OSCAR_CAPABILITY_ADDINS               = 0x00000080,
-	OSCAR_CAPABILITY_SENDBUDDYLIST        = 0x00000100,
-	OSCAR_CAPABILITY_GAMES2               = 0x00000200,
-	OSCAR_CAPABILITY_ICQ_DIRECT           = 0x00000400,
-	OSCAR_CAPABILITY_APINFO               = 0x00000800,
-	OSCAR_CAPABILITY_ICQRTF               = 0x00001000,
-	OSCAR_CAPABILITY_EMPTY                = 0x00002000,
-	OSCAR_CAPABILITY_ICQSERVERRELAY       = 0x00004000,
-	OSCAR_CAPABILITY_UNICODEOLD           = 0x00008000,
-	OSCAR_CAPABILITY_TRILLIANCRYPT        = 0x00010000,
-	OSCAR_CAPABILITY_UNICODE              = 0x00020000,
-	OSCAR_CAPABILITY_INTEROPERATE         = 0x00040000,
-	OSCAR_CAPABILITY_SHORTCAPS            = 0x00080000,
-	OSCAR_CAPABILITY_HIPTOP               = 0x00100000,
-	OSCAR_CAPABILITY_SECUREIM             = 0x00200000,
-	OSCAR_CAPABILITY_SMS                  = 0x00400000,
-	OSCAR_CAPABILITY_VIDEO                = 0x00800000,
-	OSCAR_CAPABILITY_ICHATAV              = 0x01000000,
-	OSCAR_CAPABILITY_LIVEVIDEO            = 0x02000000,
-	OSCAR_CAPABILITY_CAMERA               = 0x04000000,
-	OSCAR_CAPABILITY_ICHAT_SCREENSHARE    = 0x08000000,
-	OSCAR_CAPABILITY_TYPING               = 0x10000000,
-	OSCAR_CAPABILITY_GENERICUNKNOWN       = 0x20000000,
-	OSCAR_CAPABILITY_LAST                 = 0x40000000
-} OscarCapability;
+#define OSCAR_CAPABILITY_BUDDYICON             0x0000000000000001LL
+#define OSCAR_CAPABILITY_TALK                  0x0000000000000002LL
+#define OSCAR_CAPABILITY_DIRECTIM              0x0000000000000004LL
+#define OSCAR_CAPABILITY_CHAT                  0x0000000000000008LL
+#define OSCAR_CAPABILITY_GETFILE               0x0000000000000010LL
+#define OSCAR_CAPABILITY_SENDFILE              0x0000000000000020LL
+#define OSCAR_CAPABILITY_GAMES                 0x0000000000000040LL
+#define OSCAR_CAPABILITY_ADDINS                0x0000000000000080LL
+#define OSCAR_CAPABILITY_SENDBUDDYLIST         0x0000000000000100LL
+#define OSCAR_CAPABILITY_GAMES2                0x0000000000000200LL
+#define OSCAR_CAPABILITY_ICQ_DIRECT            0x0000000000000400LL
+#define OSCAR_CAPABILITY_APINFO                0x0000000000000800LL
+#define OSCAR_CAPABILITY_ICQRTF                0x0000000000001000LL
+#define OSCAR_CAPABILITY_EMPTY                 0x0000000000002000LL
+#define OSCAR_CAPABILITY_ICQSERVERRELAY        0x0000000000004000LL
+#define OSCAR_CAPABILITY_UNICODEOLD            0x0000000000008000LL
+#define OSCAR_CAPABILITY_TRILLIANCRYPT         0x0000000000010000LL
+#define OSCAR_CAPABILITY_UNICODE               0x0000000000020000LL
+#define OSCAR_CAPABILITY_INTEROPERATE          0x0000000000040000LL
+#define OSCAR_CAPABILITY_SHORTCAPS             0x0000000000080000LL
+#define OSCAR_CAPABILITY_HIPTOP                0x0000000000100000LL
+#define OSCAR_CAPABILITY_SECUREIM              0x0000000000200000LL
+#define OSCAR_CAPABILITY_SMS                   0x0000000000400000LL
+#define OSCAR_CAPABILITY_VIDEO                 0x0000000000800000LL
+#define OSCAR_CAPABILITY_ICHATAV               0x0000000001000000LL
+#define OSCAR_CAPABILITY_LIVEVIDEO             0x0000000002000000LL
+#define OSCAR_CAPABILITY_CAMERA                0x0000000004000000LL
+#define OSCAR_CAPABILITY_ICHAT_SCREENSHARE     0x0000000008000000LL
+#define OSCAR_CAPABILITY_TYPING                0x0000000010000000LL
+#define OSCAR_CAPABILITY_NEWCAPS               0x0000000020000000LL
+#define OSCAR_CAPABILITY_XTRAZ                 0x0000000040000000LL
+#define OSCAR_CAPABILITY_GENERICUNKNOWN        0x0000000080000000LL
+#define OSCAR_CAPABILITY_LAST                  0x0000000100000000LL
 
 /*
  * Byte Stream type. Sort of.
@@ -572,6 +571,12 @@
 #define AIM_ICQ_STATE_BUSY              0x00000010
 #define AIM_ICQ_STATE_CHAT              0x00000020
 #define AIM_ICQ_STATE_INVISIBLE         0x00000100
+#define AIM_ICQ_STATE_EVIL              0x00003000
+#define AIM_ICQ_STATE_DEPRESSION        0x00004000
+#define AIM_ICQ_STATE_ATHOME            0x00005000
+#define AIM_ICQ_STATE_ATWORK            0x00006000
+#define AIM_ICQ_STATE_LUNCH             0x00002001
+#define AIM_ICQ_STATE_EVIL              0x00003000
 #define AIM_ICQ_STATE_WEBAWARE          0x00010000
 #define AIM_ICQ_STATE_HIDEIP            0x00020000
 #define AIM_ICQ_STATE_BIRTHDAY          0x00080000
@@ -742,6 +747,21 @@
 #define AIM_IMPARAM_FLAG_SMS_SUPPORTED          0x00000010
 #define AIM_IMPARAM_FLAG_OFFLINE_MSGS_ALLOWED   0x00000100
 
+/**
+ * This flag tells the server that we always send HTML in messages
+ * sent from an ICQ account to an ICQ account.  (If this flag is
+ * not sent then plaintext is sent ICQ<-->ICQ (HTML is sent in all
+ * other cases)).
+ *
+ * If we send an HTML message to an old client that doesn't support
+ * HTML messages, then the oscar servers will merrily strip the HTML
+ * for us.
+ *
+ * When we receive an IM we look at the features on the ICBM to
+ * determine if the message is HTML or plaintext.
+ */
+#define AIM_IMPARAM_FLAG_USE_HTML_FOR_ICQ       0x00000400
+
 /* This is what the server will give you if you don't set them yourself. */
 /* This is probably out of date. */
 #define AIM_IMPARAM_DEFAULTS { \
@@ -939,7 +959,7 @@
 {
 	guint16 status;
 	guchar cookie[8];
-	int type; /* One of the OSCAR_CAPABILITY_ constants */
+	guint64 type; /* One of the OSCAR_CAPABILITY_ constants */
 	const char *proxyip;
 	const char *clientip;
 	const char *verifiedip;
@@ -1012,7 +1032,8 @@
 /* 0x0008 */ int aim_im_warn(OscarData *od, FlapConnection *conn, const char *destbn, guint32 flags);
 /* 0x000b */ int aim_im_denytransfer(OscarData *od, const char *bn, const guchar *cookie, guint16 code);
 /* 0x0010 */ int aim_im_reqofflinemsgs(OscarData *od);
-/* 0x0014 */ int aim_im_sendmtn(OscarData *od, guint16 channel, const char *bn, guint16 event);
+/* 0x0014 */ int aim_im_sendmtn(OscarData *od, guint16 type1, const char *bn, guint16 type2);
+/* 0x000b */ int icq_relay_xstatus (OscarData *od, const char *sn, const guchar* cookie);
 void aim_icbm_makecookie(guchar* cookie);
 gchar *oscar_encoding_extract(const char *encoding);
 gchar *oscar_encoding_to_utf8(PurpleAccount *account, const char *encoding, const char *text, int textlen);
@@ -1066,7 +1087,7 @@
 	guint32 membersince; /* time_t */
 	guint32 onlinesince; /* time_t */
 	guint32 sessionlen;  /* in seconds */
-	guint32 capabilities;
+	guint64 capabilities;
 	struct {
 		guint32 status;
 		guint32 ipaddr;
@@ -1131,7 +1152,7 @@
 void aim_locate_dorequest(OscarData *od);
 
 /* 0x0002 */ int aim_locate_reqrights(OscarData *od);
-/* 0x0004 */ int aim_locate_setcaps(OscarData *od, guint32 caps);
+/* 0x0004 */ int aim_locate_setcaps(OscarData *od, guint64 caps);
 /* 0x0004 */ int aim_locate_setprofile(OscarData *od, const char *profile_encoding, const gchar *profile, const int profile_len, const char *awaymsg_encoding, const gchar *awaymsg, const int awaymsg_len);
 /* 0x0005 */ int aim_locate_getinfo(OscarData *od, const char *, guint16);
 /* 0x0009 */ int aim_locate_setdirinfo(OscarData *od, const char *first, const char *middle, const char *last, const char *maiden, const char *nickname, const char *street, const char *city, const char *state, const char *zip, int country, guint16 privacy);
@@ -1139,13 +1160,15 @@
 /* 0x000f */ int aim_locate_setinterests(OscarData *od, const char *interest1, const char *interest2, const char *interest3, const char *interest4, const char *interest5, guint16 privacy);
 /* 0x0015 */ int aim_locate_getinfoshort(OscarData *od, const char *bn, guint32 flags);
 
-guint32 aim_locate_getcaps(OscarData *od, ByteStream *bs, int len);
-guint32 aim_locate_getcaps_short(OscarData *od, ByteStream *bs, int len);
+guint64 aim_locate_getcaps(OscarData *od, ByteStream *bs, int len);
+guint64 aim_locate_getcaps_short(OscarData *od, ByteStream *bs, int len);
 void aim_info_free(aim_userinfo_t *);
 int aim_info_extract(OscarData *od, ByteStream *bs, aim_userinfo_t *);
 int aim_putuserinfo(ByteStream *bs, aim_userinfo_t *info);
-
-
+PurpleMood* icq_get_purple_moods(PurpleAccount *account);
+const char* icq_get_custom_icon_description(const char *mood);
+guint8* icq_get_custom_icon_data(const char *mood);
+int icq_im_xstatus_request(OscarData *od, const char *sn);
 
 /* 0x0003 - family_buddy.c */
 /* 0x0002 */ void aim_buddylist_reqrights(OscarData *, FlapConnection *);
@@ -1474,7 +1497,7 @@
 int aim_tlvlist_add_16(GSList **list, const guint16 type, const guint16 value);
 int aim_tlvlist_add_32(GSList **list, const guint16 type, const guint32 value);
 int aim_tlvlist_add_str(GSList **list, const guint16 type, const char *value);
-int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint32 caps);
+int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint64 caps, const char *mood);
 int aim_tlvlist_add_userinfo(GSList **list, guint16 type, aim_userinfo_t *userinfo);
 int aim_tlvlist_add_chatroom(GSList **list, guint16 type, guint16 exchange, const char *roomname, guint16 instance);
 int aim_tlvlist_add_frozentlvlist(GSList **list, guint16 type, GSList **tl);
@@ -1637,7 +1660,7 @@
 int byte_stream_putstr(ByteStream *bs, const char *str);
 int byte_stream_putbs(ByteStream *bs, ByteStream *srcbs, int len);
 int byte_stream_putuid(ByteStream *bs, OscarData *od);
-int byte_stream_putcaps(ByteStream *bs, guint32 caps);
+int byte_stream_putcaps(ByteStream *bs, guint64 caps);
 
 /**
  * Inserts a BART asset block into the given byte stream.  The flags
@@ -1697,7 +1720,7 @@
 IcbmCookie *aim_mkcookie(guint8 *, int, void *);
 IcbmCookie *aim_checkcookie(OscarData *, const unsigned char *, const int);
 int aim_freecookie(OscarData *od, IcbmCookie *cookie);
-int aim_msgcookie_gettype(int type);
+int aim_msgcookie_gettype(guint64 type);
 int aim_cookie_free(OscarData *od, IcbmCookie *cookie);
 
 int aim_chat_readroominfo(ByteStream *bs, struct aim_chat_roominfo *outinfo);
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/peer.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/peer.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/peer.h	Sat Apr 24 11:23:06 2010 -0500
@@ -45,7 +45,7 @@
 #define PEER_TYPE_PROMPT 0x0101 /* "I am going to send you this file, is that ok?" */
 #define PEER_TYPE_RESUMEACCEPT 0x0106 /* We are accepting the resume */
 #define PEER_TYPE_ACK 0x0202 /* "Yes, it is ok for you to send me that file" */
-#define PEER_TYPE_DONE 0x0204 /* "I received that file with no problems, thanks a bunch" */
+#define PEER_TYPE_DONE 0x0204 /* "I received that file with no problems" or "I already have that file, great!" */
 #define PEER_TYPE_RESUME 0x0205 /* Resume transferring, sent by whoever receives */
 #define PEER_TYPE_RESUMEACK 0x0207 /* Our resume accept was ACKed */
 
@@ -136,7 +136,7 @@
 struct _PeerConnection
 {
 	OscarData *od;
-	OscarCapability type;
+	guint64 type;
 	char *bn;
 	guchar magic[4];
 	guchar cookie[8];
@@ -228,11 +228,11 @@
  * @param type The type of the peer connection.  One of
  *        OSCAR_CAPABILITY_DIRECTIM or OSCAR_CAPABILITY_SENDFILE.
  */
-PeerConnection *peer_connection_new(OscarData *od, OscarCapability type, const char *bn);
+PeerConnection *peer_connection_new(OscarData *od, guint64 type, const char *bn);
 
 void peer_connection_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message);
 void peer_connection_schedule_destroy(PeerConnection *conn, OscarDisconnectReason reason, const gchar *error_message);
-PeerConnection *peer_connection_find_by_type(OscarData *od, const char *bn, OscarCapability type);
+PeerConnection *peer_connection_find_by_type(OscarData *od, const char *bn, guint64 type);
 PeerConnection *peer_connection_find_by_cookie(OscarData *od, const char *bn, const guchar *cookie);
 
 void peer_connection_listen_cb(gpointer data, gint source, PurpleInputCondition cond);
@@ -241,7 +241,7 @@
 
 void peer_connection_trynext(PeerConnection *conn);
 void peer_connection_finalize_connection(PeerConnection *conn);
-void peer_connection_propose(OscarData *od, OscarCapability type, const char *bn);
+void peer_connection_propose(OscarData *od, guint64 type, const char *bn);
 void peer_connection_got_proposition(OscarData *od, const gchar *bn, const gchar *message, IcbmArgsCh2 *args);
 
 /*
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/presence.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/presence.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/presence.h	Sat Apr 24 11:23:06 2010 -0500
@@ -24,10 +24,63 @@
 #ifndef PURPLE_JABBER_PRESENCE_H_
 #define PURPLE_JABBER_PRESENCE_H_
 
+typedef enum {
+	JABBER_PRESENCE_ERROR = -2,
+	JABBER_PRESENCE_PROBE = -1,
+	JABBER_PRESENCE_AVAILABLE,
+	JABBER_PRESENCE_UNAVAILABLE,
+	JABBER_PRESENCE_SUBSCRIBE,
+	JABBER_PRESENCE_SUBSCRIBED,
+	JABBER_PRESENCE_UNSUBSCRIBE,
+	JABBER_PRESENCE_UNSUBSCRIBED
+} JabberPresenceType;
+
+typedef struct _JabberPresenceChatInfo JabberPresenceChatInfo;
+typedef struct _JabberPresence JabberPresence;
+
 #include "buddy.h"
+#include "chat.h"
 #include "jabber.h"
+#include "jutil.h"
 #include "xmlnode.h"
 
+struct _JabberPresenceChatInfo {
+	GSList *codes;
+	xmlnode *item;
+};
+
+struct _JabberPresence {
+	JabberPresenceType type;
+	JabberID *jid_from;
+	const char *from;
+	const char *to;
+	const char *id;
+
+	JabberBuddy *jb;
+	JabberChat *chat;
+	JabberPresenceChatInfo chat_info;
+	xmlnode *caps; /* TODO: Temporary, see presence.c:parse_caps */
+
+	JabberBuddyState state;
+	gchar *status;
+	int priority;
+
+	char *vcard_avatar_hash;
+	char *nickname;
+
+	gboolean delayed;
+	time_t sent;
+	int idle;
+};
+
+typedef void (JabberPresenceHandler)(JabberStream *js, JabberPresence *presence,
+                                     xmlnode *child);
+void jabber_presence_register_handler(const char *node, const char *xmlns,
+                                      JabberPresenceHandler *handler);
+
+void jabber_presence_init(void);
+void jabber_presence_uninit(void);
+
 void jabber_set_status(PurpleAccount *account, PurpleStatus *status);
 
 /**
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/prpl.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/prpl.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/prpl.h	Sat Apr 24 11:23:06 2010 -0500
@@ -569,6 +569,12 @@
 	 */
 	PurpleMediaCaps (*get_media_caps)(PurpleAccount *account,
 					  const char *who);
+
+	/**
+	 * Returns an array of "PurpleMood"s, with the last one having
+	 * "mood" set to @c NULL.
+	 */
+	PurpleMood *(*get_moods)(PurpleAccount *account);
 };
 
 #define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/request.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/request.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/request.h	Sat Apr 24 11:23:06 2010 -0500
@@ -150,6 +150,7 @@
 		struct
 		{
 			GList *items;
+			GList *icons;
 			GHashTable *item_data;
 			GList *selected;
 			GHashTable *selected_table;
@@ -953,11 +954,24 @@
  * @param field The list field.
  * @param item  The list item.
  * @param data  The associated data.
+ *
+ * @deprecated Use purple_request_field_list_add_icon() instead.
  */
 void purple_request_field_list_add(PurpleRequestField *field,
 								 const char *item, void *data);
 
 /**
+ * Adds an item to a list field.
+ *
+ * @param field The list field.
+ * @param item  The list item.
+ * @param icon_path The path to icon file, or @c NULL for no icon.
+ * @param data  The associated data.
+ */
+void purple_request_field_list_add_icon(PurpleRequestField *field,
+								 const char *item, const char* icon_path, void* data);
+
+/**
  * Adds a selected item to the list field.
  *
  * @param field The field.
@@ -1015,6 +1029,18 @@
  */
 GList *purple_request_field_list_get_items(const PurpleRequestField *field);
 
+/**
+ * Returns a list of icons in a list field.
+ *
+ * The icons will correspond with the items, in order.
+ *
+ * @param field The field.
+ *
+ * @constreturn The list of icons or @c NULL (i.e. the empty GList) if no
+ *              items have icons.
+ */
+GList *purple_request_field_list_get_icons(const PurpleRequestField *field);
+
 /*@}*/
 
 /**************************************************************************/
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/signals.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/signals.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/signals.h	Sat Apr 24 11:23:06 2010 -0500
@@ -355,6 +355,8 @@
 void purple_marshal_BOOLEAN__INT_POINTER(
 		PurpleCallback cb, va_list args, void *data, void **return_val);
 
+void purple_marshal_POINTER__POINTER(
+		PurpleCallback cb, va_list args, void *data, void **return_val);
 void purple_marshal_POINTER__POINTER_INT(
 		PurpleCallback cb, va_list args, void *data, void **return_val);
 void purple_marshal_POINTER__POINTER_INT64(
diff -r 8d3eb1d1acaf -r ac866c15ecd7 Frameworks/libpurple.framework/Versions/0.7.0/Headers/slp.h
--- a/Frameworks/libpurple.framework/Versions/0.7.0/Headers/slp.h	Sat Mar 13 20:30:05 2010 -0600
+++ b/Frameworks/libpurple.framework/Versions/0.7.0/Headers/slp.h	Sat Apr 24 11:23:06 2010 -0500
@@ -30,6 +30,25 @@
 #include "session.h"
 #include "slpcall.h"
 
+#define MAX_FILE_NAME_LEN 260 /* MAX_PATH in Windows */
+
+/**
+ * The context data for a file transfer request
+ */
+#pragma pack(push,1) /* Couldn't they have made it the right size? */




More information about the commits mailing list