adium 5700:3b5d579f7ab2: Merged adium-1.5.8 into adium-1.6.
commits at adium.im
commits at adium.im
Tue Sep 10 12:20:51 UTC 2013
details: http://hg.adium.im/adium/rev/3b5d579f7ab2
revision: 5700:3b5d579f7ab2
branch: adium-1.6
author: Thijs Alkemade <me at thijsalkema.de>
date: Tue Sep 10 14:15:35 2013 +0200
Merged adium-1.5.8 into adium-1.6.
Subject: adium 5701:7337a82bbce8: Merge.
details: http://hg.adium.im/adium/rev/7337a82bbce8
revision: 5701:7337a82bbce8
branch: adium-1.6
author: Thijs Alkemade <me at thijsalkema.de>
date: Tue Sep 10 14:19:15 2013 +0200
Merge.
diffs (truncated from 18687 to 1000 lines):
diff -r c894fb063573 -r 7337a82bbce8 .hgtags
--- a/.hgtags Sun Jul 07 21:10:54 2013 +0200
+++ b/.hgtags Tue Sep 10 14:19:15 2013 +0200
@@ -1,11 +1,8 @@
4151ac3a3b1f9847b8d958f1c7d57a345d442266 1.5
64b4f46272118a2d4d721123fbcb9f485913ff35 1.5.1
-8d4ed0d28f89a09c3deb3b4b1952e21cd4a5e563 1.5.2
-c436f536180fc12b1c2f70ae31e29a2b32b4529f 1.5.4
-5efcd11df6947cf82c763a8024229d5a326d9c56 adium-1.5.4
-0000000000000000000000000000000000000000 adium-1.5.4
+80cc358134ea0f681484626ec447d8bf3a27692f 1.5.2
+c9b03688370c2887d956130319c8da537354d373 1.5.3
+5efcd11df6947cf82c763a8024229d5a326d9c56 1.5.4
+fc2294917bf61da7cf8c1560db443fe29e2acfb8 1.5.5
90a171a6b0fc033ebeba46112223e20fcee0a004 1.5.6
-fc2294917bf61da7cf8c1560db443fe29e2acfb8 1.5.5
a40ffe152e617ebb603ce3c6677eef0ce00cb1ad 1.5.7
-a40ffe152e617ebb603ce3c6677eef0ce00cb1ad 1.5.7
-c72b164f75a705caf2b01853be031399d10c254e 1.5.7
diff -r c894fb063573 -r 7337a82bbce8 Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Sun Jul 07 21:10:54 2013 +0200
+++ b/Adium.xcodeproj/project.pbxproj Tue Sep 10 14:19:15 2013 +0200
@@ -1027,6 +1027,9 @@
5A1E3A1214DCE60400724574 /* Preferences-Xtras.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A1E3A1114DCE60400724574 /* Preferences-Xtras.xib */; };
5A22D6E214834F44004E15F7 /* AIFacebookXMPPAccountView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A22D6E014834F44004E15F7 /* AIFacebookXMPPAccountView.xib */; };
5A27FA7E14A272330063489D /* pref-messagestyle.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A27FA7A14A272330063489D /* pref-messagestyle.png */; };
+ 5A2FF9B81797336100C2EF12 /* crashDuck.icns in Resources */ = {isa = PBXBuildFile; fileRef = 5A72C1A117013D9400075BBA /* crashDuck.icns */; };
+ 5A2FF9BC1797337200C2EF12 /* CrashReporter.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A72C1A517013D9400075BBA /* CrashReporter.xib */; };
+ 5A2FF9BD1797351500C2EF12 /* AICrashReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A72C1AD17013D9400075BBA /* AICrashReporter.m */; };
5A3B4D7916D878AC00903E40 /* NSString+STTwitter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B4D6C16D878AB00903E40 /* NSString+STTwitter.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
5A3B4D7A16D878AC00903E40 /* STTwitterAPIWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B4D6E16D878AB00903E40 /* STTwitterAPIWrapper.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
5A3B4D7C16D878AC00903E40 /* STTwitterOAuth.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3B4D7216D878AB00903E40 /* STTwitterOAuth.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
@@ -1067,6 +1070,8 @@
5ACF273A1392C74A004B6AEF /* AIHighlightingTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ACF27361392C74A004B6AEF /* AIHighlightingTextField.m */; };
5ACF273B1392C74A004B6AEF /* AIPreferenceCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ACF27371392C74A004B6AEF /* AIPreferenceCollectionView.h */; };
5ACF273C1392C74A004B6AEF /* AIPreferenceCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ACF27381392C74A004B6AEF /* AIPreferenceCollectionView.m */; };
+ 5AC423F3178CBD5100F5911A /* ChatCyclingDefaults-Old.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34D7F1E815F85DD300F32F9B /* ChatCyclingDefaults-Old.plist */; };
+ 5AC423F7178CBD5700F5911A /* ChatCyclingDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34D7F1E915F85DD300F32F9B /* ChatCyclingDefaults.plist */; };
5ADFFE5D133846C300069C1B /* keys.png in Resources */ = {isa = PBXBuildFile; fileRef = 5ADFFE5C133846C300069C1B /* keys.png */; };
5AEE60011602BAE200304672 /* AIBoolToControlTextColorTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 979AA6A614D59DC8008730DF /* AIBoolToControlTextColorTransformer.m */; };
6311F4710E340DD2004234B8 /* AISharedAdium.h in Headers */ = {isa = PBXBuildFile; fileRef = 6311F46F0E340DD2004234B8 /* AISharedAdium.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -3932,6 +3937,14 @@
5A5F8BBB12D560E400019727 /* AIDockNameOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIDockNameOverlay.h; path = "Plugins/Dock Icon Badging/AIDockNameOverlay.h"; sourceTree = "<group>"; };
5A5F8BBC12D560E400019727 /* AIDockNameOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIDockNameOverlay.m; path = "Plugins/Dock Icon Badging/AIDockNameOverlay.m"; sourceTree = "<group>"; };
5A675E8D13C00AEA006192C5 /* Preferences-General.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = "Preferences-General.xib"; path = "Resources/Preferences-General.xib"; sourceTree = "<group>"; };
+ 5A72C1A117013D9400075BBA /* crashDuck.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = crashDuck.icns; sourceTree = "<group>"; };
+ 5A72C1A217013D9400075BBA /* crashDuck.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = crashDuck.png; sourceTree = "<group>"; };
+ 5A72C1A617013D9400075BBA /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = cs; path = cs.lproj/CrashReporter.xib; sourceTree = "<group>"; };
+ 5A72C1A817013D9400075BBA /* de */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = de; path = de.lproj/CrashReporter.xib; sourceTree = "<group>"; };
+ 5A72C1AA17013D9400075BBA /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/CrashReporter.xib; sourceTree = "<group>"; };
+ 5A72C1AC17013D9400075BBA /* fr */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = fr; path = fr.lproj/CrashReporter.xib; sourceTree = "<group>"; };
+ 5A72C1AD17013D9400075BBA /* AICrashReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AICrashReporter.m; path = "Other/Adium Crash Reporter/AICrashReporter.m"; sourceTree = "<group>"; };
+ 5A72C1AE17013D9400075BBA /* AICrashReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AICrashReporter.h; path = "Other/Adium Crash Reporter/AICrashReporter.h"; sourceTree = "<group>"; };
5A7642A811E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sk_SK; path = Resources/sk_SK.lproj/AccountProxy.xib; sourceTree = "<group>"; };
5A7642A911E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xib; name = sk_SK; path = Resources/sk_SK.lproj/AIAdvancedInspectorPane.xib; sourceTree = "<group>"; };
5A7642AB11E044B900E5E0AF /* sk_SK */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sk_SK; path = Resources/sk_SK.lproj/Buttons.strings; sourceTree = "<group>"; };
@@ -7118,6 +7131,7 @@
4BCAC53407B59F9C006641B9 /* Other */ = {
isa = PBXGroup;
children = (
+ 5A72C19C17013B1A00075BBA /* Crash Reporter */,
11BE28E30FCC7DA8000E6A10 /* Image Uploading */,
34FDD6E305632BFD00F5B30F /* ESFileTransferController.h */,
34FDD6E405632BFD00F5B30F /* ESFileTransferController.m */,
@@ -7404,6 +7418,27 @@
name = Vendor;
sourceTree = "<group>";
};
+ 5A72C19C17013B1A00075BBA /* Crash Reporter */ = {
+ isa = PBXGroup;
+ children = (
+ 5A72C1A017013D9400075BBA /* Resources */,
+ 5A72C1AD17013D9400075BBA /* AICrashReporter.m */,
+ 5A72C1AE17013D9400075BBA /* AICrashReporter.h */,
+ );
+ name = "Crash Reporter";
+ sourceTree = "<group>";
+ };
+ 5A72C1A017013D9400075BBA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 5A72C1A117013D9400075BBA /* crashDuck.icns */,
+ 5A72C1A217013D9400075BBA /* crashDuck.png */,
+ 5A72C1A517013D9400075BBA /* CrashReporter.xib */,
+ );
+ name = Resources;
+ path = "Other/Adium Crash Reporter/Resources";
+ sourceTree = "<group>";
+ };
5A8A6A46124456B1004965A8 /* Segmented control with menu popup */ = {
isa = PBXGroup;
children = (
@@ -9812,6 +9847,7 @@
110763FA08676D05005987A5 /* BlockEditorWindow.xib in Resources */,
EE147A6D0896B18800A21377 /* ABSearch.png in Resources */,
EE147A790896B32400A21377 /* ABSearch.xib in Resources */,
+ 5A2FF9BC1797337200C2EF12 /* CrashReporter.xib in Resources */,
63C120750910A0DD00C9DB57 /* DefaultXtraReadme.rtf in Resources */,
348F579E0936FA6D00288E41 /* EditStatusGroup.xib in Resources */,
6333699409497DB000970871 /* EmoticonPreviewView.xib in Resources */,
@@ -9876,6 +9912,7 @@
317D83680E89F40500298BDB /* msg-bookmark-chat.tiff in Resources */,
11BD73D30F5A54BB007D438A /* twitter-small.png in Resources */,
11BD73D40F5A54BB007D438A /* twitter.png in Resources */,
+ 5A2FF9B81797336100C2EF12 /* crashDuck.icns in Resources */,
1109634C0F61C1D00064CA0E /* AITwitterReplyWindow.xib in Resources */,
113892270F6B70CA00A7D7DC /* laconica-small.png in Resources */,
113892280F6B70CA00A7D7DC /* laconica.png in Resources */,
@@ -9988,6 +10025,8 @@
C613B143164112B3006683FF /* events-dock-name.tiff in Resources */,
C613B1451641210B006683FF /* events-contact.tiff in Resources */,
5A0BBC4317400544002A7BE0 /* emoticons_menu at 2x.png in Resources */,
+ 5AC423F3178CBD5100F5911A /* ChatCyclingDefaults-Old.plist in Resources */,
+ 5AC423F7178CBD5700F5911A /* ChatCyclingDefaults.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -10528,6 +10567,7 @@
34DC88410A7EEE2E003E1636 /* AdiumPreferredAccounts.m in Sources */,
34DC88430A7EEE2E003E1636 /* AdiumServices.m in Sources */,
34DC88450A7EEE2E003E1636 /* AdiumApplescriptRunner.m in Sources */,
+ 5A2FF9BD1797351500C2EF12 /* AICrashReporter.m in Sources */,
34DC884C0A7EEE2E003E1636 /* AdiumContentFiltering.m in Sources */,
34DC884E0A7EEE2E003E1636 /* AdiumFormatting.m in Sources */,
34DC88510A7EEE2E003E1636 /* AdiumTyping.m in Sources */,
@@ -12318,6 +12358,17 @@
name = SearchTerms.plist;
sourceTree = "<group>";
};
+ 5A72C1A517013D9400075BBA /* CrashReporter.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 5A72C1A617013D9400075BBA /* cs */,
+ 5A72C1A817013D9400075BBA /* de */,
+ 5A72C1AA17013D9400075BBA /* en */,
+ 5A72C1AC17013D9400075BBA /* fr */,
+ );
+ name = CrashReporter.xib;
+ sourceTree = "<group>";
+ };
633D50ED0F9D31BD004F491E /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/AdiumHelp.html
--- a/AdiumHelp/AdiumHelp.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/AdiumHelp.html Tue Sep 10 14:19:15 2013 +0200
@@ -23,8 +23,8 @@
</div>
<div id="contentcenter"></div>
<div id="contentright">
- <h2> What's new in Adium? </h2>
- <p> <a href="pgs/WhatsNew1.4.html">Check out great new features.</a> </p>
+ <h2> What's new in Adium 1.6? </h2>
+ <p> <a href="pgs/WhatsNew1.6.html">Check out great new features.</a> </p>
<h2 class="space17"> Adium Documentation </h2>
<p> <a href="pgs/AdiumDocumentation.html">Learn how to use Adium.</a> </p>
<h2 class="space17"> Troubleshooting </h2>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/Accounts-CreatingAccounts.html
--- a/AdiumHelp/pgs/Accounts-CreatingAccounts.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/Accounts-CreatingAccounts.html Tue Sep 10 14:19:15 2013 +0200
@@ -61,7 +61,6 @@
<li><a class="ext_link" href="http://www.livejournal.com/chat/">LiveJournal</a></li>
<li><a class="ext_link" href="http://www.passport.com/">MSN Messenger</a></li>
<li><a class="ext_link" href="http://edit.yahoo.com/">Yahoo!Messenger</a></li>
- <li><a class="ext_link" href="https://trac.adium.im/wiki/Zephyr">Zephyr</a></li>
</ul>
</li>
<li>Paid Services
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html
--- a/AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/AdvancedFeatures-AdiumXtras.html Tue Sep 10 14:19:15 2013 +0200
@@ -68,7 +68,7 @@
<h3>Getting support for an Xtra</h3>
</div>
<div class="taskboxtext">
- <p>An Xtra installed from the Adium Xtras site is supported by the Xtra's author. The first place to seek support is on the Xtra's page, probably in the comments unless the Author has given other instructions. If that doesn't work, try the <a class="ext_link" href="http://forum.adium.im/">Adium forums</a>.</p>
+ <p>An Xtra installed from the Adium Xtras site is supported by the Xtra's author. The first place to seek support is on the Xtra's page, probably in the comments unless the author has given other instructions. If that doesn't work, try the <a class="ext_link" href="http://forums.cocoaforge.com/viewforum.php?f=13">Adium forum</a>.</p>
</div>
</div>
<div class="taskboxline">
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/AdvancedFeatures-OTREncryption.html
--- a/AdiumHelp/pgs/AdvancedFeatures-OTREncryption.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/AdvancedFeatures-OTREncryption.html Tue Sep 10 14:19:15 2013 +0200
@@ -47,10 +47,10 @@
<div class="taskboxtext">
<p></p>
<ol>
- <li>Open a chat with the contact with whom you want to have a private conversation.</li>
- <li>Notice the "Encryption" item in the toolbar appears unlocked. It signifies the chat currently is not encrypted. Click the icon and select "Initiate Encrypted OTR Chat".</li>
- <li>You will be prompted to verify the fingerprint. If you are certain of its trustworthy origin click "Accept".</li>
- <li>Notice the previously unlocked icon is now locked and the message "Encrypted OTR chat initiated" is displayed in the message view.</li>
+ <li>Open a chat with the contact with whom you want to have a private conversation. Notice the "Encryption" item in the toolbar appears unlocked. It signifies the chat currently is not encrypted.</li>
+ <li>Click the icon and select "Initiate Encrypted OTR Chat". Notice the previously unlocked icon is now locked.</li>
+ <li>You will be prompted to verify the fingerprint of your contact. If you are certain of its trustworthy origin click "Accept".</li>
+ <p>Next time you start an OTR chat with the same contact, Adium will remember you verified their fingerprint so you will not have to do so again.</p>
</ol>
</div>
</div>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/AdvancedFeatures-VisualNotifications.html
--- a/AdiumHelp/pgs/AdvancedFeatures-VisualNotifications.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/AdvancedFeatures-VisualNotifications.html Tue Sep 10 14:19:15 2013 +0200
@@ -38,8 +38,8 @@
<div class="taskboxtext">
<p>The third-party application Growl.app has been around about as long as Adium itself â a long time before Apple introduced "Notification Center" (NC) in OS X 10.8 ("Mountain Lion").</p>
<p>While Growl.app is the obvious solution for users on previous versions of OS X, it also has a lot to offer to OS X users on 10.8, especially in the way of customisability and extendability. For example, there are dozens of different styles to choose from.</p>
- <p>To install Growl.app either <a class="ext_link" href="https://itunes.apple.com/de/app/growl/id467939042?mt=12">buy the application from the Mac App Store</a>, or get an older and free version from <a class="ext_link" href="http://growl.info/downloads">http://growl.info/downloads</a>.</p>
- <p>If you have Growl.app installed and would prefer to use Notification Center notifications for Adium, you need make the change in Growl's preferences.</p>
+ <p>To install Growl.app either <a class="ext_link" href="https://itunes.apple.com/de/app/growl/id467939042?mt=12">buy the application from the Mac App Store</a> (recommended, it's not expensive), or get an older and free version from <a class="ext_link" href="http://growl.info/downloads">http://growl.info/downloads</a> (not recommended and not supported on OS X 10.8 and later).</p>
+ <p>If you have Growl.app installed and would prefer to use Notification Center notifications for Adium, you need to make the change in Growl's preferences.</p>
<p>To uninstall the Growl application, follow the <a class="ext_link" href="http://growl.info/documentation/growl-package-removal.php">instructions on the Growl website</a>.</p>
</div>
</div>
@@ -50,7 +50,7 @@
<p align="center"> <img src="../gfx/MistNotification.png" alt="" /></p>
<div class="taskboxtext">
<p>As of Adium 1.5, Adium is able to show Growl-style notifications on OS X versions 10.7 and 10.6 without the Growl application installed. This feature is called <a class="ext_link" href="http://growl.info/notetodevelopers">Mist</a>.</p>
- <p>If you want to use a different style or use some of the more advanced features of Growl, you will have to either <a class="ext_link" href="https://itunes.apple.com/de/app/growl/id467939042?mt=12">buy the application from the Mac App Store</a>, or get an older and free version from <a class="ext_link" href="http://growl.info/downloads">http://growl.info/downloads</a>.</p>
+ <p>If you want to use a different style or use some of the more advanced features of Growl, you will have to either <a class="ext_link" href="https://itunes.apple.com/de/app/growl/id467939042?mt=12">buy the application from the Mac App Store</a> (recommended, it's not expensive), or get an older and free version from <a class="ext_link" href="http://growl.info/downloads">http://growl.info/downloads</a> (not recommended and not supported on OS X 10.8 and later).</p>
<p>To disable Mist notifications, enter this command in Terminal.app: <code>defaults write -g com.growl.growlframework.mist.enabled -bool NO</code>. Please note that this affects any apps that support built-in Mist notifications like Adium does.<p>
</div>
</div>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/Messaging-GroupChat.html
--- a/AdiumHelp/pgs/Messaging-GroupChat.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/Messaging-GroupChat.html Tue Sep 10 14:19:15 2013 +0200
@@ -24,7 +24,7 @@
<h3>Initiating/joining a group chat</h3>
</div>
<div class="taskboxtext">
- <p><b>AIM, Jabber, SameTime, Yahoo, Zephyr</b></p>
+ <p><b>AIM, Jabber, SameTime, Yahoo</b></p>
<p>Choose <b>File</b> â <b>Join Group</b> Chat and enter the details for the chat. You may invite contacts to join you in the chat immediately via the Join Group Chat window, and you may invite them later by:</p>
<ul>
<li>Selecting them in the contact list and choosing <b>Contact</b> â <b>Invite to Chat</b> and selecting the chat, or</li>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/Miscellaneous-AVSkypeSupport.html
--- a/AdiumHelp/pgs/Miscellaneous-AVSkypeSupport.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/Miscellaneous-AVSkypeSupport.html Tue Sep 10 14:19:15 2013 +0200
@@ -31,9 +31,10 @@
<h3>Skype support</h3>
</div>
<div class="taskboxtext">
- <p>Yes and no.</p>
- <p>Yes: The third-party <a href="http://xtras.adium.im/index.php?a=xtras&xtra_id=5011">Skype Plugin</a> allows Adium to use the <a class="ext_link" href="https://developer.skype.com/Docs/ApiDoc">Skype API</a> to display your Skype contacts within Adium and let you chat with them via text-based instant messaging. By the nature of the Skype API, it requires that the Skype program be installed and running.</p>
- <p>No: It's not supported natively within Adium (i.e., without a plugin). The library that we use to support most protocols, <a href="https://trac.adium.im/wiki/LibPurple">libpurple</a>, doesn't support Skype at all right now, not even for chat. Until it does Adium most likely won't, either.</p>
+ <p>Adium does not natively (i.e., without a plugin) support Skype.</p>
+ <p>However, there is an unofficial third-party <a href="http://xtras.adium.im/index.php?a=xtras&xtra_id=5011">Skype Plugin</a> which allows Adium to use the <a class="ext_link" href="https://developer.skype.com/Docs/ApiDoc">Skype API</a> to display your Skype contacts within Adium and let you chat with them via text-based instant messaging. By the nature of the Skype API, it requires that the Skype program be installed and running.</p>
+ <p><strong>Why does Adium not officially support Skype?</strong></p>
+ <p>The library that we use to support most protocols, <a href="https://trac.adium.im/wiki/LibPurple">libpurple</a>, doesn't support Skype at all right now, not even for chat. Until it does Adium most likely won't, either.</p>
<p>Keep in mind that Skype is a proprietary, closed protocol, so it must be reverse-engineered before third-party clients like Pidgin and Adium can use it. Protocols like OSCAR (which AIM and ICQ are based on) and MSN have already been reverse-engineered, but they're much older than Skype, and reverse-engineering is hard. It will take a long time and won't happen at all unless someone chooses to take interest in it and dedicate significant time to the effort.</p>
<p><strong>What about the Skype API?</strong></p>
<p>Using the Skype API, as the Skype Plugin does, means that Skype must be running. We don't accept piggybacking on the official client as a substitute.</p>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/ServiceInformation-TwitterSupport.html
--- a/AdiumHelp/pgs/ServiceInformation-TwitterSupport.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/ServiceInformation-TwitterSupport.html Tue Sep 10 14:19:15 2013 +0200
@@ -34,7 +34,7 @@
</div>
<div class="taskboxline">
<div class="taskboxheader">
- <h3>Showing people your followers in the contact list</h3>
+ <h3>Showing your followers in the contact list</h3>
</div>
<div class="taskboxtext">
<p>By default, your followers are shown in your contact list. This setting can be edited in the <strong>Options</strong> tab of your Twitter account's preferences.</p>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/Troubleshooting-RecoveringLostPasswords.html
--- a/AdiumHelp/pgs/Troubleshooting-RecoveringLostPasswords.html Sun Jul 07 21:10:54 2013 +0200
+++ b/AdiumHelp/pgs/Troubleshooting-RecoveringLostPasswords.html Tue Sep 10 14:19:15 2013 +0200
@@ -24,7 +24,7 @@
<h3>Looking your password up in Keychain Access</h3>
</div>
<div class="taskboxtext">
- <p>If you don't remember what service you use, you'll first need to open up the Accounts pane of Adium's Preferences, and then refer to the <a href="https://trac.adium.im/wiki/ListOfServices">"ListOfServices"</a> entry on the online Adium Wiki to determine the name of the service.</p>
+ <p>If you don't remember what service you use, you'll first need to open up the Accounts pane of Adium's Preferences, and then refer to <a href="Accounts-ListOfServices.html">"ListOfServices"</a> to determine the name of the service.</p>
<ol>
<li>Launch Keychain Access.
<div style="float:right"><img src="../gfx/RecoveringLostPasswords-KeychainAccess.png" alt="Path to Keychain Access." /></div>
@@ -51,7 +51,7 @@
<p>If you can't find any IM-service passwords in the Keychain, or none of them work, you'll have to have the IM service change your password.</p>
<p>Most services, if not all, don't keep a clear-text copy of your password to send you because if they lost that database (by accident or by theft), people's accounts could be compromised. They keep only an encrypted version of the password, which is more secure, but inconvenient because it leaves changing it as your only option.</p>
<p><i>Again, note that Adium is a third-party client; we don't run any of the instant-messaging services that Adium supports. If you want your password sent to you or changed, you'll need to contact the IM service that you're using.</i></p>
- <p>We maintain a list of contact information for various services on the <a href="../../Accounts-CreatingAnAccount.html">Creating an Account</a> page. We're not recommending that you throw away your old account and create a new oneâit just happens to be the same contact information.</p>
+ <p>We maintain a list of contact information for various services on the <a href="Accounts-CreatingAccounts.html">Creating accounts</a> page. We're not recommending that you throw away your old account and create a new oneâit just happens to be the same contact information.</p>
<p>Once you have your password up and running, we recommend that you turn on the âRemember Passwordâ option in Adium. This saves your password in the Mac OS X Keychain, so that you won't have to enter it every time you launch Adium. The Keychain encrypts the password, so it is secure, and it allows you to look it up if you ever need it again.
</p>
</div>
diff -r c894fb063573 -r 7337a82bbce8 AdiumHelp/pgs/WhatsNew1.6.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AdiumHelp/pgs/WhatsNew1.6.html Tue Sep 10 14:19:15 2013 +0200
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="keywords" content="new, features, 1.6" />
+<meta name="description" content="Discover the New Features." />
+<title>What's new in Adium 1.6?</title>
+<link media="all" rel="stylesheet" href="../css/topicpage.css" type="text/css" />
+</head>
+<body>
+<div id="banner"> <a name="whatsnew1.6.html" id="WhatsNew1.6.html"></a><a name="ax-whatsnew" id="ax-whatsnew"></a>
+ <div id="navleft"><a class="navleftsty" href="../AdiumHelp.html">Adium Help</a> <a class="navleftsty" href="AdiumDocumentation.html">Adium Documentation</a></div>
+</div>
+<div id="mainbox">
+ <div id="caticon"> <img src="../gfx/AdiumIcon.png" alt="Adium Icon" height="32" width="32" border="0" /> </div>
+ <div id="pagetitle">
+ <h1>What's new in Adium 1.6?</h1>
+ </div>
+ <p>Adium 1.6</p>
+ <div class="taskboxline">
+ <div class="taskboxheader">
+ <h3>Updated chat window look</h3>
+ </div>
+ <div class="taskboxtable">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="One column table with heading">
+ <tr>
+ <td width="150" rowspan="2" valign="top"><img src="../gfx/New Smooth Operator.png" alt="Image of new Smooth Operator" height="auto" width="150" border="0" /> </td>
+ <td><ul>
+ <li></li>
+ <li></li>
+ </ul></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="taskboxline">
+ <div class="taskboxheader">
+ <h3>New preferences layout</h3>
+ </div>
+ <div class="taskboxtable">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="One column table with heading">
+ <tr>
+ <td width="150" rowspan="2" valign="top"><img src="../gfx/Twitter from account selection.png" alt="Image of Adium account types with IRC selected" height="auto" width="150" border="0" /> </td>
+ <td><ul>
+ <li></li>
+ <li></li>
+ <li></li>
+ <li></li>
+ </ul></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="taskboxline">
+ <div class="taskboxheader">
+ <h3>Comprehensive Retina Display support</h3>
+ </div>
+ <div class="taskboxtable">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="One column table with heading">
+ <tr>
+ <td width="150" rowspan="2" valign="top"><img src="../gfx/Group Chat.png" alt="Image of a group chat" height="auto" width="150" border="0" /> </td>
+ <td><ul>
+ <li></li>
+ <li></li>
+ <li></li>
+ </ul></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="taskboxline">
+ <div class="taskboxheader">
+ <h3>Updated Off-The-Record (OTR) encryption support</h3>
+ </div>
+ <div class="taskboxtable">
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" summary="One column table with heading">
+ <tr>
+ <td width="150" rowspan="2" valign="top"><img src="../gfx/IRC from account selection.png" alt="Image of Adium account types with Twitter selected" height="auto" width="150" border="0" /> </td>
+ <td><ul>
+ <li></li>
+ <li></li>
+ <li></li>
+ </ul></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div class="taskboxline">
+ <div class="taskboxheader">
+ <h3>And lots more!</h3>
+ </div>
+ <div class="taskboxtext">
+ <p>For the full list of changes, fixes, and improvements check out <a class="ext_link" href="https://trac.adium.im/wiki/AdiumVersionHistory">Adium Version History</a>.</p>
+ </div>
+ </div>
+</div>
+<script type="text/javascript" src="../js/help.js"></script>
+</body>
+</html>
diff -r c894fb063573 -r 7337a82bbce8 ChangeLogs/Changes.txt
--- a/ChangeLogs/Changes.txt Sun Jul 07 21:10:54 2013 +0200
+++ b/ChangeLogs/Changes.txt Tue Sep 10 14:19:15 2013 +0200
@@ -39,6 +39,7 @@
* Renamed the "Personal" preference pane to "Profile". (#16105) (Paul Wilde)
* Contact list: Added a preference for maximum contact list height. (#4815)
* General: Removed "Send Messages with:" option. (#15369)
+ * General: Simplified "Confirmations" settings. (#16436)
* Accounts: Added a signup or about button to each account setup pane. (#3792) (Ariel Chinn)
* Encryption: Made text selectable in the "Show Fingerprint..." window. (#15082)
@@ -62,10 +63,14 @@
- 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.8 (XX/XX/2XXX)
+Version 1.5.8 (XX/XX/2013)
+ * Changed the default tab switching shortcuts for new users to Control-Tab/Control-Shift-Tab, to match Safari. This was meant to be done for 1.5.4 but it did not work that time. (#16102)
+ * XMPP: refer to XMPP as "XMPP (Jabber)". Unfortunately, just "XMPP" still has some potential for confusion. (#16435)
* Fixed SIP accountnames to be case-sensitive. (Pete Woods) (#16237)
- * Fixed a bug that could cause Adium and other applications to hang and could lead to corruption of the Keychain when permanently trusting an untrusted SSL certificate. (#16365)
-
+ * Enabled a large number of TLS cipher suites, including ECC suites and suites new in TLS 1.2.
+ * Fix a problem causing Sametime login to fail. (Jonathan Rice) (#16345)
+ * Try to avoid Twitter's rate limiting causing Adium to go in a reconnection loop. (#16418)
+
Version 1.5.7 (7/2/2013)
* Updated Twitter support. (#16118)
diff -r c894fb063573 -r 7337a82bbce8 Frameworks/Adium Framework/Source/AIAbstractAccount.h
--- a/Frameworks/Adium Framework/Source/AIAbstractAccount.h Sun Jul 07 21:10:54 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAbstractAccount.h Tue Sep 10 14:19:15 2013 +0200
@@ -100,6 +100,7 @@
//FUS Disconnecting
- (void)autoReconnectAfterDelay:(NSTimeInterval)delay;
+- (double)minimumReconnectTime;
- (void)cancelAutoReconnect;
- (void)initFUSDisconnecting;
diff -r c894fb063573 -r 7337a82bbce8 Frameworks/Adium Framework/Source/AIAbstractAccount.m
--- a/Frameworks/Adium Framework/Source/AIAbstractAccount.m Sun Jul 07 21:10:54 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAbstractAccount.m Tue Sep 10 14:19:15 2013 +0200
@@ -1333,6 +1333,11 @@
return _contactProperties;
}
+- (double)minimumReconnectTime
+{
+ return RECONNECT_MIN_TIME;
+}
+
/*!
* @brief Did disconnect
*/
@@ -1389,8 +1394,8 @@
double reconnectDelay = pow(RECONNECT_BASE_TIME, (double)reconnectAttemptsPerformed);
// Make sure we're not going too fast
- if (reconnectDelay < RECONNECT_MIN_TIME)
- reconnectDelay = RECONNECT_MIN_TIME;
+ if (reconnectDelay < [self minimumReconnectTime])
+ reconnectDelay = [self minimumReconnectTime];
// Or too slow
else if (reconnectDelay > RECONNECT_MAX_TIME)
reconnectDelay = RECONNECT_MAX_TIME;
diff -r c894fb063573 -r 7337a82bbce8 Frameworks/Adium Framework/Source/AIAdiumProtocol.h
--- a/Frameworks/Adium Framework/Source/AIAdiumProtocol.h Sun Jul 07 21:10:54 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIAdiumProtocol.h Tue Sep 10 14:19:15 2013 +0200
@@ -16,16 +16,6 @@
@class AICoreComponentLoader, AICorePluginLoader;
-typedef enum {
- AIQuitConfirmAlways = 0,
- AIQuitConfirmSelective
-} AIQuitConfirmationType;
-
-typedef enum {
- AIMessageCloseAlways = 0,
- AIMessageCloseUnread
-} AIMessageCloseConfirmationType;
-
@protocol AIAccountController, AIChatController, AIContactAlertsController, AIDebugController, AIEmoticonController,
AIPreferenceController, AIMenuController, AIApplescriptabilityController, AIStatusController,
AIContentController, AIToolbarController, AISoundController, AIDockController,
diff -r c894fb063573 -r 7337a82bbce8 Frameworks/Adium Framework/Source/AIInterfaceControllerProtocol.h
--- a/Frameworks/Adium Framework/Source/AIInterfaceControllerProtocol.h Sun Jul 07 21:10:54 2013 +0200
+++ b/Frameworks/Adium Framework/Source/AIInterfaceControllerProtocol.h Tue Sep 10 14:19:15 2013 +0200
@@ -54,13 +54,9 @@
#define KEY_CL_WINDOW_HAS_SHADOW @"Window Has Shadow"
#define PREF_GROUP_CONFIRMATIONS @"Confirmations"
-#define KEY_CONFIRM_QUIT @"Confirm Quit"
-#define KEY_CONFIRM_QUIT_TYPE @"Confirm Quit Type"
#define KEY_CONFIRM_QUIT_FT @"Suppress Quit Confirmation for File Transfers"
-#define KEY_CONFIRM_QUIT_OPEN @"Suppress Quit Confirmation for Open Chats"
#define KEY_CONFIRM_QUIT_UNREAD @"Suppress Quit Confirmation for Unread Messages"
#define KEY_CONFIRM_MSG_CLOSE @"Confirm Message Window Close"
-#define KEY_CONFIRM_MSG_CLOSE_TYPE @"Confirm Message Window Close Type"
typedef enum {
AINormalWindowLevel = 0,
diff -r c894fb063573 -r 7337a82bbce8 Other/Adium Crash Reporter/AICrashReporter.h
--- a/Other/Adium Crash Reporter/AICrashReporter.h Sun Jul 07 21:10:54 2013 +0200
+++ b/Other/Adium Crash Reporter/AICrashReporter.h Tue Sep 10 14:19:15 2013 +0200
@@ -14,50 +14,27 @@
* write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#define RELATIVE_PATH_TO_CRASH_REPORTER @"/Contents/Resources/Adium Crash Reporter.app"
-#define EXCEPTIONS_PATH [@"~/Library/Logs/CrashReporter/Adium.exception.log" stringByExpandingTildeInPath]
-#define CRASHES_PATH [[NSString stringWithFormat:@"~/Library/Logs/CrashReporter/%@.crash.log", \
- [[NSProcessInfo processInfo] processName]] stringByExpandingTildeInPath]
+ at class AIAutoScrollView, AITextViewWithPlaceholder;
- at class AIAutoScrollView, AITextViewWithPlaceholder, SUStatusChecker;
- at protocol SUStatusCheckerDelegate;
+ at interface AICrashReporter : NSWindowController <NSWindowDelegate> {
+ IBOutlet AIAutoScrollView *scrollView_details;
+ IBOutlet AITextViewWithPlaceholder *textView_details;
- at interface AICrashReporter : NSObject <SUStatusCheckerDelegate> {
- IBOutlet NSWindow *window_MainWindow;
- IBOutlet NSTextField *textField_emailAddress;
- IBOutlet NSTextField *textField_accountIM;
- IBOutlet NSTextField *textField_description;
-
- IBOutlet AIAutoScrollView *scrollView_details;
- IBOutlet AITextViewWithPlaceholder *textView_details;
-
- IBOutlet NSProgressIndicator *progress_sending;
IBOutlet NSButton *button_close;
IBOutlet NSPanel *panel_privacySheet;
IBOutlet NSTextView *textView_crashLog;
- NSString *crashLog; //Current crash log
-
- NSDate *buildDate;
- NSString *buildNumber, *buildUser;
- NSAppleScript *slayerScript;
-
- NSString *adiumPath;
- SUStatusChecker *statusChecker;
-
- BOOL sentCrashLog;
+ NSString *crashLog;
}
-- (void)awakeFromNib;
+ at property (retain) NSString *crashLog;
+
++ (void)checkForCrash;
- (IBAction)showPrivacyDetails:(id)sender;
- (IBAction)closePrivacyDetails:(id)sender;
-- (BOOL)reportCrashForLogAtPath:(NSString *)inPath;
-- (void)sendReport:(NSDictionary *)crashReport;
- (IBAction)send:(id)sender;
-- (void)_loadBuildInformation;
-
@end
diff -r c894fb063573 -r 7337a82bbce8 Other/Adium Crash Reporter/AICrashReporter.m
--- a/Other/Adium Crash Reporter/AICrashReporter.m Sun Jul 07 21:10:54 2013 +0200
+++ b/Other/Adium Crash Reporter/AICrashReporter.m Tue Sep 10 14:19:15 2013 +0200
@@ -1,4 +1,4 @@
-/*
+/*
* Adium is the legal property of its developers, whose names are listed in the copyright file included
* with this source distribution.
*
@@ -20,180 +20,96 @@
#import <AIUtilities/AIFileManagerAdditions.h>
#import <AIUtilities/AIApplicationAdditions.h>
#import <AIUtilities/AIAutoScrollView.h>
-#import <Sparkle/Sparkle.h>
+#import "JSONKit.h"
+#import <sys/sysctl.h>
-#define CRASH_REPORT_URL @"http://www.visualdistortion.org/crash/post.jsp"
-#define KEY_CRASH_EMAIL_ADDRESS @"AdiumCrashReporterEmailAddress"
-#define KEY_CRASH_AIM_ACCOUNT @"AdiumCrashReporterAIMAccount"
+#define CRASH_REPORT_URL @"https://sdk.hockeyapp.net/"
+#define HOCKEY_APP_ID @"a703119f260a58377333db4a07fecadb"
-#define CRASH_REPORT_SLAY_ATTEMPTS 100
-#define CRASH_REPORT_SLAY_INTERVAL 0.1
-
-#define CRASH_LOG_WAIT_ATTEMPTS 100
-#define CRASH_LOG_WAIT_INTERVAL 0.2
-
-#define ADIUM_UPDATE_URL @"http://download.adiumx.com/"
-#define ADIUM_UPDATE_BETA_URL @"http://beta.adiumx.com/"
+#define LAST_CRASH_DATE @"lastKnownCrashDate"
+#define CRASH_LOG_DIRECTORY [@"~/Library/Logs/DiagnosticReports" stringByStandardizingPath]
#define UNABLE_TO_SEND AILocalizedString(@"Unable to send crash report",nil)
- at interface AICrashReporter (PRIVATE)
-- (void)performVersionChecking;
- at end
+ at implementation AICrashReporter
+ at synthesize crashLog;
- at implementation AICrashReporter
++ (void)checkForCrash
+{
+ AICrashReporter *reporter = [[AICrashReporter alloc] init];
+ [reporter _checkForCrash];
+}
-//
-- (id)init
+- (void)_checkForCrash
{
- if ((self = [super init])) {
- slayerScript = [[NSAppleScript alloc] initWithSource:@"tell application \"UserNotificationCenter\" to quit"];
+ // get a list of files beginning with 'Adium' from the crash reporter folder
+ NSFileManager *fm = [[[NSFileManager alloc] init] autorelease];
+ NSArray *files = [fm contentsOfDirectoryAtPath:CRASH_LOG_DIRECTORY error:nil];
+ NSArray *filteredFiles = [files filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] 'Adium'"]];
+
+ NSDate *mostRecentCrashDate = [NSDate distantPast];
+ // Enumerate crash files to find most recent crash report
+ for (NSString *file in filteredFiles) {
+ NSDate *date = [[fm attributesOfItemAtPath:[CRASH_LOG_DIRECTORY stringByAppendingPathComponent:file] error:nil] objectForKey:NSFileCreationDate];
+ if ([date compare:mostRecentCrashDate] == NSOrderedDescending) {
+ mostRecentCrashDate = date;
+ [self setCrashLog:file];
+ }
+ [self setCrashLog:file];
}
+
+ // obtain the last known crash date from the prefs
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSDate *lastKnownCrashDate = [defaults objectForKey:LAST_CRASH_DATE];
+
+ // check to see if Adium crashed since the last crash (there's a newer crash report)
+ if (self.crashLog && (!lastKnownCrashDate || [mostRecentCrashDate compare:lastKnownCrashDate] == NSOrderedDescending)) {
+ [NSBundle loadNibNamed:@"CrashReporter" owner:self];
+
+ // save last crash date
+ [defaults setObject:mostRecentCrashDate forKey:LAST_CRASH_DATE];
+ }
+}
- return self;
-}
-
-//
- (void)dealloc
{
- [buildUser release];
- [buildDate release];
- [buildNumber release];
[crashLog release];
- [slayerScript release];
- [adiumPath release];
- [statusChecker release];
-
[super dealloc];
}
-//
- (void)awakeFromNib
{
- [textView_details setPlaceholderString:AILocalizedString(@"A detailed explanation of what you were doing when Adium crashed (optional)",nil)];
-
+ [textView_details setPlaceholderString:AILocalizedString(@"A detailed explanation of what you were doing when Adium crashed (optional)", nil)];
[scrollView_details setAlwaysDrawFocusRingIfFocused:YES];
-
- //Search for an exception log
- if ([[NSFileManager defaultManager] fileExistsAtPath:EXCEPTIONS_PATH]) {
- [self reportCrashForLogAtPath:EXCEPTIONS_PATH];
- } else {
- //Kill the apple crash reporter
- [NSTimer scheduledTimerWithTimeInterval:CRASH_REPORT_SLAY_INTERVAL
- target:self
- selector:@selector(appleCrashReportSlayer:)
- userInfo:nil
- repeats:YES];
-
- //Wait for a valid crash log to appear
- [NSTimer scheduledTimerWithTimeInterval:CRASH_LOG_WAIT_INTERVAL
- target:self
- selector:@selector(delayedCrashLogDiscovery:)
- userInfo:nil
- repeats:YES];
- }
-
- if ([progress_sending respondsToSelector:@selector(setHidden:)]) {
- [progress_sending setHidden:YES];
- }
+ [self.window makeKeyAndOrderFront:self];
}
-- (BOOL)application:(NSApplication *)app openFile:(NSString *)path {
- [adiumPath release];
- adiumPath = [path retain];
- return YES;
-}
-
-//Actively tries to kill Apple's "Report this crash" dialog
-- (void)appleCrashReportSlayer:(NSTimer *)inTimer
+- (void)windowWillClose:(id)sender
{
- static int countdown = CRASH_REPORT_SLAY_ATTEMPTS;
-
- //Kill the notification app if it's open
- if (countdown-- == 0 || ![[slayerScript executeAndReturnError:nil] booleanValue]) {
- [inTimer invalidate];
- }
-}
-
-#pragma mark Crash log loading
-//Waits for a crash log to be written
-- (void)delayedCrashLogDiscovery:(NSTimer *)inTimer
-{
- static int countdown = CRASH_LOG_WAIT_ATTEMPTS;
-
- //Kill the notification app if it's open
- if (countdown-- == 0 ||
- [self reportCrashForLogAtPath:[@"~/Library/Logs/CrashReporter/Adium.real.crash.log" stringByExpandingTildeInPath]] ||
- [self reportCrashForLogAtPath:[@"~/Library/Logs/CrashReporter/Adium.crash.log" stringByExpandingTildeInPath]]) {
- [inTimer invalidate];
- }
-}
-
-//Display the report crash window for the passed log
-- (BOOL)reportCrashForLogAtPath:(NSString *)inPath
-{
- NSString *emailAddress, *aimAccount;
- NSRange binaryRange;
-
- if ([[NSFileManager defaultManager] fileExistsAtPath:inPath]) {
- NSString *newLog = [NSString stringWithContentsOfFile:inPath];
- if (newLog && [newLog length]) {
- //Hang onto and delete the log
- crashLog = [newLog retain];
- [[NSFileManager defaultManager] trashFileAtPath:inPath];
-
- //Strip off PPC thread state and binary descriptions.. we don't need to send all that
- binaryRange = [crashLog rangeOfString:@"PPC Thread State:"];
- if (binaryRange.location != NSNotFound) {
- NSString *shortLog = [crashLog substringToIndex:binaryRange.location];
- [crashLog release]; crashLog = [shortLog retain];
- }
-
- //Restore the user's email address and account if they've entered it previously
- if ((emailAddress = [[NSUserDefaults standardUserDefaults] objectForKey:KEY_CRASH_EMAIL_ADDRESS])) {
- [textField_emailAddress setStringValue:emailAddress];
- }
- if ((aimAccount = [[NSUserDefaults standardUserDefaults] objectForKey:KEY_CRASH_AIM_ACCOUNT])) {
- [textField_accountIM setStringValue:aimAccount];
- }
-
- //Highlight the existing details text
- [textView_details setSelectedRange:NSMakeRange(0, [[textView_details textStorage] length])
- affinity:NSSelectionAffinityUpstream
- stillSelecting:NO];
-
- //Open our window
- [window_MainWindow makeKeyAndOrderFront:nil];
-
- return YES;
- }
- }
-
- return NO;
+ [self autorelease];
}
#pragma mark Privacy Details
//Display privacy information sheet
- (IBAction)showPrivacyDetails:(id)sender
{
- if (crashLog) {
- NSDictionary *attributes = [NSDictionary dictionaryWithObject:[NSFont systemFontOfSize:11]
- forKey:NSFontAttributeName];
- NSAttributedString *attrLogString = [[[NSAttributedString alloc] initWithString:crashLog
- attributes:attributes] autorelease];
-
- //Fill in crash log
- [[textView_crashLog textStorage] setAttributedString:attrLogString];
-
- //Display the sheet
- [NSApp beginSheet:panel_privacySheet
- modalForWindow:window_MainWindow
- modalDelegate:nil
- didEndSelector:nil
- contextInfo:nil];
- } else {
- NSBeep();
- }
+ NSDictionary *attributes = [NSDictionary dictionaryWithObject:[NSFont systemFontOfSize:11]
+ forKey:NSFontAttributeName];
+
+ NSString *file = [NSString stringWithContentsOfFile:[CRASH_LOG_DIRECTORY stringByAppendingPathComponent:self.crashLog]
+ encoding:NSUTF8StringEncoding error:nil];
+ NSAttributedString *attrLogString = [[[NSAttributedString alloc] initWithString:file
+ attributes:attributes] autorelease];
+
+ //Fill in crash log
+ [[textView_crashLog textStorage] setAttributedString:attrLogString];
+
+ //Display the sheet
+ [NSApp beginSheet:panel_privacySheet
+ modalForWindow:self.window
+ modalDelegate:nil
+ didEndSelector:nil
+ contextInfo:nil];
}
//Close the privacy details sheet
@@ -204,284 +120,151 @@
}
#pragma mark Report sending
-
-/*!
- * @brief Disable the close button and begin spinning the indeterminate progress indicator
- */
-- (void)activateProgressIndicator
-{
- [button_close setHidden:YES];
-
- //Display immediately since we need it for this run loop.
- [[button_close superview] display];
-
- [progress_sending setHidden:NO];
-
- //start the progress spinner (using multi-threading)
- [progress_sending setUsesThreadedAnimation:YES];
- [progress_sending startAnimation:nil];
-}
-
/*!
* @brief User wants to send the report
*/
- (IBAction)send:(id)sender
{
- if ([[textField_emailAddress stringValue] isEqualToString:@""] &&
- [[textField_accountIM stringValue] isEqualToString:@""]) {
- NSBeginCriticalAlertSheet(AILocalizedString(@"Contact Information Required",nil),
- @"OK", nil, nil, window_MainWindow, nil, nil, nil, NULL,
- AILocalizedString(@"Please provide either your email address or IM name in case we need to contact you for additional information (or to suggest a solution).",nil));
- } else {
- //Begin showing progress
- [self activateProgressIndicator];
-
- //Load the build information
- [self _loadBuildInformation];
-
- //Perform version checking; when it is complete or fails, the submission process wil continue
- [self performVersionChecking];
- }
-}
-
-/*!
- * @brief Build the crash report and associated information, then pass it to sendReport:
- */
-- (void)buildAndSendReport
-{
- //If we already sent the crash log, do nothing and just return
- if (sentCrashLog) return;
-
- NSString *shortDescription = [textField_description stringValue];
+ [self.window orderOut:nil];
- //Truncate description field to 300 characters
- if ([shortDescription length] > 300) {
- shortDescription = [shortDescription substringToIndex:300];
- }
-
- //Build the report
- NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] initWithDateFormat:@"%m-%d"
- allowNaturalLanguage:NO] autorelease];
- NSString *buildDateAndInfo = [NSString stringWithFormat:@"%@ (%@)",
- [dateFormatter stringForObjectValue:buildDate],
- (buildUser ? [NSString stringWithFormat:@"%@.%@",buildNumber,buildUser] : buildNumber)];
-
- NSDictionary *crashReport = [NSDictionary dictionaryWithObjectsAndKeys:
- buildDateAndInfo, @"build",
- [textField_emailAddress stringValue], @"email",
- [textField_accountIM stringValue], @"service_name",
- shortDescription, @"short_desc",
- [textView_details string], @"desc",
- crashLog, @"log",
- nil];
-
- //Send
- [self sendReport:crashReport];
+ [self sendReport];
+ [self.window close];
}
/*!
* @brief Send a crash report to the crash reporter web site
*/
-- (void)sendReport:(NSDictionary *)crashReport
+- (void)sendReport
{
- NSMutableString *reportString = [[[NSMutableString alloc] init] autorelease];
- NSEnumerator *enumerator;
- NSString *key;
- NSData *data = nil;
-
- //Compact the fields of the report into a long URL string
- enumerator = [[crashReport allKeys] objectEnumerator];
- while ((key = [enumerator nextObject])) {
- if ([reportString length] != 0) [reportString appendString:@"&"];
- [reportString appendFormat:@"%@=%@", key, [[crashReport objectForKey:key] stringByEncodingURLEscapes]];
- }
+ NSString *reportString = [NSString stringWithContentsOfFile:[CRASH_LOG_DIRECTORY stringByAppendingPathComponent:self.crashLog]
+ encoding:NSUTF8StringEncoding error:nil];
+
+ NSXMLDocument *doc = [[NSXMLDocument alloc] initWithRootElement:[NSXMLElement elementWithName:@"crashes"]];
+ NSXMLElement *crash = [NSXMLElement elementWithName:@"crash"];
+ [crash addChild:[NSXMLElement elementWithName:@"applicationname" stringValue:[self applicationName]]];
+ [crash addChild:[NSXMLElement elementWithName:@"bundleidentifier" stringValue:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]]];
+ [crash addChild:[NSXMLElement elementWithName:@"systemversion" stringValue:[self OSVersion]]];
+ [crash addChild:[NSXMLElement elementWithName:@"senderversion" stringValue:[self applicationVersion]]];
+ [crash addChild:[NSXMLElement elementWithName:@"version" stringValue:[self applicationVersion]]];
+ [crash addChild:[NSXMLElement elementWithName:@"platform" stringValue:[self modelVersion]]];
+ [crash addChild:[NSXMLElement elementWithName:@"description" stringValue:[textView_details string]]];
+ [crash addChild:[NSXMLElement elementWithName:@"log" stringValue:reportString]];
+ [[doc rootElement] addChild:crash];
+
+ NSMutableURLRequest *request = nil;
+ NSString *boundary = @"----FOO";
+
+ NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@api/2/apps/%@/crashes?sdk=%@&sdk_version=%@&feedbackEnabled=no",
+ CRASH_REPORT_URL,
+ [HOCKEY_APP_ID stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],
+ @"Adium",
+ @"1.0"
+ ]];
+ request = [NSMutableURLRequest requestWithURL:url];
+
+ [request setValue:@"Adium" forHTTPHeaderField:@"User-Agent"];
+ [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
+ [request setTimeoutInterval:15];
+ [request setHTTPMethod:@"POST"];
+ NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
+ [request setValue:contentType forHTTPHeaderField:@"Content-type"];
+
+ NSMutableData *postBody = [NSMutableData data];
+ [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
+ [postBody appendData:[@"Content-Disposition: form-data; name=\"xml\"; filename=\"crash.xml\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
+ [postBody appendData:[[NSString stringWithFormat:@"Content-Type: text/xml\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
- //
- while (!data || [data length] == 0) {
- NSError *error;
- NSURLResponse *reply;
- NSMutableURLRequest *request;
-
- //Build the URL request
- request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:CRASH_REPORT_URL]
- cachePolicy:NSURLRequestReloadIgnoringCacheData
- timeoutInterval:120];
- [request addValue:@"Adium 2.0a" forHTTPHeaderField:@"X-Adium-Bug-Report"];
- [request setHTTPMethod:@"POST"];
- [request setHTTPBody:[reportString dataUsingEncoding:NSUTF8StringEncoding]];
-
- //Attempt to send report
- data = [NSURLConnection sendSynchronousRequest:request returningResponse:&reply error:&error];
-
- //stop the progress spinner
- [progress_sending stopAnimation:nil];
-
- //Alert on failure, and offer the option to quit or retry
- if (!data || [data length] == 0) {
- if (NSRunAlertPanel(UNABLE_TO_SEND,
- [error localizedDescription],
- AILocalizedString(@"Try Again",nil),
- AILocalizedString(@"Quit",nil),
- nil) == NSAlertAlternateReturn) {
- break;
- }
- } else {
- sentCrashLog = YES;
+ [postBody appendData:[doc XMLData]];
+ [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
+ [request setHTTPBody:postBody];
+ [doc release];
+
+ NSHTTPURLResponse *response = nil;
+ NSError *error = nil;
+ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
+
+ //Check for success and offer to try once more if there was an error sending
+ if ([response statusCode] != 201) {
+ NSString *reason = [NSString stringWithFormat:@"%lu: %@\n%@", response.statusCode, [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], [error localizedDescription] ?: @""];
+ if (NSRunAlertPanel(UNABLE_TO_SEND,
+ reason,
+ AILocalizedString(@"Try Again", nil),
+ AILocalizedString(@"Close", nil),
+ nil) == NSAlertDefaultReturn) {
+ [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
+ if ([response statusCode] != 201) {
+ reason = [NSString stringWithFormat:@"%lu: %@\n%@", response.statusCode, [NSHTTPURLResponse localizedStringForStatusCode:response.statusCode], [error localizedDescription] ?: @""];
+ NSRunAlertPanel(UNABLE_TO_SEND, reason, nil, nil, nil);
+ }
}
- }
+ }
}
-#pragma mark Closing behavior
More information about the commits
mailing list