adium 5420:89cb5b023ca8: Merged adium-1.6 into default.
commits at adium.im
commits at adium.im
Tue Apr 16 15:28:29 UTC 2013
details: http://hg.adium.im/adium/rev/89cb5b023ca8
revision: 5420:89cb5b023ca8
branch: (none)
author: Thijs Alkemade <me at thijsalkema.de>
date: Tue Apr 16 17:27:41 2013 +0200
Merged adium-1.6 into default.
diffs (truncated from 1858 to 1000 lines):
diff -r f3e70aa36278 -r 89cb5b023ca8 Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Thu Mar 21 00:01:23 2013 -0400
+++ b/Adium.xcodeproj/project.pbxproj Tue Apr 16 17:27:41 2013 +0200
@@ -107,17 +107,12 @@
112E7FA60FC86BB400657119 /* AITwitterActionsHTMLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 112E7FA50FC86BB400657119 /* AITwitterActionsHTMLFilter.m */; };
1130EA99109B445500FB3454 /* pref-defaultclient.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 1130EA98109B445500FB3454 /* pref-defaultclient.tiff */; };
1130EA9D109B445D00FB3454 /* pref-mention.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 1130EA9B109B445D00FB3454 /* pref-mention.tiff */; };
- 113891830F6B6AFF00A7D7DC /* AILaconicaService.m in Sources */ = {isa = PBXBuildFile; fileRef = 113891820F6B6AFF00A7D7DC /* AILaconicaService.m */; };
- 1138918A0F6B6B2800A7D7DC /* AILaconicaAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 113891890F6B6B2800A7D7DC /* AILaconicaAccount.m */; };
- 1138918D0F6B6B3F00A7D7DC /* AILaconicaPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 1138918C0F6B6B3F00A7D7DC /* AILaconicaPlugin.m */; };
- 113891950F6B6B9C00A7D7DC /* AILaconicaAccountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113891940F6B6B9C00A7D7DC /* AILaconicaAccountViewController.m */; };
113892270F6B70CA00A7D7DC /* laconica-small.png in Resources */ = {isa = PBXBuildFile; fileRef = 113892250F6B70CA00A7D7DC /* laconica-small.png */; };
113892280F6B70CA00A7D7DC /* laconica.png in Resources */ = {isa = PBXBuildFile; fileRef = 113892260F6B70CA00A7D7DC /* laconica.png */; };
113900B10F85BEF60081A418 /* AIURLHandlerPreferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 113900B00F85BEF60081A418 /* AIURLHandlerPreferences.xib */; };
113900B40F85BF880081A418 /* AIURLHandlerWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 113900B30F85BF880081A418 /* AIURLHandlerWindowController.m */; };
1139011C0F85C9450081A418 /* AIURLHandlerPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 1139011B0F85C9450081A418 /* AIURLHandlerPlugin.m */; };
1139FFAA0F85260E0081A418 /* AIIRCChannelLinker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1139FFA90F85260E0081A418 /* AIIRCChannelLinker.m */; };
- 113F26A00F5CC03F00954772 /* AITwitterURLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 113F269F0F5CC03F00954772 /* AITwitterURLParser.m */; };
114849B90F7841C600EA5264 /* AIAuthorizationRequestsWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 114849B70F7841C600EA5264 /* AIAuthorizationRequestsWindowController.h */; settings = {ATTRIBUTES = (Public, ); }; };
114849BA0F7841C600EA5264 /* AIAuthorizationRequestsWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114849B80F7841C600EA5264 /* AIAuthorizationRequestsWindowController.m */; };
114849BC0F78420300EA5264 /* AIAuthorizationRequestsWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 114849BB0F78420300EA5264 /* AIAuthorizationRequestsWindow.xib */; };
@@ -1033,6 +1028,7 @@
5A3B4D7C16D878AC00903E40 /* STTwitterOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B4D7216D878AB00903E40 /* STTwitterOAuth.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
5A3B4D7E16D878AC00903E40 /* STHTTPRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B4D7816D878AC00903E40 /* STHTTPRequest.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
5A44595E169143130078AB0A /* AIPreferenceCVPrototypeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A445957169118C60078AB0A /* AIPreferenceCVPrototypeView.m */; };
+ 5A4B77E916FBDDC700DF398C /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4B77E716FBDDC600DF398C /* NSData+Base64.m */; };
5A4BD41D13F855B000A4D3F7 /* SearchTerms.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5A4BD41B13F855B000A4D3F7 /* SearchTerms.plist */; };
5A4BD41E13F8568100A4D3F7 /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5ACF27331392C585004B6AEF /* Preferences.xib */; };
5A4BD43313F856E300A4D3F7 /* Preferences-AddressBookIntegration.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5AC7F26313B42952002D7265 /* Preferences-AddressBookIntegration.xib */; };
@@ -1847,8 +1843,6 @@
1139FFA90F85260E0081A418 /* AIIRCChannelLinker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIIRCChannelLinker.m; path = Source/AIIRCChannelLinker.m; sourceTree = "<group>"; };
113E06A910D0ABA0005D5B9A /* adiumPurpleMedia.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = adiumPurpleMedia.m; path = "Plugins/Purple Service/adiumPurpleMedia.m"; sourceTree = "<group>"; };
113E06AE10D0ABE3005D5B9A /* adiumPurpleMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = adiumPurpleMedia.h; path = "Plugins/Purple Service/adiumPurpleMedia.h"; sourceTree = "<group>"; };
- 113F269E0F5CC03F00954772 /* AITwitterURLParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AITwitterURLParser.h; path = "Plugins/Twitter Plugin/AITwitterURLParser.h"; sourceTree = "<group>"; };
- 113F269F0F5CC03F00954772 /* AITwitterURLParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AITwitterURLParser.m; path = "Plugins/Twitter Plugin/AITwitterURLParser.m"; sourceTree = "<group>"; };
1147FCC210D1CB4C004E9E8D /* AIMediaWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIMediaWindowController.h; path = Source/AIMediaWindowController.h; sourceTree = "<group>"; };
1147FCC310D1CB4C004E9E8D /* AIMediaWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIMediaWindowController.m; path = Source/AIMediaWindowController.m; sourceTree = "<group>"; };
1147FCC710D1CB83004E9E8D /* AIMediaWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = AIMediaWindow.xib; path = Resources/AIMediaWindow.xib; sourceTree = "<group>"; };
@@ -3898,6 +3892,9 @@
5A3B4D7816D878AC00903E40 /* STHTTPRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = STHTTPRequest.m; path = "Plugins/Twitter Plugin/STTwitter/Vendor/STHTTPRequest.m"; sourceTree = "<group>"; };
5A445956169118C60078AB0A /* AIPreferenceCVPrototypeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIPreferenceCVPrototypeView.h; path = Source/AIPreferenceCVPrototypeView.h; sourceTree = "<group>"; };
5A445957169118C60078AB0A /* AIPreferenceCVPrototypeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIPreferenceCVPrototypeView.m; path = Source/AIPreferenceCVPrototypeView.m; sourceTree = "<group>"; };
+ 5A4B77E716FBDDC600DF398C /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "NSData+Base64.m"; path = "Plugins/Twitter Plugin/STTwitter/NSData+Base64.m"; sourceTree = "<group>"; };
+ 5A4B77E816FBDDC700DF398C /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "NSData+Base64.h"; path = "Plugins/Twitter Plugin/STTwitter/NSData+Base64.h"; sourceTree = "<group>"; };
+ 5A4B77FA16FCABEC00DF398C /* Dock Tile Plugin.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Dock Tile Plugin.xcconfig"; sourceTree = "<group>"; };
5A4BD41C13F855B000A4D3F7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = en; path = Resources/en.lproj/SearchTerms.plist; sourceTree = "<group>"; };
5A4BD47213F858EE00A4D3F7 /* Preferences-ContactList.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "Preferences-ContactList.xib"; path = "Resources/Preferences-ContactList.xib"; sourceTree = "<group>"; };
5A4BD48813F859EF00A4D3F7 /* Preferences-WindowHandling.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "Preferences-WindowHandling.xib"; path = "Resources/Preferences-WindowHandling.xib"; sourceTree = "<group>"; };
@@ -5055,8 +5052,6 @@
11BD73D20F5A54BB007D438A /* twitter.png */,
EFB1C3120DDBDA3100B3973D /* AITwitterIMPlugin.h */,
EFB1C3130DDBDA3100B3973D /* AITwitterIMPlugin.m */,
- 113F269E0F5CC03F00954772 /* AITwitterURLParser.h */,
- 113F269F0F5CC03F00954772 /* AITwitterURLParser.m */,
112523170F5F7F86003FC58A /* AITwitterURLHandler.h */,
112523180F5F7F86003FC58A /* AITwitterURLHandler.m */,
11F738FA0F58D19B00B3285B /* AITwitterPlugin.h */,
@@ -7319,6 +7314,8 @@
5A3B4D6A16D878AB00903E40 /* STTwitter */ = {
isa = PBXGroup;
children = (
+ 5A4B77E716FBDDC600DF398C /* NSData+Base64.m */,
+ 5A4B77E816FBDDC700DF398C /* NSData+Base64.h */,
5A0D236816F4C7BC005DF211 /* STTwitterAppOnly.m */,
5A0D236916F4C7BC005DF211 /* STTwitterAppOnly.h */,
5A3B4D6B16D878AB00903E40 /* NSString+STTwitter.h */,
@@ -8090,6 +8087,7 @@
63C7E1160FAFA35E00B310AC /* Plist Macros.xcconfig */,
63C7E1170FAFA35E00B310AC /* Setup Build Directory.xcconfig */,
63C7E11A0FAFA35E00B310AC /* AdiumApplescriptRunner.xcconfig */,
+ 5A4B77FA16FCABEC00DF398C /* Dock Tile Plugin.xcconfig */,
);
path = xcconfigs;
sourceTree = "<group>";
@@ -10520,13 +10518,8 @@
11F738F90F58D18700B3285B /* AITwitterService.m in Sources */,
11F738FC0F58D19B00B3285B /* AITwitterPlugin.m in Sources */,
11F739020F58D1C400B3285B /* AITwitterAccountViewController.m in Sources */,
- 113F26A00F5CC03F00954772 /* AITwitterURLParser.m in Sources */,
112523190F5F7F86003FC58A /* AITwitterURLHandler.m in Sources */,
1109661A0F61D3E70064CA0E /* AITwitterReplyWindowController.m in Sources */,
- 113891830F6B6AFF00A7D7DC /* AILaconicaService.m in Sources */,
- 1138918A0F6B6B2800A7D7DC /* AILaconicaAccount.m in Sources */,
- 1138918D0F6B6B3F00A7D7DC /* AILaconicaPlugin.m in Sources */,
- 113891950F6B6B9C00A7D7DC /* AILaconicaAccountViewController.m in Sources */,
1163F0EC0F6C7A8300F12F5D /* AIURLShortenerPlugin.m in Sources */,
11700A350F7E8BE80078D6AB /* AISpecialPasswordPromptController.m in Sources */,
112B490A0F82FB1700690E84 /* AIGroupChatStatusTooltipPlugin.m in Sources */,
@@ -10571,6 +10564,7 @@
5A3B4D7C16D878AC00903E40 /* STTwitterOAuth.m in Sources */,
5A3B4D7E16D878AC00903E40 /* STHTTPRequest.m in Sources */,
5A0D236A16F4C7BC005DF211 /* STTwitterAppOnly.m in Sources */,
+ 5A4B77E916FBDDC700DF398C /* NSData+Base64.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -12360,7 +12354,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2050FAFAA4700B310AC /* Unit tests.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12368,7 +12361,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2050FAFAA4700B310AC /* Unit tests.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12376,7 +12368,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2050FAFAA4700B310AC /* Unit tests.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
@@ -12384,11 +12375,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"$(SRCROOT)/Frameworks\"",
- );
};
name = Debug;
};
@@ -12396,11 +12382,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"$(SRCROOT)/Frameworks\"",
- );
};
name = Release;
};
@@ -12408,11 +12389,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2060FAFAA4700B310AC /* AdiumLibpurple.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "\"$(SRCROOT)/Frameworks\"",
- );
};
name = "Release-Debug";
};
@@ -12420,7 +12396,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1150FAFA35E00B310AC /* Touch Framework Bundles to Executable Date.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12428,7 +12403,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1150FAFA35E00B310AC /* Touch Framework Bundles to Executable Date.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12436,7 +12410,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1150FAFA35E00B310AC /* Touch Framework Bundles to Executable Date.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
@@ -12444,7 +12417,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2030FAFAA4700B310AC /* AIUtilities.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12452,7 +12424,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2030FAFAA4700B310AC /* AIUtilities.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12460,7 +12431,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2030FAFAA4700B310AC /* AIUtilities.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
@@ -12468,7 +12438,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2080FAFAA4700B310AC /* Spotlight Importer.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12476,7 +12445,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2080FAFAA4700B310AC /* Spotlight Importer.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12484,12 +12452,12 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2080FAFAA4700B310AC /* Spotlight Importer.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
761CE34516F9087D000EE361 /* Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 5A4B77FA16FCABEC00DF398C /* Dock Tile Plugin.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
@@ -12522,6 +12490,7 @@
};
761CE34616F9087D000EE361 /* Release */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 5A4B77FA16FCABEC00DF398C /* Dock Tile Plugin.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
@@ -12555,6 +12524,7 @@
};
761CE34716F9087D000EE361 /* Release-Debug */ = {
isa = XCBuildConfiguration;
+ baseConfigurationReference = 5A4B77FA16FCABEC00DF398C /* Dock Tile Plugin.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
@@ -12683,7 +12653,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2070FAFAA4700B310AC /* Adium.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12691,7 +12660,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2070FAFAA4700B310AC /* Adium.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12699,7 +12667,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E2070FAFAA4700B310AC /* Adium.framework.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
@@ -12772,8 +12739,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1170FAFA35E00B310AC /* Setup Build Directory.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- PRODUCT_NAME = "Setup Build Directory";
};
name = Debug;
};
@@ -12781,8 +12746,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1170FAFA35E00B310AC /* Setup Build Directory.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- PRODUCT_NAME = "Setup Build Directory";
};
name = Release;
};
@@ -12790,8 +12753,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1170FAFA35E00B310AC /* Setup Build Directory.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
- PRODUCT_NAME = "Setup Build Directory";
};
name = "Release-Debug";
};
@@ -12799,7 +12760,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1160FAFA35E00B310AC /* Plist Macros.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Debug;
};
@@ -12807,7 +12767,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1160FAFA35E00B310AC /* Plist Macros.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = Release;
};
@@ -12815,7 +12774,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 63C7E1160FAFA35E00B310AC /* Plist Macros.xcconfig */;
buildSettings = {
- COMBINE_HIDPI_IMAGES = YES;
};
name = "Release-Debug";
};
diff -r f3e70aa36278 -r 89cb5b023ca8 AdiumHelp/pgs/Accounts-Sametime.html
--- a/AdiumHelp/pgs/Accounts-Sametime.html Thu Mar 21 00:01:23 2013 -0400
+++ b/AdiumHelp/pgs/Accounts-Sametime.html Tue Apr 16 17:27:41 2013 +0200
@@ -46,7 +46,8 @@
</table>
<p>IBM Lotus Sametime is a messaging protocol used primarily in corporate environments.
<p>Adium's Sametime support is provided via the <a class="ext_link" href="http://meanwhile.sf.net/">Meanwhile</a> library and Pidgin plugin, an open re-implementation of the protocol developed by Christopher (siege) O'Brien. Sametime-specific issues and requests are best directed to the appropriate <a class="ext_link" href="http://sf.net/tracker/?group_id=110565</a>">Meanwhile project trackers</a>. Questions regarding the Meanwhile library and Pidgin plugin may be answered on the <a class="ext_link" href="http://meanwhile.sourceforge.net/faq/">Meanwhile FAQ</a> page.
- <p><strong>Technical note</strong>: The Meanwhile library's client ID is 0x1700. If you can connect with the official Lotus client but receive a "Not Authorized" error when connecting with Adium, you may need to ask your IT department to enable access for the Meanwhile client ID. Alternately, in Adium 1.0 or later, select "Hide client identity" in the Options of tab of your Sametime account's preferences within Adium.</p>
+ <p><strong>Technical note</strong>: The Meanwhile library's client ID is 0x1700. If you can connect with the official Lotus client but receive a "Not Authorized" error when connecting with Adium, you may need to ask your IT department to enable access for the Meanwhile client ID. Alternately, select "Hide client identity" in the Options of tab of your Sametime account's preferences within Adium.</p>
+ <p><a class="ext_link" href="http://www.nomaen.com/2012/01/connecting-with-ibmers-via-sametime-in.html">This blog post</a> has instructions on how to setup Sametime as an IBM employee.</p>
</div>
</div>
<div class="taskboxline">
diff -r f3e70aa36278 -r 89cb5b023ca8 ChangeLogs/Changes.txt
--- a/ChangeLogs/Changes.txt Thu Mar 21 00:01:23 2013 -0400
+++ b/ChangeLogs/Changes.txt Tue Apr 16 17:27:41 2013 +0200
@@ -57,8 +57,10 @@
- Fixed DNS leaks in libpurple. / Added a "Tor (SOCKS5)" proxy option, which uses the Tor proxy option of libpurple. (#15161)
- "Proxy bypass when registered jabber handle" (#15957)
+Version 1.5.7 (XX/XX/20XX)
+ * Fix a bug that could cause SSL connections to be closed prematurely. (#16356)
-Version 1.5.6 (3/XX/2013)
+Version 1.5.6 (3/18/2013)
* Fix a crash on startup on 10.6.8.
* Fix a crash when accepting or canceling the certificate verification dialog. (#16280)
* Fix a crash or hang when trying to use OTR on 32-bits Macs. (#16203)
diff -r f3e70aa36278 -r 89cb5b023ca8 Frameworks/AutoHyperlinks Framework/xcconfigs/AutoHyperlinks.xcconfig
--- a/Frameworks/AutoHyperlinks Framework/xcconfigs/AutoHyperlinks.xcconfig Thu Mar 21 00:01:23 2013 -0400
+++ b/Frameworks/AutoHyperlinks Framework/xcconfigs/AutoHyperlinks.xcconfig Tue Apr 16 17:27:41 2013 +0200
@@ -31,3 +31,8 @@
GCC_WARN_UNUSED_VALUE = YES
GCC_TREAT_WARNINGS_AS_ERRORS = NO
RUN_CLANG_STATIC_ANALYZER = YES
+CLANG_WARN_CONSTANT_CONVERSION = YES
+CLANG_WARN_ENUM_CONVERSION = YES
+CLANG_WARN_INT_CONVERSION = YES
+CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
+GCC_WARN_UNINITIALIZED_AUTOS = YES
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m
--- a/Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m Thu Mar 21 00:01:23 2013 -0400
+++ b/Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m Tue Apr 16 17:27:41 2013 +0200
@@ -90,6 +90,7 @@
- (void)dealloc {
CFRelease(certificates);
+ CFRelease(trustRef);
}
- (IBAction)showWindow:(id)sender {
@@ -248,9 +249,6 @@
CFRelease(data);
}
}
-
- CFRelease(trustRef);
- trustRef = NULL;
[parentWindow performClose:nil];
}
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c
--- a/Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c Thu Mar 21 00:01:23 2013 -0400
+++ b/Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c Tue Apr 16 17:27:41 2013 +0200
@@ -229,17 +229,18 @@
switch(theErr) {
case ENOENT:
/* connection closed */
- rtn = errSSLClosedGraceful;
+ rtn = errSSLClosedGraceful;
break;
case ECONNRESET:
rtn = errSSLClosedAbort;
break;
+ case 0:
case EAGAIN:
rtn = errSSLWouldBlock;
break;
default:
- fprintf(stderr,"SocketRead: read(%lu) error %d\n",
- (unsigned long)bytesToGo, theErr);
+ fprintf(stderr,"SocketRead: read(%lu) error %d\n",
+ (unsigned long)bytesToGo, theErr);
rtn = errSSLFatalAlert;
break;
}
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Twitter Plugin/AITwitterAccount.h
--- a/Plugins/Twitter Plugin/AITwitterAccount.h Thu Mar 21 00:01:23 2013 -0400
+++ b/Plugins/Twitter Plugin/AITwitterAccount.h Tue Apr 16 17:27:41 2013 +0200
@@ -193,7 +193,7 @@
- (void)destroyDirectMessage:(NSString *)messageID
forUser:(NSString *)userID;
-- (NSAttributedString *)linkifiedAttributedStringFromString:(NSAttributedString *)inString;
+- (void)linkifyEntities:(NSArray *)entities inString:(NSMutableAttributedString **)inString forLinkType:(AITwitterLinkType)linkType;
- (NSString *)addressForLinkType:(AITwitterLinkType)linkType
userID:(NSString *)userID
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Twitter Plugin/AITwitterAccount.m
--- a/Plugins/Twitter Plugin/AITwitterAccount.m Thu Mar 21 00:01:23 2013 -0400
+++ b/Plugins/Twitter Plugin/AITwitterAccount.m Tue Apr 16 17:27:41 2013 +0200
@@ -15,7 +15,6 @@
*/
#import "AITwitterAccount.h"
-#import "AITwitterURLParser.h"
#import "AITwitterReplyWindowController.h"
#import <AIUtilities/AIAttributedStringAdditions.h>
#import <AIUtilities/AIStringAdditions.h>
@@ -43,12 +42,12 @@
- (void)updateTimelineChat:(AIGroupChat *)timelineChat;
-- (NSAttributedString *)parseMessage:(NSString *)inMessage
- tweetID:(NSString *)tweetID
- userID:(NSString *)userID
- inReplyToUser:(NSString *)replyUserID
- inReplyToTweetID:(NSString *)replyTweetID;
-- (NSAttributedString *)parseDirectMessage:(NSString *)inMessage
+- (NSAttributedString *)parseStatus:(NSDictionary *)inStatus
+ tweetID:(NSString *)tweetID
+ userID:(NSString *)userID
+ inReplyToUser:(NSString *)replyUserID
+ inReplyToTweetID:(NSString *)replyTweetID;
+- (NSAttributedString *)parseDirectMessage:(NSDictionary *)inMessage
withID:(NSString *)dmID
fromUser:(NSString *)sourceUID;
- (NSAttributedString *)attributedStringWithLinkLabel:(NSString *)label
@@ -613,21 +612,11 @@
AILogWithSignature(@"%@ Updating statuses for profile, user %@", self, inContact);
for (NSDictionary *update in statuses) {
- NSAttributedString *message;
- NSDictionary *retweet = [update valueForKey:TWITTER_STATUS_RETWEET];
- NSString *text = [update objectForKey:TWITTER_STATUS_TEXT];
-
- if (retweet && [retweet isKindOfClass:[NSDictionary class]]) {
- text = [NSString stringWithFormat:@"RT @%@: %@",
- [[retweet objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_STATUS_UID],
- [retweet objectForKey:TWITTER_STATUS_TEXT]];
- }
-
- message = [self parseMessage:text
- tweetID:[update objectForKey:TWITTER_STATUS_ID]
- userID:inContact.UID
- inReplyToUser:[update objectForKey:TWITTER_STATUS_REPLY_UID]
- inReplyToTweetID:[update objectForKey:TWITTER_STATUS_REPLY_ID]];
+ NSAttributedString *message = [self parseStatus:update
+ tweetID:[update objectForKey:TWITTER_STATUS_ID]
+ userID:inContact.UID
+ inReplyToUser:[update objectForKey:TWITTER_STATUS_REPLY_UID]
+ inReplyToTweetID:[update objectForKey:TWITTER_STATUS_REPLY_ID]];
[profileArray addObject:[NSDictionary dictionaryWithObjectsAndKeys:message, KEY_VALUE, nil]];
}
@@ -904,7 +893,7 @@
[twitterEngine getRateLimitsForResources:@[ @"users", @"statuses", @"friendships", @"direct_messages" ]
successBlock:^(NSDictionary *rateLimits) {
NSMutableString *formattedString = [NSMutableString string];
- [rateLimits[@"resources"] enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
+ [[rateLimits objectForKey:@"resources"] enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([obj isKindOfClass:[NSDictionary class]]) {
__block BOOL displayedHeader = NO;
[obj enumerateKeysAndObjectsUsingBlock:^(id subKey, id subObj, BOOL *subStop) {
@@ -929,7 +918,11 @@
}];
}
}];
- [[NSAlert alertWithMessageText:AILocalizedString(@"Current Twitter rate limits", "Message in the rate limits status window") defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", formattedString] beginSheetModalForWindow:nil modalDelegate:nil didEndSelector:nil contextInfo:nil];
+ [[NSAlert alertWithMessageText:AILocalizedString(@"Current Twitter rate limits", "Message in the rate limits status window")
+ defaultButton:nil
+ alternateButton:nil
+ otherButton:nil
+ informativeTextWithFormat:@"%@", formattedString] beginSheetModalForWindow:nil modalDelegate:nil didEndSelector:nil contextInfo:nil];
} errorBlock:^(NSError *error) {
[self requestFailed:AITwitterRateLimitStatus withError:error userInfo:nil];
}];
@@ -1027,23 +1020,25 @@
[listContact setValue:[NSNumber numberWithBool:YES] forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
// Grab the user icon and set it as their serverside icon.
- NSString *imageURL = [url stringByReplacingOccurrencesOfString:@"_normal." withString:@"_bigger."];
- NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
- [NSURLConnection sendAsynchronousRequest:imageRequest
- queue:[NSOperationQueue currentQueue]
- completionHandler:^(NSURLResponse *resp, NSData *data, NSError *error) {
- NSImage *image = [[NSImage alloc] initWithData:data];
-
- if (image) {
- AILogWithSignature(@"%@ Updated user icon for %@", self, listContact);
- [listContact setServersideIconData:[image TIFFRepresentation]
- notify:NotifyLater];
-
- [listContact setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
- } else {
- [self requestFailed:AITwitterUserIconPull withError:error userInfo:@{ @"ListContact" : listContact }];
- }
- }];
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ NSString *imageURL = [url stringByReplacingOccurrencesOfString:@"_normal." withString:@"_bigger."];
+ NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
+ NSError *error = nil;
+ NSData *data = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:nil error:&error];
+ NSImage *image = [[NSImage alloc] initWithData:data];
+
+ if (image) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ AILogWithSignature(@"%@ Updated user icon for %@", self, listContact);
+ [listContact setServersideIconData:[image TIFFRepresentation]
+ notify:NotifyLater];
+
+ [listContact setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
+ });
+ } else {
+ [self requestFailed:AITwitterUserIconPull withError:error userInfo:@{ @"ListContact" : listContact }];
+ }
+ });
}
}
@@ -1312,7 +1307,7 @@
} else if (linkType == AITwitterLinkUserPage) {
address = [NSString stringWithFormat:@"https://twitter.com/%@", userID];
} else if (linkType == AITwitterLinkSearchHash) {
- address = [NSString stringWithFormat:@"http://search.twitter.com/search?q=%%23%@", context];
+ address = [NSString stringWithFormat:@"http://twitter.com/search?q=%%23%@", context];
} else if (linkType == AITwitterLinkReply) {
address = [NSString stringWithFormat:@"twitterreply://%@@%@?action=reply&status=%@", self.internalObjectID, userID, statusID];
} else if (linkType == AITwitterLinkRetweet) {
@@ -1480,61 +1475,89 @@
/*!
* @brief Parse an attributed string into a linkified version.
*/
-- (NSAttributedString *)linkifiedAttributedStringFromString:(NSAttributedString *)inString
-{
- NSAttributedString *attributedString;
-
- static NSCharacterSet *usernameCharacters = nil;
- static NSCharacterSet *hashCharacters = nil;
-
- if (!usernameCharacters) {
- usernameCharacters = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"];
- }
-
- if (!hashCharacters) {
- NSMutableCharacterSet *disallowedCharacters = [[NSCharacterSet punctuationCharacterSet] mutableCopy];
- [disallowedCharacters formUnionWithCharacterSet:[NSCharacterSet whitespaceCharacterSet]];
- [disallowedCharacters removeCharactersInString:@"_"];
+- (void)linkifyEntities:(NSArray *)entities inString:(NSMutableAttributedString **)inString forLinkType:(AITwitterLinkType)linkType {
+ [entities enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+ NSString *text = @"";
+ NSString *userID = nil;
+ NSString *context = nil;
+ if (linkType == AITwitterLinkUserPage) {
+ userID = [obj objectForKey:@"screen_name"];
+ text = [NSString stringWithFormat:@"@%@", userID];
+ } else if (linkType == AITwitterLinkSearchHash) {
+ context = [obj objectForKey:@"text"];
+ text = [NSString stringWithFormat:@"#%@", context];
+ }
- hashCharacters = [disallowedCharacters invertedSet];
- }
-
- attributedString = [AITwitterURLParser linkifiedStringFromAttributedString:inString
- forPrefixCharacter:@"@"
- forLinkType:AITwitterLinkUserPage
- forAccount:self
- validCharacterSet:usernameCharacters];
-
- attributedString = [AITwitterURLParser linkifiedStringFromAttributedString:attributedString
- forPrefixCharacter:@"#"
- forLinkType:AITwitterLinkSearchHash
- forAccount:self
- validCharacterSet:hashCharacters];
-
- return attributedString;
+ NSString *linkURL = [self addressForLinkType:linkType
+ userID:userID
+ statusID:nil
+ context:context];
+
+ [*inString replaceOccurrencesOfString:text
+ withString:text
+ attributes:@{ NSLinkAttributeName : linkURL }
+ options:NSCaseInsensitiveSearch
+ range:NSMakeRange(0, [*inString length])];
+ }];
}
/*!
* @brief Parses a Twitter message into an attributed string
*/
-- (NSAttributedString *)parseMessage:(NSString *)inMessage
- tweetID:(NSString *)tweetID
- userID:(NSString *)userID
- inReplyToUser:(NSString *)replyUserID
- inReplyToTweetID:(NSString *)replyTweetID
+- (NSAttributedString *)parseStatus:(NSDictionary *)inStatus
+ tweetID:(NSString *)tweetID
+ userID:(NSString *)userID
+ inReplyToUser:(NSString *)replyUserID
+ inReplyToTweetID:(NSString *)replyTweetID
{
- NSAttributedString *message;
+ NSMutableAttributedString *mutableMessage;
+ NSDictionary *retweet = [inStatus objectForKey:TWITTER_STATUS_RETWEET];
- message = [NSAttributedString stringWithString:[inMessage stringByUnescapingFromXMLWithEntities:nil]];
+ if (retweet && [retweet isKindOfClass:[NSDictionary class]]) {
+ NSString *text = [[retweet objectForKey:TWITTER_STATUS_TEXT] stringByUnescapingFromXMLWithEntities:nil];
+ mutableMessage = [[NSMutableAttributedString alloc] initWithString:text];
+ [mutableMessage replaceCharactersInRange:NSMakeRange(0, 0)
+ withString:[NSString stringWithFormat:@"RT @%@: ",
+ [[retweet objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_STATUS_UID]]];
+ } else {
+ NSString *text = [[inStatus objectForKey:TWITTER_STATUS_TEXT] stringByUnescapingFromXMLWithEntities:nil];
+ mutableMessage = [[NSMutableAttributedString alloc] initWithString:text];
+ }
- message = [self linkifiedAttributedStringFromString:message];
+ //Extract hashtags, users, and URLs
+ NSDictionary *entities = [inStatus objectForKey:@"entities"];
+ NSArray *hashtags = [entities objectForKey:@"hashtags"];
+ NSArray *urls = [entities objectForKey:@"urls"];
+ NSArray *users = [entities objectForKey:@"user_mentions"];
+ NSArray *media = [entities objectForKey:@"media"];
+
+ [self linkifyEntities:users inString:&mutableMessage forLinkType:AITwitterLinkUserPage];
+ [self linkifyEntities:hashtags inString:&mutableMessage forLinkType:AITwitterLinkSearchHash];
+ [urls enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+ NSString *linkURL = [obj objectForKey:@"url"];
+ NSString *expandedURL = [obj objectForKey:@"expanded_url"];
+ [mutableMessage replaceOccurrencesOfString:linkURL
+ withString:expandedURL
+ attributes:@{ NSLinkAttributeName : linkURL }
+ options:NSLiteralSearch
+ range:NSMakeRange(0, mutableMessage.length)];
+ }];
+ [media enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+ NSString *linkURL = [obj objectForKey:@"url"];
+ NSString *displayURL = [obj objectForKey:@"display_url"];
+ [mutableMessage replaceOccurrencesOfString:linkURL
+ withString:displayURL
+ attributes:@{ NSLinkAttributeName : linkURL }
+ options:NSLiteralSearch
+ range:NSMakeRange(0, mutableMessage.length)];
+ }];
+
+ NSString *message = [mutableMessage string];
BOOL replyTweet = (replyTweetID.length > 0);
BOOL tweetLink = (tweetID.length && userID.length);
if (replyTweet || tweetLink) {
- NSMutableAttributedString *mutableMessage = [message mutableCopy];
-
NSUInteger startIndex = message.length;
[mutableMessage appendString:@" (" withAttributes:nil];
@@ -1548,9 +1571,9 @@
statusID:replyTweetID
context:nil];
- if([inMessage hasPrefix:@"@"] &&
- inMessage.length >= replyUserID.length + 1 &&
- [replyUserID isCaseInsensitivelyEqualToString:[inMessage substringWithRange:NSMakeRange(1, replyUserID.length)]]) {
+ if([message hasPrefix:@"@"] &&
+ message.length >= replyUserID.length + 1 &&
+ [replyUserID isCaseInsensitivelyEqualToString:[message substringWithRange:NSMakeRange(1, replyUserID.length)]]) {
// If the message has a "@" prefix, it's a proper in_reply_to_status_id if the usernames match. Set a link appropriately.
[mutableMessage setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:linkAddress, NSLinkAttributeName, nil]
range:NSMakeRange(0, replyUserID.length + 1)];
@@ -1598,7 +1621,7 @@
linkAddress = [self addressForLinkType:AITwitterLinkQuote
userID:userID
statusID:tweetID
- context:[inMessage stringByAddingPercentEscapesForAllCharacters]];
+ context:[message stringByAddingPercentEscapesForAllCharacters]];
#define PILCROW_SIGN @"\u00B6"
@@ -1630,7 +1653,7 @@
linkAddress = [self addressForLinkType:AITwitterLinkDestroyStatus
userID:userID
statusID:tweetID
- context:[inMessage stringByAddingPercentEscapesForAllCharacters]];
+ context:[message stringByAddingPercentEscapesForAllCharacters]];
[mutableMessage appendAttributedString:[self attributedStringWithLinkLabel:@"\u232B"
linkDestination:linkAddress
@@ -1670,24 +1693,25 @@
return mutableMessage;
} else {
- return message;
+ return [[NSAttributedString alloc] initWithString:message];
}
}
/*!
* @brief Parse a direct message
*/
-- (NSAttributedString *)parseDirectMessage:(NSString *)inMessage
+- (NSAttributedString *)parseDirectMessage:(NSDictionary *)inMessage
withID:(NSString *)dmID
fromUser:(NSString *)sourceUID
{
- NSAttributedString *message;
+ NSString *message = [[inMessage objectForKey:TWITTER_DM_TEXT] stringByUnescapingFromXMLWithEntities:nil];
+ NSMutableAttributedString *mutableMessage = [[NSMutableAttributedString alloc] initWithString:message];
- message = [NSAttributedString stringWithString:[inMessage stringByUnescapingFromXMLWithEntities:nil]];
-
- message = [self linkifiedAttributedStringFromString:message];
-
- NSMutableAttributedString *mutableMessage = [message mutableCopy];
+ NSDictionary *entities = [inMessage objectForKey:@"entities"];
+ NSArray *hashtags = [entities objectForKey:@"hashtags"];
+ NSArray *users = [entities objectForKey:@"user_mentions"];
+ [self linkifyEntities:users inString:&mutableMessage forLinkType:AITwitterLinkUserPage];
+ [self linkifyEntities:hashtags inString:&mutableMessage forLinkType:AITwitterLinkSearchHash];
NSUInteger startIndex = message.length;
@@ -1696,7 +1720,7 @@
NSString *linkAddress = [self addressForLinkType:AITwitterLinkDestroyDM
userID:sourceUID
statusID:dmID
- context:[inMessage stringByAddingPercentEscapesForAllCharacters]];
+ context:[message stringByAddingPercentEscapesForAllCharacters]];
[mutableMessage appendAttributedString:[self attributedStringWithLinkLabel:@"\u232B"
linkDestination:linkAddress
@@ -1783,26 +1807,22 @@
[[AIContactObserverManager sharedManager] delayListObjectNotifications];
for (NSDictionary *status in sortedQueuedUpdates) {
- NSDictionary *retweet = [status objectForKey:TWITTER_STATUS_RETWEET];
- NSString *text = [status objectForKey:TWITTER_STATUS_TEXT];
-
- if (retweet && [retweet isKindOfClass:[NSDictionary class]]) {
- text = [NSString stringWithFormat:@"RT @%@: %@",
- [[retweet objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_STATUS_UID],
- [retweet objectForKey:TWITTER_STATUS_TEXT]];
- }
+ NSString *contactUID = [[status objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_STATUS_UID];
+ NSAttributedString *message = [self parseStatus:status
+ tweetID:[status objectForKey:TWITTER_STATUS_ID]
+ userID:contactUID
+ inReplyToUser:[status objectForKey:TWITTER_STATUS_REPLY_UID]
+ inReplyToTweetID:[status objectForKey:TWITTER_STATUS_REPLY_ID]];
NSDate *date = [status objectForKey:TWITTER_STATUS_CREATED];
- NSString *contactUID = [[status objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_STATUS_UID];
-
id fromObject = nil;
if (![self.UID isCaseInsensitivelyEqualToString:contactUID]) {
AIListContact *listContact = [self contactWithUID:contactUID];
// Update the user's status message
- [listContact setStatusMessage:[NSAttributedString stringWithString:[text stringByUnescapingFromXMLWithEntities:nil]]
+ [listContact setStatusMessage:message
notify:NotifyNow];
[self updateUserIcon:[[status objectForKey:TWITTER_STATUS_USER] objectForKey:TWITTER_INFO_ICON] forContact:listContact];
@@ -1814,12 +1834,6 @@
fromObject = (id)self;
}
- NSAttributedString *message = [self parseMessage:text
- tweetID:[status objectForKey:TWITTER_STATUS_ID]
- userID:contactUID
- inReplyToUser:[status objectForKey:TWITTER_STATUS_REPLY_UID]
- inReplyToTweetID:[status objectForKey:TWITTER_STATUS_REPLY_ID]];
-
AIContentMessage *contentMessage = [AIContentMessage messageInChat:timelineChat
withSource:fromObject
destination:self
@@ -1848,7 +1862,6 @@
for (NSDictionary *message in sortedQueuedDM) {
NSDate *date = [NSDate dateWithNaturalLanguageString:[message objectForKey:TWITTER_DM_CREATED]];
- NSString *text = [message objectForKey:TWITTER_DM_TEXT];
NSString *fromUID = [message objectForKey:TWITTER_DM_SENDER_UID];
NSString *toUID = [message objectForKey:TWITTER_DM_RECIPIENT_UID];
@@ -1871,7 +1884,7 @@
withSource:source
destination:destination
date:date
- message:[self parseDirectMessage:text
+ message:[self parseDirectMessage:message
withID:[message objectForKey:TWITTER_DM_ID]
fromUser:chat.listObject.UID]
autoreply:NO];
@@ -2225,35 +2238,36 @@
[self setValue:[userInfo objectForKey:@"location"] forProperty:@"Profile Location" notify:NotifyLater];
[self setValue:[userInfo objectForKey:@"description"] forProperty:@"Profile Description" notify:NotifyLater];
-
- NSString *imageURL = [userInfo objectForKey:TWITTER_INFO_ICON];
- NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
- [NSURLConnection sendAsynchronousRequest:imageRequest
- queue:[NSOperationQueue currentQueue]
- completionHandler:^(NSURLResponse *resp, NSData *data, NSError *error) {
- NSImage *image = [[NSImage alloc] initWithData:data];
-
- if (image) {
- AILogWithSignature(@"Updated self icon for %@", self);
-
- // Set a property so that we don't re-send the image we're just now downloading.
- [self setValue:[NSNumber numberWithBool:YES] forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
-
- [self setPreference:[NSNumber numberWithBool:YES]
- forKey:KEY_USE_USER_ICON
- group:GROUP_ACCOUNT_STATUS];
-
- [self setPreference:[image TIFFRepresentation]
- forKey:KEY_USER_ICON
- group:GROUP_ACCOUNT_STATUS];
-
- [self notifyOfChangedPropertiesSilently:NO];
-
- [self setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
- } else {
- [self requestFailed:AITwitterSelfUserIconPull withError:error userInfo:nil];
- }
- }];
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ NSString *imageURL = [userInfo objectForKey:TWITTER_INFO_ICON];
+ NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
+ NSError *error = nil;
+ NSData *data = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:nil error:&error];
+ NSImage *image = [[NSImage alloc] initWithData:data];
+
+ if (image) {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ AILogWithSignature(@"Updated self icon for %@", self);
+
+ // Set a property so that we don't re-send the image we're just now downloading.
+ [self setValue:[NSNumber numberWithBool:YES] forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
+
+ [self setPreference:[NSNumber numberWithBool:YES]
+ forKey:KEY_USE_USER_ICON
+ group:GROUP_ACCOUNT_STATUS];
+
+ [self setPreference:[image TIFFRepresentation]
+ forKey:KEY_USER_ICON
+ group:GROUP_ACCOUNT_STATUS];
+
+ [self notifyOfChangedPropertiesSilently:NO];
+
+ [self setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
+ });
+ } else {
+ [self requestFailed:AITwitterSelfUserIconPull withError:error userInfo:nil];
+ }
+ });
}
}
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Twitter Plugin/AITwitterURLParser.h
--- a/Plugins/Twitter Plugin/AITwitterURLParser.h Thu Mar 21 00:01:23 2013 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
- * Adium is the legal property of its developers, whose names are listed in the copyright file included
- * with this source distribution.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#import "AITwitterAccount.h"
-
- at interface AITwitterURLParser : NSObject {
-
-}
-
-+(NSAttributedString *)linkifiedStringFromAttributedString:(NSAttributedString *)inString
- forPrefixCharacter:(NSString *)prefixCharacter
- forLinkType:(AITwitterLinkType)linkType
- forAccount:(AITwitterAccount *)account
- validCharacterSet:(NSCharacterSet *)validValues;
-
- at end
diff -r f3e70aa36278 -r 89cb5b023ca8 Plugins/Twitter Plugin/AITwitterURLParser.m
--- a/Plugins/Twitter Plugin/AITwitterURLParser.m Thu Mar 21 00:01:23 2013 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Adium is the legal property of its developers, whose names are listed in the copyright file included
- * with this source distribution.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#import "AITwitterURLParser.h"
-#import <AIUtilities/AIStringAdditions.h>
-
- at implementation AITwitterURLParser
-
-+(NSAttributedString *)linkifiedStringFromAttributedString:(NSAttributedString *)inString
- forPrefixCharacter:(NSString *)prefixCharacter
- forLinkType:(AITwitterLinkType)linkType
- forAccount:(AITwitterAccount *)account
- validCharacterSet:(NSCharacterSet *)validValues
-{
- NSMutableAttributedString *newString = [inString mutableCopy];
-
- NSScanner *scanner = [NSScanner scannerWithString:[inString string]];
-
- [scanner setCharactersToBeSkipped:nil];
-
- [newString beginEditing];
-
- while(!scanner.isAtEnd) {
- [scanner scanUpToString:prefixCharacter intoString:NULL];
-
- if(scanner.isAtEnd) {
- break;
- }
-
- NSUInteger startLocation = scanner.scanLocation;
- NSString *linkText = nil;
-
- // Advance to the start of the string we want.
- // Check to make sure we aren't exceeding the string bounds.
- if(startLocation + 1 < scanner.string.length) {
- scanner.scanLocation++;
- } else {
- break;
- }
-
- // Grab any valid characters we can.
- BOOL scannedCharacters = [scanner scanCharactersFromSet:validValues intoString:&linkText];
-
- if(scannedCharacters) {
- if((scanner.scanLocation - linkText.length) == prefixCharacter.length ||
- [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[scanner.string characterAtIndex:(scanner.scanLocation - linkText.length - prefixCharacter.length - 1)]]) {
-
- NSString *linkURL = nil;
- if(linkType == AITwitterLinkUserPage) {
- linkURL = [account addressForLinkType:linkType userID:[linkText stringByEncodingURLEscapes] statusID:nil context:nil];
- } else if (linkType == AITwitterLinkSearchHash) {
- linkURL = [account addressForLinkType:linkType userID:nil statusID:nil context:[linkText stringByEncodingURLEscapes]];
- } else if (linkType == AITwitterLinkGroup) {
- linkURL = [account addressForLinkType:linkType userID:nil statusID:nil context:[linkText stringByEncodingURLEscapes]];
- }
-
- if(linkURL) {
- [newString addAttribute:NSLinkAttributeName
- value:linkURL
- range:NSMakeRange(startLocation + 1, linkText.length)];
- }
More information about the commits
mailing list